125 lines
2.7 KiB
Go
125 lines
2.7 KiB
Go
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
|
|
}
|