package cli import ( "context" "strings" "testing" ) type scriptLog struct { scripts []string reply func(script string) string } func (s *scriptLog) Run(_ context.Context, script string, _ []byte) ([]byte, error) { s.scripts = append(s.scripts, script) if s.reply != nil { return []byte(s.reply(script)), nil } return nil, nil } func TestAControlPlaneFollowsTheFirewallSetting(t *testing.T) { off := &scriptLog{} if _, err := syncFirewall(context.Background(), off, firewallState{Enabled: false}); err != nil { t.Fatal(err) } if !strings.Contains(strings.Join(off.scripts, "\n"), "nft delete table inet llmgw") { t.Errorf("off did not take the table out: %q", off.scripts) } none := &scriptLog{reply: func(s string) string { if strings.Contains(s, "echo loaded") { return "none\n" } return "" }} msg, err := syncFirewall(context.Background(), none, firewallState{Enabled: true}) if err != nil || !strings.Contains(msg, "server init") { t.Errorf("on, with no rules here: %q %v", msg, err) } on := &scriptLog{reply: func(s string) string { if strings.Contains(s, "echo loaded") { return "loaded\n" } return "" }} if msg, err := syncFirewall(context.Background(), on, firewallState{Enabled: true}); err != nil || msg != "llmgw's firewall is on here" { t.Errorf("on: %q %v", msg, err) } }