From 6114e572fd91e00ddd9a5bc3605e2ea9d8580a48 Mon Sep 17 00:00:00 2001 From: Vishal Nayak Date: Wed, 21 Apr 2021 11:19:12 -0400 Subject: [PATCH] Add test --- state_test.go | 93 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/state_test.go b/state_test.go index b585a59..5228e56 100644 --- a/state_test.go +++ b/state_test.go @@ -81,6 +81,99 @@ func TestAliveServers(t *testing.T) { require.Equal(t, expected, actual) } +func TestGatherNextStateInputsLeaderFromDelegate(t *testing.T){ + mtime := NewMockTimeProvider(t) + mraft := NewMockRaft(t) + mdel := NewMockApplicationIntegration(t) + + ap := New(mraft, mdel, withTimeProvider(mtime)) + ap.startTime = time.Date(2020, 11, 2, 12, 0, 0, 0, time.UTC) + ap.state = &State{Healthy: false} + + now := time.Date(2020, 11, 02, 12, 0, 0, 5000, time.UTC) + mtime.On("Now").Return(now).Once() + + conf := &Config{ + CleanupDeadServers: true, + LastContactThreshold: 200 * time.Millisecond, + MaxTrailingLogs: 200, + MinQuorum: 3, + ServerStabilizationTime: 10 * time.Second, + } + + servers := map[raft.ServerID]*Server{ + "7875975d-d54b-49c1-a400-9fefcc706c67": { + ID: "7875975d-d54b-49c1-a400-9fefcc706c67", + Name: "node1", + Address: "198.18.0.1:8300", + NodeStatus: NodeAlive, + Version: "1.9.0", + RaftVersion: 3, + IsLeader: true, + }, + "ecfc5237-63c3-4b09-94b9-d5682d9ae5b1": { + ID: "ecfc5237-63c3-4b09-94b9-d5682d9ae5b1", + Name: "node2", + Address: "198.18.0.2:8300", + NodeStatus: NodeAlive, + Version: "1.9.0", + RaftVersion: 3, + }, + "e72eb8da-604d-47cd-bd7f-69ec120ea2b7": { + ID: "e72eb8da-604d-47cd-bd7f-69ec120ea2b7", + Name: "node3", + Address: "198.18.0.3:8300", + NodeStatus: NodeAlive, + Version: "1.9.0", + RaftVersion: 3, + }, + } + var lastIndex uint64 = 1024 + var lastTerm uint64 = 3 + + serverStats := map[raft.ServerID]*ServerStats{ + "7875975d-d54b-49c1-a400-9fefcc706c67": { + LastTerm: lastTerm, + LastIndex: lastIndex, + }, + "ecfc5237-63c3-4b09-94b9-d5682d9ae5b1": { + LastContact: 10 * time.Millisecond, + LastTerm: lastTerm, + LastIndex: 1000, + }, + "e72eb8da-604d-47cd-bd7f-69ec120ea2b7": { + LastContact: 15 * time.Millisecond, + LastTerm: lastTerm, + LastIndex: 999, + }, + } + + var leaderID raft.ServerID = "7875975d-d54b-49c1-a400-9fefcc706c67" + + mdel.On("AutopilotConfig").Return(conf).Once() + mraft.On("GetConfiguration").Return(&raftConfigFuture{config: test3VoterRaftConfiguration}).Once() + mdel.On("KnownServers").Return(servers).Once() + mraft.On("LastIndex").Return(lastIndex).Once() + mraft.On("Stats").Return(map[string]string{"last_log_term": "3"}).Once() + mdel.On("FetchServerStats", mock.Anything, servers).Return(serverStats).Once() + + expected := &nextStateInputs{ + Now: now, + StartTime: ap.startTime, + Config: conf, + RaftConfig: &test3VoterRaftConfiguration, + KnownServers: servers, + LatestIndex: lastIndex, + LastTerm: lastTerm, + FetchedStats: serverStats, + LeaderID: leaderID, + } + + actual, err := ap.gatherNextStateInputs(context.Background()) + require.NoError(t, err) + require.Equal(t, expected, actual) +} + func TestGatherNextStateInputs(t *testing.T) { mtime := NewMockTimeProvider(t) mraft := NewMockRaft(t)