mirror of
https://github.com/logos-messaging/go-libp2p-pubsub.git
synced 2026-01-05 22:33:10 +00:00
add test for peer score inspection
This commit is contained in:
parent
ac70e7e738
commit
5c1b637dce
@ -6,6 +6,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@ -1550,3 +1551,82 @@ func (sq *sybilSquatter) handleStream(s network.Stream) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestGossipsubPeerScoreInspect(t *testing.T) {
|
||||||
|
// this test exercises the code path sof peer score inspection
|
||||||
|
ctx, cancel := context.WithCancel(context.Background())
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
hosts := getNetHosts(t, ctx, 2)
|
||||||
|
|
||||||
|
inspector := &mockPeerScoreInspector{}
|
||||||
|
psub1 := getGossipsub(ctx, hosts[0],
|
||||||
|
WithPeerScore(
|
||||||
|
&PeerScoreParams{
|
||||||
|
Topics: map[string]*TopicScoreParams{
|
||||||
|
"test": &TopicScoreParams{
|
||||||
|
TopicWeight: 1,
|
||||||
|
TimeInMeshQuantum: time.Second,
|
||||||
|
FirstMessageDeliveriesWeight: 1,
|
||||||
|
FirstMessageDeliveriesDecay: 0.999,
|
||||||
|
FirstMessageDeliveriesCap: 100,
|
||||||
|
InvalidMessageDeliveriesWeight: -1,
|
||||||
|
InvalidMessageDeliveriesDecay: 0.9999,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
AppSpecificScore: func(peer.ID) float64 { return 0 },
|
||||||
|
DecayInterval: time.Second,
|
||||||
|
DecayToZero: 0.01,
|
||||||
|
},
|
||||||
|
&PeerScoreThresholds{
|
||||||
|
GossipThreshold: -1,
|
||||||
|
PublishThreshold: -10,
|
||||||
|
GraylistThreshold: -1000,
|
||||||
|
}),
|
||||||
|
WithPeerScoreInspect(inspector.inspect, time.Second))
|
||||||
|
psub2 := getGossipsub(ctx, hosts[1])
|
||||||
|
psubs := []*PubSub{psub1, psub2}
|
||||||
|
|
||||||
|
connect(t, hosts[0], hosts[1])
|
||||||
|
|
||||||
|
var subs []*Subscription
|
||||||
|
for _, ps := range psubs {
|
||||||
|
sub, err := ps.Subscribe("test")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
subs = append(subs, sub)
|
||||||
|
}
|
||||||
|
|
||||||
|
time.Sleep(time.Second)
|
||||||
|
|
||||||
|
for i := 0; i < 20; i++ {
|
||||||
|
msg := []byte(fmt.Sprintf("message %d", i))
|
||||||
|
psubs[i%2].Publish("test", msg)
|
||||||
|
time.Sleep(20 * time.Millisecond)
|
||||||
|
}
|
||||||
|
|
||||||
|
time.Sleep(time.Second + 200*time.Millisecond)
|
||||||
|
|
||||||
|
score2 := inspector.score(hosts[1].ID())
|
||||||
|
if score2 < 9 {
|
||||||
|
t.Fatalf("expected score to be at least 5, instead got %f", score2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
type mockPeerScoreInspector struct {
|
||||||
|
mx sync.Mutex
|
||||||
|
scores map[peer.ID]float64
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ps *mockPeerScoreInspector) inspect(scores map[peer.ID]float64) {
|
||||||
|
ps.mx.Lock()
|
||||||
|
defer ps.mx.Unlock()
|
||||||
|
ps.scores = scores
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ps *mockPeerScoreInspector) score(p peer.ID) float64 {
|
||||||
|
ps.mx.Lock()
|
||||||
|
defer ps.mx.Unlock()
|
||||||
|
return ps.scores[p]
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user