diff options
Diffstat (limited to 'cmd/gdex/run_test.go')
-rw-r--r-- | cmd/gdex/run_test.go | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/cmd/gdex/run_test.go b/cmd/gdex/run_test.go new file mode 100644 index 000000000..a53a914d2 --- /dev/null +++ b/cmd/gdex/run_test.go @@ -0,0 +1,98 @@ +// Copyright 2016 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" + "io/ioutil" + "os" + "testing" + + "github.com/dexon-foundation/dexon/internal/cmdtest" + "github.com/docker/docker/pkg/reexec" +) + +func tmpdir(t *testing.T) string { + dir, err := ioutil.TempDir("", "gdex-test") + if err != nil { + t.Fatal(err) + } + return dir +} + +type testgdex struct { + *cmdtest.TestCmd + + // template variables for expect + Datadir string + Etherbase string +} + +func init() { + // Run the app if we've been exec'd as "gdex-test" in runGeth. + reexec.Register("gdex-test", func() { + if err := app.Run(os.Args); err != nil { + fmt.Fprintln(os.Stderr, err) + os.Exit(1) + } + os.Exit(0) + }) +} + +func TestMain(m *testing.M) { + // check if we have been reexec'd + if reexec.Init() { + return + } + os.Exit(m.Run()) +} + +// spawns gdex with the given command line args. If the args don't set --datadir, the +// child g gets a temporary data directory. +func runGeth(t *testing.T, args ...string) *testgdex { + tt := &testgdex{} + tt.TestCmd = cmdtest.NewTestCmd(t, tt) + for i, arg := range args { + switch { + case arg == "-datadir" || arg == "--datadir": + if i < len(args)-1 { + tt.Datadir = args[i+1] + } + case arg == "-etherbase" || arg == "--etherbase": + if i < len(args)-1 { + tt.Etherbase = args[i+1] + } + } + } + if tt.Datadir == "" { + tt.Datadir = tmpdir(t) + tt.Cleanup = func() { os.RemoveAll(tt.Datadir) } + args = append([]string{"-datadir", tt.Datadir}, args...) + // Remove the temporary datadir if something fails below. + defer func() { + if t.Failed() { + tt.Cleanup() + } + }() + } + + // Boot "gdex". This actually runs the test binary but the TestMain + // function will prevent any tests from running. + tt.Run("gdex-test", args...) + + return tt +} |