Browse Source

Merge pull request #5051 from heyitsanthony/fix-user-list

etcdctl: don't panic on ListUser with roles
Anthony Romano 9 years ago
parent
commit
0ca949ce90
2 changed files with 13 additions and 4 deletions
  1. 7 1
      client/auth_user.go
  2. 6 3
      e2e/ctl_v2_test.go

+ 7 - 1
client/auth_user.go

@@ -36,6 +36,12 @@ type User struct {
 	Revoke   []string `json:"revoke,omitempty"`
 	Revoke   []string `json:"revoke,omitempty"`
 }
 }
 
 
+// userListEntry is the user representation given by the server for ListUsers
+type userListEntry struct {
+	User  string `json:"user"`
+	Roles []Role `json:"roles"`
+}
+
 type UserRoles struct {
 type UserRoles struct {
 	User  string `json:"user"`
 	User  string `json:"user"`
 	Roles []Role `json:"roles"`
 	Roles []Role `json:"roles"`
@@ -194,7 +200,7 @@ func (u *httpAuthUserAPI) ListUsers(ctx context.Context) ([]string, error) {
 	}
 	}
 
 
 	var userList struct {
 	var userList struct {
-		Users []User `json:"users"`
+		Users []userListEntry `json:"users"`
 	}
 	}
 
 
 	if err = json.Unmarshal(body, &userList); err != nil {
 	if err = json.Unmarshal(body, &userList); err != nil {

+ 6 - 3
e2e/ctl_v2_test.go

@@ -189,7 +189,10 @@ func testCtlV2GetRoleUser(t *testing.T, cfg *etcdProcessClusterConfig) {
 	}
 	}
 }
 }
 
 
-func TestCtlV2UserList(t *testing.T) {
+func TestCtlV2UserListUsername(t *testing.T) { testCtlV2UserList(t, "username") }
+func TestCtlV2UserListRoot(t *testing.T)     { testCtlV2UserList(t, "root") }
+
+func testCtlV2UserList(t *testing.T, username string) {
 	defer testutil.AfterTest(t)
 	defer testutil.AfterTest(t)
 
 
 	epc := setupEtcdctlTest(t, &configWithProxy, false)
 	epc := setupEtcdctlTest(t, &configWithProxy, false)
@@ -199,10 +202,10 @@ func TestCtlV2UserList(t *testing.T) {
 		}
 		}
 	}()
 	}()
 
 
-	if err := etcdctlUserAdd(epc, "username", "password"); err != nil {
+	if err := etcdctlUserAdd(epc, username, "password"); err != nil {
 		t.Fatalf("failed to add user (%v)", err)
 		t.Fatalf("failed to add user (%v)", err)
 	}
 	}
-	if err := etcdctlUserList(epc, "username"); err != nil {
+	if err := etcdctlUserList(epc, username); err != nil {
 		t.Fatalf("failed to list users (%v)", err)
 		t.Fatalf("failed to list users (%v)", err)
 	}
 	}
 }
 }