package host import ( "testing" "time" "github.com/stretchr/testify/assert" ) type scenario struct { state *State payload IPayload want *State } var blankState = &State{ Kpower: KpowerState{ Op: Operation{}, }, } func TestPost(t *testing.T) { rebootPayload := &postKpowerPayload{OpType: REBOOT} rebootWantKpowerOp := Operation{OpType: REBOOT} rebootWantKpower := KpowerState{Op: rebootWantKpowerOp} reboot := scenario{ state: blankState, payload: rebootPayload, want: &State{Kpower: rebootWantKpower}, } shutdownPayloadOpts := Options{ NoCordonOrDrain: true, } shutdownPayload := &postKpowerPayload{ OpType: SHUTDOWN, Opts: shutdownPayloadOpts, } shutdownWantKpowerOpOpts := Options{ NoCordonOrDrain: true, } shutdownWantKpowerOp := Operation{ OpType: SHUTDOWN, Opts: shutdownWantKpowerOpOpts, } shutdownWantKpower := KpowerState{Op: shutdownWantKpowerOp} shutdown := scenario{ state: blankState, payload: shutdownPayload, want: &State{Kpower: shutdownWantKpower}, } scenarios := map[string]scenario{ "Reboot": reboot, "Shutdown with Opts": shutdown, } for _, s := range scenarios { s.payload.updateState(s.state) t.Log(s.want, "==", s.state) assert.Equal(t, s.want, s.state) } } func TestPut(t *testing.T) { putStateKpowerOp := Operation{OpType: REBOOT} putStateKpower := KpowerState{ Status: TERMINATED, Op: putStateKpowerOp, } putPayloadOp := Operation{OpType: REBOOT} putPayload := &putKpowerPayload{ Status: RUNNING, Op: putPayloadOp, Timestamp: time.Date( 2025, 02, 105, 12, 04, 00, 00, time.UTC), } putWantKpowerOp := Operation{OpType: REBOOT} putWantKpower := KpowerState{ Status: RUNNING, Op: putWantKpowerOp, Timestamp: "2025-05-16T12:04:00Z", } put := scenario{ state: &State{Kpower: putStateKpower}, payload: putPayload, want: &State{Kpower: putWantKpower}, } scenarios := map[string]scenario{ "Put": put, } for _, s := range scenarios { s.payload.updateState(s.state) t.Log(s.want, "==", s.state) assert.Equal(t, s.want, s.state) } }