|
6 | 6 | "io" |
7 | 7 | "net" |
8 | 8 | "testing" |
| 9 | + "time" |
9 | 10 |
|
10 | 11 | "github.com/stretchr/testify/assert" |
11 | 12 | "github.com/stretchr/testify/require" |
@@ -69,6 +70,33 @@ func TestReplicatePreconditions(t *testing.T) { |
69 | 70 | r = &Gossip{leading: NewAtomic(false), name: "self", db: &fakeDB{path: t.TempDir(), maxBatchCount: 10, maxBatchSize: 1 << 20, valueThr: 1024}} |
70 | 71 | err = r.Replicate(&fakeReplicateSrv{ctx: peerCtx("127.0.0.1", 7000), recvErr: errors.New("recv")}) |
71 | 72 | require.EqualError(t, err, "recv") |
| 73 | + |
| 74 | + r = &Gossip{leading: NewAtomic(false), name: "self", db: &fakeDB{path: t.TempDir(), maxBatchCount: 10, maxBatchSize: 1 << 20, valueThr: 1024}} |
| 75 | + err = r.Replicate(&fakeReplicateSrv{ctx: peerCtx("127.0.0.1", 7000), msgs: []*pb.ReplicateRequest{{Ops: []*pb.Op{{ID: 2, Action: &pb.Op_Commit{Commit: &pb.Commit{At: 7}}}}}}}) |
| 76 | + require.Equal(t, io.EOF, err) |
| 77 | +} |
| 78 | + |
| 79 | +func TestInitWaitsForNodeToAppear(t *testing.T) { |
| 80 | + called := false |
| 81 | + r := &Gossip{ |
| 82 | + leading: NewAtomic(true), |
| 83 | + db: &fakeDB{maxVersion: 5, streamFn: func(_ context.Context, at, since uint64, _ io.Writer) error { |
| 84 | + called = true |
| 85 | + assert.EqualValues(t, 5, at) |
| 86 | + assert.EqualValues(t, 1, since) |
| 87 | + return nil |
| 88 | + }}, |
| 89 | + nodes: Map[*node]{}, |
| 90 | + } |
| 91 | + |
| 92 | + go func() { |
| 93 | + time.Sleep(15 * time.Millisecond) |
| 94 | + r.nodes.Store("late", &node{name: "late", addr: net.ParseIP("127.0.0.1")}) |
| 95 | + }() |
| 96 | + |
| 97 | + err := r.Init(&pb.InitRequest{Since: 1}, &fakeInitSrv{ctx: peerCtx("127.0.0.1", 7000)}) |
| 98 | + require.NoError(t, err) |
| 99 | + assert.True(t, called) |
72 | 100 | } |
73 | 101 |
|
74 | 102 | func TestAliveTable(t *testing.T) { |
|
0 commit comments