Skip to content

Commit 7b68318

Browse files
committed
integration: add test cases for lease revoking with auth
1 parent 0c65590 commit 7b68318

File tree

1 file changed

+156
-4
lines changed

1 file changed

+156
-4
lines changed

integration/v3_auth_test.go

+156-4
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020

2121
"golang.org/x/net/context"
2222

23+
"github.com/coreos/etcd/auth/authpb"
2324
"github.com/coreos/etcd/clientv3"
2425
"github.com/coreos/etcd/etcdserver/api/v3rpc/rpctypes"
2526
pb "github.com/coreos/etcd/etcdserver/etcdserverpb"
@@ -104,16 +105,167 @@ func TestV3AuthRevision(t *testing.T) {
104105
}
105106
}
106107

107-
func authSetupRoot(t *testing.T, auth pb.AuthClient) {
108-
if _, err := auth.UserAdd(context.TODO(), &pb.AuthUserAddRequest{Name: "root", Password: "123"}); err != nil {
108+
type user struct {
109+
name string
110+
password string
111+
role string
112+
key string
113+
end string
114+
}
115+
116+
func TestV3AuthWithLeaseRevoke(t *testing.T) {
117+
defer testutil.AfterTest(t)
118+
clus := NewClusterV3(t, &ClusterConfig{Size: 1})
119+
defer clus.Terminate(t)
120+
121+
users := []user{
122+
{
123+
name: "user1",
124+
password: "user1-123",
125+
role: "role1",
126+
key: "k1",
127+
end: "k2",
128+
},
129+
}
130+
authSetupUsers(t, toGRPC(clus.Client(0)).Auth, users)
131+
132+
authSetupRoot(t, toGRPC(clus.Client(0)).Auth)
133+
134+
rootc, cerr := clientv3.New(clientv3.Config{Endpoints: clus.Client(0).Endpoints(), Username: "root", Password: "123"})
135+
if cerr != nil {
136+
t.Fatal(cerr)
137+
}
138+
defer rootc.Close()
139+
140+
leaseResp, err := rootc.Grant(context.TODO(), 90)
141+
if err != nil {
109142
t.Fatal(err)
110143
}
111-
if _, err := auth.RoleAdd(context.TODO(), &pb.AuthRoleAddRequest{Name: "root"}); err != nil {
144+
leaseID := leaseResp.ID
145+
// permission of k3 isn't granted to user1
146+
_, err = rootc.Put(context.TODO(), "k3", "val", clientv3.WithLease(leaseID))
147+
if err != nil {
112148
t.Fatal(err)
113149
}
114-
if _, err := auth.UserGrantRole(context.TODO(), &pb.AuthUserGrantRoleRequest{User: "root", Role: "root"}); err != nil {
150+
151+
userc, cerr := clientv3.New(clientv3.Config{Endpoints: clus.Client(0).Endpoints(), Username: "user1", Password: "user1-123"})
152+
if cerr != nil {
153+
t.Fatal(cerr)
154+
}
155+
defer userc.Close()
156+
_, err = userc.Revoke(context.TODO(), leaseID)
157+
if err == nil {
158+
t.Fatal("revoking from user1 should be failed with permission denied")
159+
}
160+
}
161+
162+
func TestV3AuthWithLeaseAttach(t *testing.T) {
163+
defer testutil.AfterTest(t)
164+
clus := NewClusterV3(t, &ClusterConfig{Size: 1})
165+
defer clus.Terminate(t)
166+
167+
users := []user{
168+
{
169+
name: "user1",
170+
password: "user1-123",
171+
role: "role1",
172+
key: "k1",
173+
end: "k3",
174+
},
175+
{
176+
name: "user2",
177+
password: "user2-123",
178+
role: "role2",
179+
key: "k2",
180+
end: "k4",
181+
},
182+
}
183+
authSetupUsers(t, toGRPC(clus.Client(0)).Auth, users)
184+
185+
authSetupRoot(t, toGRPC(clus.Client(0)).Auth)
186+
187+
user1c, cerr := clientv3.New(clientv3.Config{Endpoints: clus.Client(0).Endpoints(), Username: "user1", Password: "user1-123"})
188+
if cerr != nil {
189+
t.Fatal(cerr)
190+
}
191+
defer user1c.Close()
192+
193+
user2c, cerr := clientv3.New(clientv3.Config{Endpoints: clus.Client(0).Endpoints(), Username: "user2", Password: "user2-123"})
194+
if cerr != nil {
195+
t.Fatal(cerr)
196+
}
197+
defer user2c.Close()
198+
199+
leaseResp, err := user1c.Grant(context.TODO(), 90)
200+
if err != nil {
201+
t.Fatal(err)
202+
}
203+
leaseID := leaseResp.ID
204+
// permission of k2 is also granted to user2
205+
_, err = user1c.Put(context.TODO(), "k2", "val", clientv3.WithLease(leaseID))
206+
if err != nil {
207+
t.Fatal(err)
208+
}
209+
210+
_, err = user2c.Revoke(context.TODO(), leaseID)
211+
if err != nil {
212+
t.Fatal(err)
213+
}
214+
215+
leaseResp, err = user1c.Grant(context.TODO(), 90)
216+
if err != nil {
217+
t.Fatal(err)
218+
}
219+
leaseID = leaseResp.ID
220+
// permission of k1 isn't granted to user2
221+
_, err = user1c.Put(context.TODO(), "k1", "val", clientv3.WithLease(leaseID))
222+
if err != nil {
115223
t.Fatal(err)
116224
}
225+
226+
_, err = user2c.Revoke(context.TODO(), leaseID)
227+
if err == nil {
228+
t.Fatal("revoking from user2 should be failed with permission denied")
229+
}
230+
}
231+
232+
func authSetupUsers(t *testing.T, auth pb.AuthClient, users []user) {
233+
for _, user := range users {
234+
if _, err := auth.UserAdd(context.TODO(), &pb.AuthUserAddRequest{Name: user.name, Password: user.password}); err != nil {
235+
t.Fatal(err)
236+
}
237+
if _, err := auth.RoleAdd(context.TODO(), &pb.AuthRoleAddRequest{Name: user.role}); err != nil {
238+
t.Fatal(err)
239+
}
240+
if _, err := auth.UserGrantRole(context.TODO(), &pb.AuthUserGrantRoleRequest{User: user.name, Role: user.role}); err != nil {
241+
t.Fatal(err)
242+
}
243+
244+
if len(user.key) == 0 {
245+
continue
246+
}
247+
248+
perm := &authpb.Permission{
249+
PermType: authpb.READWRITE,
250+
Key: []byte(user.key),
251+
RangeEnd: []byte(user.end),
252+
}
253+
if _, err := auth.RoleGrantPermission(context.TODO(), &pb.AuthRoleGrantPermissionRequest{Name: user.role, Perm: perm}); err != nil {
254+
t.Fatal(err)
255+
}
256+
}
257+
}
258+
259+
func authSetupRoot(t *testing.T, auth pb.AuthClient) {
260+
root := []user{
261+
{
262+
name: "root",
263+
password: "123",
264+
role: "root",
265+
key: "",
266+
},
267+
}
268+
authSetupUsers(t, auth, root)
117269
if _, err := auth.AuthEnable(context.TODO(), &pb.AuthEnableRequest{}); err != nil {
118270
t.Fatal(err)
119271
}

0 commit comments

Comments
 (0)