diff --git a/cmix/polltracker_test.go b/cmix/polltracker_test.go new file mode 100644 index 0000000000000000000000000000000000000000..a544d567f7e643a3810742e617753017c55a5af9 --- /dev/null +++ b/cmix/polltracker_test.go @@ -0,0 +1,75 @@ +package cmix + +import ( + xxid "gitlab.com/xx_network/primitives/id" + "gitlab.com/xx_network/primitives/id/ephemeral" + "strings" + "testing" + "time" +) + +func TestPollTracker(t *testing.T) { + // Create poll tracker + pt := newPollTracker() + + // Init ID and first EID + id := xxid.NewIdFromString("zezima", xxid.User, t) + eid, _, _, err := ephemeral.GetId(id, 16, time.Now().UnixNano()) + if err != nil { + t.Errorf("Failed to create eid for ID %s", id.String()) + } + eid2, _, _, err := ephemeral.GetId(id, 16, time.Now().Add(time.Hour*24).UnixNano()) + if err != nil { + t.Errorf("Failed to create second eid for ID %s", id.String()) + } + + // Track untracked id & eid + pt.Track(eid, id) + if i, ok := (*pt)[*id]; ok { + if j, ok2 := i[eid.Int64()]; ok2 { + if j != 1 { + t.Errorf("EID entry value not 1") + } + } else { + t.Errorf("No entry made for EID") + } + } else { + t.Errorf("No entry made for ID") + } + + // track untracked eid on tracked id + pt.Track(eid2, id) + if i, ok := (*pt)[*id]; ok { + if j, ok2 := i[eid2.Int64()]; ok2 { + if j != 1 { + t.Errorf("EID entry value not 1") + } + } else { + t.Errorf("No entry made for EID") + } + } else { + t.Errorf("No entry made for ID") + } + + // re-add tracked eid & id + pt.Track(eid2, id) + if i, ok := (*pt)[*id]; ok { + if j, ok2 := i[eid2.Int64()]; ok2 { + if j != 2 { + t.Errorf("EID entry value not 1") + } + } else { + t.Errorf("No entry made for EID") + } + } else { + t.Errorf("No entry made for ID") + } + + // Check report output + s := strings.TrimSpace(pt.Report()) + + expectedReport := "Polled the network 3 times" + if s != expectedReport { + t.Errorf("Did not receive expected report\n\tExpected: %s\n\tReceived: %s\n", expectedReport, s) + } +} diff --git a/cmix/roundTracking.go b/cmix/roundTracking.go index 534324d272d6d089c00a7dc20cc178116b2baeb9..56b327d17b309bc700af2dcc2f05a6d005eb37dd 100644 --- a/cmix/roundTracking.go +++ b/cmix/roundTracking.go @@ -23,7 +23,7 @@ import ( type RoundState uint8 const ( - Unchecked = iota + Unchecked RoundState = iota Unknown NoMessageAvailable MessageAvailable diff --git a/cmix/roundTracking_test.go b/cmix/roundTracking_test.go new file mode 100644 index 0000000000000000000000000000000000000000..c6219228a6e6df2c3d2c39a69440fa43e20e9013 --- /dev/null +++ b/cmix/roundTracking_test.go @@ -0,0 +1,23 @@ +package cmix + +import ( + "gitlab.com/xx_network/primitives/id" + "testing" +) + +func TestRoundTracker(t *testing.T) { + rt := NewRoundTracker() + rid := id.Round(2) + rt.denote(rid, MessageAvailable) + if rt.state[rid] != MessageAvailable { + t.Errorf("Round %d is not in expected state\n\tExpected: %s\n\tReceived: %s\n", rid, MessageAvailable, rt.state[rid]) + } + rt.denote(rid, Unchecked) + if rt.state[rid] != MessageAvailable { + t.Errorf("Round %d is not in expected state\n\tExpected: %s\n\tReceived: %s\n", rid, MessageAvailable, rt.state[rid]) + } + rt.denote(rid, Abandoned) + if rt.state[rid] != Abandoned { + t.Errorf("Round %d is not in expected state\n\tExpected: %s\n\tReceived: %s\n", rid, Abandoned, rt.state[rid]) + } +}