mirror of
https://github.com/dolthub/dolt.git
synced 2026-01-24 03:09:22 -06:00
Add run safe method that reads stderr and stdout regardless of panic (#2475)
Run method will now always return stdout,stderr, and a recoveredErr on Exit or Panic. MustRun will Panic with recoveredErr.
This commit is contained in:
@@ -38,7 +38,7 @@ func (s *nomsDiffTestSuite) TestNomsDiffOutputNotTruncated() {
|
||||
r2 := spec.CreateValueSpecString("ldb", s.LdbDir, "#"+ds.HeadRef().TargetHash().String())
|
||||
|
||||
ds.Database().Close()
|
||||
out, _ := s.Run(main, []string{"diff", r1, r2})
|
||||
out, _ := s.MustRun(main, []string{"diff", r1, r2})
|
||||
s.True(strings.HasSuffix(out, "\"second commit\"\n }\n"), out)
|
||||
}
|
||||
|
||||
@@ -57,11 +57,11 @@ func (s *nomsDiffTestSuite) TestNomsDiffSummarize() {
|
||||
s.NoError(err)
|
||||
r2 := spec.CreateHashSpecString("ldb", s.LdbDir, ds.HeadRef().TargetHash())
|
||||
|
||||
out, _ := s.Run(main, []string{"diff", "--summarize", r1, r2})
|
||||
out, _ := s.MustRun(main, []string{"diff", "--summarize", r1, r2})
|
||||
s.Contains(out, "Comparing commit values")
|
||||
s.Contains(out, "1 insertion (100.00%), 1 deletion (100.00%), 0 changes (0.00%), (1 value vs 1 value)")
|
||||
|
||||
out, _ = s.Run(main, []string{"diff", "--summarize", r1 + ".value", r2 + ".value"})
|
||||
out, _ = s.MustRun(main, []string{"diff", "--summarize", r1 + ".value", r2 + ".value"})
|
||||
s.NotContains(out, "Comparing commit values")
|
||||
|
||||
ds, err = ds.CommitValue(types.NewList(types.Number(1), types.Number(2), types.Number(3), types.Number(4)))
|
||||
@@ -72,6 +72,6 @@ func (s *nomsDiffTestSuite) TestNomsDiffSummarize() {
|
||||
s.NoError(err)
|
||||
r4 := spec.CreateHashSpecString("ldb", s.LdbDir, ds.HeadRef().TargetHash()) + ".value"
|
||||
|
||||
out, _ = s.Run(main, []string{"diff", "--summarize", r3, r4})
|
||||
out, _ = s.MustRun(main, []string{"diff", "--summarize", r3, r4})
|
||||
s.Contains(out, "1 insertion (25.00%), 2 deletions (50.00%), 0 changes (0.00%), (4 values vs 3 values)")
|
||||
}
|
||||
|
||||
@@ -8,7 +8,6 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/attic-labs/noms/go/chunks"
|
||||
"github.com/attic-labs/noms/go/d"
|
||||
"github.com/attic-labs/noms/go/datas"
|
||||
"github.com/attic-labs/noms/go/dataset"
|
||||
"github.com/attic-labs/noms/go/spec"
|
||||
@@ -18,7 +17,6 @@ import (
|
||||
)
|
||||
|
||||
func TestDs(t *testing.T) {
|
||||
d.UtilExiter = testExiter{}
|
||||
suite.Run(t, &nomsDsTestSuite{})
|
||||
}
|
||||
|
||||
@@ -35,7 +33,7 @@ func (s *nomsDsTestSuite) TestEmptyNomsDs() {
|
||||
ds.Close()
|
||||
|
||||
dbSpec := spec.CreateDatabaseSpecString("ldb", dir+"/name")
|
||||
rtnVal, _ := s.Run(main, []string{"ds", dbSpec})
|
||||
rtnVal, _ := s.MustRun(main, []string{"ds", dbSpec})
|
||||
s.Equal("", rtnVal)
|
||||
}
|
||||
|
||||
@@ -63,26 +61,26 @@ func (s *nomsDsTestSuite) TestNomsDs() {
|
||||
dataset2Name := spec.CreateValueSpecString("ldb", dir+"/name", id2)
|
||||
|
||||
// both datasets show up
|
||||
rtnVal, _ := s.Run(main, []string{"ds", dbSpec})
|
||||
rtnVal, _ := s.MustRun(main, []string{"ds", dbSpec})
|
||||
s.Equal(id+"\n"+id2+"\n", rtnVal)
|
||||
|
||||
// both datasets again, to make sure printing doesn't change them
|
||||
rtnVal, _ = s.Run(main, []string{"ds", dbSpec})
|
||||
rtnVal, _ = s.MustRun(main, []string{"ds", dbSpec})
|
||||
s.Equal(id+"\n"+id2+"\n", rtnVal)
|
||||
|
||||
// delete one dataset, print message at delete
|
||||
rtnVal, _ = s.Run(main, []string{"ds", "-d", datasetName})
|
||||
rtnVal, _ = s.MustRun(main, []string{"ds", "-d", datasetName})
|
||||
s.Equal("Deleted "+datasetName+" (was #6ebc05f71q4sk2psi534fom9se228161)\n", rtnVal)
|
||||
|
||||
// print datasets, just one left
|
||||
rtnVal, _ = s.Run(main, []string{"ds", dbSpec})
|
||||
rtnVal, _ = s.MustRun(main, []string{"ds", dbSpec})
|
||||
s.Equal(id2+"\n", rtnVal)
|
||||
|
||||
// delete the second dataset
|
||||
rtnVal, _ = s.Run(main, []string{"ds", "-d", dataset2Name})
|
||||
rtnVal, _ = s.MustRun(main, []string{"ds", "-d", dataset2Name})
|
||||
s.Equal("Deleted "+dataset2Name+" (was #f5qtovr9mv7mjj2uoq7flcfpksgf0s2j)\n", rtnVal)
|
||||
|
||||
// print datasets, none left
|
||||
rtnVal, _ = s.Run(main, []string{"ds", dbSpec})
|
||||
rtnVal, _ = s.MustRun(main, []string{"ds", dbSpec})
|
||||
s.Equal("", rtnVal)
|
||||
}
|
||||
|
||||
@@ -5,10 +5,8 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
|
||||
"github.com/attic-labs/noms/go/d"
|
||||
"github.com/attic-labs/noms/go/dataset"
|
||||
"github.com/attic-labs/noms/go/spec"
|
||||
"github.com/attic-labs/noms/go/types"
|
||||
@@ -18,21 +16,7 @@ import (
|
||||
"github.com/attic-labs/testify/suite"
|
||||
)
|
||||
|
||||
type testExiter struct{}
|
||||
type exitError struct {
|
||||
code int
|
||||
}
|
||||
|
||||
func (e exitError) Error() string {
|
||||
return fmt.Sprintf("Exiting with code: %d", e.code)
|
||||
}
|
||||
|
||||
func (testExiter) Exit(code int) {
|
||||
panic(exitError{code})
|
||||
}
|
||||
|
||||
func TestNomsLog(t *testing.T) {
|
||||
d.UtilExiter = testExiter{}
|
||||
suite.Run(t, &nomsLogTestSuite{})
|
||||
}
|
||||
|
||||
@@ -47,7 +31,7 @@ func testCommitInResults(s *nomsLogTestSuite, str string, i int) {
|
||||
s.NoError(err)
|
||||
commit := ds.Head()
|
||||
ds.Database().Close()
|
||||
res, _ := s.Run(main, []string{"log", str})
|
||||
res, _ := s.MustRun(main, []string{"log", str})
|
||||
s.Contains(res, commit.Hash().String())
|
||||
}
|
||||
|
||||
@@ -58,7 +42,7 @@ func (s *nomsLogTestSuite) TestNomsLog() {
|
||||
s.NoError(err)
|
||||
|
||||
ds.Database().Close()
|
||||
s.Panics(func() { s.Run(main, []string{"log", str}) })
|
||||
s.Panics(func() { s.MustRun(main, []string{"log", str}) })
|
||||
|
||||
testCommitInResults(s, str, 1)
|
||||
testCommitInResults(s, str, 2)
|
||||
@@ -102,17 +86,17 @@ func (s *nomsLogTestSuite) TestNArg() {
|
||||
db.Close()
|
||||
|
||||
dsSpec := spec.CreateValueSpecString("ldb", s.LdbDir, dsName)
|
||||
res, _ := s.Run(main, []string{"log", "-n1", dsSpec})
|
||||
res, _ := s.MustRun(main, []string{"log", "-n1", dsSpec})
|
||||
s.NotContains(res, h1.String())
|
||||
res, _ = s.Run(main, []string{"log", "-n0", dsSpec})
|
||||
res, _ = s.MustRun(main, []string{"log", "-n0", dsSpec})
|
||||
s.Contains(res, h3.String())
|
||||
s.Contains(res, h2.String())
|
||||
s.Contains(res, h1.String())
|
||||
|
||||
vSpec := spec.CreateValueSpecString("ldb", s.LdbDir, "#"+h3.String())
|
||||
res, _ = s.Run(main, []string{"log", "-n1", vSpec})
|
||||
res, _ = s.MustRun(main, []string{"log", "-n1", vSpec})
|
||||
s.NotContains(res, h1.String())
|
||||
res, _ = s.Run(main, []string{"log", "-n0", vSpec})
|
||||
res, _ = s.MustRun(main, []string{"log", "-n0", vSpec})
|
||||
s.Contains(res, h3.String())
|
||||
s.Contains(res, h2.String())
|
||||
s.Contains(res, h1.String())
|
||||
@@ -136,10 +120,10 @@ func (s *nomsLogTestSuite) TestEmptyCommit() {
|
||||
db.Close()
|
||||
|
||||
dsSpec := spec.CreateValueSpecString("ldb", s.LdbDir, "ds1")
|
||||
res, _ := s.Run(main, []string{"log", "--show-value=false", dsSpec})
|
||||
res, _ := s.MustRun(main, []string{"log", "--show-value=false", dsSpec})
|
||||
test.EqualsIgnoreHashes(s.T(), metaRes1, res)
|
||||
|
||||
res, _ = s.Run(main, []string{"log", "--show-value=false", "--oneline", dsSpec})
|
||||
res, _ = s.MustRun(main, []string{"log", "--show-value=false", "--oneline", dsSpec})
|
||||
test.EqualsIgnoreHashes(s.T(), metaRes2, res)
|
||||
}
|
||||
|
||||
@@ -190,9 +174,9 @@ func (s *nomsLogTestSuite) TestNomsGraph1() {
|
||||
s.NoError(err)
|
||||
|
||||
b1.Database().Close()
|
||||
res, _ := s.Run(main, []string{"log", "--graph", "--show-value=true", spec.CreateValueSpecString("ldb", s.LdbDir, "b1")})
|
||||
res, _ := s.MustRun(main, []string{"log", "--graph", "--show-value=true", spec.CreateValueSpecString("ldb", s.LdbDir, "b1")})
|
||||
s.Equal(graphRes1, res)
|
||||
res, _ = s.Run(main, []string{"log", "--graph", "--show-value=false", spec.CreateValueSpecString("ldb", s.LdbDir, "b1")})
|
||||
res, _ = s.MustRun(main, []string{"log", "--graph", "--show-value=false", spec.CreateValueSpecString("ldb", s.LdbDir, "b1")})
|
||||
s.Equal(diffRes1, res)
|
||||
}
|
||||
|
||||
@@ -222,9 +206,9 @@ func (s *nomsLogTestSuite) TestNomsGraph2() {
|
||||
|
||||
db.Close()
|
||||
|
||||
res, _ := s.Run(main, []string{"log", "--graph", "--show-value=true", spec.CreateValueSpecString("ldb", s.LdbDir, "ba")})
|
||||
res, _ := s.MustRun(main, []string{"log", "--graph", "--show-value=true", spec.CreateValueSpecString("ldb", s.LdbDir, "ba")})
|
||||
s.Equal(graphRes2, res)
|
||||
res, _ = s.Run(main, []string{"log", "--graph", "--show-value=false", spec.CreateValueSpecString("ldb", s.LdbDir, "ba")})
|
||||
res, _ = s.MustRun(main, []string{"log", "--graph", "--show-value=false", spec.CreateValueSpecString("ldb", s.LdbDir, "ba")})
|
||||
s.Equal(diffRes2, res)
|
||||
}
|
||||
|
||||
@@ -263,9 +247,9 @@ func (s *nomsLogTestSuite) TestNomsGraph3() {
|
||||
s.NoError(err)
|
||||
|
||||
db.Close()
|
||||
res, _ := s.Run(main, []string{"log", "--graph", "--show-value=true", spec.CreateValueSpecString("ldb", s.LdbDir, "w")})
|
||||
res, _ := s.MustRun(main, []string{"log", "--graph", "--show-value=true", spec.CreateValueSpecString("ldb", s.LdbDir, "w")})
|
||||
test.EqualsIgnoreHashes(s.T(), graphRes3, res)
|
||||
res, _ = s.Run(main, []string{"log", "--graph", "--show-value=false", spec.CreateValueSpecString("ldb", s.LdbDir, "w")})
|
||||
res, _ = s.MustRun(main, []string{"log", "--graph", "--show-value=false", spec.CreateValueSpecString("ldb", s.LdbDir, "w")})
|
||||
test.EqualsIgnoreHashes(s.T(), diffRes3, res)
|
||||
}
|
||||
|
||||
@@ -293,19 +277,19 @@ func (s *nomsLogTestSuite) TestTruncation() {
|
||||
db.Close()
|
||||
|
||||
dsSpec := spec.CreateValueSpecString("ldb", s.LdbDir, "truncate")
|
||||
res, _ := s.Run(main, []string{"log", "--graph", "--show-value=true", dsSpec})
|
||||
res, _ := s.MustRun(main, []string{"log", "--graph", "--show-value=true", dsSpec})
|
||||
test.EqualsIgnoreHashes(s.T(), truncRes1, res)
|
||||
res, _ = s.Run(main, []string{"log", "--graph", "--show-value=false", dsSpec})
|
||||
res, _ = s.MustRun(main, []string{"log", "--graph", "--show-value=false", dsSpec})
|
||||
test.EqualsIgnoreHashes(s.T(), diffTrunc1, res)
|
||||
|
||||
res, _ = s.Run(main, []string{"log", "--graph", "--show-value=true", "--max-lines=-1", dsSpec})
|
||||
res, _ = s.MustRun(main, []string{"log", "--graph", "--show-value=true", "--max-lines=-1", dsSpec})
|
||||
test.EqualsIgnoreHashes(s.T(), truncRes2, res)
|
||||
res, _ = s.Run(main, []string{"log", "--graph", "--show-value=false", "--max-lines=-1", dsSpec})
|
||||
res, _ = s.MustRun(main, []string{"log", "--graph", "--show-value=false", "--max-lines=-1", dsSpec})
|
||||
test.EqualsIgnoreHashes(s.T(), diffTrunc2, res)
|
||||
|
||||
res, _ = s.Run(main, []string{"log", "--graph", "--show-value=true", "--max-lines=0", dsSpec})
|
||||
res, _ = s.MustRun(main, []string{"log", "--graph", "--show-value=true", "--max-lines=0", dsSpec})
|
||||
test.EqualsIgnoreHashes(s.T(), truncRes3, res)
|
||||
res, _ = s.Run(main, []string{"log", "--graph", "--show-value=false", "--max-lines=0", dsSpec})
|
||||
res, _ = s.MustRun(main, []string{"log", "--graph", "--show-value=false", "--max-lines=0", dsSpec})
|
||||
test.EqualsIgnoreHashes(s.T(), diffTrunc3, res)
|
||||
}
|
||||
|
||||
|
||||
@@ -50,23 +50,23 @@ func (s *nomsShowTestSuite) TestNomsShow() {
|
||||
|
||||
s1 := types.String("test string")
|
||||
r := writeTestData(str, s1)
|
||||
res, _ := s.Run(main, []string{"show", str})
|
||||
res, _ := s.MustRun(main, []string{"show", str})
|
||||
s.Equal(res1, res)
|
||||
|
||||
str1 := spec.CreateValueSpecString("ldb", s.LdbDir, "#"+r.TargetHash().String())
|
||||
res, _ = s.Run(main, []string{"show", str1})
|
||||
res, _ = s.MustRun(main, []string{"show", str1})
|
||||
s.Equal(res2, res)
|
||||
|
||||
list := types.NewList(types.String("elem1"), types.Number(2), types.String("elem3"))
|
||||
r = writeTestData(str, list)
|
||||
res, _ = s.Run(main, []string{"show", str})
|
||||
res, _ = s.MustRun(main, []string{"show", str})
|
||||
test.EqualsIgnoreHashes(s.T(), res3, res)
|
||||
|
||||
str1 = spec.CreateValueSpecString("ldb", s.LdbDir, "#"+r.TargetHash().String())
|
||||
res, _ = s.Run(main, []string{"show", str1})
|
||||
res, _ = s.MustRun(main, []string{"show", str1})
|
||||
s.Equal(res4, res)
|
||||
|
||||
_ = writeTestData(str, s1)
|
||||
res, _ = s.Run(main, []string{"show", str})
|
||||
res, _ = s.MustRun(main, []string{"show", str})
|
||||
test.EqualsIgnoreHashes(s.T(), res5, res)
|
||||
}
|
||||
|
||||
@@ -9,7 +9,6 @@ import (
|
||||
"testing"
|
||||
|
||||
"github.com/attic-labs/noms/go/chunks"
|
||||
"github.com/attic-labs/noms/go/d"
|
||||
"github.com/attic-labs/noms/go/datas"
|
||||
"github.com/attic-labs/noms/go/dataset"
|
||||
"github.com/attic-labs/noms/go/spec"
|
||||
@@ -19,7 +18,6 @@ import (
|
||||
)
|
||||
|
||||
func TestSync(t *testing.T) {
|
||||
d.UtilExiter = testExiter{}
|
||||
suite.Run(t, &nomsSyncTestSuite{})
|
||||
}
|
||||
|
||||
@@ -40,10 +38,10 @@ func (s *nomsSyncTestSuite) TestSyncValidation() {
|
||||
|
||||
defer func() {
|
||||
err := recover()
|
||||
s.Equal(exitError{-1}, err)
|
||||
s.Equal(clienttest.ExitError{-1}, err)
|
||||
}()
|
||||
|
||||
s.Run(main, []string{"sync", sourceSpecMissingHashSymbol, sinkDatasetSpec})
|
||||
s.MustRun(main, []string{"sync", sourceSpecMissingHashSymbol, sinkDatasetSpec})
|
||||
}
|
||||
|
||||
func (s *nomsSyncTestSuite) TestSync() {
|
||||
@@ -58,7 +56,7 @@ func (s *nomsSyncTestSuite) TestSync() {
|
||||
sourceSpec := spec.CreateValueSpecString("ldb", s.LdbDir, "#"+source1HeadRef.String())
|
||||
ldb2dir := path.Join(s.TempDir, "ldb2")
|
||||
sinkDatasetSpec := spec.CreateValueSpecString("ldb", ldb2dir, "dest")
|
||||
sout, _ := s.Run(main, []string{"sync", sourceSpec, sinkDatasetSpec})
|
||||
sout, _ := s.MustRun(main, []string{"sync", sourceSpec, sinkDatasetSpec})
|
||||
|
||||
s.Regexp("Created", sout)
|
||||
dest := dataset.NewDataset(datas.NewDatabase(chunks.NewLevelDBStore(ldb2dir, "", 1, false)), "dest")
|
||||
@@ -66,14 +64,14 @@ func (s *nomsSyncTestSuite) TestSync() {
|
||||
dest.Database().Close()
|
||||
|
||||
sourceDataset := spec.CreateValueSpecString("ldb", s.LdbDir, "src")
|
||||
sout, _ = s.Run(main, []string{"sync", sourceDataset, sinkDatasetSpec})
|
||||
sout, _ = s.MustRun(main, []string{"sync", sourceDataset, sinkDatasetSpec})
|
||||
s.Regexp("Synced", sout)
|
||||
|
||||
dest = dataset.NewDataset(datas.NewDatabase(chunks.NewLevelDBStore(ldb2dir, "", 1, false)), "dest")
|
||||
s.True(types.Number(43).Equals(dest.HeadValue()))
|
||||
dest.Database().Close()
|
||||
|
||||
sout, _ = s.Run(main, []string{"sync", sourceDataset, sinkDatasetSpec})
|
||||
sout, _ = s.MustRun(main, []string{"sync", sourceDataset, sinkDatasetSpec})
|
||||
s.Regexp("up to date", sout)
|
||||
}
|
||||
|
||||
@@ -89,7 +87,7 @@ func (s *nomsSyncTestSuite) TestRewind() {
|
||||
|
||||
sourceSpec := spec.CreateValueSpecString("ldb", s.LdbDir, "#"+rewindRef.String())
|
||||
sinkDatasetSpec := spec.CreateValueSpecString("ldb", s.LdbDir, "foo")
|
||||
s.Run(main, []string{"sync", sourceSpec, sinkDatasetSpec})
|
||||
s.MustRun(main, []string{"sync", sourceSpec, sinkDatasetSpec})
|
||||
|
||||
dest := dataset.NewDataset(datas.NewDatabase(chunks.NewLevelDBStore(s.LdbDir, "", 1, false)), "foo")
|
||||
s.True(types.Number(42).Equals(dest.HeadValue()))
|
||||
|
||||
@@ -22,7 +22,7 @@ type nomsVersionTestSuite struct {
|
||||
}
|
||||
|
||||
func (s *nomsVersionTestSuite) TestVersion() {
|
||||
val, _ := s.Run(main, []string{"version"})
|
||||
val, _ := s.MustRun(main, []string{"version"})
|
||||
expectedVal := fmt.Sprintf("format version: %v\nbuilt from %v\n", constants.NomsVersion, constants.NomsGitSHA)
|
||||
s.Equal(val, expectedVal)
|
||||
}
|
||||
|
||||
@@ -23,6 +23,10 @@ type ClientTestSuite struct {
|
||||
err *os.File
|
||||
}
|
||||
|
||||
type ExitError struct {
|
||||
Code int
|
||||
}
|
||||
|
||||
func (suite *ClientTestSuite) SetupSuite() {
|
||||
dir, err := ioutil.TempDir(os.TempDir(), "nomstest")
|
||||
d.Chk.NoError(err)
|
||||
@@ -35,6 +39,7 @@ func (suite *ClientTestSuite) SetupSuite() {
|
||||
suite.LdbDir = path.Join(dir, "ldb")
|
||||
suite.out = stdOutput
|
||||
suite.err = errOutput
|
||||
d.UtilExiter = suite
|
||||
}
|
||||
|
||||
func (suite *ClientTestSuite) TearDownSuite() {
|
||||
@@ -43,7 +48,19 @@ func (suite *ClientTestSuite) TearDownSuite() {
|
||||
defer d.Chk.NoError(os.RemoveAll(suite.TempDir))
|
||||
}
|
||||
|
||||
func (suite *ClientTestSuite) Run(m func(), args []string) (stdout string, stderr string) {
|
||||
// MustRun is a wrapper around Run that will panic on Exit or Panic
|
||||
func (suite *ClientTestSuite) MustRun(m func(), args []string) (stdout string, stderr string) {
|
||||
var err interface{}
|
||||
if stdout, stderr, err = suite.Run(m, args); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
// Run will execute a function passing to it commandline args, and captures stdout,stderr.
|
||||
// If m() panics the panic is caught, and returned with recoveredError
|
||||
// If m() calls os.Exit() m() will panic and return ExitError with recoveredError
|
||||
func (suite *ClientTestSuite) Run(m func(), args []string) (stdout string, stderr string, recoveredErr interface{}) {
|
||||
origArgs := os.Args
|
||||
origOut := os.Stdout
|
||||
origErr := os.Stderr
|
||||
@@ -53,39 +70,39 @@ func (suite *ClientTestSuite) Run(m func(), args []string) (stdout string, stder
|
||||
os.Stderr = suite.err
|
||||
|
||||
defer func() {
|
||||
recoveredErr = recover()
|
||||
_, err := suite.out.Seek(0, 0)
|
||||
d.Chk.NoError(err)
|
||||
capturedOut, err := ioutil.ReadAll(os.Stdout)
|
||||
d.Chk.NoError(err)
|
||||
|
||||
_, err = suite.out.Seek(0, 0)
|
||||
d.Chk.NoError(err)
|
||||
err = suite.out.Truncate(0)
|
||||
d.Chk.NoError(err)
|
||||
|
||||
_, err = suite.err.Seek(0, 0)
|
||||
d.Chk.NoError(err)
|
||||
capturedErr, err := ioutil.ReadAll(os.Stderr)
|
||||
d.Chk.NoError(err)
|
||||
|
||||
_, err = suite.err.Seek(0, 0)
|
||||
d.Chk.NoError(err)
|
||||
err = suite.err.Truncate(0)
|
||||
d.Chk.NoError(err)
|
||||
os.Args = origArgs
|
||||
os.Stdout = origOut
|
||||
os.Stderr = origErr
|
||||
stdout, stderr = string(capturedOut), string(capturedErr)
|
||||
}()
|
||||
|
||||
suite.ExitStatus = 0
|
||||
flag.CommandLine = flag.NewFlagSet(os.Args[0], flag.ExitOnError)
|
||||
m()
|
||||
|
||||
_, err := suite.out.Seek(0, 0)
|
||||
d.Chk.NoError(err)
|
||||
capturedOut, err := ioutil.ReadAll(os.Stdout)
|
||||
d.Chk.NoError(err)
|
||||
|
||||
_, err = suite.out.Seek(0, 0)
|
||||
d.Chk.NoError(err)
|
||||
err = suite.out.Truncate(0)
|
||||
d.Chk.NoError(err)
|
||||
|
||||
_, err = suite.err.Seek(0, 0)
|
||||
d.Chk.NoError(err)
|
||||
capturedErr, err := ioutil.ReadAll(os.Stderr)
|
||||
d.Chk.NoError(err)
|
||||
|
||||
_, err = suite.err.Seek(0, 0)
|
||||
d.Chk.NoError(err)
|
||||
err = suite.err.Truncate(0)
|
||||
d.Chk.NoError(err)
|
||||
|
||||
return string(capturedOut), string(capturedErr)
|
||||
return
|
||||
}
|
||||
|
||||
// Mock os.Exit() implementation for use during testing.
|
||||
func (suite *ClientTestSuite) Exit(status int) {
|
||||
suite.ExitStatus = status
|
||||
panic(ExitError{status})
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ func (s *bgSuite) TestBlobGet() {
|
||||
|
||||
hash_spec := fmt.Sprintf("%s::#%s", s.TempDir, hash.TargetHash().String())
|
||||
file_path := filepath.Join(s.TempDir, "out")
|
||||
s.Run(main, []string{hash_spec, file_path})
|
||||
s.MustRun(main, []string{hash_spec, file_path})
|
||||
|
||||
file_bytes, err := ioutil.ReadFile(file_path)
|
||||
s.NoError(err)
|
||||
|
||||
@@ -23,13 +23,13 @@ type counterTestSuite struct {
|
||||
func (s *counterTestSuite) TestCounter() {
|
||||
spec := spec.CreateValueSpecString("ldb", s.LdbDir, "counter")
|
||||
args := []string{spec}
|
||||
stdout, stderr := s.Run(main, args)
|
||||
stdout, stderr := s.MustRun(main, args)
|
||||
s.Equal("1\n", stdout)
|
||||
s.Equal("", stderr)
|
||||
stdout, stderr = s.Run(main, args)
|
||||
stdout, stderr = s.MustRun(main, args)
|
||||
s.Equal("2\n", stdout)
|
||||
s.Equal("", stderr)
|
||||
stdout, stderr = s.Run(main, args)
|
||||
stdout, stderr = s.MustRun(main, args)
|
||||
s.Equal("3\n", stdout)
|
||||
s.Equal("", stderr)
|
||||
}
|
||||
|
||||
@@ -57,37 +57,37 @@ func (s *csvAnalyzeTestSuite) TearDownTest() {
|
||||
}
|
||||
|
||||
func (s *csvAnalyzeTestSuite) TestCSVAnalyzeDetectColumnTypes() {
|
||||
stdout, stderr := s.Run(main, []string{"--detect-column-types=1", s.tmpFileName})
|
||||
stdout, stderr := s.MustRun(main, []string{"--detect-column-types=1", s.tmpFileName})
|
||||
s.Equal("String,String,String\n", stdout)
|
||||
s.Equal("", stderr)
|
||||
}
|
||||
|
||||
func (s *csvAnalyzeTestSuite) TestCSVAnalyzeDetectColumnTypesSamples20() {
|
||||
stdout, stderr := s.Run(main, []string{"--detect-column-types=1", "--num-samples=20", s.tmpFileName})
|
||||
stdout, stderr := s.MustRun(main, []string{"--detect-column-types=1", "--num-samples=20", s.tmpFileName})
|
||||
s.Equal("String,String,Number\n", stdout)
|
||||
s.Equal("", stderr)
|
||||
}
|
||||
|
||||
func (s *csvAnalyzeTestSuite) TestCSVAnalyzeDetectPrimaryKeys() {
|
||||
stdout, stderr := s.Run(main, []string{"--detect-pk=1", s.tmpFileName})
|
||||
stdout, stderr := s.MustRun(main, []string{"--detect-pk=1", s.tmpFileName})
|
||||
s.Equal("Time\nDate,Time\nTime,Temperature\nDate,Time,Temperature\n", stdout)
|
||||
s.Equal("", stderr)
|
||||
}
|
||||
|
||||
func (s *csvAnalyzeTestSuite) TestCSVAnalyzeDetectPrimaryKeysSamples20() {
|
||||
stdout, stderr := s.Run(main, []string{"--detect-pk=1", "--num-samples=20", s.tmpFileName})
|
||||
stdout, stderr := s.MustRun(main, []string{"--detect-pk=1", "--num-samples=20", s.tmpFileName})
|
||||
s.Equal("Time\nTemperature\nDate,Time\nDate,Temperature\nTime,Temperature\nDate,Time,Temperature\n", stdout)
|
||||
s.Equal("", stderr)
|
||||
}
|
||||
|
||||
func (s *csvAnalyzeTestSuite) TestCSVAnalyzeDetectPrimaryKeysSingleField() {
|
||||
stdout, stderr := s.Run(main, []string{"--detect-pk=1", "--num-fields-pk=1", s.tmpFileName})
|
||||
stdout, stderr := s.MustRun(main, []string{"--detect-pk=1", "--num-fields-pk=1", s.tmpFileName})
|
||||
s.Equal("Time\n", stdout)
|
||||
s.Equal("", stderr)
|
||||
}
|
||||
|
||||
func (s *csvAnalyzeTestSuite) TestCSVAnalyzeDetectPrimaryKeysTwoFields() {
|
||||
stdout, stderr := s.Run(main, []string{"--detect-pk=1", "--num-fields-pk=2", s.tmpFileName})
|
||||
stdout, stderr := s.MustRun(main, []string{"--detect-pk=1", "--num-fields-pk=2", s.tmpFileName})
|
||||
s.Equal("Time\nDate,Time\nTime,Temperature\n", stdout)
|
||||
s.Equal("", stderr)
|
||||
}
|
||||
|
||||
@@ -96,7 +96,7 @@ func (s *testSuite) TestCSVExportFromList() {
|
||||
|
||||
// Run exporter
|
||||
dataspec := spec.CreateValueSpecString("ldb", s.LdbDir, setName)
|
||||
stdout, stderr := s.Run(main, []string{dataspec})
|
||||
stdout, stderr := s.MustRun(main, []string{dataspec})
|
||||
s.Equal("", stderr)
|
||||
|
||||
verifyOutput(s, stdout)
|
||||
@@ -116,7 +116,7 @@ func (s *testSuite) TestCSVExportFromMap() {
|
||||
|
||||
// Run exporter
|
||||
dataspec := spec.CreateValueSpecString("ldb", s.LdbDir, setName)
|
||||
stdout, stderr := s.Run(main, []string{dataspec})
|
||||
stdout, stderr := s.MustRun(main, []string{dataspec})
|
||||
s.Equal("", stderr)
|
||||
|
||||
verifyOutput(s, stdout)
|
||||
|
||||
@@ -108,7 +108,7 @@ func validateNestedMap(s *testSuite, m types.Map) {
|
||||
func (s *testSuite) TestCSVImporter() {
|
||||
setName := "csv"
|
||||
dataspec := spec.CreateValueSpecString("ldb", s.LdbDir, setName)
|
||||
stdout, stderr := s.Run(main, []string{"--no-progress", "--column-types", TEST_FIELDS, s.tmpFileName, dataspec})
|
||||
stdout, stderr := s.MustRun(main, []string{"--no-progress", "--column-types", TEST_FIELDS, s.tmpFileName, dataspec})
|
||||
s.Equal("", stdout)
|
||||
s.Equal("", stderr)
|
||||
|
||||
@@ -136,7 +136,7 @@ func (s *testSuite) TestCSVImporterFromBlob() {
|
||||
rawDS.CommitValue(types.NewBlob(csv))
|
||||
db.Close()
|
||||
|
||||
stdout, stderr := s.Run(main, []string{
|
||||
stdout, stderr := s.MustRun(main, []string{
|
||||
"--no-progress", "--column-types", TEST_FIELDS,
|
||||
pathFlag, spec.CreateValueSpecString("ldb", s.LdbDir, "raw.value"),
|
||||
spec.CreateValueSpecString("ldb", s.LdbDir, "csv"),
|
||||
@@ -156,7 +156,7 @@ func (s *testSuite) TestCSVImporterFromBlob() {
|
||||
func (s *testSuite) TestCSVImporterToMap() {
|
||||
setName := "csv"
|
||||
dataspec := spec.CreateValueSpecString("ldb", s.LdbDir, setName)
|
||||
stdout, stderr := s.Run(main, []string{"--no-progress", "--column-types", TEST_FIELDS, "--dest-type", "map:1", s.tmpFileName, dataspec})
|
||||
stdout, stderr := s.MustRun(main, []string{"--no-progress", "--column-types", TEST_FIELDS, "--dest-type", "map:1", s.tmpFileName, dataspec})
|
||||
s.Equal("", stdout)
|
||||
s.Equal("", stderr)
|
||||
|
||||
@@ -172,7 +172,7 @@ func (s *testSuite) TestCSVImporterToMap() {
|
||||
func (s *testSuite) TestCSVImporterToNestedMap() {
|
||||
setName := "csv"
|
||||
dataspec := spec.CreateValueSpecString("ldb", s.LdbDir, setName)
|
||||
stdout, stderr := s.Run(main, []string{"--no-progress", "--column-types", TEST_FIELDS, "--dest-type", "map:0,1", s.tmpFileName, dataspec})
|
||||
stdout, stderr := s.MustRun(main, []string{"--no-progress", "--column-types", TEST_FIELDS, "--dest-type", "map:0,1", s.tmpFileName, dataspec})
|
||||
s.Equal("", stdout)
|
||||
s.Equal("", stderr)
|
||||
|
||||
@@ -188,7 +188,7 @@ func (s *testSuite) TestCSVImporterToNestedMap() {
|
||||
func (s *testSuite) TestCSVImporterToNestedMapByName() {
|
||||
setName := "csv"
|
||||
dataspec := spec.CreateValueSpecString("ldb", s.LdbDir, setName)
|
||||
stdout, stderr := s.Run(main, []string{"--no-progress", "--column-types", TEST_FIELDS, "--dest-type", "map:year,a", s.tmpFileName, dataspec})
|
||||
stdout, stderr := s.MustRun(main, []string{"--no-progress", "--column-types", TEST_FIELDS, "--dest-type", "map:year,a", s.tmpFileName, dataspec})
|
||||
s.Equal("", stdout)
|
||||
s.Equal("", stderr)
|
||||
|
||||
@@ -212,7 +212,7 @@ func (s *testSuite) TestCSVImporterWithPipe() {
|
||||
|
||||
setName := "csv"
|
||||
dataspec := spec.CreateValueSpecString("ldb", s.LdbDir, setName)
|
||||
stdout, stderr := s.Run(main, []string{"--no-progress", "--column-types", "String,Number", "--delimiter", "|", input.Name(), dataspec})
|
||||
stdout, stderr := s.MustRun(main, []string{"--no-progress", "--column-types", "String,Number", "--delimiter", "|", input.Name(), dataspec})
|
||||
s.Equal("", stdout)
|
||||
s.Equal("", stderr)
|
||||
|
||||
@@ -240,7 +240,7 @@ func (s *testSuite) TestCSVImporterWithExternalHeader() {
|
||||
|
||||
setName := "csv"
|
||||
dataspec := spec.CreateValueSpecString("ldb", s.LdbDir, setName)
|
||||
stdout, stderr := s.Run(main, []string{"--no-progress", "--column-types", "String,Number", "--header", "x,y", input.Name(), dataspec})
|
||||
stdout, stderr := s.MustRun(main, []string{"--no-progress", "--column-types", "String,Number", "--header", "x,y", input.Name(), dataspec})
|
||||
s.Equal("", stdout)
|
||||
s.Equal("", stderr)
|
||||
|
||||
@@ -277,7 +277,7 @@ func (s *testSuite) TestCSVImportSkipRecords() {
|
||||
|
||||
setName := "csv"
|
||||
dataspec := spec.CreateValueSpecString("ldb", s.LdbDir, setName)
|
||||
stdout, stderr := s.Run(main, []string{"--no-progress", "--skip-records", "2", input.Name(), dataspec})
|
||||
stdout, stderr := s.MustRun(main, []string{"--no-progress", "--skip-records", "2", input.Name(), dataspec})
|
||||
s.Equal("", stdout)
|
||||
s.Equal("", stderr)
|
||||
|
||||
@@ -308,7 +308,7 @@ func (s *testSuite) TestCSVImportSkipRecordsCustomHeader() {
|
||||
|
||||
setName := "csv"
|
||||
dataspec := spec.CreateValueSpecString("ldb", s.LdbDir, setName)
|
||||
stdout, stderr := s.Run(main, []string{"--no-progress", "--skip-records", "1", "--header", "x,y", input.Name(), dataspec})
|
||||
stdout, stderr := s.MustRun(main, []string{"--no-progress", "--skip-records", "1", "--header", "x,y", input.Name(), dataspec})
|
||||
s.Equal("", stdout)
|
||||
s.Equal("", stderr)
|
||||
|
||||
|
||||
@@ -26,19 +26,19 @@ type testSuite struct {
|
||||
|
||||
func (s *testSuite) TestRoundTrip() {
|
||||
spec := fmt.Sprintf("ldb:%s::hr", s.LdbDir)
|
||||
stdout, stderr := s.Run(main, []string{"--ds", spec, "list-persons"})
|
||||
stdout, stderr := s.MustRun(main, []string{"--ds", spec, "list-persons"})
|
||||
s.Equal("No people found\n", stdout)
|
||||
s.Equal("", stderr)
|
||||
|
||||
stdout, stderr = s.Run(main, []string{"--ds", spec, "add-person", "42", "Benjamin Kalman", "Programmer, Barista"})
|
||||
stdout, stderr = s.MustRun(main, []string{"--ds", spec, "add-person", "42", "Benjamin Kalman", "Programmer, Barista"})
|
||||
s.Equal("", stdout)
|
||||
s.Equal("", stderr)
|
||||
|
||||
stdout, stderr = s.Run(main, []string{"--ds", spec, "add-person", "43", "Abigail Boodman", "Chief Architect"})
|
||||
stdout, stderr = s.MustRun(main, []string{"--ds", spec, "add-person", "43", "Abigail Boodman", "Chief Architect"})
|
||||
s.Equal("", stdout)
|
||||
s.Equal("", stderr)
|
||||
|
||||
stdout, stderr = s.Run(main, []string{"--ds", spec, "list-persons"})
|
||||
stdout, stderr = s.MustRun(main, []string{"--ds", spec, "list-persons"})
|
||||
s.Equal(`Benjamin Kalman (id: 42, title: Programmer, Barista)
|
||||
Abigail Boodman (id: 43, title: Chief Architect)
|
||||
`, stdout)
|
||||
@@ -54,7 +54,7 @@ func (s *testSuite) TestReadCanned() {
|
||||
// Have to copy the canned data elsewhere because just reading the database modifies it.
|
||||
_, err = exec.Command("cp", "-r", p, dst).Output()
|
||||
s.NoError(err)
|
||||
stdout, stderr := s.Run(main, []string{"--ds", fmt.Sprintf("ldb:%s/test-data::hr", dst), "list-persons"})
|
||||
stdout, stderr := s.MustRun(main, []string{"--ds", fmt.Sprintf("ldb:%s/test-data::hr", dst), "list-persons"})
|
||||
s.Equal(`Aaron Boodman (id: 7, title: Chief Evangelism Officer)
|
||||
Samuel Boodman (id: 13, title: VP, Culture)
|
||||
`, stdout)
|
||||
@@ -63,5 +63,5 @@ Samuel Boodman (id: 13, title: VP, Culture)
|
||||
|
||||
func (s *testSuite) TestInvalidDatasetSpec() {
|
||||
// Should not crash
|
||||
_, _ = s.Run(main, []string{"--ds", "invalid-dataset", "list-persons"})
|
||||
_, _ = s.MustRun(main, []string{"--ds", "invalid-dataset", "list-persons"})
|
||||
}
|
||||
|
||||
@@ -85,32 +85,32 @@ func (s *testSuite) TestNomdex() {
|
||||
fnameIdx := "fname-idx"
|
||||
dataSpec := spec.CreateValueSpecString("ldb", s.LdbDir, dsId)
|
||||
dbSpec := spec.CreateDatabaseSpecString("ldb", s.LdbDir)
|
||||
stdout, stderr := s.Run(main, []string{"up", "--out-ds", fnameIdx, "--in-path", dataSpec, "--by", ".fname"})
|
||||
stdout, stderr := s.MustRun(main, []string{"up", "--out-ds", fnameIdx, "--in-path", dataSpec, "--by", ".fname"})
|
||||
s.Contains(stdout, "Indexed 24 objects")
|
||||
s.Equal("", stderr)
|
||||
|
||||
genderIdx := "gender-idx"
|
||||
stdout, stderr = s.Run(main, []string{"up", "--out-ds", genderIdx, "--in-path", dataSpec, "--by", ".gender"})
|
||||
stdout, stderr = s.MustRun(main, []string{"up", "--out-ds", genderIdx, "--in-path", dataSpec, "--by", ".gender"})
|
||||
s.Contains(stdout, "Indexed 24 objects")
|
||||
s.Equal("", stderr)
|
||||
|
||||
stdout, stderr = s.Run(main, []string{"find", "--db", dbSpec, `fname-idx = "lady"`})
|
||||
stdout, stderr = s.MustRun(main, []string{"find", "--db", dbSpec, `fname-idx = "lady"`})
|
||||
s.Contains(stdout, "Found 1 objects")
|
||||
s.Equal("", stderr)
|
||||
|
||||
stdout, stderr = s.Run(main, []string{"find", "--db", dbSpec, `fname-idx = "lady" and gender-idx = "f"`})
|
||||
stdout, stderr = s.MustRun(main, []string{"find", "--db", dbSpec, `fname-idx = "lady" and gender-idx = "f"`})
|
||||
s.Contains(stdout, "Found 1 objects")
|
||||
s.Equal("", stderr)
|
||||
|
||||
stdout, stderr = s.Run(main, []string{"find", "--db", dbSpec, `fname-idx != "lady" and gender-idx != "m"`})
|
||||
stdout, stderr = s.MustRun(main, []string{"find", "--db", dbSpec, `fname-idx != "lady" and gender-idx != "m"`})
|
||||
s.Contains(stdout, "Found 2 objects")
|
||||
s.Equal("", stderr)
|
||||
|
||||
stdout, stderr = s.Run(main, []string{"find", "--db", dbSpec, `fname-idx != "lady" and fname-idx != "john"`})
|
||||
stdout, stderr = s.MustRun(main, []string{"find", "--db", dbSpec, `fname-idx != "lady" and fname-idx != "john"`})
|
||||
s.Contains(stdout, "Found 21 objects")
|
||||
s.Equal("", stderr)
|
||||
|
||||
stdout, stderr = s.Run(main, []string{"find", "--db", dbSpec, `fname-idx != "lady" or gender-idx != "f"`})
|
||||
stdout, stderr = s.MustRun(main, []string{"find", "--db", dbSpec, `fname-idx != "lady" or gender-idx != "f"`})
|
||||
s.Contains(stdout, "Found 23 objects")
|
||||
s.Equal("", stderr)
|
||||
}
|
||||
|
||||
@@ -65,7 +65,7 @@ func (s *testSuite) TestWin() {
|
||||
})
|
||||
|
||||
var mainErr error
|
||||
stdout, stderr := s.Run(func() { mainErr = nomsMerge() }, []string{"--quiet=true", "--parent=" + p, s.LdbDir, l, r})
|
||||
stdout, stderr, _ := s.Run(func() { mainErr = nomsMerge() }, []string{"--quiet=true", "--parent=" + p, s.LdbDir, l, r})
|
||||
if s.NoError(mainErr, "%s", mainErr) {
|
||||
s.Equal("", stdout)
|
||||
s.Equal("", stderr)
|
||||
@@ -110,7 +110,7 @@ func (s *testSuite) TestLose() {
|
||||
|
||||
for _, c := range cases {
|
||||
var mainErr error
|
||||
stdout, _ := s.Run(func() { mainErr = nomsMerge() }, c.args)
|
||||
stdout, _, _ := s.Run(func() { mainErr = nomsMerge() }, c.args)
|
||||
s.Empty(stdout, "Expected empty stdout for case: %#v", c.args)
|
||||
if s.Error(mainErr) {
|
||||
s.Equal(c.err, mainErr.Error(), "Unexpected output for case: %#v\n", c.args)
|
||||
|
||||
@@ -47,10 +47,10 @@ func (s *testSuite) TestWin() {
|
||||
}
|
||||
|
||||
for k, v := range changes {
|
||||
stdout, stderr := s.Run(main, []string{sp, k, v})
|
||||
stdout, stderr, err := s.Run(main, []string{sp, k, v})
|
||||
s.Equal("", stdout)
|
||||
s.Equal("", stderr)
|
||||
s.Equal(0, s.ExitStatus)
|
||||
s.Equal(nil, err)
|
||||
}
|
||||
|
||||
ds, _ = spec.GetDataset(sp)
|
||||
@@ -92,9 +92,9 @@ func (s *testSuite) TestLose() {
|
||||
ds.Database().Close()
|
||||
|
||||
for _, c := range cases {
|
||||
stdout, stderr := s.Run(main, c.args)
|
||||
stdout, stderr, err := s.Run(main, c.args)
|
||||
s.Empty(stdout, "Expected empty stdout for case: %#v", c.args)
|
||||
s.Equal(c.err, stderr, "Unexpected output for case: %#v\n", c.args)
|
||||
s.Equal(1, s.ExitStatus)
|
||||
s.Equal(clienttest.ExitError{1}, err)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ func (s *testSuite) TestImportFromStdin() {
|
||||
|
||||
dsName := spec.CreateValueSpecString("ldb", s.LdbDir, "ds")
|
||||
// Run() will return when blobOut is closed.
|
||||
s.Run(main, []string{"--stdin", dsName})
|
||||
s.MustRun(main, []string{"--stdin", dsName})
|
||||
|
||||
db, blob, err := spec.GetPath(dsName + ".value")
|
||||
assert.NoError(err)
|
||||
@@ -71,7 +71,7 @@ func (s *testSuite) TestImportFromFile() {
|
||||
f.Close()
|
||||
|
||||
dsName := spec.CreateValueSpecString("ldb", s.LdbDir, "ds")
|
||||
s.Run(main, []string{f.Name(), dsName})
|
||||
s.MustRun(main, []string{f.Name(), dsName})
|
||||
|
||||
db, blob, err := spec.GetPath(dsName + ".value")
|
||||
assert.NoError(err)
|
||||
|
||||
Reference in New Issue
Block a user