panel — open-source game server manager (public release)
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
package events
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
panelv1 "github.com/dbledeez/panel/proto/panel/v1"
|
||||
)
|
||||
|
||||
func logEvent(agentID, instanceID string) *panelv1.Event {
|
||||
return &panelv1.Event{
|
||||
AgentId: agentID,
|
||||
Payload: &panelv1.Event_Log{Log: &panelv1.LogLine{InstanceId: instanceID, Line: "x"}},
|
||||
}
|
||||
}
|
||||
|
||||
func statsEvent(agentID, instanceID string) *panelv1.Event {
|
||||
return &panelv1.Event{
|
||||
AgentId: agentID,
|
||||
Payload: &panelv1.Event_InstanceStats{InstanceStats: &panelv1.InstanceStatsUpdate{InstanceId: instanceID}},
|
||||
}
|
||||
}
|
||||
|
||||
// drain returns however many events are immediately buffered.
|
||||
func drain(s *Subscription) int {
|
||||
n := 0
|
||||
for {
|
||||
select {
|
||||
case <-s.Events():
|
||||
n++
|
||||
default:
|
||||
return n
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestFilterExcludeLogs(t *testing.T) {
|
||||
b := New(16)
|
||||
sub := b.Subscribe(Filter{ExcludeLogs: true})
|
||||
defer sub.Close()
|
||||
|
||||
b.Publish(logEvent("a1", "i1"))
|
||||
b.Publish(statsEvent("a1", "i1"))
|
||||
b.Publish(logEvent("a2", "i2"))
|
||||
|
||||
if got := drain(sub); got != 1 {
|
||||
t.Fatalf("ExcludeLogs subscriber got %d events, want 1 (stats only)", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestFilterInstanceAndAgent(t *testing.T) {
|
||||
b := New(16)
|
||||
byInst := b.Subscribe(Filter{InstanceID: "i1"})
|
||||
defer byInst.Close()
|
||||
byAgent := b.Subscribe(Filter{AgentID: "a2"})
|
||||
defer byAgent.Close()
|
||||
all := b.Subscribe(Filter{})
|
||||
defer all.Close()
|
||||
|
||||
b.Publish(logEvent("a1", "i1"))
|
||||
b.Publish(statsEvent("a2", "i2"))
|
||||
|
||||
if got := drain(byInst); got != 1 {
|
||||
t.Fatalf("InstanceID filter got %d, want 1", got)
|
||||
}
|
||||
if got := drain(byAgent); got != 1 {
|
||||
t.Fatalf("AgentID filter got %d, want 1", got)
|
||||
}
|
||||
if got := drain(all); got != 2 {
|
||||
t.Fatalf("unfiltered got %d, want 2", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDropOnFullBuffer(t *testing.T) {
|
||||
b := New(2)
|
||||
sub := b.Subscribe(Filter{})
|
||||
defer sub.Close()
|
||||
for i := 0; i < 5; i++ {
|
||||
b.Publish(statsEvent("a1", "i1"))
|
||||
}
|
||||
if got := drain(sub); got != 2 {
|
||||
t.Fatalf("buffered %d, want 2", got)
|
||||
}
|
||||
if d := sub.Dropped(); d != 3 {
|
||||
t.Fatalf("dropped %d, want 3", d)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user