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
@ -54,3 +54,7 @@ type DefragOption struct {
|
|||||||
type LeaseOption struct {
|
type LeaseOption struct {
|
||||||
WithAttachedKeys bool
|
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)
|
err = json.Unmarshal([]byte(line), &resp)
|
||||||
return &resp, err
|
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)
|
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)
|
LeaseList() (*clientv3.LeaseLeasesResponse, error)
|
||||||
LeaseKeepAliveOnce(id clientv3.LeaseID) (*clientv3.LeaseKeepAliveResponse, error)
|
LeaseKeepAliveOnce(id clientv3.LeaseID) (*clientv3.LeaseKeepAliveResponse, error)
|
||||||
LeaseRevoke(id clientv3.LeaseID) (*clientv3.LeaseRevokeResponse, 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