diff options
| author | Dustin Sallings <[email protected]> | 2024-02-17 10:43:02 -1000 |
|---|---|---|
| committer | GitHub <[email protected]> | 2024-02-17 10:43:02 -1000 |
| commit | 59cf28f56db53cddb9a1704fb34760dbc0377ec8 (patch) | |
| tree | 66c638a6ef5da5746ecc105c314a7859e72ca909 /dedupe/dedupe_test.go | |
| parent | 3bfd8048b5a93e4ede740dbb51baa16e0262da25 (diff) | |
Remove goroutine from dedup and add testing (#19)
Diffstat (limited to 'dedupe/dedupe_test.go')
| -rw-r--r-- | dedupe/dedupe_test.go | 68 |
1 files changed, 60 insertions, 8 deletions
diff --git a/dedupe/dedupe_test.go b/dedupe/dedupe_test.go index 5891429..b02939f 100644 --- a/dedupe/dedupe_test.go +++ b/dedupe/dedupe_test.go @@ -34,19 +34,34 @@ func TestPacketDeduplicatorSeen(t *testing.T) { } func TestDuplicatorProp(t *testing.T) { + // Some arbitrary time. Ideally the generator would provide one, but the go quickcheck generators aren't very good + now := time.Now() if err := quick.Check(func(s, p uint32) bool { dedup := NewDeduplicator(expiresAfter) // Test Seen with new packetID - if dedup.Seen(s, p) { + if dedup.seenAt(now, s, p) { t.Error("Expected the packet to not have been seen") return false } // Test Seen with same packetID again - if !dedup.Seen(s, p) { + if !dedup.seenAt(now, s, p) { t.Error("Expected the packet to have been seen") return false } + + // Even up to expiry + if !dedup.seenAt(now.Add(expiresAfter), s, p) { + t.Error("Expected the packet to have been seen all the way to expiry") + return false + } + + // But not in The Future + if dedup.seenAt(now.Add(expiresAfter+time.Nanosecond), s, p) { + t.Error("Expected the packet to not have been seen after expiry") + return false + } + return true }, nil); err != nil { t.Error(err) @@ -54,16 +69,53 @@ func TestDuplicatorProp(t *testing.T) { } func FuzzDup(f *testing.F) { - f.Fuzz(func(t *testing.T, s uint32, p uint32) { - dedup := NewDeduplicator(10*time.Second) + now := time.Now() + f.Fuzz(func(t *testing.T, s1 uint32, s2 uint32, p1 uint32, p2 uint32) { + dedup := NewDeduplicator(expiresAfter) // Test Seen with new packetID - if dedup.Seen(s, p) { - t.Errorf("Expected the packet %v/%v to not have been seen the first time", s, p) + if dedup.seenAt(now, s1, p1) { + t.Error("Expected the packet to not have been seen") } // Test Seen with same packetID again - if !dedup.Seen(s, p) { - t.Errorf("Expected the packet %v/%v to have been seen", s, p) + if !dedup.seenAt(now, s1, p1) { + t.Error("Expected the packet to have been seen") + } + + // Even up to expiry + if !dedup.seenAt(now.Add(expiresAfter), s1, p1) { + t.Error("Expected the packet to have been seen all the way to expiry") + } + + // But not in The Future + if dedup.seenAt(now.Add(expiresAfter+time.Nanosecond), s1, p1) { + t.Error("Expected the packet to not have been seen after expiry") + } + + // + // This remaining bits of this property are not valid if s1 == s2 and p1 == p2 + // + if s1 == s2 && p1 == p2 { + return + } + + if dedup.seenAt(now, s2, p2) { + t.Error("Expected a different packet to not have been seen") + } + + // Test Seen with same packetID again + if !dedup.seenAt(now, s2, p2) { + t.Error("Expected a different packet to have been seen") + } + + // Even up to expiry + if !dedup.seenAt(now.Add(expiresAfter), s2, p2) { + t.Error("Expected a different packet to have been seen all the way to expiry") + } + + // But not in The Future + if dedup.seenAt(now.Add(expiresAfter+time.Nanosecond), s2, p2) { + t.Error("Expected a different packet to not have been seen after expiry") } }) |
