1package agent
2
3import (
4 "testing"
5
6 "github.com/bnema/zut/packages/agent/extproto"
7 "github.com/bnema/zut/packages/agent/modes"
8)
9
10func TestInteractiveExtHooksBufferStartupChrome(t *testing.T) {
11 hooks := &interactiveExtHooks{}
12 hooks.SetStatus("tasked-phases", "progress", "success", "2/4")
13 hooks.SetWidget("tasked-phases", "plan", "above_input", "Plan", []string{"one"})
14 hooks.SetWidget("tasked-phases", "cleared", "above_input", "old", []string{"old"})
15 hooks.ClearWidget("tasked-phases", "cleared")
16 hooks.SetStatus("tasked-phases", "removed", "info", "old")
17 hooks.SetStatus("tasked-phases", "removed", "info", "")
18
19 hooks.mu.Lock()
20 if len(hooks.pendingStatuses) != 1 || len(hooks.pendingWidgets) != 1 {
21 t.Fatalf("pending chrome = statuses %d widgets %d, want one each", len(hooks.pendingStatuses), len(hooks.pendingWidgets))
22 }
23 hooks.mu.Unlock()
24
25 hooks.attachInteractive(&modes.Interactive{})
26 hooks.mu.Lock()
27 defer hooks.mu.Unlock()
28 if len(hooks.pendingStatuses) != 0 || len(hooks.pendingWidgets) != 0 {
29 t.Fatalf("pending chrome was not flushed: statuses=%v widgets=%v", hooks.pendingStatuses, hooks.pendingWidgets)
30 }
31}
32
33func TestInteractiveExtHooksBufferStartupAlerts(t *testing.T) {
34 hooks := &interactiveExtHooks{}
35 hooks.Alert("question-ext", extproto.AlertRequest{Kind: extproto.AlertKindBell, Reason: "question_ready"})
36 for n := 0; n < maxBufferedInteractiveAlerts+8; n++ {
37 hooks.Alert("question-ext", extproto.AlertRequest{Kind: extproto.AlertKindBell, Reason: "flood"})
38 }
39
40 hooks.mu.Lock()
41 pending := len(hooks.pendingAlerts)
42 hooks.mu.Unlock()
43 if pending != maxBufferedInteractiveAlerts {
44 t.Fatalf("pending startup alerts = %d, want bounded capacity %d", pending, maxBufferedInteractiveAlerts)
45 }
46
47 iv := &modes.Interactive{}
48 hooks.attachInteractive(iv)
49 hooks.mu.Lock()
50 pending = len(hooks.pendingAlerts)
51 attached := hooks.interactive == iv
52 hooks.mu.Unlock()
53 if pending != 0 || !attached {
54 t.Fatalf("after attach: pending=%d attached=%v, want no pending alert and attached host", pending, attached)
55 }
56}