|
|
@@ -200,7 +200,7 @@ func testCtlV2GetRoleUser(t *testing.T, cfg *etcdProcessClusterConfig) {
|
|
|
// the update loop has a delay of 500ms, so 1s should be enough wait time
|
|
|
time.Sleep(time.Second)
|
|
|
|
|
|
- if err := etcdctlAddRole(epc, "foo"); err != nil {
|
|
|
+ if err := etcdctlRoleAdd(epc, "foo"); err != nil {
|
|
|
t.Fatalf("failed to add role (%v)", err)
|
|
|
}
|
|
|
if err := etcdctlUserAdd(epc, "username", "password"); err != nil {
|
|
|
@@ -214,6 +214,52 @@ func testCtlV2GetRoleUser(t *testing.T, cfg *etcdProcessClusterConfig) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+func TestCtlV2UserList(t *testing.T) {
|
|
|
+ defer testutil.AfterTest(t)
|
|
|
+
|
|
|
+ mustEtcdctl(t)
|
|
|
+
|
|
|
+ epc, cerr := newEtcdProcessCluster(&defaultConfigWithProxy)
|
|
|
+ if cerr != nil {
|
|
|
+ t.Fatalf("could not start etcd process cluster (%v)", cerr)
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ if err := epc.Close(); err != nil {
|
|
|
+ t.Fatalf("error closing etcd processes (%v)", err)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ if err := etcdctlUserAdd(epc, "username", "password"); err != nil {
|
|
|
+ t.Fatalf("failed to add user (%v)", err)
|
|
|
+ }
|
|
|
+ if err := etcdctlUserList(epc, "username"); err != nil {
|
|
|
+ t.Fatalf("failed to list users (%v)", err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestCtlV2RoleList(t *testing.T) {
|
|
|
+ defer testutil.AfterTest(t)
|
|
|
+
|
|
|
+ mustEtcdctl(t)
|
|
|
+
|
|
|
+ epc, cerr := newEtcdProcessCluster(&defaultConfigWithProxy)
|
|
|
+ if cerr != nil {
|
|
|
+ t.Fatalf("could not start etcd process cluster (%v)", cerr)
|
|
|
+ }
|
|
|
+ defer func() {
|
|
|
+ if err := epc.Close(); err != nil {
|
|
|
+ t.Fatalf("error closing etcd processes (%v)", err)
|
|
|
+ }
|
|
|
+ }()
|
|
|
+
|
|
|
+ if err := etcdctlRoleAdd(epc, "foo"); err != nil {
|
|
|
+ t.Fatalf("failed to add role (%v)", err)
|
|
|
+ }
|
|
|
+ if err := etcdctlRoleList(epc, "foo"); err != nil {
|
|
|
+ t.Fatalf("failed to list roles (%v)", err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func etcdctlPrefixArgs(clus *etcdProcessCluster, noSync bool) []string {
|
|
|
endpoints := ""
|
|
|
if proxies := clus.proxies(); len(proxies) != 0 {
|
|
|
@@ -275,11 +321,16 @@ func etcdctlWatch(clus *etcdProcessCluster, key, value string, noSync bool) <-ch
|
|
|
return errc
|
|
|
}
|
|
|
|
|
|
-func etcdctlAddRole(clus *etcdProcessCluster, role string) error {
|
|
|
+func etcdctlRoleAdd(clus *etcdProcessCluster, role string) error {
|
|
|
cmdArgs := append(etcdctlPrefixArgs(clus, false), "role", "add", role)
|
|
|
return spawnWithExpectedString(cmdArgs, role)
|
|
|
}
|
|
|
|
|
|
+func etcdctlRoleList(clus *etcdProcessCluster, expectedRole string) error {
|
|
|
+ cmdArgs := append(etcdctlPrefixArgs(clus, false), "role", "list")
|
|
|
+ return spawnWithExpectedString(cmdArgs, expectedRole)
|
|
|
+}
|
|
|
+
|
|
|
func etcdctlUserAdd(clus *etcdProcessCluster, user, pass string) error {
|
|
|
cmdArgs := append(etcdctlPrefixArgs(clus, false), "user", "add", user+":"+pass)
|
|
|
return spawnWithExpectedString(cmdArgs, "User "+user+" created")
|
|
|
@@ -295,6 +346,11 @@ func etcdctlUserGet(clus *etcdProcessCluster, user string) error {
|
|
|
return spawnWithExpectedString(cmdArgs, "User: "+user)
|
|
|
}
|
|
|
|
|
|
+func etcdctlUserList(clus *etcdProcessCluster, expectedUser string) error {
|
|
|
+ cmdArgs := append(etcdctlPrefixArgs(clus, false), "user", "list")
|
|
|
+ return spawnWithExpectedString(cmdArgs, expectedUser)
|
|
|
+}
|
|
|
+
|
|
|
func mustEtcdctl(t *testing.T) {
|
|
|
if !fileutil.Exist("../bin/etcdctl") {
|
|
|
t.Fatalf("could not find etcdctl binary")
|