v3_auth_test.go (etcd-3.5.5) | : | v3_auth_test.go (etcd-3.5.6) | ||
---|---|---|---|---|
skipping to change at line 501 | skipping to change at line 501 | |||
clus.Members[0].Stop(t) | clus.Members[0].Stop(t) | |||
err = clus.Members[0].Restart(t) | err = clus.Members[0].Restart(t) | |||
testutil.AssertNil(t, err) | testutil.AssertNil(t, err) | |||
clus.Members[0].WaitOK(t) | clus.Members[0].WaitOK(t) | |||
// nothing has changed, but it fails without refreshing cache after resta rt | // nothing has changed, but it fails without refreshing cache after resta rt | |||
_, err = c2.Put(context.TODO(), "foo", "bar2") | _, err = c2.Put(context.TODO(), "foo", "bar2") | |||
testutil.AssertNil(t, err) | testutil.AssertNil(t, err) | |||
} | } | |||
func TestV3AuthWatchAndTokenExpire(t *testing.T) { | ||||
BeforeTest(t) | ||||
clus := NewClusterV3(t, &ClusterConfig{Size: 1, AuthTokenTTL: 3}) | ||||
defer clus.Terminate(t) | ||||
ctx, cancel := context.WithTimeout(context.TODO(), 10*time.Second) | ||||
defer cancel() | ||||
authSetupRoot(t, toGRPC(clus.Client(0)).Auth) | ||||
c, cerr := NewClient(t, clientv3.Config{Endpoints: clus.Client(0).Endpoin | ||||
ts(), Username: "root", Password: "123"}) | ||||
if cerr != nil { | ||||
t.Fatal(cerr) | ||||
} | ||||
defer c.Close() | ||||
_, err := c.Put(ctx, "key", "val") | ||||
if err != nil { | ||||
t.Fatalf("Unexpected error from Put: %v", err) | ||||
} | ||||
// The first watch gets a valid auth token through watcher.newWatcherGrpc | ||||
Stream() | ||||
// We should discard the first one by waiting TTL after the first watch. | ||||
wChan := c.Watch(ctx, "key", clientv3.WithRev(1)) | ||||
watchResponse := <-wChan | ||||
time.Sleep(5 * time.Second) | ||||
wChan = c.Watch(ctx, "key", clientv3.WithRev(1)) | ||||
watchResponse = <-wChan | ||||
testutil.AssertNil(t, watchResponse.Err()) | ||||
} | ||||
func TestV3AuthWatchErrorAndWatchId0(t *testing.T) { | ||||
BeforeTest(t) | ||||
clus := NewClusterV3(t, &ClusterConfig{Size: 3}) | ||||
defer clus.Terminate(t) | ||||
ctx, cancel := context.WithTimeout(context.TODO(), 10*time.Second) | ||||
defer cancel() | ||||
users := []user{ | ||||
{ | ||||
name: "user1", | ||||
password: "user1-123", | ||||
role: "role1", | ||||
key: "k1", | ||||
end: "k2", | ||||
}, | ||||
} | ||||
authSetupUsers(t, toGRPC(clus.Client(0)).Auth, users) | ||||
authSetupRoot(t, toGRPC(clus.Client(0)).Auth) | ||||
c, cerr := NewClient(t, clientv3.Config{Endpoints: clus.Client(0).Endpoin | ||||
ts(), Username: "user1", Password: "user1-123"}) | ||||
if cerr != nil { | ||||
t.Fatal(cerr) | ||||
} | ||||
defer c.Close() | ||||
watchStartCh, watchEndCh := make(chan interface{}), make(chan interface{} | ||||
) | ||||
go func() { | ||||
wChan := c.Watch(ctx, "k1", clientv3.WithRev(1)) | ||||
watchStartCh <- struct{}{} | ||||
watchResponse := <-wChan | ||||
t.Logf("watch response from k1: %v", watchResponse) | ||||
testutil.AssertTrue(t, len(watchResponse.Events) != 0) | ||||
watchEndCh <- struct{}{} | ||||
}() | ||||
// Chan for making sure that the above goroutine invokes Watch() | ||||
// So the above Watch() can get watch ID = 0 | ||||
<-watchStartCh | ||||
wChan := c.Watch(ctx, "non-allowed-key", clientv3.WithRev(1)) | ||||
watchResponse := <-wChan | ||||
testutil.AssertNotNil(t, watchResponse.Err()) // permission denied | ||||
_, err := c.Put(ctx, "k1", "val") | ||||
if err != nil { | ||||
t.Fatalf("Unexpected error from Put: %v", err) | ||||
} | ||||
<-watchEndCh | ||||
} | ||||
End of changes. 1 change blocks. | ||||
0 lines changed or deleted | 0 lines changed or added |