From 18d2c350de7450ae7798125ec6abb11d7d145b26 Mon Sep 17 00:00:00 2001 From: Christian Schwarz Date: Mon, 14 Oct 2019 17:45:44 +0200 Subject: [PATCH] platformtest: harness: -failure.stop-and-keep-pool mode, prettier logging --- platformtest/harness/harness.go | 19 +++++++++++++++++-- platformtest/platformtest_zpool.go | 2 +- platformtest/tests/getNonexistent.go | 3 --- .../tests/undestroyableSnapshotParsing.go | 4 ---- 4 files changed, 18 insertions(+), 10 deletions(-) diff --git a/platformtest/harness/harness.go b/platformtest/harness/harness.go index 505476d..6e47816 100644 --- a/platformtest/harness/harness.go +++ b/platformtest/harness/harness.go @@ -19,12 +19,14 @@ import ( func main() { var args struct { - createArgs platformtest.ZpoolCreateArgs + createArgs platformtest.ZpoolCreateArgs + stopAndKeepPoolOnFail bool } flag.StringVar(&args.createArgs.PoolName, "poolname", "", "") flag.StringVar(&args.createArgs.ImagePath, "imagepath", "", "") flag.Int64Var(&args.createArgs.ImageSize, "imagesize", 100*(1<<20), "") flag.StringVar(&args.createArgs.Mountpoint, "mountpoint", "none", "") + flag.BoolVar(&args.stopAndKeepPoolOnFail, "failure.stop-and-keep-pool", false, "if a test case fails, stop test execution and keep pool as it was when the test failed") flag.Parse() outlets := logger.NewOutlets() @@ -52,13 +54,21 @@ func main() { boldGreen := color.New(color.Bold, color.FgHiGreen) for _, c := range tests.Cases { // ATTENTION future parallelism must pass c by value into closure! - err := func() error { + err := func() (err error) { + var oErr = &err bold.Printf("BEGIN TEST CASE %s\n", c) pool, err := platformtest.CreateOrReplaceZpool(ctx, ex, args.createArgs) if err != nil { return errors.Wrap(err, "create test pool") } defer func() { + if err := recover(); err != nil { + *oErr = errors.Errorf("panic while running test: %v", err) // shadow + if args.stopAndKeepPoolOnFail { + return + } + // fallthrough + } if err := pool.Destroy(ctx, ex); err != nil { fmt.Printf("error destroying test pool: %s", err) } @@ -72,6 +82,11 @@ func main() { }() if err != nil { boldRed.Printf("TEST CASE FAILED WITH ERROR:\n") + fmt.Printf("%+v\n", err) // print with stack trace + if args.stopAndKeepPoolOnFail { + bold.Printf("STOPPING TEST RUN AT FAILING TEST PER USER REQUEST\n") + return + } } else { boldGreen.Printf("DONE TEST CASE %s\n", c) } diff --git a/platformtest/platformtest_zpool.go b/platformtest/platformtest_zpool.go index 5801226..f86f50c 100644 --- a/platformtest/platformtest_zpool.go +++ b/platformtest/platformtest_zpool.go @@ -68,7 +68,7 @@ func CreateOrReplaceZpool(ctx context.Context, e Execer, args ZpoolCreateArgs) ( image.Close() // create the pool - err = e.RunExpectSuccessNoOutput(ctx, "zpool", "create", "-O", "mountpoint=none", args.PoolName, args.ImagePath) + err = e.RunExpectSuccessNoOutput(ctx, "zpool", "create", "-f", "-O", "mountpoint=none", args.PoolName, args.ImagePath) if err != nil { return nil, errors.Wrap(err, "zpool create") } diff --git a/platformtest/tests/getNonexistent.go b/platformtest/tests/getNonexistent.go index ab36b0d..496ec0b 100644 --- a/platformtest/tests/getNonexistent.go +++ b/platformtest/tests/getNonexistent.go @@ -15,9 +15,6 @@ func GetNonexistent(ctx *platformtest.Context) { + "foo bar" + "foo bar@1" `) - defer platformtest.Run(ctx, platformtest.PanicErr, ctx.RootDataset, ` - DESTROYROOT - `) // test raw _, err := zfs.ZFSGetRawAnySource(fmt.Sprintf("%s/foo bar", ctx.RootDataset), []string{"name"}) diff --git a/platformtest/tests/undestroyableSnapshotParsing.go b/platformtest/tests/undestroyableSnapshotParsing.go index 6a0da3c..cbb2d02 100644 --- a/platformtest/tests/undestroyableSnapshotParsing.go +++ b/platformtest/tests/undestroyableSnapshotParsing.go @@ -18,10 +18,6 @@ func UndestroyableSnapshotParsing(t *platformtest.Context) { + "foo bar@7 8 9" R zfs hold zrepl_platformtest "${ROOTDS}/foo bar@4 5 6" `) - defer platformtest.Run(t, platformtest.PanicErr, t.RootDataset, ` - R zfs release zrepl_platformtest "${ROOTDS}/foo bar@4 5 6" - DESTROYROOT - `) err := zfs.ZFSDestroy(fmt.Sprintf("%s/foo bar@1 2 3,4 5 6,7 8 9", t.RootDataset)) if err == nil {