mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
*: avoid closing a watch with ID 0 incorrectly
Signed-off-by: Kafuu Chino <KafuuChinoQ@gmail.com> add test 1 1 1 1 1 1
This commit is contained in:
@@ -531,3 +531,58 @@ func TestV3AuthWatchAndTokenExpire(t *testing.T) {
|
||||
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).Endpoints(), 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
|
||||
}
|
||||
|
||||
@@ -26,6 +26,7 @@ import (
|
||||
|
||||
pb "go.etcd.io/etcd/api/v3/etcdserverpb"
|
||||
"go.etcd.io/etcd/api/v3/mvccpb"
|
||||
clientv3 "go.etcd.io/etcd/client/v3"
|
||||
"go.etcd.io/etcd/server/v3/etcdserver/api/v3rpc"
|
||||
)
|
||||
|
||||
@@ -395,8 +396,8 @@ func TestV3WatchWrongRange(t *testing.T) {
|
||||
if cresp.Canceled != tt.canceled {
|
||||
t.Fatalf("#%d: canceled %v, want %v", i, tt.canceled, cresp.Canceled)
|
||||
}
|
||||
if tt.canceled && cresp.WatchId != -1 {
|
||||
t.Fatalf("#%d: canceled watch ID %d, want -1", i, cresp.WatchId)
|
||||
if tt.canceled && cresp.WatchId != clientv3.InvalidWatchID {
|
||||
t.Fatalf("#%d: canceled watch ID %d, want %d", i, cresp.WatchId, clientv3.InvalidWatchID)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user