mirror of
https://github.com/logos-messaging/go-libp2p-pubsub.git
synced 2026-01-07 23:33:08 +00:00
mcache test
This commit is contained in:
parent
599ccffecd
commit
060a9bba62
165
mcache_test.go
Normal file
165
mcache_test.go
Normal file
@ -0,0 +1,165 @@
|
||||
package floodsub
|
||||
|
||||
import (
|
||||
"encoding/binary"
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
pb "github.com/libp2p/go-floodsub/pb"
|
||||
)
|
||||
|
||||
func TestMessageCache(t *testing.T) {
|
||||
mcache := NewMessageCache(3, 5)
|
||||
|
||||
msgs := make([]*pb.Message, 60)
|
||||
for i := range msgs {
|
||||
msgs[i] = makeTestMessage(i)
|
||||
}
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
mcache.Put(msgs[i])
|
||||
}
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
mid := msgID(msgs[i])
|
||||
m, ok := mcache.Get(mid)
|
||||
if !ok {
|
||||
t.Fatal("Message %d not in cache", i)
|
||||
}
|
||||
|
||||
if m != msgs[i] {
|
||||
t.Fatal("Message %d does not match cache", i)
|
||||
}
|
||||
}
|
||||
|
||||
gids := mcache.GetGossipIDs("test")
|
||||
if len(gids) != 10 {
|
||||
t.Fatal("Expected 10 gossip IDs; got %d", len(gids))
|
||||
}
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
mid := msgID(msgs[i])
|
||||
if mid != gids[i] {
|
||||
t.Fatal("GossipID mismatch for message %d", i)
|
||||
}
|
||||
}
|
||||
|
||||
mcache.Shift()
|
||||
for i := 10; i < 20; i++ {
|
||||
mcache.Put(msgs[i])
|
||||
}
|
||||
|
||||
for i := 0; i < 20; i++ {
|
||||
mid := msgID(msgs[i])
|
||||
m, ok := mcache.Get(mid)
|
||||
if !ok {
|
||||
t.Fatal("Message %d not in cache", i)
|
||||
}
|
||||
|
||||
if m != msgs[i] {
|
||||
t.Fatal("Message %d does not match cache", i)
|
||||
}
|
||||
}
|
||||
|
||||
gids = mcache.GetGossipIDs("test")
|
||||
if len(gids) != 20 {
|
||||
t.Fatal("Expected 20 gossip IDs; got %d", len(gids))
|
||||
}
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
mid := msgID(msgs[i])
|
||||
if mid != gids[10+i] {
|
||||
t.Fatal("GossipID mismatch for message %d", i)
|
||||
}
|
||||
}
|
||||
|
||||
for i := 10; i < 20; i++ {
|
||||
mid := msgID(msgs[i])
|
||||
if mid != gids[i-10] {
|
||||
t.Fatal("GossipID mismatch for message %d", i)
|
||||
}
|
||||
}
|
||||
|
||||
mcache.Shift()
|
||||
for i := 20; i < 30; i++ {
|
||||
mcache.Put(msgs[i])
|
||||
}
|
||||
|
||||
mcache.Shift()
|
||||
for i := 30; i < 40; i++ {
|
||||
mcache.Put(msgs[i])
|
||||
}
|
||||
|
||||
mcache.Shift()
|
||||
for i := 40; i < 50; i++ {
|
||||
mcache.Put(msgs[i])
|
||||
}
|
||||
|
||||
mcache.Shift()
|
||||
for i := 50; i < 60; i++ {
|
||||
mcache.Put(msgs[i])
|
||||
}
|
||||
|
||||
if len(mcache.msgs) != 50 {
|
||||
t.Fatal("Expected 50 messages in the cache; got %d", len(mcache.msgs))
|
||||
}
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
mid := msgID(msgs[i])
|
||||
_, ok := mcache.Get(mid)
|
||||
if ok {
|
||||
t.Fatal("Message %d still in cache", i)
|
||||
}
|
||||
}
|
||||
|
||||
for i := 10; i < 60; i++ {
|
||||
mid := msgID(msgs[i])
|
||||
m, ok := mcache.Get(mid)
|
||||
if !ok {
|
||||
t.Fatal("Message %d not in cache", i)
|
||||
}
|
||||
|
||||
if m != msgs[i] {
|
||||
t.Fatal("Message %d does not match cache", i)
|
||||
}
|
||||
}
|
||||
|
||||
gids = mcache.GetGossipIDs("test")
|
||||
if len(gids) != 30 {
|
||||
t.Fatal("Expected 30 gossip IDs; got %d", len(gids))
|
||||
}
|
||||
|
||||
for i := 0; i < 10; i++ {
|
||||
mid := msgID(msgs[50+i])
|
||||
if mid != gids[i] {
|
||||
t.Fatal("GossipID mismatch for message %d", i)
|
||||
}
|
||||
}
|
||||
|
||||
for i := 10; i < 20; i++ {
|
||||
mid := msgID(msgs[30+i])
|
||||
if mid != gids[i] {
|
||||
t.Fatal("GossipID mismatch for message %d", i)
|
||||
}
|
||||
}
|
||||
|
||||
for i := 20; i < 30; i++ {
|
||||
mid := msgID(msgs[10+i])
|
||||
if mid != gids[i] {
|
||||
t.Fatal("GossipID mismatch for message %d", i)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func makeTestMessage(n int) *pb.Message {
|
||||
seqno := make([]byte, 8)
|
||||
binary.BigEndian.PutUint64(seqno, uint64(n))
|
||||
data := []byte(fmt.Sprintf("%d", n))
|
||||
return &pb.Message{
|
||||
Data: data,
|
||||
TopicIDs: []string{"test"},
|
||||
From: []byte("test"),
|
||||
Seqno: seqno,
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user