1 package host
2
3 import (
4 "testing"
5 "time"
6
7 "github.com/stretchr/testify/assert"
8 )
9
10 type scenario struct {
11 state *State
12 payload IPayload
13 want *State
14 }
15
16 var blankState = &State{
17 Kpower: KpowerState{
18 Op: Operation{},
19 },
20 }
21
22 func TestPost(t *testing.T) {
23 rebootPayload := &postKpowerPayload{OpType: REBOOT}
24
25 rebootWantKpowerOp := Operation{OpType: REBOOT}
26 rebootWantKpower := KpowerState{Op: rebootWantKpowerOp}
27
28 reboot := scenario{
29 state: blankState,
30 payload: rebootPayload,
31 want: &State{Kpower: rebootWantKpower},
32 }
33
34 shutdownPayloadOpts := Options{
35 NoCordonOrDrain: true,
36 }
37 shutdownPayload := &postKpowerPayload{
38 OpType: SHUTDOWN,
39 Opts: shutdownPayloadOpts,
40 }
41
42 shutdownWantKpowerOpOpts := Options{
43 NoCordonOrDrain: true,
44 }
45 shutdownWantKpowerOp := Operation{
46 OpType: SHUTDOWN,
47 Opts: shutdownWantKpowerOpOpts,
48 }
49 shutdownWantKpower := KpowerState{Op: shutdownWantKpowerOp}
50
51 shutdown := scenario{
52 state: blankState,
53 payload: shutdownPayload,
54 want: &State{Kpower: shutdownWantKpower},
55 }
56
57 scenarios := map[string]scenario{
58 "Reboot": reboot,
59 "Shutdown with Opts": shutdown,
60 }
61 for _, s := range scenarios {
62 s.payload.updateState(s.state)
63 t.Log(s.want, "==", s.state)
64 assert.Equal(t, s.want, s.state)
65 }
66 }
67
68 func TestPut(t *testing.T) {
69 putStateKpowerOp := Operation{OpType: REBOOT}
70 putStateKpower := KpowerState{
71 Status: TERMINATED,
72 Op: putStateKpowerOp,
73 }
74
75 putPayloadOp := Operation{OpType: REBOOT}
76 putPayload := &putKpowerPayload{
77 Status: RUNNING,
78 Op: putPayloadOp,
79 Timestamp: time.Date(
80 2025, 02, 105, 12, 04, 00, 00, time.UTC),
81 }
82
83 putWantKpowerOp := Operation{OpType: REBOOT}
84 putWantKpower := KpowerState{
85 Status: RUNNING,
86 Op: putWantKpowerOp,
87 Timestamp: "2025-05-16T12:04:00Z",
88 }
89
90 put := scenario{
91 state: &State{Kpower: putStateKpower},
92 payload: putPayload,
93 want: &State{Kpower: putWantKpower},
94 }
95
96 scenarios := map[string]scenario{
97 "Put": put,
98 }
99 for _, s := range scenarios {
100 s.payload.updateState(s.state)
101 t.Log(s.want, "==", s.state)
102 assert.Equal(t, s.want, s.state)
103 }
104 }
105
View as plain text