Files

125 lines
2.7 KiB
Go
Raw Permalink Normal View History

package control
import (
"testing"
"time"
)
func TestModuleGate_IsEnabled(t *testing.T) {
g := NewModuleGate(true)
if !g.IsEnabled() {
t.Fatal("expected enabled")
}
}
func TestModuleGate_IsDisabled(t *testing.T) {
g := NewModuleGate(false)
if g.IsEnabled() {
t.Fatal("expected disabled")
}
}
func TestModuleGate_Close(t *testing.T) {
g := NewModuleGate(true)
g.Close()
if g.State() != ModuleStateClosing {
t.Fatalf("expected closing, got: %s", g.State())
}
}
func TestModuleGate_MarkClosed(t *testing.T) {
g := NewModuleGate(true)
g.Close()
g.MarkClosed()
if g.State() != ModuleStateClosed {
t.Fatalf("expected closed, got: %s", g.State())
}
if g.IsEnabled() {
t.Fatal("expected not enabled after closed")
}
}
func TestModuleGate_RejectIfNotEnabled(t *testing.T) {
g := NewModuleGate(true)
err := g.RejectIfNotEnabled("test")
if err != nil {
t.Fatal("expected no error when enabled")
}
g.Close()
err = g.RejectIfNotEnabled("test")
if err == nil {
t.Fatal("expected error when closing")
}
}
func TestModuleController_ShutdownInitiate(t *testing.T) {
c := NewModuleController(true)
c.ShutdownInitiate()
if c.probes.State() != ModuleStateClosing {
t.Fatalf("probes should be closing, got: %s", c.probes.State())
}
if c.discovery.State() != ModuleStateClosing {
t.Fatalf("discovery should be closing, got: %s", c.discovery.State())
}
}
func TestModuleController_ShutdownComplete(t *testing.T) {
c := NewModuleController(true)
c.ShutdownInitiate()
c.ShutdownComplete()
if c.probes.State() != ModuleStateClosed {
t.Fatalf("probes should be closed, got: %s", c.probes.State())
}
}
func TestModuleController_IsInflight(t *testing.T) {
c := NewModuleController(true)
c.ShutdownInitiate()
if !c.IsInflight() {
t.Fatal("expected in-flight during closing")
}
c.ShutdownComplete()
if c.IsInflight() {
t.Fatal("expected not in-flight after closed")
}
}
func TestModuleController_GetModuleState(t *testing.T) {
c := NewModuleController(true)
if c.GetModuleState("probes") != ModuleStateActive {
t.Fatalf("expected active, got: %s", c.GetModuleState("probes"))
}
if c.GetModuleState("unknown") != "" {
t.Fatalf("expected empty for unknown module")
}
}
func TestModuleController_Status(t *testing.T) {
c := NewModuleController(true)
status := c.Status()
if status.Probes != ModuleStateActive {
t.Fatalf("expected active, got: %s", status.Probes)
}
}
func TestModuleGate_ClosedAt(t *testing.T) {
g := NewModuleGate(true)
g.Close()
if g.State() != ModuleStateClosing {
t.Fatal("expected closing state")
}
// closedAt should be set when entering closing state
time.Sleep(10 * time.Millisecond)
_ = g.closedAt // not nil when closing
}