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  }