aboutsummaryrefslogtreecommitdiff
path: root/test/etcd_credentials_test.go
blob: 6fe124dce9135de46e1c77d9dcfe4396d5f8dec7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
// +build etcd

package test

import (
	"context"
	"testing"
)

// uses some stuff from etcd_tests.go

func TestEtcdCredentials(t *testing.T) {
	corefile := `.:0 {
		etcd skydns.test {
			path /skydns
		}
	}`

	ex, _, _, err := CoreDNSServerAndPorts(corefile)
	if err != nil {
		t.Fatalf("Could not get CoreDNS serving instance: %s", err)
	}
	defer ex.Stop()

	etc := etcdPlugin()
	username := "root"
	password := "password"
	key := "foo"
	value := "bar"

	var ctx = context.TODO()

	if _, err := etc.Client.Put(ctx, key, value); err != nil {
		t.Errorf("Failed to put dummy value un etcd: %v", err)
	}

	if _, err := etc.Client.RoleAdd(ctx, "root"); err != nil {
		t.Errorf("Failed to create root role: %s", err)
	}
	defer func() {
		if _, err := etc.Client.RoleDelete(ctx, "root"); err != nil {
			t.Errorf("Failed to delete root role: %s", err)
		}
	}()

	if _, err := etc.Client.UserAdd(ctx, username, password); err != nil {
		t.Errorf("Failed to create user: %s", err)
	}
	defer func() {
		if _, err := etc.Client.UserDelete(ctx, username); err != nil {
			t.Errorf("Failed to delete user: %s", err)
		}
	}()

	if _, err := etc.Client.UserGrantRole(ctx, username, "root"); err != nil {
		t.Errorf("Failed to assign role to root user: %v", err)
	}
	if _, err := etc.Client.AuthEnable(ctx); err != nil {
		t.Errorf("Failed to enable authentication: %s", err)
	}

	etc2 := etcdPluginWithCredentials(username, password)

	defer func() {
		if _, err := etc2.Client.AuthDisable(ctx); err != nil {
			t.Errorf("Fail to disable authentication: %v", err)
		}
	}()

	resp, err := etc2.Client.Get(ctx, key)
	if err != nil {
		t.Errorf("Fail to retrieve value from etcd: %v", err)
	}

	if len(resp.Kvs) != 1 {
		t.Errorf("Too many response found: %+v", resp)
		return
	}
	actual := resp.Kvs[0].Value
	expected := "bar"
	if string(resp.Kvs[0].Value) != expected {
		t.Errorf("Value doesn't match, expected:%s actual:%s", actual, expected)
	}
}