5232609719
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
87 lines
1.9 KiB
Go
87 lines
1.9 KiB
Go
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)
|
|
}
|
|
}
|