diff --git a/client/keys/add.go b/client/keys/add.go index cfaf526460..29908bf9ab 100644 --- a/client/keys/add.go +++ b/client/keys/add.go @@ -164,14 +164,14 @@ func AddNewKeyRequestHandler(w http.ResponseWriter, r *http.Request) { } algo := keys.CryptoAlgo(m.Type) - _, _, err = kb.Create(m.Name, m.Password, algo) + info, _, err := kb.Create(m.Name, m.Password, algo) // TODO handle different errors if err != nil { w.WriteHeader(500) w.Write([]byte(err.Error())) return } - w.WriteHeader(200) + w.Write([]byte(info.PubKey.Address().String())) } // function to just a new seed to display in the UI before actually persisting it in the keybase diff --git a/client/lcd/lcd_test.go b/client/lcd/lcd_test.go index 16793c85d2..b2595fa0da 100644 --- a/client/lcd/lcd_test.go +++ b/client/lcd/lcd_test.go @@ -28,8 +28,7 @@ import ( ) func TestKeys(t *testing.T) { - kb, db, err := initKeybase(t) - require.Nil(t, err, "Couldn't init Keybase") + prepareClient(t) cdc := app.MakeCodec() r := initRouter(cdc) @@ -44,8 +43,9 @@ func TestKeys(t *testing.T) { body := res.Body.String() require.Equal(t, body, "[]", "Expected an empty array") - info, _, err := kb.Create("test", "1234567890", cryptoKeys.CryptoAlgo("ed25519")) - require.Nil(t, err, "Couldn't add key") + // add key + addr := createKey(t, r) + assert.Len(t, addr, 40, "Returned address has wrong format", res.Body.String()) // existing keys req, err = http.NewRequest("GET", "/keys", nil) @@ -59,7 +59,7 @@ func TestKeys(t *testing.T) { err = decoder.Decode(&m) assert.Equal(t, m[0].Name, "test", "Did not serve keys name correctly") - assert.Equal(t, m[0].Address, info.PubKey.Address().String(), "Did not serve keys Address correctly") + assert.Equal(t, m[0].Address, addr, "Did not serve keys Address correctly") // select key req, _ = http.NewRequest("GET", "/keys/test", nil) @@ -72,7 +72,7 @@ func TestKeys(t *testing.T) { err = decoder.Decode(&m2) assert.Equal(t, m2.Name, "test", "Did not serve keys name correctly") - assert.Equal(t, m2.Address, info.PubKey.Address().String(), "Did not serve keys Address correctly") + assert.Equal(t, m2.Address, addr, "Did not serve keys Address correctly") // update key var jsonStr = []byte(`{"old_password":"1234567890", "new_password":"12345678901"}`) @@ -99,8 +99,6 @@ func TestKeys(t *testing.T) { r.ServeHTTP(res, req) assert.Equal(t, http.StatusOK, res.Code, res.Body.String()) - - db.Close() } func TestVersion(t *testing.T) { @@ -266,11 +264,52 @@ func setupViper() func() { } } -func initKeybase(t *testing.T) (cryptoKeys.Keybase, *dbm.GoLevelDB, error) { - os.RemoveAll("./testKeybase") - db, err := dbm.NewGoLevelDB("keys", "./testKeybase") - require.Nil(t, err) - kb := client.GetKeyBase(db) - keys.SetKeyBase(kb) - return kb, db, nil +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 createKey(t *testing.T, r http.Handler) string { + var jsonStr = []byte(`{"name":"test", "password":"1234567890"}`) + req, err := http.NewRequest("POST", "/keys", bytes.NewBuffer(jsonStr)) + require.Nil(t, err) + res := httptest.NewRecorder() + + r.ServeHTTP(res, req) + assert.Equal(t, http.StatusOK, res.Code, res.Body.String()) + + addr := res.Body.String() + return addr } diff --git a/docs/sdk/lcd-rest-api.yaml b/docs/sdk/lcd-rest-api.yaml index 08264d5646..b4ab401e53 100644 --- a/docs/sdk/lcd-rest-api.yaml +++ b/docs/sdk/lcd-rest-api.yaml @@ -62,7 +62,7 @@ paths: summary: Create a new account locally responses: 200: - description: OK + description: Returns address of the account created requestBody: content: application/json: