From 8858371c433f286301470cb4f0f8d1c08e8e9ce9 Mon Sep 17 00:00:00 2001 From: rigelrozanski Date: Mon, 12 Mar 2018 13:10:30 +0100 Subject: [PATCH] ... --- client/keys.go | 1 + client/lcd/lcd_test.go | 19 ++-- client/lcd/root.go | 3 +- tests/basecli_test.go | 222 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 236 insertions(+), 9 deletions(-) create mode 100644 tests/basecli_test.go diff --git a/client/keys.go b/client/keys.go index 42eb00b7eb..7e150de7a2 100644 --- a/client/keys.go +++ b/client/keys.go @@ -6,6 +6,7 @@ import ( dbm "github.com/tendermint/tmlibs/db" ) +// TODO explain what the keybase is used for // GetKeyBase initializes a keybase based on the configuration func GetKeyBase(db dbm.DB) keys.Keybase { keybase := keys.New( diff --git a/client/lcd/lcd_test.go b/client/lcd/lcd_test.go index aff2eb736c..898e3926eb 100644 --- a/client/lcd/lcd_test.go +++ b/client/lcd/lcd_test.go @@ -117,12 +117,17 @@ func TestVersion(t *testing.T) { } func TestNodeStatus(t *testing.T) { - _, _ = startServer(t) - // TODO need to kill server after - prepareClient(t) + //ch := server.StartServer(t) + //defer close(ch) + //prepareClient(t) - cdc := app.MakeCodec() - r := initRouter(cdc) + //cdc := app.MakeCodec() // TODO refactor so that cdc is included from a common test init function + //r := initRouter(cdc) + + err := tests.InitServer() + require.Nil(t, err) + err := tests.StartServer() + require.Nil(t, err) // node info res := request(t, r, "GET", "/node_info", nil) @@ -291,9 +296,6 @@ func prepareClient(t *testing.T) { db := dbm.NewMemDB() app := baseapp.NewBaseApp(t.Name(), defaultLogger(), db) viper.Set(client.FlagNode, "localhost:46657") - - _ = client.GetKeyBase(db) - header := abci.Header{Height: 1} app.BeginBlock(abci.RequestBeginBlock{Header: header}) app.Commit() @@ -372,6 +374,7 @@ func runOrTimeout(cmd *cobra.Command, timeout time.Duration) error { } func request(t *testing.T, r http.Handler, method string, path string, payload []byte) *httptest.ResponseRecorder { + req, err := http.NewRequest(method, path, bytes.NewBuffer(payload)) require.Nil(t, err) res := httptest.NewRecorder() diff --git a/client/lcd/root.go b/client/lcd/root.go index 7be79ced07..8476d16d5e 100644 --- a/client/lcd/root.go +++ b/client/lcd/root.go @@ -51,10 +51,11 @@ func initRouter(cdc *wire.Codec) http.Handler { r := mux.NewRouter() r.HandleFunc("/version", version.VersionRequestHandler).Methods("GET") + // TODO make more functional? aka r = keys.RegisterRoutes(r) keys.RegisterRoutes(r) rpc.RegisterRoutes(r) tx.RegisterRoutes(r, cdc) - auth.RegisterRoutes(r, cdc, "main") + auth.RegisterRoutes(r, cdc, "main") // TODO should use a variable not just a string bank.RegisterRoutes(r, cdc) return r } diff --git a/tests/basecli_test.go b/tests/basecli_test.go new file mode 100644 index 0000000000..8baebfae36 --- /dev/null +++ b/tests/basecli_test.go @@ -0,0 +1,222 @@ +package main + +import ( + "bufio" + "fmt" + "os" + "os/exec" + "path/filepath" + //"strings" + "testing" + "time" +) + +// Tests assume the `basecoind` and `basecli` binaries +// have been built and are located in `./build` + +// TODO remove test dirs if tests are successful + +var ( + basecoind = "build/basecoind" + basecli = "build/basecli" + + basecoindDir = "./tmp-basecoind-tests" + basecliDir = "./tmp-basecli-tests" + + ACCOUNTS = []string{"alice", "bob", "charlie", "igor"} + alice = ACCOUNTS[0] + bob = ACCOUNTS[1] + charlie = ACCOUNTS[2] + igor = ACCOUNTS[3] +) + +func gopath() string { + return filepath.Join(os.Getenv("GOPATH"), "src", "github.com", "cosmos", "cosmos-sdk") +} + +func whereIsBasecoind() string { + return filepath.Join(gopath(), basecoind) +} + +func whereIsBasecli() string { + return filepath.Join(gopath(), basecli) +} + +func TestInitBaseCoin(t *testing.T) { + Clean() + + var err error + + password := "some-random-password" + usePassword := exec.Command("echo", password) + + initBasecoind := exec.Command(whereIsBasecoind(), "init", "--home", basecoindDir) + + initBasecoind.Stdin, err = usePassword.StdoutPipe() + if err != nil { + t.Error(err) + } + + initBasecoind.Stdout = os.Stdout + + if err := initBasecoind.Start(); err != nil { + t.Error(err) + } + if err := usePassword.Run(); err != nil { + t.Error(err) + } + if err := initBasecoind.Wait(); err != nil { + t.Error(err) + } + + if err := makeKeys(); err != nil { + t.Error(err) + } +} + +func makeKeys() error { + var err error + for _, acc := range ACCOUNTS { + pass := exec.Command("echo", "1234567890") + makeKeys := exec.Command(whereIsBasecli(), "keys", "add", acc, "--home", basecliDir) + + makeKeys.Stdin, err = pass.StdoutPipe() + if err != nil { + return err + } + + makeKeys.Stdout = os.Stdout + if err := makeKeys.Start(); err != nil { + return err + } + if err := pass.Run(); err != nil { + return err + } + + if err := makeKeys.Wait(); err != nil { + return err + } + } + + return nil +} + +// these are in the original bash tests +func TestBaseCliRecover(t *testing.T) {} +func TestBaseCliShow(t *testing.T) {} + +func _TestSendCoins(t *testing.T) { + if err := StartServer(); err != nil { + t.Error(err) + } + + // send some coins + // [zr] where dafuq do I get a FROM (oh, use --name) + + sendTo := fmt.Sprintf("--to=%s", bob) + sendFrom := fmt.Sprintf("--from=%s", alice) + + cmdOut, err := exec.Command(whereIsBasecli(), "send", sendTo, "--amount=1000mycoin", sendFrom, "--seq=0").Output() + if err != nil { + t.Error(err) + } + + fmt.Printf("sent: %s", string(cmdOut)) + +} + +// expects TestInitBaseCoin to have been run +func StartServer() error { + // straight outta https://nathanleclaire.com/blog/2014/12/29/shelled-out-commands-in-golang/ + cmdName := whereIsBasecoind() + cmdArgs := []string{"start", "--home", basecoindDir} + + cmd := exec.Command(cmdName, cmdArgs...) + cmdReader, err := cmd.StdoutPipe() + if err != nil { + return err + } + + scanner := bufio.NewScanner(cmdReader) + go func() { + for scanner.Scan() { + fmt.Printf("running [basecoind start] %s\n", scanner.Text()) + } + }() + + err = cmd.Start() + if err != nil { + return err + } + + err = cmd.Wait() + if err != nil { + return err + } + + time.Sleep(5 * time.Second) + + return nil + + // TODO return cmd.Process so that we can later do something like: + // cmd.Process.Kill() + // see: https://stackoverflow.com/questions/11886531/terminating-a-process-started-with-os-exec-in-golang +} + +func Clean() { + // ignore errors b/c the dirs may not yet exist + os.Remove(basecoindDir) + os.Remove(basecliDir) +} + +/* + + chainID = "staking_test" + testDir = "./tmp_tests" +) + +func runTests() { + + if err := os.Mkdir(testDir, 0666); err != nil { + panic(err) + } + defer os.Remove(testDir) + + // make some keys + + //if err := makeKeys(); err != nil { + // panic(err) + //} + + if err := initServer(); err != nil { + fmt.Printf("Err: %v", err) + panic(err) + } + +} + +func initServer() error { + serveDir := filepath.Join(testDir, "server") + //serverLog := filepath.Join(testDir, "gaia-node.log") + + // get RICH + keyOut, err := exec.Command(GAIA, CLIENT_EXE, "keys", "get", "alice").Output() + if err != nil { + fmt.Println("one") + return err + } + key := strings.Split(string(keyOut), "\t") + fmt.Printf("wit:%s", key[2]) + + outByte, err := exec.Command(GAIA, SERVER_EXE, "init", "--static", fmt.Sprintf("--chain-id=%s", chainID), fmt.Sprintf("--home=%s", serveDir), key[2]).Output() + if err != nil { + fmt.Println("teo") + fmt.Printf("Error: %v", err) + + return err + } + fmt.Sprintf("OUT: %s", string(outByte)) + return nil +} + +*/