From 11fdd831ee9f97d70898de90c599c6f17fb46b97 Mon Sep 17 00:00:00 2001 From: rigelrozanski Date: Fri, 9 Mar 2018 18:36:24 +0000 Subject: [PATCH] refactoring server new non-deterministic error :( --- Gopkg.toml | 1 - client/lcd/lcd_test.go | 71 ++++++++++-------------------------------- server/init_test.go | 18 +---------- server/start_test.go | 37 ++++++---------------- 4 files changed, 28 insertions(+), 99 deletions(-) diff --git a/Gopkg.toml b/Gopkg.toml index fe3de57e8e..1025288c95 100644 --- a/Gopkg.toml +++ b/Gopkg.toml @@ -84,7 +84,6 @@ [[override]] branch = "rigel/cli-refactor" name = "github.com/tendermint/tmlibs" - #version = "6ef3e36e82ab95739c5beacddca8e931f62d2cef" [prune] go-tests = true diff --git a/client/lcd/lcd_test.go b/client/lcd/lcd_test.go index 22c9923846..16793c85d2 100644 --- a/client/lcd/lcd_test.go +++ b/client/lcd/lcd_test.go @@ -3,31 +3,28 @@ package lcd import ( "bytes" "encoding/json" - "fmt" "io/ioutil" "net/http" "net/http/httptest" "os" "testing" - "time" - "github.com/spf13/cobra" "github.com/spf13/viper" - - "github.com/cosmos/cosmos-sdk/baseapp" - "github.com/cosmos/cosmos-sdk/client" - keys "github.com/cosmos/cosmos-sdk/client/keys" - "github.com/cosmos/cosmos-sdk/examples/basecoin/app" - "github.com/cosmos/cosmos-sdk/mock" - "github.com/cosmos/cosmos-sdk/server" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + abci "github.com/tendermint/abci/types" cryptoKeys "github.com/tendermint/go-crypto/keys" "github.com/tendermint/tendermint/p2p" ctypes "github.com/tendermint/tendermint/rpc/core/types" dbm "github.com/tendermint/tmlibs/db" "github.com/tendermint/tmlibs/log" + + "github.com/cosmos/cosmos-sdk/baseapp" + "github.com/cosmos/cosmos-sdk/client" + keys "github.com/cosmos/cosmos-sdk/client/keys" + "github.com/cosmos/cosmos-sdk/examples/basecoin/app" + "github.com/cosmos/cosmos-sdk/server" ) func TestKeys(t *testing.T) { @@ -128,9 +125,10 @@ func TestVersion(t *testing.T) { } func TestNodeStatus(t *testing.T) { - startServer(t) - // TODO need to kill server after + ch := server.StartServer(t) + defer close(ch) prepareClient(t) + cdc := app.MakeCodec() r := initRouter(cdc) @@ -147,7 +145,7 @@ func TestNodeStatus(t *testing.T) { err = decoder.Decode(&m) require.Nil(t, err, "Couldn't parse node info") - assert.NotEqual(t, p2p.NodeInfo{}, m) + assert.NotEqual(t, p2p.NodeInfo{}, m, "res: %v", res) // syncing req, err = http.NewRequest("GET", "/syncing", nil) @@ -161,9 +159,10 @@ func TestNodeStatus(t *testing.T) { } func TestBlock(t *testing.T) { - startServer(t) - // TODO need to kill server after + ch := server.StartServer(t) + defer close(ch) prepareClient(t) + cdc := app.MakeCodec() r := initRouter(cdc) @@ -199,8 +198,9 @@ func TestBlock(t *testing.T) { } func TestValidators(t *testing.T) { - startServer(t) - // TODO need to kill server after + ch := server.StartServer(t) + defer close(ch) + prepareClient(t) cdc := app.MakeCodec() r := initRouter(cdc) @@ -266,43 +266,6 @@ func setupViper() func() { } } -func startServer(t *testing.T) { - defer setupViper()() - // init server - initCmd := server.InitCmd(mock.GenInitOptions, log.NewNopLogger()) - err := initCmd.RunE(nil, nil) - require.NoError(t, err) - - // start server - viper.Set("with-tendermint", true) - startCmd := server.StartCmd(mock.NewApp, log.NewNopLogger()) - timeout := time.Duration(3) * time.Second - - err = runOrTimeout(startCmd, timeout) - require.NoError(t, err) -} - -// copied from server/start_test.go -func runOrTimeout(cmd *cobra.Command, timeout time.Duration) error { - done := make(chan error) - go func(out chan<- error) { - // this should NOT exit - err := cmd.RunE(nil, nil) - if err != nil { - out <- err - } - out <- fmt.Errorf("start died for unknown reasons") - }(done) - timer := time.NewTimer(timeout) - - select { - case err := <-done: - return err - case <-timer.C: - return nil - } -} - func initKeybase(t *testing.T) (cryptoKeys.Keybase, *dbm.GoLevelDB, error) { os.RemoveAll("./testKeybase") db, err := dbm.NewGoLevelDB("keys", "./testKeybase") diff --git a/server/init_test.go b/server/init_test.go index 0af1ecc118..0abb180400 100644 --- a/server/init_test.go +++ b/server/init_test.go @@ -1,11 +1,8 @@ package server import ( - "io/ioutil" - "os" "testing" - "github.com/spf13/viper" "github.com/stretchr/testify/require" "github.com/tendermint/tmlibs/log" @@ -13,21 +10,8 @@ import ( "github.com/cosmos/cosmos-sdk/mock" ) -// setupViper creates a homedir to run inside, -// and returns a cleanup function to defer -func setupViper() func() { - rootDir, err := ioutil.TempDir("", "mock-sdk-cmd") - if err != nil { - panic(err) // fuck it! - } - viper.Set("home", rootDir) - return func() { - os.RemoveAll(rootDir) - } -} - func TestInit(t *testing.T) { - defer setupViper()() + defer setupViper(t)() logger := log.NewNopLogger() cmd := InitCmd(mock.GenInitOptions, logger) diff --git a/server/start_test.go b/server/start_test.go index 5b7ab3e76c..5bb2eccbbc 100644 --- a/server/start_test.go +++ b/server/start_test.go @@ -1,12 +1,10 @@ package server import ( - "fmt" "os" "testing" "time" - "github.com/spf13/cobra" "github.com/spf13/viper" "github.com/stretchr/testify/require" @@ -15,7 +13,7 @@ import ( ) func TestStartStandAlone(t *testing.T) { - defer setupViper()() + defer setupViper(t)() logger := log.NewNopLogger() initCmd := InitCmd(mock.GenInitOptions, logger) @@ -26,14 +24,15 @@ func TestStartStandAlone(t *testing.T) { viper.Set(flagWithTendermint, false) viper.Set(flagAddress, "localhost:11122") startCmd := StartCmd(mock.NewApp, logger) + startCmd.Flags().Set(flagAddress, FreeAddr(t)) // set to a new free address timeout := time.Duration(3) * time.Second - err = runOrTimeout(startCmd, timeout) - require.NoError(t, err) + ch := RunOrTimeout(startCmd, timeout, t) + close(ch) } func TestStartWithTendermint(t *testing.T) { - defer setupViper()() + defer setupViper(t)() logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout)). With("module", "mock-cmd") @@ -45,28 +44,12 @@ func TestStartWithTendermint(t *testing.T) { // set up app and start up viper.Set(flagWithTendermint, true) startCmd := StartCmd(mock.NewApp, logger) + startCmd.Flags().Set(flagAddress, FreeAddr(t)) // set to a new free address timeout := time.Duration(3) * time.Second - err = runOrTimeout(startCmd, timeout) - require.NoError(t, err) -} + //a, _ := startCmd.Flags().GetString(flagAddress) + //panic(a) -func runOrTimeout(cmd *cobra.Command, timeout time.Duration) error { - done := make(chan error) - go func(out chan<- error) { - // this should NOT exit - err := cmd.RunE(nil, nil) - if err != nil { - out <- err - } - out <- fmt.Errorf("start died for unknown reasons") - }(done) - timer := time.NewTimer(timeout) - - select { - case err := <-done: - return err - case <-timer.C: - return nil - } + ch := RunOrTimeout(startCmd, timeout, t) + close(ch) }