github.com/ari-anchor/sei-tendermint@v0.0.0-20230519144642-dc826b7b56bb/cmd/tendermint/commands/rollback_test.go (about) 1 package commands_test 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 "github.com/stretchr/testify/require" 9 10 "github.com/ari-anchor/sei-tendermint/cmd/tendermint/commands" 11 "github.com/ari-anchor/sei-tendermint/libs/log" 12 "github.com/ari-anchor/sei-tendermint/rpc/client/local" 13 rpctest "github.com/ari-anchor/sei-tendermint/rpc/test" 14 e2e "github.com/ari-anchor/sei-tendermint/test/e2e/app" 15 ) 16 17 func TestRollbackIntegration(t *testing.T) { 18 var height int64 19 dir := t.TempDir() 20 ctx, cancel := context.WithCancel(context.Background()) 21 defer cancel() 22 cfg, err := rpctest.CreateConfig(t, t.Name()) 23 require.NoError(t, err) 24 cfg.BaseConfig.DBBackend = "goleveldb" 25 26 app, err := e2e.NewApplication(e2e.DefaultConfig(dir)) 27 require.NoError(t, err) 28 29 t.Run("First run", func(t *testing.T) { 30 ctx, cancel := context.WithCancel(ctx) 31 defer cancel() 32 require.NoError(t, err) 33 node, _, err := rpctest.StartTendermint(ctx, cfg, app, rpctest.SuppressStdout) 34 require.NoError(t, err) 35 require.True(t, node.IsRunning()) 36 37 time.Sleep(3 * time.Second) 38 cancel() 39 node.Wait() 40 41 require.False(t, node.IsRunning()) 42 }) 43 t.Run("Rollback", func(t *testing.T) { 44 time.Sleep(time.Second) 45 require.NoError(t, app.Rollback()) 46 height, _, err = commands.RollbackState(cfg, false) 47 require.NoError(t, err, "%d", height) 48 }) 49 t.Run("Restart", func(t *testing.T) { 50 require.True(t, height > 0, "%d", height) 51 52 ctx, cancel := context.WithTimeout(ctx, 10*time.Second) 53 defer cancel() 54 node2, _, err2 := rpctest.StartTendermint(ctx, cfg, app, rpctest.SuppressStdout) 55 require.NoError(t, err2) 56 t.Cleanup(node2.Wait) 57 58 logger := log.NewNopLogger() 59 60 client, err := local.New(logger, node2.(local.NodeService)) 61 require.NoError(t, err) 62 63 ticker := time.NewTicker(200 * time.Millisecond) 64 for { 65 select { 66 case <-ctx.Done(): 67 t.Fatalf("failed to make progress after 20 seconds. Min height: %d", height) 68 case <-ticker.C: 69 status, err := client.Status(ctx) 70 require.NoError(t, err) 71 72 if status.SyncInfo.LatestBlockHeight > height { 73 return 74 } 75 } 76 } 77 }) 78 79 }