github.com/koko1123/flow-go-1@v0.29.6/admin/commands/execution/stop_at_height_test.go (about) 1 package execution 2 3 import ( 4 "context" 5 "testing" 6 7 "github.com/rs/zerolog" 8 "github.com/stretchr/testify/require" 9 10 "github.com/koko1123/flow-go-1/admin" 11 "github.com/koko1123/flow-go-1/engine/execution/ingestion" 12 ) 13 14 func TestCommandParsing(t *testing.T) { 15 cmd := StopAtHeightCommand{} 16 17 t.Run("happy path", func(t *testing.T) { 18 19 req := &admin.CommandRequest{ 20 Data: map[string]interface{}{ 21 "height": float64(21), // raw json parses to float64 22 "crash": true, 23 }, 24 } 25 26 err := cmd.Validator(req) 27 require.NoError(t, err) 28 29 require.IsType(t, StopAtHeightReq{}, req.ValidatorData) 30 31 parsedReq := req.ValidatorData.(StopAtHeightReq) 32 33 require.Equal(t, uint64(21), parsedReq.height) 34 require.Equal(t, true, parsedReq.crash) 35 }) 36 37 t.Run("empty", func(t *testing.T) { 38 39 req := &admin.CommandRequest{ 40 Data: map[string]interface{}{}, 41 } 42 43 err := cmd.Validator(req) 44 45 require.True(t, admin.IsInvalidAdminParameterError(err)) 46 }) 47 48 t.Run("wrong height type", func(t *testing.T) { 49 50 req := &admin.CommandRequest{ 51 Data: map[string]interface{}{ 52 "height": "abc", 53 }, 54 } 55 56 err := cmd.Validator(req) 57 58 require.True(t, admin.IsInvalidAdminParameterError(err)) 59 }) 60 61 t.Run("wrong height type", func(t *testing.T) { 62 63 req := &admin.CommandRequest{ 64 Data: map[string]interface{}{ 65 "height": "abc", 66 }, 67 } 68 69 err := cmd.Validator(req) 70 71 require.True(t, admin.IsInvalidAdminParameterError(err)) 72 }) 73 74 t.Run("negative", func(t *testing.T) { 75 76 req := &admin.CommandRequest{ 77 Data: map[string]interface{}{ 78 "height": -12, 79 }, 80 } 81 82 err := cmd.Validator(req) 83 84 require.True(t, admin.IsInvalidAdminParameterError(err)) 85 }) 86 87 } 88 89 func TestCommandsSetsValues(t *testing.T) { 90 91 stopControl := ingestion.NewStopControl(zerolog.Nop(), false, 0) 92 93 cmd := NewStopAtHeightCommand(stopControl) 94 95 req := &admin.CommandRequest{ 96 ValidatorData: StopAtHeightReq{ 97 height: 37, 98 crash: true, 99 }, 100 } 101 102 _, err := cmd.Handler(context.TODO(), req) 103 require.NoError(t, err) 104 105 height, crash := stopControl.GetStopHeight() 106 107 require.Equal(t, stopControl.GetState(), ingestion.StopControlSet) 108 require.Equal(t, uint64(37), height) 109 require.Equal(t, true, crash) 110 }