aboutsummaryrefslogtreecommitdiff
path: root/dedupe/dedupe_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'dedupe/dedupe_test.go')
-rw-r--r--dedupe/dedupe_test.go68
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")
}
})