mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
client: correctly unmarshal roles in ListRoles
This commit is contained in:
@@ -118,13 +118,17 @@ func (r *httpAuthRoleAPI) ListRoles(ctx context.Context) ([]string, error) {
|
||||
if err = assertStatusCode(resp.StatusCode, http.StatusOK); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var userList struct {
|
||||
Roles []string `json:"roles"`
|
||||
var roleList struct {
|
||||
Roles []Role `json:"roles"`
|
||||
}
|
||||
if err = json.Unmarshal(body, &userList); err != nil {
|
||||
if err = json.Unmarshal(body, &roleList); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return userList.Roles, nil
|
||||
ret := make([]string, 0, len(roleList.Roles))
|
||||
for _, r := range roleList.Roles {
|
||||
ret = append(ret, r.Role)
|
||||
}
|
||||
return ret, nil
|
||||
}
|
||||
|
||||
func (r *httpAuthRoleAPI) AddRole(ctx context.Context, rolename string) error {
|
||||
|
||||
@@ -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 {
|
||||
@@ -237,6 +237,29 @@ func TestCtlV2UserList(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
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 {
|
||||
@@ -298,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")
|
||||
|
||||
Reference in New Issue
Block a user