-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathcluster_api_test.go
128 lines (110 loc) · 3.84 KB
/
cluster_api_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
package test
import (
"context"
"testing"
pb "github.com/clyso/ceph-api/api/gen/grpc/go"
"github.com/stretchr/testify/require"
"google.golang.org/protobuf/types/known/emptypb"
)
func Test_ClusterStatus(t *testing.T) {
r := require.New(t)
client := pb.NewClusterClient(admConn)
res, err := client.GetStatus(tstCtx, &emptypb.Empty{})
r.NoError(err)
initStatus := res.Status
newStatus := pb.ClusterStatus_INSTALLED
if initStatus == newStatus {
newStatus = pb.ClusterStatus_POST_INSTALLED
}
_, err = client.UpdateStatus(tstCtx, &pb.ClusterStatus{Status: newStatus})
r.NoError(err)
t.Cleanup(func() {
client.UpdateStatus(tstCtx, &pb.ClusterStatus{Status: initStatus})
})
res, err = client.GetStatus(tstCtx, &emptypb.Empty{})
r.NoError(err)
r.EqualValues(newStatus, res.Status)
}
func Test_ClusterUsers(t *testing.T) {
r := require.New(t)
client := pb.NewClusterClient(admConn)
const (
user = "client.test"
)
users, err := client.GetUsers(tstCtx, &emptypb.Empty{})
r.NoError(err, "get all users")
_, err = client.CreateUser(tstCtx, &pb.CreateClusterUserReq{
Capabilities: map[string]string{"mon": "allow r"},
UserEntity: user,
})
r.NoError(err, "create a new test user %s", user)
t.Cleanup(func() {
// delete test user on exit
client.DeleteUser(context.Background(), &pb.DeleteClusterUserReq{UserEntity: user})
})
users2, err := client.GetUsers(tstCtx, &emptypb.Empty{})
r.NoError(err, "get all users including a new one")
r.EqualValues(len(users.Users)+1, len(users2.Users), "users number increased")
var created *pb.ClusterUser = nil
for i, v := range users2.Users {
if v.Entity == user {
created = users2.Users[i]
break
}
}
r.NotNil(created, "new user created")
r.Len(created.Caps, 1, "new user has correct capabilities")
r.EqualValues(created.Caps["mon"], "allow r", "new user has correct capabilities")
exp, err := client.ExportUser(tstCtx, &pb.ExportClusterUserReq{Entities: []string{user}})
r.NoError(err, "new user can be exported")
r.Contains(string(exp.Data), `mon = "allow r"`, "new user export conains correct caps")
_, err = client.UpdateUser(tstCtx, &pb.UpdateClusterUserReq{
UserEntity: user,
Capabilities: map[string]string{"mon": "allow w"}})
r.NoError(err, "new user caps updated")
exp, err = client.ExportUser(tstCtx, &pb.ExportClusterUserReq{Entities: []string{user}})
r.NoError(err)
r.Contains(string(exp.Data), `mon = "allow w"`, "export contains updated caps")
r.NotContains(string(exp.Data), `mon = "allow r"`, "export does not contains old caps")
users2, err = client.GetUsers(tstCtx, &emptypb.Empty{})
r.NoError(err)
r.NotEmpty(users2.Users)
r.EqualValues(len(users.Users)+1, len(users2.Users))
created = nil
for i, v := range users2.Users {
if v.Entity == user {
created = users2.Users[i]
break
}
}
r.NotNil(created, "list user returns updated caps")
r.Len(created.Caps, 1, "list user returns updated caps")
r.EqualValues(created.Caps["mon"], "allow w", "list user returns updated caps")
_, err = client.DeleteUser(tstCtx, &pb.DeleteClusterUserReq{
UserEntity: user})
r.NoError(err, "delete new user")
users2, err = client.GetUsers(tstCtx, &emptypb.Empty{})
r.NoError(err)
r.EqualValues(len(users.Users), len(users2.Users), "user was removed from list")
created = nil
for i, v := range users2.Users {
if v.Entity == user {
created = users2.Users[i]
break
}
}
r.Nil(created, "user was removed from list")
_, err = client.CreateUser(tstCtx, &pb.CreateClusterUserReq{ImportData: exp.Data})
r.NoError(err, "user was imported back from export data")
users2, err = client.GetUsers(tstCtx, &emptypb.Empty{})
r.NoError(err)
r.EqualValues(len(users.Users)+1, len(users2.Users), "user is back after import")
created = nil
for i, v := range users2.Users {
if v.Entity == user {
created = users2.Users[i]
break
}
}
r.NotNil(created, "user is back after import")
}