mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
integration: put keys after watcher ack in TestV3WatchFromCurrentRevision
Watcher would miss events since the keys would be created after sending the watcher request but before etcd registered the watcher.
This commit is contained in:
@@ -45,10 +45,6 @@ func TestV3WatchFromCurrentRevision(t *testing.T) {
|
||||
Key: []byte("foo")}}},
|
||||
|
||||
[]*pb.WatchResponse{
|
||||
{
|
||||
Header: &pb.ResponseHeader{Revision: 1},
|
||||
Created: true,
|
||||
},
|
||||
{
|
||||
Header: &pb.ResponseHeader{Revision: 2},
|
||||
Created: false,
|
||||
@@ -68,12 +64,7 @@ func TestV3WatchFromCurrentRevision(t *testing.T) {
|
||||
CreateRequest: &pb.WatchCreateRequest{
|
||||
Key: []byte("helloworld")}}},
|
||||
|
||||
[]*pb.WatchResponse{
|
||||
{
|
||||
Header: &pb.ResponseHeader{Revision: 1},
|
||||
Created: true,
|
||||
},
|
||||
},
|
||||
[]*pb.WatchResponse{},
|
||||
},
|
||||
// watch the prefix, matching
|
||||
{
|
||||
@@ -83,10 +74,6 @@ func TestV3WatchFromCurrentRevision(t *testing.T) {
|
||||
Prefix: []byte("foo")}}},
|
||||
|
||||
[]*pb.WatchResponse{
|
||||
{
|
||||
Header: &pb.ResponseHeader{Revision: 1},
|
||||
Created: true,
|
||||
},
|
||||
{
|
||||
Header: &pb.ResponseHeader{Revision: 2},
|
||||
Created: false,
|
||||
@@ -106,12 +93,7 @@ func TestV3WatchFromCurrentRevision(t *testing.T) {
|
||||
CreateRequest: &pb.WatchCreateRequest{
|
||||
Prefix: []byte("helloworld")}}},
|
||||
|
||||
[]*pb.WatchResponse{
|
||||
{
|
||||
Header: &pb.ResponseHeader{Revision: 1},
|
||||
Created: true,
|
||||
},
|
||||
},
|
||||
[]*pb.WatchResponse{},
|
||||
},
|
||||
// multiple puts, one watcher with matching key
|
||||
{
|
||||
@@ -121,10 +103,6 @@ func TestV3WatchFromCurrentRevision(t *testing.T) {
|
||||
Key: []byte("foo")}}},
|
||||
|
||||
[]*pb.WatchResponse{
|
||||
{
|
||||
Header: &pb.ResponseHeader{Revision: 1},
|
||||
Created: true,
|
||||
},
|
||||
{
|
||||
Header: &pb.ResponseHeader{Revision: 2},
|
||||
Created: false,
|
||||
@@ -165,10 +143,6 @@ func TestV3WatchFromCurrentRevision(t *testing.T) {
|
||||
Prefix: []byte("foo")}}},
|
||||
|
||||
[]*pb.WatchResponse{
|
||||
{
|
||||
Header: &pb.ResponseHeader{Revision: 1},
|
||||
Created: true,
|
||||
},
|
||||
{
|
||||
Header: &pb.ResponseHeader{Revision: 2},
|
||||
Created: false,
|
||||
@@ -218,6 +192,23 @@ func TestV3WatchFromCurrentRevision(t *testing.T) {
|
||||
t.Fatalf("#%d: wStream.Send error: %v", i, err)
|
||||
}
|
||||
|
||||
// ensure watcher request created a new watcher
|
||||
cresp, err := wStream.Recv()
|
||||
if err != nil {
|
||||
t.Errorf("#%d: wStream.Recv error: %v", i, err)
|
||||
continue
|
||||
}
|
||||
if cresp.Created != true {
|
||||
t.Errorf("#%d: did not create watchid, got +%v", i, cresp)
|
||||
continue
|
||||
}
|
||||
createdWatchId := cresp.WatchId
|
||||
if cresp.Header == nil || cresp.Header.Revision != 1 {
|
||||
t.Errorf("#%d: header revision got +%v, wanted revison 1", i, cresp)
|
||||
continue
|
||||
}
|
||||
|
||||
// asynchronously create keys
|
||||
go func() {
|
||||
for _, k := range tt.putKeys {
|
||||
kvc := clus.RandClient().KV
|
||||
@@ -228,7 +219,7 @@ func TestV3WatchFromCurrentRevision(t *testing.T) {
|
||||
}
|
||||
}()
|
||||
|
||||
var createdWatchId int64
|
||||
// check stream results
|
||||
for j, wresp := range tt.wresps {
|
||||
resp, err := wStream.Recv()
|
||||
if err != nil {
|
||||
@@ -245,9 +236,6 @@ func TestV3WatchFromCurrentRevision(t *testing.T) {
|
||||
if wresp.Created != resp.Created {
|
||||
t.Errorf("#%d.%d: resp.Created got = %v, want = %v", i, j, resp.Created, wresp.Created)
|
||||
}
|
||||
if resp.Created {
|
||||
createdWatchId = resp.WatchId
|
||||
}
|
||||
if resp.WatchId != createdWatchId {
|
||||
t.Errorf("#%d.%d: resp.WatchId got = %d, want = %d", i, j, resp.WatchId, createdWatchId)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user