ScuttleBot

scuttlebot / internal / bots / warden / warden_test.go
Source Blame History 77 lines
8fe9b10… lmata 1 package warden_test
8fe9b10… lmata 2
8fe9b10… lmata 3 import (
8fe9b10… lmata 4 "testing"
8fe9b10… lmata 5 "time"
8fe9b10… lmata 6
8fe9b10… lmata 7 "github.com/conflicthq/scuttlebot/internal/bots/warden"
8fe9b10… lmata 8 )
8fe9b10… lmata 9
8fe9b10… lmata 10 func newBot() *warden.Bot {
3420a83… lmata 11 return warden.New("localhost:6667", "pass", nil,
8fe9b10… lmata 12 map[string]warden.ChannelConfig{
8fe9b10… lmata 13 "#fleet": {MessagesPerSecond: 5, Burst: 10, CoolDown: 60 * time.Second},
8fe9b10… lmata 14 },
8fe9b10… lmata 15 warden.ChannelConfig{MessagesPerSecond: 2, Burst: 5},
8fe9b10… lmata 16 nil,
8fe9b10… lmata 17 )
8fe9b10… lmata 18 }
8fe9b10… lmata 19
8fe9b10… lmata 20 func TestBotName(t *testing.T) {
8fe9b10… lmata 21 b := newBot()
8fe9b10… lmata 22 if b.Name() != "warden" {
8fe9b10… lmata 23 t.Errorf("Name(): got %q", b.Name())
8fe9b10… lmata 24 }
8fe9b10… lmata 25 }
8fe9b10… lmata 26
8fe9b10… lmata 27 func TestBotNew(t *testing.T) {
8fe9b10… lmata 28 b := newBot()
8fe9b10… lmata 29 if b == nil {
8fe9b10… lmata 30 t.Fatal("expected non-nil bot")
8fe9b10… lmata 31 }
8fe9b10… lmata 32 }
8fe9b10… lmata 33
8fe9b10… lmata 34 func TestChannelConfigDefaults(t *testing.T) {
8fe9b10… lmata 35 // Zero-value config should get sane defaults applied.
3420a83… lmata 36 b := warden.New("localhost:6667", "pass", nil,
8fe9b10… lmata 37 nil,
8fe9b10… lmata 38 warden.ChannelConfig{}, // zero — should default
8fe9b10… lmata 39 nil,
8fe9b10… lmata 40 )
8fe9b10… lmata 41 if b == nil {
8fe9b10… lmata 42 t.Fatal("expected non-nil bot")
8fe9b10… lmata 43 }
8fe9b10… lmata 44 }
8fe9b10… lmata 45
8fe9b10… lmata 46 func TestRateLimiterTokenBucket(t *testing.T) {
8fe9b10… lmata 47 // We test the rate limiter logic indirectly through the ChannelConfig.
8fe9b10… lmata 48 // The key invariant: high burst allows initial traffic, sustained rate is enforced.
8fe9b10… lmata 49 // Full rate-limit enforcement requires IRC wiring; this tests construction.
8fe9b10… lmata 50 cfg := warden.ChannelConfig{
8fe9b10… lmata 51 MessagesPerSecond: 10,
8fe9b10… lmata 52 Burst: 20,
8fe9b10… lmata 53 CoolDown: 30 * time.Second,
8fe9b10… lmata 54 }
3420a83… lmata 55 b := warden.New("localhost:6667", "pass", nil,
8fe9b10… lmata 56 map[string]warden.ChannelConfig{"#fleet": cfg},
8fe9b10… lmata 57 warden.ChannelConfig{},
8fe9b10… lmata 58 nil,
8fe9b10… lmata 59 )
8fe9b10… lmata 60 if b == nil {
8fe9b10… lmata 61 t.Fatal("expected non-nil bot")
8fe9b10… lmata 62 }
8fe9b10… lmata 63 }
8fe9b10… lmata 64
8fe9b10… lmata 65 func TestActionConstants(t *testing.T) {
8fe9b10… lmata 66 // Ensure action constants are stable.
8fe9b10… lmata 67 actions := map[warden.Action]string{
8fe9b10… lmata 68 warden.ActionWarn: "warn",
8fe9b10… lmata 69 warden.ActionMute: "mute",
8fe9b10… lmata 70 warden.ActionKick: "kick",
8fe9b10… lmata 71 }
8fe9b10… lmata 72 for action, want := range actions {
8fe9b10… lmata 73 if string(action) != want {
8fe9b10… lmata 74 t.Errorf("Action constant: got %q, want %q", action, want)
8fe9b10… lmata 75 }
8fe9b10… lmata 76 }
8fe9b10… lmata 77 }

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button