mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
tests/framework: Add User operations
This commit is contained in:
parent
4787e71921
commit
adae7a659e
tests/framework
@ -54,3 +54,7 @@ type DefragOption struct {
|
||||
type LeaseOption struct {
|
||||
WithAttachedKeys bool
|
||||
}
|
||||
|
||||
type UserAddOptions struct {
|
||||
NoPassword bool
|
||||
}
|
||||
|
@ -375,3 +375,90 @@ func (ctl *EtcdctlV3) AlarmDisarm(_ *clientv3.AlarmMember) (*clientv3.AlarmRespo
|
||||
err = json.Unmarshal([]byte(line), &resp)
|
||||
return &resp, err
|
||||
}
|
||||
|
||||
func (ctl *EtcdctlV3) UserAdd(name, password string, opts config.UserAddOptions) (*clientv3.AuthUserAddResponse, error) {
|
||||
args := ctl.cmdArgs()
|
||||
args = append(args, "user", "add")
|
||||
if password == "" {
|
||||
args = append(args, name)
|
||||
} else {
|
||||
args = append(args, fmt.Sprintf("%s:%s", name, password))
|
||||
}
|
||||
|
||||
if opts.NoPassword {
|
||||
args = append(args, "--no-password")
|
||||
}
|
||||
|
||||
args = append(args, "--interactive=false", "-w", "json")
|
||||
|
||||
cmd, err := SpawnCmd(args, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// If no password is provided, and NoPassword isn't set, the CLI will always
|
||||
// wait for a password, send an enter in this case for an "empty" password.
|
||||
if !opts.NoPassword && password == "" {
|
||||
err := cmd.Send("\n")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
var resp clientv3.AuthUserAddResponse
|
||||
line, err := cmd.Expect("header")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = json.Unmarshal([]byte(line), &resp)
|
||||
return &resp, err
|
||||
}
|
||||
|
||||
func (ctl *EtcdctlV3) UserList() (*clientv3.AuthUserListResponse, error) {
|
||||
args := ctl.cmdArgs()
|
||||
args = append(args, "user", "list", "-w", "json")
|
||||
cmd, err := SpawnCmd(args, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var resp clientv3.AuthUserListResponse
|
||||
line, err := cmd.Expect("header")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = json.Unmarshal([]byte(line), &resp)
|
||||
return &resp, err
|
||||
}
|
||||
|
||||
func (ctl *EtcdctlV3) UserDelete(name string) (*clientv3.AuthUserDeleteResponse, error) {
|
||||
args := ctl.cmdArgs()
|
||||
args = append(args, "user", "delete", name, "-w", "json")
|
||||
cmd, err := SpawnCmd(args, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var resp clientv3.AuthUserDeleteResponse
|
||||
line, err := cmd.Expect("header")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = json.Unmarshal([]byte(line), &resp)
|
||||
return &resp, err
|
||||
}
|
||||
|
||||
func (ctl *EtcdctlV3) UserChangePass(user, newPass string) error {
|
||||
args := ctl.cmdArgs()
|
||||
args = append(args, "user", "passwd", user, "--interactive=false")
|
||||
cmd, err := SpawnCmd(args, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = cmd.Send(newPass + "\n")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = cmd.Expect("Password updated")
|
||||
return err
|
||||
}
|
||||
|
@ -259,3 +259,25 @@ func (c integrationClient) LeaseRevoke(id clientv3.LeaseID) (*clientv3.LeaseRevo
|
||||
|
||||
return c.Client.Revoke(ctx, id)
|
||||
}
|
||||
|
||||
func (c integrationClient) UserAdd(name, password string, opts config.UserAddOptions) (*clientv3.AuthUserAddResponse, error) {
|
||||
ctx := context.Background()
|
||||
return c.Client.UserAddWithOptions(ctx, name, password, &clientv3.UserAddOptions{
|
||||
NoPassword: opts.NoPassword,
|
||||
})
|
||||
}
|
||||
|
||||
func (c integrationClient) UserList() (*clientv3.AuthUserListResponse, error) {
|
||||
ctx := context.Background()
|
||||
return c.Client.UserList(ctx)
|
||||
}
|
||||
|
||||
func (c integrationClient) UserDelete(name string) (*clientv3.AuthUserDeleteResponse, error) {
|
||||
ctx := context.Background()
|
||||
return c.Client.UserDelete(ctx, name)
|
||||
}
|
||||
|
||||
func (c integrationClient) UserChangePass(user, newPass string) error {
|
||||
_, err := c.Client.UserChangePassword(context.Background(), user, newPass)
|
||||
return err
|
||||
}
|
||||
|
@ -48,4 +48,9 @@ type Client interface {
|
||||
LeaseList() (*clientv3.LeaseLeasesResponse, error)
|
||||
LeaseKeepAliveOnce(id clientv3.LeaseID) (*clientv3.LeaseKeepAliveResponse, error)
|
||||
LeaseRevoke(id clientv3.LeaseID) (*clientv3.LeaseRevokeResponse, error)
|
||||
|
||||
UserAdd(name, password string, opts config.UserAddOptions) (*clientv3.AuthUserAddResponse, error)
|
||||
UserList() (*clientv3.AuthUserListResponse, error)
|
||||
UserDelete(name string) (*clientv3.AuthUserDeleteResponse, error)
|
||||
UserChangePass(user, newPass string) error
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user