...

Source file src/edge-infra.dev/pkg/sds/interlock/topic/host/kpower_state_test.go

Documentation: edge-infra.dev/pkg/sds/interlock/topic/host

     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