43 lines
1.2 KiB
Go
43 lines
1.2 KiB
Go
|
|
package channels
|
||
|
|
|
||
|
|
import (
|
||
|
|
"sync"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
func TestMarkMessageProcessed_DuplicateDetection(t *testing.T) {
|
||
|
|
var mu sync.RWMutex
|
||
|
|
processed := make(map[string]bool)
|
||
|
|
|
||
|
|
if ok := markMessageProcessed(&mu, &processed, "msg-1", 1000); !ok {
|
||
|
|
t.Fatalf("first message should be accepted")
|
||
|
|
}
|
||
|
|
|
||
|
|
if ok := markMessageProcessed(&mu, &processed, "msg-1", 1000); ok {
|
||
|
|
t.Fatalf("duplicate message should be rejected")
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func TestMarkMessageProcessed_RotationClearsMapAtBoundary(t *testing.T) {
|
||
|
|
var mu sync.RWMutex
|
||
|
|
processed := make(map[string]bool)
|
||
|
|
|
||
|
|
if ok := markMessageProcessed(&mu, &processed, "msg-1", 1); !ok {
|
||
|
|
t.Fatalf("first message should be accepted")
|
||
|
|
}
|
||
|
|
if len(processed) != 1 {
|
||
|
|
t.Fatalf("expected map size 1 after first insert, got %d", len(processed))
|
||
|
|
}
|
||
|
|
|
||
|
|
// Inserting second unique message exceeds maxEntries and should reset map.
|
||
|
|
if ok := markMessageProcessed(&mu, &processed, "msg-2", 1); !ok {
|
||
|
|
t.Fatalf("second unique message should be accepted")
|
||
|
|
}
|
||
|
|
if len(processed) != 0 {
|
||
|
|
t.Fatalf("expected map to be reset after rotation, got size %d", len(processed))
|
||
|
|
}
|
||
|
|
if processed["msg-2"] {
|
||
|
|
t.Fatalf("expected current message marker to be cleared after rotation")
|
||
|
|
}
|
||
|
|
}
|