mirror of https://github.com/ethereum/go-ethereum
cmd/ethkey: fix formatting, review nits (#15807)
This commit: - Adds a --msgfile option to read the message to sign from a file instead of command line argument. - Adds a unit test for signing subcommands. - Removes some weird whitespace in the code.pull/15902/head
parent
216e584899
commit
f08cd94fb7
@ -0,0 +1,70 @@ |
||||
// Copyright 2017 The go-ethereum Authors
|
||||
// This file is part of go-ethereum.
|
||||
//
|
||||
// go-ethereum is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// go-ethereum is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
package main |
||||
|
||||
import ( |
||||
"io/ioutil" |
||||
"os" |
||||
"path/filepath" |
||||
"testing" |
||||
) |
||||
|
||||
func TestMessageSignVerify(t *testing.T) { |
||||
tmpdir, err := ioutil.TempDir("", "ethkey-test") |
||||
if err != nil { |
||||
t.Fatal("Can't create temporary directory:", err) |
||||
} |
||||
defer os.RemoveAll(tmpdir) |
||||
|
||||
keyfile := filepath.Join(tmpdir, "the-keyfile") |
||||
message := "test message" |
||||
|
||||
// Create the key.
|
||||
generate := runEthkey(t, "generate", keyfile) |
||||
generate.Expect(` |
||||
!! Unsupported terminal, password will be echoed. |
||||
Passphrase: {{.InputLine "foobar"}} |
||||
Repeat passphrase: {{.InputLine "foobar"}} |
||||
`) |
||||
_, matches := generate.ExpectRegexp(`Address: (0x[0-9a-fA-F]{40})\n`) |
||||
address := matches[1] |
||||
generate.ExpectExit() |
||||
|
||||
// Sign a message.
|
||||
sign := runEthkey(t, "signmessage", keyfile, message) |
||||
sign.Expect(` |
||||
!! Unsupported terminal, password will be echoed. |
||||
Passphrase: {{.InputLine "foobar"}} |
||||
`) |
||||
_, matches = sign.ExpectRegexp(`Signature: ([0-9a-f]+)\n`) |
||||
signature := matches[1] |
||||
sign.ExpectExit() |
||||
|
||||
// Verify the message.
|
||||
verify := runEthkey(t, "verifymessage", address, signature, message) |
||||
_, matches = verify.ExpectRegexp(` |
||||
Signature verification successful! |
||||
Recovered public key: [0-9a-f]+ |
||||
Recovered address: (0x[0-9a-fA-F]{40}) |
||||
`) |
||||
recovered := matches[1] |
||||
verify.ExpectExit() |
||||
|
||||
if recovered != address { |
||||
t.Error("recovered address doesn't match generated key") |
||||
} |
||||
} |
@ -0,0 +1,54 @@ |
||||
// Copyright 2017 The go-ethereum Authors
|
||||
// This file is part of go-ethereum.
|
||||
//
|
||||
// go-ethereum is free software: you can redistribute it and/or modify
|
||||
// it under the terms of the GNU General Public License as published by
|
||||
// the Free Software Foundation, either version 3 of the License, or
|
||||
// (at your option) any later version.
|
||||
//
|
||||
// go-ethereum is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with go-ethereum. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
package main |
||||
|
||||
import ( |
||||
"fmt" |
||||
"os" |
||||
"testing" |
||||
|
||||
"github.com/docker/docker/pkg/reexec" |
||||
"github.com/ethereum/go-ethereum/internal/cmdtest" |
||||
) |
||||
|
||||
type testEthkey struct { |
||||
*cmdtest.TestCmd |
||||
} |
||||
|
||||
// spawns ethkey with the given command line args.
|
||||
func runEthkey(t *testing.T, args ...string) *testEthkey { |
||||
tt := new(testEthkey) |
||||
tt.TestCmd = cmdtest.NewTestCmd(t, tt) |
||||
tt.Run("ethkey-test", args...) |
||||
return tt |
||||
} |
||||
|
||||
func TestMain(m *testing.M) { |
||||
// Run the app if we've been exec'd as "ethkey-test" in runEthkey.
|
||||
reexec.Register("ethkey-test", func() { |
||||
if err := app.Run(os.Args); err != nil { |
||||
fmt.Fprintln(os.Stderr, err) |
||||
os.Exit(1) |
||||
} |
||||
os.Exit(0) |
||||
}) |
||||
// check if we have been reexec'd
|
||||
if reexec.Init() { |
||||
return |
||||
} |
||||
os.Exit(m.Run()) |
||||
} |
Loading…
Reference in new issue