diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index dd9bb7fd..dd05b9a2 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -37,11 +37,11 @@ jobs: -ldflags "-X github.com/metrumresearchgroup/bbi/cmd.VERSION=$version" \ cmd/bbi/main.go echo "$bin" >>$GITHUB_PATH - - name: Integration tests (postrun) + - name: Integration tests (without NONMEM) shell: bash run: | bbi version - go test ./integration/postrun + go test ./integration/nmless release: if: github.ref_type == 'tag' name: Make release diff --git a/cmd/project.go b/cmd/project.go index 0fd7eb87..30740817 100644 --- a/cmd/project.go +++ b/cmd/project.go @@ -16,7 +16,6 @@ package cmd import ( "errors" - "fmt" "os" "path/filepath" @@ -47,8 +46,6 @@ func probs(_ *cobra.Command, args []string) error { case 1: dirPath = args[0] default: - fmt.Println("currently only supports scanning one directory") - return errors.New("project only supports specifying one directory") } @@ -58,7 +55,14 @@ func probs(_ *cobra.Command, args []string) error { if err != nil { return err } - modelSummaries := modSummaries(AppFs, modelFiles) + + filesAbs := make([]string, len(modelFiles)) + for i := range modelFiles { + filesAbs[i] = filepath.Join(dirPath, modelFiles[i]) + } + + modelSummaries := modSummaries(AppFs, filesAbs) + if Json { err = utils.PrintJSON(modelSummaries) if err != nil { diff --git a/docs/validation/matrix.yaml b/docs/validation/matrix.yaml index 091d1e7e..2a36f78b 100644 --- a/docs/validation/matrix.yaml +++ b/docs/validation/matrix.yaml @@ -14,13 +14,14 @@ - entrypoint: bbi nonmem clean code: cmd/clean.go doc: docs/commands/bbi_nonmem_clean.md - tests: [] + tests: + - integration/nmless/bbi_clean_test.go - entrypoint: bbi nonmem covcor code: cmd/covcor.go doc: docs/commands/bbi_nonmem_covcor.md tests: - - integration/postrun/bbi_covcor_test.go + - integration/nmless/bbi_covcor_test.go - parsers/nmparser/read_cov_test.go - entrypoint: bbi nonmem params @@ -28,19 +29,20 @@ doc: docs/commands/bbi_nonmem_params.md tests: - cmd/params_test.go - - integration/postrun/bbi_params_test.go + - integration/nmless/bbi_params_test.go - parsers/nmparser/read_ext_fast_test.go - entrypoint: bbi nonmem probs code: cmd/project.go doc: docs/commands/bbi_nonmem_probs.md - tests: [] + tests: + - integration/nmless/bbi_probs_test.go - entrypoint: bbi nonmem reclean code: cmd/reclean.go doc: docs/commands/bbi_nonmem_reclean.md tests: - - integration/postrun/bbi_reclean_test.go + - integration/nmless/bbi_reclean_test.go - entrypoint: bbi nonmem run skip: true @@ -69,13 +71,14 @@ - entrypoint: bbi nonmem scaffold code: cmd/scaffold.go doc: docs/commands/bbi_nonmem_scaffold.md - tests: [] + tests: + - integration/nmless/bbi_scaffold_test.go - entrypoint: bbi nonmem summary code: cmd/summary.go doc: docs/commands/bbi_nonmem_summary.md tests: - - integration/postrun/bbi_summary_test.go + - integration/nmless/bbi_summary_test.go - parsers/nmparser/parse_block_result_test.go - parsers/nmparser/parse_final_parameter_estimates_test.go - parsers/nmparser/parse_lst_file_test.go @@ -88,4 +91,5 @@ - entrypoint: bbi version code: cmd/version.go doc: docs/commands/bbi_version.md - tests: [] + tests: + - integration/nmless/bbi_version_test.go diff --git a/integration/postrun/README.md b/integration/nmless/README.md similarity index 100% rename from integration/postrun/README.md rename to integration/nmless/README.md diff --git a/integration/nmless/bbi_clean_test.go b/integration/nmless/bbi_clean_test.go new file mode 100644 index 00000000..88d2f78f --- /dev/null +++ b/integration/nmless/bbi_clean_test.go @@ -0,0 +1,287 @@ +package nmless + +import ( + "encoding/json" + "os" + "os/exec" + "path/filepath" + "testing" + + "github.com/metrumresearchgroup/wrapt" + + "github.com/metrumresearchgroup/bbi/runner" +) + +func createEmptyFile(t *wrapt.T, file string) { + t.Helper() + fh, err := os.Create(file) + if err != nil { + t.Fatal(err) + } + err = fh.Close() + if err != nil { + t.Fatal(err) + } +} + +func TestClean(tt *testing.T) { + t := wrapt.WrapT(tt) + + t.Run("glob", func(t *wrapt.T) { + dir := t.TempDir() + + foo := filepath.Join(dir, "foo") + fooctl := filepath.Join(dir, "foo.ctl") + foomod := filepath.Join(dir, "foo.mod") + + createEmptyFile(t, foo) + createEmptyFile(t, fooctl) + createEmptyFile(t, foomod) + + cmd := exec.Command("bbi", "nonmem", "clean", "*.ctl", "*.mod") + cmd.Dir = dir + + _, err := cmd.Output() + if err != nil { + t.Fatal(err) + } + + t.A.FileExists(foo) + t.A.NoFileExists(fooctl) + t.A.NoFileExists(foomod) + }) + + t.Run("regex", func(t *wrapt.T) { + dir := t.TempDir() + + fooctl := filepath.Join(dir, "foo.ctl") + foolmod := filepath.Join(dir, "foolmod") + foomod := filepath.Join(dir, "foo.mod") + foomodulo := filepath.Join(dir, "foo.modulo") + + createEmptyFile(t, fooctl) + createEmptyFile(t, foolmod) + createEmptyFile(t, foomod) + createEmptyFile(t, foomodulo) + + cmd := exec.Command("bbi", "nonmem", "clean", "--regex", ".*\\.ctl", ".*\\.mod$") + cmd.Dir = dir + + _, err := cmd.Output() + if err != nil { + t.Fatal(err) + } + + t.A.NoFileExists(fooctl) + t.A.FileExists(foolmod) + t.A.NoFileExists(foomod) + t.A.FileExists(foomodulo) + }) + + t.Run("glob inverse", func(t *wrapt.T) { + dir := t.TempDir() + + foo := filepath.Join(dir, "foo") + fooctl := filepath.Join(dir, "foo.ctl") + + createEmptyFile(t, foo) + createEmptyFile(t, fooctl) + + cmd := exec.Command("bbi", "nonmem", "clean", "--inverse", "*.ctl") + cmd.Dir = dir + + _, err := cmd.Output() + if err != nil { + t.Fatal(err) + } + + t.A.NoFileExists(foo) + t.A.FileExists(fooctl) + }) + + t.Run("regex inverse", func(t *wrapt.T) { + dir := t.TempDir() + + barfoo := filepath.Join(dir, "barfoo.mod") + foomodulo := filepath.Join(dir, "foo.modulo") + + createEmptyFile(t, foomodulo) + createEmptyFile(t, barfoo) + + cmd := exec.Command("bbi", "nonmem", "clean", "--regex", "--inverse", "^foo.*mod") + cmd.Dir = dir + + _, err := cmd.Output() + if err != nil { + t.Fatal(err) + } + + t.A.NoFileExists(barfoo) + t.A.FileExists(foomodulo) + }) + + t.Run("dirsOnly", func(t *wrapt.T) { + dir := t.TempDir() + + foodir := filepath.Join(dir, "foo") + foomod := filepath.Join(dir, "foo.mod") + + err := os.Mkdir(foodir, 0o777) + if err != nil { + t.Fatal(err) + } + + createEmptyFile(t, foomod) + + cmd := exec.Command("bbi", "nonmem", "clean", "--dirsOnly", "foo*") + cmd.Dir = dir + + _, err = cmd.Output() + if err != nil { + t.Fatal(err) + } + + t.A.NoDirExists(foodir) + t.A.FileExists(foomod) + }) + + t.Run("filesOnly", func(t *wrapt.T) { + dir := t.TempDir() + + foodir := filepath.Join(dir, "foo") + foomod := filepath.Join(dir, "foo.mod") + + err := os.Mkdir(foodir, 0o777) + if err != nil { + t.Fatal(err) + } + + createEmptyFile(t, foomod) + + cmd := exec.Command("bbi", "nonmem", "clean", "--filesOnly", "foo*") + cmd.Dir = dir + + _, err = cmd.Output() + if err != nil { + t.Fatal(err) + } + + t.A.DirExists(foodir) + t.A.NoFileExists(foomod) + }) +} + +func writeCopied(t *wrapt.T, prefix string, files []runner.TargetedFile) { + t.Helper() + + bs, err := json.Marshal(files) + if err != nil { + t.Fatal(err) + } + err = os.WriteFile(prefix+"_copied.json", bs, 0o666) + if err != nil { + t.Fatal(err) + } +} + +func TestCleanCopiedRuns(tt *testing.T) { + t := wrapt.WrapT(tt) + dir := t.TempDir() + + run01 := filepath.Join(dir, "run01.mod") + run01foo := filepath.Join(dir, "run01.foo") + run02 := filepath.Join(dir, "run02.mod") + run02bar := filepath.Join(dir, "run02.bar") + run03 := filepath.Join(dir, "run03.mod") + run03keep := filepath.Join(dir, "run03.keep") + run10 := filepath.Join(dir, "run10.mod") + run10baz := filepath.Join(dir, "run10.baz") + + createEmptyFile(t, run01) + createEmptyFile(t, run01foo) + createEmptyFile(t, run02) + createEmptyFile(t, run02bar) + createEmptyFile(t, run03) + createEmptyFile(t, run03keep) + createEmptyFile(t, run10) + createEmptyFile(t, run10baz) + + writeCopied(t, filepath.Join(dir, "run01"), + []runner.TargetedFile{ + { + File: "run01.foo", + }, + }, + ) + writeCopied(t, filepath.Join(dir, "run02"), + []runner.TargetedFile{ + { + File: "run02.bar", + }, + }, + ) + writeCopied(t, filepath.Join(dir, "run03"), + []runner.TargetedFile{ + { + File: "run03.keep", + }, + }, + ) + writeCopied(t, filepath.Join(dir, "run10"), + []runner.TargetedFile{ + { + File: "run10.baz", + }, + }, + ) + + cmd := exec.Command("bbi", "nonmem", "clean", "--copiedRuns=run[01:02],run10") + cmd.Dir = dir + + _, err := cmd.Output() + if err != nil { + t.Fatal(err) + } + + t.A.FileExists(run01) + t.A.NoFileExists(run01foo) + + t.A.FileExists(run02) + t.A.NoFileExists(run02bar) + + t.A.FileExists(run03) + t.A.FileExists(run03keep) + + t.A.FileExists(run10) + t.A.NoFileExists(run10baz) +} + +func TestCleanPreview(tt *testing.T) { + t := wrapt.WrapT(tt) + dir := t.TempDir() + + fooctl := filepath.Join(dir, "foo.ctl") + foomod := filepath.Join(dir, "foo.mod") + other := filepath.Join(dir, "other") + + createEmptyFile(t, fooctl) + createEmptyFile(t, foomod) + createEmptyFile(t, other) + + cmd := exec.Command("bbi", "nonmem", "clean", "--preview", "*.ctl", "*.mod") + cmd.Dir = dir + + bs, err := cmd.Output() + if err != nil { + t.Fatal(err) + } + out := string(bs) + + t.A.Contains(out, "foo.ctl") + t.A.Contains(out, "foo.mod") + t.A.NotContains(out, "other") + + t.A.FileExists(fooctl) + t.A.FileExists(foomod) + t.A.FileExists(other) +} diff --git a/integration/postrun/bbi_covcor_test.go b/integration/nmless/bbi_covcor_test.go similarity index 99% rename from integration/postrun/bbi_covcor_test.go rename to integration/nmless/bbi_covcor_test.go index 87db64a6..efc83324 100644 --- a/integration/postrun/bbi_covcor_test.go +++ b/integration/nmless/bbi_covcor_test.go @@ -1,4 +1,4 @@ -package postrun +package nmless import ( "context" diff --git a/integration/postrun/bbi_params_test.go b/integration/nmless/bbi_params_test.go similarity index 99% rename from integration/postrun/bbi_params_test.go rename to integration/nmless/bbi_params_test.go index eacc7885..9b2afecd 100644 --- a/integration/postrun/bbi_params_test.go +++ b/integration/nmless/bbi_params_test.go @@ -1,4 +1,4 @@ -package postrun +package nmless import ( "context" diff --git a/integration/nmless/bbi_probs_test.go b/integration/nmless/bbi_probs_test.go new file mode 100644 index 00000000..d7c7b036 --- /dev/null +++ b/integration/nmless/bbi_probs_test.go @@ -0,0 +1,157 @@ +package nmless + +import ( + "bytes" + "encoding/json" + "errors" + "os" + "os/exec" + "path/filepath" + "testing" + + "github.com/metrumresearchgroup/wrapt" + + parser "github.com/metrumresearchgroup/bbi/parsers/nmparser" +) + +type jsonResult struct { + RunName string + Ok bool + Summary parser.ModelInfo +} + +func setupMods(t *wrapt.T) string { + t.Helper() + dir := t.TempDir() + + fooMod := []byte(` +$PROB foo prob +$SUBROUTINES ADVAN2 TRANS2x +$EST METHOD=1 INTERACTION MAXEVAL=9999 +$EST METHOD=SAEM NBURN=3000 NITER=2000 +$TABLE ID TIME +$TABLE ID CL +$COV PRINT = E UNCONDITIONAL +`) + err := os.WriteFile(filepath.Join(dir, "foo.mod"), fooMod, 0o666) + if err != nil { + t.Fatal(err) + } + + // Same but with ctl extension. + err = os.WriteFile(filepath.Join(dir, "foo.ctl"), + bytes.Replace(fooMod, []byte("foo prob"), []byte("foo ctl prob"), 1), + 0o666) + if err != nil { + t.Fatal(err) + } + + barMod := []byte(` +$PROBLEM bar prob +$SIM ONLYSIM (393) SUBPROBLEMS=2 +`) + err = os.WriteFile(filepath.Join(dir, "bar.mod"), barMod, 0o666) + if err != nil { + t.Fatal(err) + } + + return dir +} + +func TestProbs(tt *testing.T) { + t := wrapt.WrapT(tt) + dir := setupMods(t) + + t.Run("table output", func(t *wrapt.T) { + cmd := exec.Command("bbi", "nonmem", "probs") + cmd.Dir = dir + + bs, err := cmd.Output() + if err != nil { + t.Fatal(err) + } + out := string(bs) + + t.A.Contains(out, "---") + t.A.Contains(out, "foo prob") + // FIXME: .mod extension is considered but not .ctl. + t.A.NotContains(out, "foo ctl prob") + // FIXME: ParseModInfo assumes short "$PROB". + t.A.Contains(out, "LEM bar prob") + }) + + t.Run("json output", func(t *wrapt.T) { + cmd := exec.Command("bbi", "nonmem", "probs", "--json") + cmd.Dir = dir + + bs, err := cmd.Output() + if err != nil { + t.Fatal(err) + } + + var recs []jsonResult + err = json.Unmarshal(bs, &recs) + if err != nil { + t.Fatal(err) + } + + t.A.Len(recs, 2) + + for _, rec := range recs { + switch rec.RunName { + case "foo": + t.A.Len(rec.Summary.Tables, 2) + t.A.Equal(rec.Summary.Est, []parser.Est{ + { + Method: "$EST METHOD=1 INTERACTION MAXEVAL=9999", + }, + { + Method: "$EST METHOD=SAEM NBURN=3000 NITER=2000", + }, + }) + t.A.True(rec.Summary.Cov.Ok) + t.A.False(rec.Summary.Sim.Ok) + case "bar": + t.A.Len(rec.Summary.Tables, 0) + t.A.Len(rec.Summary.Est, 0) + t.A.False(rec.Summary.Cov.Ok) + t.A.True(rec.Summary.Sim.Ok) + default: + t.Errorf("expected foo or bar for RunName, got %s", rec.RunName) + } + } + }) + + t.Run("directory argument", func(t *wrapt.T) { + cmd1 := exec.Command("bbi", "nonmem", "probs") + cmd1.Dir = dir + + bs1, err := cmd1.Output() + if err != nil { + t.Fatal(err) + } + + cmd2 := exec.Command("bbi", "nonmem", "probs", dir) + bs2, err := cmd2.Output() + if err != nil { + t.Fatal(err) + } + + t.A.Equal(bs1, bs2) + }) +} + +func TestProbsErrors(tt *testing.T) { + t := wrapt.WrapT(tt) + + cmd := exec.Command("bbi", "nonmem", "probs", "one", "two") + _, err := cmd.Output() + t.R.Error(err) + + var exitError *exec.ExitError + if ok := errors.As(err, &exitError); !ok { + t.Fatalf("got error %v; want ExitError", err) + } + + t.A.Contains(string(exitError.Stderr), "one directory") +} diff --git a/integration/postrun/bbi_reclean_test.go b/integration/nmless/bbi_reclean_test.go similarity index 98% rename from integration/postrun/bbi_reclean_test.go rename to integration/nmless/bbi_reclean_test.go index 3f6dc4d1..ff067e32 100644 --- a/integration/postrun/bbi_reclean_test.go +++ b/integration/nmless/bbi_reclean_test.go @@ -1,4 +1,4 @@ -package postrun +package nmless import ( "context" diff --git a/integration/nmless/bbi_scaffold_test.go b/integration/nmless/bbi_scaffold_test.go new file mode 100644 index 00000000..efcdcbe1 --- /dev/null +++ b/integration/nmless/bbi_scaffold_test.go @@ -0,0 +1,44 @@ +package nmless + +import ( + "os/exec" + "path/filepath" + "testing" + + "github.com/metrumresearchgroup/wrapt" +) + +func TestScaffoldPreview(tt *testing.T) { + t := wrapt.WrapT(tt) + dir := t.TempDir() + + cmd := exec.Command("bbi", "nonmem", "scaffold", "--cacheDir=foo", "--preview") + cmd.Dir = dir + + bs, err := cmd.Output() + if err != nil { + t.Fatal(err) + } + out := string(bs) + + t.A.Contains(out, "would create") + t.A.Contains(out, "foo") + + t.A.NoDirExists(filepath.Join(dir, "foo")) +} + +func TestScaffold(tt *testing.T) { + t := wrapt.WrapT(tt) + dir := t.TempDir() + + cmd := exec.Command("bbi", "nonmem", "scaffold", "--cacheDir=foo/bar") + cmd.Dir = dir + + _, err := cmd.Output() + if err != nil { + t.Fatal(err) + } + + t.A.DirExists(filepath.Join(dir, "foo", "bar")) + t.A.FileExists(filepath.Join(dir, "foo", "bar", ".gitignore")) +} diff --git a/integration/postrun/bbi_summary_test.go b/integration/nmless/bbi_summary_test.go similarity index 99% rename from integration/postrun/bbi_summary_test.go rename to integration/nmless/bbi_summary_test.go index ad0bf4e7..5dd5ef40 100644 --- a/integration/postrun/bbi_summary_test.go +++ b/integration/nmless/bbi_summary_test.go @@ -1,4 +1,4 @@ -package postrun +package nmless import ( "context" diff --git a/integration/nmless/bbi_version_test.go b/integration/nmless/bbi_version_test.go new file mode 100644 index 00000000..b2149fc9 --- /dev/null +++ b/integration/nmless/bbi_version_test.go @@ -0,0 +1,22 @@ +package nmless + +import ( + "context" + "strings" + "testing" + + "github.com/metrumresearchgroup/wrapt" + + bi "github.com/metrumresearchgroup/bbi/integration" +) + +func TestVersion(tt *testing.T) { + t := wrapt.WrapT(tt) + + out, err := bi.ExecuteCommand(context.Background(), "bbi", "version") + if err != nil { + t.Fatal(err) + } + + t.A.NotEqual(strings.TrimSuffix(out, "\n"), "") +} diff --git a/integration/postrun/golden_util.go b/integration/nmless/golden_util.go similarity index 98% rename from integration/postrun/golden_util.go rename to integration/nmless/golden_util.go index 743136ac..5ee6d2d6 100644 --- a/integration/postrun/golden_util.go +++ b/integration/nmless/golden_util.go @@ -1,4 +1,4 @@ -package postrun +package nmless import ( "fmt" diff --git a/integration/postrun/setup.go b/integration/nmless/setup.go similarity index 94% rename from integration/postrun/setup.go rename to integration/nmless/setup.go index 7250ffa0..a6f41d51 100644 --- a/integration/postrun/setup.go +++ b/integration/nmless/setup.go @@ -1,4 +1,4 @@ -package postrun +package nmless // constants and variables used in summary tests. const SUMMARY_TEST_DIR = "testdata/bbi_summary" diff --git a/integration/postrun/testdata/bbi_summary/1001.ctl b/integration/nmless/testdata/bbi_summary/1001.ctl similarity index 100% rename from integration/postrun/testdata/bbi_summary/1001.ctl rename to integration/nmless/testdata/bbi_summary/1001.ctl diff --git a/integration/postrun/testdata/bbi_summary/1001/.gitignore b/integration/nmless/testdata/bbi_summary/1001/.gitignore similarity index 100% rename from integration/postrun/testdata/bbi_summary/1001/.gitignore rename to integration/nmless/testdata/bbi_summary/1001/.gitignore diff --git a/integration/postrun/testdata/bbi_summary/1001/1001.1.TXT b/integration/nmless/testdata/bbi_summary/1001/1001.1.TXT similarity index 100% rename from integration/postrun/testdata/bbi_summary/1001/1001.1.TXT rename to integration/nmless/testdata/bbi_summary/1001/1001.1.TXT diff --git a/integration/postrun/testdata/bbi_summary/1001/1001.cor b/integration/nmless/testdata/bbi_summary/1001/1001.cor similarity index 100% rename from integration/postrun/testdata/bbi_summary/1001/1001.cor rename to integration/nmless/testdata/bbi_summary/1001/1001.cor diff --git a/integration/postrun/testdata/bbi_summary/1001/1001.cov b/integration/nmless/testdata/bbi_summary/1001/1001.cov similarity index 100% rename from integration/postrun/testdata/bbi_summary/1001/1001.cov rename to integration/nmless/testdata/bbi_summary/1001/1001.cov diff --git a/integration/postrun/testdata/bbi_summary/1001/1001.cpu b/integration/nmless/testdata/bbi_summary/1001/1001.cpu similarity index 100% rename from integration/postrun/testdata/bbi_summary/1001/1001.cpu rename to integration/nmless/testdata/bbi_summary/1001/1001.cpu diff --git a/integration/postrun/testdata/bbi_summary/1001/1001.ctl b/integration/nmless/testdata/bbi_summary/1001/1001.ctl similarity index 100% rename from integration/postrun/testdata/bbi_summary/1001/1001.ctl rename to integration/nmless/testdata/bbi_summary/1001/1001.ctl diff --git a/integration/postrun/testdata/bbi_summary/1001/1001.ext b/integration/nmless/testdata/bbi_summary/1001/1001.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/1001/1001.ext rename to integration/nmless/testdata/bbi_summary/1001/1001.ext diff --git a/integration/postrun/testdata/bbi_summary/1001/1001.lst b/integration/nmless/testdata/bbi_summary/1001/1001.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/1001/1001.lst rename to integration/nmless/testdata/bbi_summary/1001/1001.lst diff --git a/integration/postrun/testdata/bbi_summary/1001/PRDERR b/integration/nmless/testdata/bbi_summary/1001/PRDERR similarity index 100% rename from integration/postrun/testdata/bbi_summary/1001/PRDERR rename to integration/nmless/testdata/bbi_summary/1001/PRDERR diff --git a/integration/postrun/testdata/bbi_summary/12-empty-problem/12-empty-problem.ext b/integration/nmless/testdata/bbi_summary/12-empty-problem/12-empty-problem.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/12-empty-problem/12-empty-problem.ext rename to integration/nmless/testdata/bbi_summary/12-empty-problem/12-empty-problem.ext diff --git a/integration/postrun/testdata/bbi_summary/12-empty-problem/12-empty-problem.grd b/integration/nmless/testdata/bbi_summary/12-empty-problem/12-empty-problem.grd similarity index 100% rename from integration/postrun/testdata/bbi_summary/12-empty-problem/12-empty-problem.grd rename to integration/nmless/testdata/bbi_summary/12-empty-problem/12-empty-problem.grd diff --git a/integration/postrun/testdata/bbi_summary/12-empty-problem/12-empty-problem.lst b/integration/nmless/testdata/bbi_summary/12-empty-problem/12-empty-problem.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/12-empty-problem/12-empty-problem.lst rename to integration/nmless/testdata/bbi_summary/12-empty-problem/12-empty-problem.lst diff --git a/integration/postrun/testdata/bbi_summary/12-empty-problem/12-empty-problem.shk b/integration/nmless/testdata/bbi_summary/12-empty-problem/12-empty-problem.shk similarity index 100% rename from integration/postrun/testdata/bbi_summary/12-empty-problem/12-empty-problem.shk rename to integration/nmless/testdata/bbi_summary/12-empty-problem/12-empty-problem.shk diff --git a/integration/postrun/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.cpu b/integration/nmless/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.cpu similarity index 100% rename from integration/postrun/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.cpu rename to integration/nmless/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.cpu diff --git a/integration/postrun/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.ctl b/integration/nmless/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.ctl similarity index 100% rename from integration/postrun/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.ctl rename to integration/nmless/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.ctl diff --git a/integration/postrun/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.ext b/integration/nmless/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.ext rename to integration/nmless/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.ext diff --git a/integration/postrun/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.grd b/integration/nmless/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.grd similarity index 100% rename from integration/postrun/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.grd rename to integration/nmless/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.grd diff --git a/integration/postrun/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.lst b/integration/nmless/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.lst rename to integration/nmless/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.lst diff --git a/integration/postrun/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.shk b/integration/nmless/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.shk similarity index 100% rename from integration/postrun/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.shk rename to integration/nmless/testdata/bbi_summary/12-invalid-lst/12-invalid-lst.shk diff --git a/integration/postrun/testdata/bbi_summary/12.ctl b/integration/nmless/testdata/bbi_summary/12.ctl similarity index 100% rename from integration/postrun/testdata/bbi_summary/12.ctl rename to integration/nmless/testdata/bbi_summary/12.ctl diff --git a/integration/postrun/testdata/bbi_summary/12/.gitignore b/integration/nmless/testdata/bbi_summary/12/.gitignore similarity index 100% rename from integration/postrun/testdata/bbi_summary/12/.gitignore rename to integration/nmless/testdata/bbi_summary/12/.gitignore diff --git a/integration/postrun/testdata/bbi_summary/12/12.cpu b/integration/nmless/testdata/bbi_summary/12/12.cpu similarity index 100% rename from integration/postrun/testdata/bbi_summary/12/12.cpu rename to integration/nmless/testdata/bbi_summary/12/12.cpu diff --git a/integration/postrun/testdata/bbi_summary/12/12.ctl b/integration/nmless/testdata/bbi_summary/12/12.ctl similarity index 100% rename from integration/postrun/testdata/bbi_summary/12/12.ctl rename to integration/nmless/testdata/bbi_summary/12/12.ctl diff --git a/integration/postrun/testdata/bbi_summary/12/12.ext b/integration/nmless/testdata/bbi_summary/12/12.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/12/12.ext rename to integration/nmless/testdata/bbi_summary/12/12.ext diff --git a/integration/postrun/testdata/bbi_summary/12/12.grd b/integration/nmless/testdata/bbi_summary/12/12.grd similarity index 100% rename from integration/postrun/testdata/bbi_summary/12/12.grd rename to integration/nmless/testdata/bbi_summary/12/12.grd diff --git a/integration/postrun/testdata/bbi_summary/12/12.lst b/integration/nmless/testdata/bbi_summary/12/12.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/12/12.lst rename to integration/nmless/testdata/bbi_summary/12/12.lst diff --git a/integration/postrun/testdata/bbi_summary/12/12.shk b/integration/nmless/testdata/bbi_summary/12/12.shk similarity index 100% rename from integration/postrun/testdata/bbi_summary/12/12.shk rename to integration/nmless/testdata/bbi_summary/12/12.shk diff --git a/integration/postrun/testdata/bbi_summary/66.ctl b/integration/nmless/testdata/bbi_summary/66.ctl similarity index 100% rename from integration/postrun/testdata/bbi_summary/66.ctl rename to integration/nmless/testdata/bbi_summary/66.ctl diff --git a/integration/postrun/testdata/bbi_summary/66/.gitignore b/integration/nmless/testdata/bbi_summary/66/.gitignore similarity index 100% rename from integration/postrun/testdata/bbi_summary/66/.gitignore rename to integration/nmless/testdata/bbi_summary/66/.gitignore diff --git a/integration/postrun/testdata/bbi_summary/66/66.cpu b/integration/nmless/testdata/bbi_summary/66/66.cpu similarity index 100% rename from integration/postrun/testdata/bbi_summary/66/66.cpu rename to integration/nmless/testdata/bbi_summary/66/66.cpu diff --git a/integration/postrun/testdata/bbi_summary/66/66.ctl b/integration/nmless/testdata/bbi_summary/66/66.ctl similarity index 100% rename from integration/postrun/testdata/bbi_summary/66/66.ctl rename to integration/nmless/testdata/bbi_summary/66/66.ctl diff --git a/integration/postrun/testdata/bbi_summary/66/66.ext b/integration/nmless/testdata/bbi_summary/66/66.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/66/66.ext rename to integration/nmless/testdata/bbi_summary/66/66.ext diff --git a/integration/postrun/testdata/bbi_summary/66/66.grd b/integration/nmless/testdata/bbi_summary/66/66.grd similarity index 100% rename from integration/postrun/testdata/bbi_summary/66/66.grd rename to integration/nmless/testdata/bbi_summary/66/66.grd diff --git a/integration/postrun/testdata/bbi_summary/66/66.lst b/integration/nmless/testdata/bbi_summary/66/66.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/66/66.lst rename to integration/nmless/testdata/bbi_summary/66/66.lst diff --git a/integration/postrun/testdata/bbi_summary/66/PRDERR b/integration/nmless/testdata/bbi_summary/66/PRDERR similarity index 100% rename from integration/postrun/testdata/bbi_summary/66/PRDERR rename to integration/nmless/testdata/bbi_summary/66/PRDERR diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/1001.golden.covcor.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/1001.golden.covcor.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/1001.golden.covcor.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/1001.golden.covcor.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/1001.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/1001.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/1001.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/1001.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/1001.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/1001.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/1001.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/1001.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/12-empty-problem.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/12-empty-problem.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/12-empty-problem.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/12-empty-problem.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/12-empty-problem.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/12-empty-problem.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/12-empty-problem.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/12-empty-problem.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/12.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/12.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/12.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/12.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/12.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/12.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/12.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/12.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/66.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/66.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/66.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/66.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/66.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/66.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/66.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/66.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/acop-iov.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/acop-iov.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/acop-iov.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/acop-iov.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/acop-iov.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/acop-iov.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/acop-iov.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/acop-iov.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/acop-nan.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/acop-nan.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/acop-nan.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/acop-nan.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/acop-nan.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/acop-nan.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/acop-nan.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/acop-nan.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/acop.golden.covcor.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/acop.golden.covcor.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/acop.golden.covcor.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/acop.golden.covcor.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/acop.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/acop.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/acop.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/acop.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/acop.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/acop.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/acop.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/acop.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/acop_no_grd.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/acop_no_grd.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/acop_no_grd.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/acop_no_grd.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/acop_no_grd.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/acop_no_grd.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/acop_no_grd.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/acop_no_grd.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/chain.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/chain.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/chain.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/chain.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/chain.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/chain.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/chain.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/chain.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/dir_bbi_summary.golden.params.csv b/integration/nmless/testdata/bbi_summary/aa_golden_files/dir_bbi_summary.golden.params.csv similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/dir_bbi_summary.golden.params.csv rename to integration/nmless/testdata/bbi_summary/aa_golden_files/dir_bbi_summary.golden.params.csv diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/dir_bbi_summary.golden.params.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/dir_bbi_summary.golden.params.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/dir_bbi_summary.golden.params.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/dir_bbi_summary.golden.params.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.params.csv b/integration/nmless/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.params.csv similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.params.csv rename to integration/nmless/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.params.csv diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.params.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.params.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.params.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.params.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/example2_bayes.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/example2_itsimp.golden.covcor.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/example2_itsimp.golden.covcor.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/example2_itsimp.golden.covcor.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/example2_itsimp.golden.covcor.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/example2_itsimp.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/example2_itsimp.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/example2_itsimp.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/example2_itsimp.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/example2_itsimp.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/example2_itsimp.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/example2_itsimp.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/example2_itsimp.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/example2_saemimp.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/example2_saemimp.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/example2_saemimp.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/example2_saemimp.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/example2_saemimp.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/example2_saemimp.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/example2_saemimp.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/example2_saemimp.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/iovmm.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/iovmm.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/iovmm.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/iovmm.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/iovmm.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/iovmm.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/iovmm.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/iovmm.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/multiple-models-error.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/multiple-models-error.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/multiple-models-error.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/multiple-models-error.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/multiple-models.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/multiple-models.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/multiple-models.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/multiple-models.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/multiple-models.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/multiple-models.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/multiple-models.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/multiple-models.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/onlysim.golden.json b/integration/nmless/testdata/bbi_summary/aa_golden_files/onlysim.golden.json similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/onlysim.golden.json rename to integration/nmless/testdata/bbi_summary/aa_golden_files/onlysim.golden.json diff --git a/integration/postrun/testdata/bbi_summary/aa_golden_files/onlysim.golden.txt b/integration/nmless/testdata/bbi_summary/aa_golden_files/onlysim.golden.txt similarity index 100% rename from integration/postrun/testdata/bbi_summary/aa_golden_files/onlysim.golden.txt rename to integration/nmless/testdata/bbi_summary/aa_golden_files/onlysim.golden.txt diff --git a/integration/postrun/testdata/bbi_summary/acop-incomplete/acop-incomplete.cor b/integration/nmless/testdata/bbi_summary/acop-incomplete/acop-incomplete.cor similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-incomplete/acop-incomplete.cor rename to integration/nmless/testdata/bbi_summary/acop-incomplete/acop-incomplete.cor diff --git a/integration/postrun/testdata/bbi_summary/acop-incomplete/acop-incomplete.cov b/integration/nmless/testdata/bbi_summary/acop-incomplete/acop-incomplete.cov similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-incomplete/acop-incomplete.cov rename to integration/nmless/testdata/bbi_summary/acop-incomplete/acop-incomplete.cov diff --git a/integration/postrun/testdata/bbi_summary/acop-incomplete/acop-incomplete.cpu b/integration/nmless/testdata/bbi_summary/acop-incomplete/acop-incomplete.cpu similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-incomplete/acop-incomplete.cpu rename to integration/nmless/testdata/bbi_summary/acop-incomplete/acop-incomplete.cpu diff --git a/integration/postrun/testdata/bbi_summary/acop-incomplete/acop-incomplete.ext b/integration/nmless/testdata/bbi_summary/acop-incomplete/acop-incomplete.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-incomplete/acop-incomplete.ext rename to integration/nmless/testdata/bbi_summary/acop-incomplete/acop-incomplete.ext diff --git a/integration/postrun/testdata/bbi_summary/acop-incomplete/acop-incomplete.grd b/integration/nmless/testdata/bbi_summary/acop-incomplete/acop-incomplete.grd similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-incomplete/acop-incomplete.grd rename to integration/nmless/testdata/bbi_summary/acop-incomplete/acop-incomplete.grd diff --git a/integration/postrun/testdata/bbi_summary/acop-incomplete/acop-incomplete.lst b/integration/nmless/testdata/bbi_summary/acop-incomplete/acop-incomplete.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-incomplete/acop-incomplete.lst rename to integration/nmless/testdata/bbi_summary/acop-incomplete/acop-incomplete.lst diff --git a/integration/postrun/testdata/bbi_summary/acop-incomplete/acop-incomplete.shk b/integration/nmless/testdata/bbi_summary/acop-incomplete/acop-incomplete.shk similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-incomplete/acop-incomplete.shk rename to integration/nmless/testdata/bbi_summary/acop-incomplete/acop-incomplete.shk diff --git a/integration/postrun/testdata/bbi_summary/acop-iov.mod b/integration/nmless/testdata/bbi_summary/acop-iov.mod similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-iov.mod rename to integration/nmless/testdata/bbi_summary/acop-iov.mod diff --git a/integration/postrun/testdata/bbi_summary/acop-iov/acop-iov.cpu b/integration/nmless/testdata/bbi_summary/acop-iov/acop-iov.cpu similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-iov/acop-iov.cpu rename to integration/nmless/testdata/bbi_summary/acop-iov/acop-iov.cpu diff --git a/integration/postrun/testdata/bbi_summary/acop-iov/acop-iov.ext b/integration/nmless/testdata/bbi_summary/acop-iov/acop-iov.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-iov/acop-iov.ext rename to integration/nmless/testdata/bbi_summary/acop-iov/acop-iov.ext diff --git a/integration/postrun/testdata/bbi_summary/acop-iov/acop-iov.grd b/integration/nmless/testdata/bbi_summary/acop-iov/acop-iov.grd similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-iov/acop-iov.grd rename to integration/nmless/testdata/bbi_summary/acop-iov/acop-iov.grd diff --git a/integration/postrun/testdata/bbi_summary/acop-iov/acop-iov.lst b/integration/nmless/testdata/bbi_summary/acop-iov/acop-iov.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-iov/acop-iov.lst rename to integration/nmless/testdata/bbi_summary/acop-iov/acop-iov.lst diff --git a/integration/postrun/testdata/bbi_summary/acop-iov/acop-iov.mod b/integration/nmless/testdata/bbi_summary/acop-iov/acop-iov.mod similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-iov/acop-iov.mod rename to integration/nmless/testdata/bbi_summary/acop-iov/acop-iov.mod diff --git a/integration/postrun/testdata/bbi_summary/acop-iov/acop-iov.shk b/integration/nmless/testdata/bbi_summary/acop-iov/acop-iov.shk similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-iov/acop-iov.shk rename to integration/nmless/testdata/bbi_summary/acop-iov/acop-iov.shk diff --git a/integration/postrun/testdata/bbi_summary/acop-nan/acop-nan.cor b/integration/nmless/testdata/bbi_summary/acop-nan/acop-nan.cor similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-nan/acop-nan.cor rename to integration/nmless/testdata/bbi_summary/acop-nan/acop-nan.cor diff --git a/integration/postrun/testdata/bbi_summary/acop-nan/acop-nan.cov b/integration/nmless/testdata/bbi_summary/acop-nan/acop-nan.cov similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-nan/acop-nan.cov rename to integration/nmless/testdata/bbi_summary/acop-nan/acop-nan.cov diff --git a/integration/postrun/testdata/bbi_summary/acop-nan/acop-nan.cpu b/integration/nmless/testdata/bbi_summary/acop-nan/acop-nan.cpu similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-nan/acop-nan.cpu rename to integration/nmless/testdata/bbi_summary/acop-nan/acop-nan.cpu diff --git a/integration/postrun/testdata/bbi_summary/acop-nan/acop-nan.ext b/integration/nmless/testdata/bbi_summary/acop-nan/acop-nan.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-nan/acop-nan.ext rename to integration/nmless/testdata/bbi_summary/acop-nan/acop-nan.ext diff --git a/integration/postrun/testdata/bbi_summary/acop-nan/acop-nan.grd b/integration/nmless/testdata/bbi_summary/acop-nan/acop-nan.grd similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-nan/acop-nan.grd rename to integration/nmless/testdata/bbi_summary/acop-nan/acop-nan.grd diff --git a/integration/postrun/testdata/bbi_summary/acop-nan/acop-nan.lst b/integration/nmless/testdata/bbi_summary/acop-nan/acop-nan.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-nan/acop-nan.lst rename to integration/nmless/testdata/bbi_summary/acop-nan/acop-nan.lst diff --git a/integration/postrun/testdata/bbi_summary/acop-nan/acop-nan.shk b/integration/nmless/testdata/bbi_summary/acop-nan/acop-nan.shk similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop-nan/acop-nan.shk rename to integration/nmless/testdata/bbi_summary/acop-nan/acop-nan.shk diff --git a/integration/postrun/testdata/bbi_summary/acop.ctl b/integration/nmless/testdata/bbi_summary/acop.ctl similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop.ctl rename to integration/nmless/testdata/bbi_summary/acop.ctl diff --git a/integration/postrun/testdata/bbi_summary/acop/acop.cor b/integration/nmless/testdata/bbi_summary/acop/acop.cor similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop/acop.cor rename to integration/nmless/testdata/bbi_summary/acop/acop.cor diff --git a/integration/postrun/testdata/bbi_summary/acop/acop.cov b/integration/nmless/testdata/bbi_summary/acop/acop.cov similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop/acop.cov rename to integration/nmless/testdata/bbi_summary/acop/acop.cov diff --git a/integration/postrun/testdata/bbi_summary/acop/acop.cpu b/integration/nmless/testdata/bbi_summary/acop/acop.cpu similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop/acop.cpu rename to integration/nmless/testdata/bbi_summary/acop/acop.cpu diff --git a/integration/postrun/testdata/bbi_summary/acop/acop.ext b/integration/nmless/testdata/bbi_summary/acop/acop.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop/acop.ext rename to integration/nmless/testdata/bbi_summary/acop/acop.ext diff --git a/integration/postrun/testdata/bbi_summary/acop/acop.grd b/integration/nmless/testdata/bbi_summary/acop/acop.grd similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop/acop.grd rename to integration/nmless/testdata/bbi_summary/acop/acop.grd diff --git a/integration/postrun/testdata/bbi_summary/acop/acop.lst b/integration/nmless/testdata/bbi_summary/acop/acop.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop/acop.lst rename to integration/nmless/testdata/bbi_summary/acop/acop.lst diff --git a/integration/postrun/testdata/bbi_summary/acop/acop.shk b/integration/nmless/testdata/bbi_summary/acop/acop.shk similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop/acop.shk rename to integration/nmless/testdata/bbi_summary/acop/acop.shk diff --git a/integration/postrun/testdata/bbi_summary/acop_no_grd/acop_no_grd.cpu b/integration/nmless/testdata/bbi_summary/acop_no_grd/acop_no_grd.cpu similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop_no_grd/acop_no_grd.cpu rename to integration/nmless/testdata/bbi_summary/acop_no_grd/acop_no_grd.cpu diff --git a/integration/postrun/testdata/bbi_summary/acop_no_grd/acop_no_grd.ext b/integration/nmless/testdata/bbi_summary/acop_no_grd/acop_no_grd.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop_no_grd/acop_no_grd.ext rename to integration/nmless/testdata/bbi_summary/acop_no_grd/acop_no_grd.ext diff --git a/integration/postrun/testdata/bbi_summary/acop_no_grd/acop_no_grd.lst b/integration/nmless/testdata/bbi_summary/acop_no_grd/acop_no_grd.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop_no_grd/acop_no_grd.lst rename to integration/nmless/testdata/bbi_summary/acop_no_grd/acop_no_grd.lst diff --git a/integration/postrun/testdata/bbi_summary/acop_no_grd/acop_no_grd.shk b/integration/nmless/testdata/bbi_summary/acop_no_grd/acop_no_grd.shk similarity index 100% rename from integration/postrun/testdata/bbi_summary/acop_no_grd/acop_no_grd.shk rename to integration/nmless/testdata/bbi_summary/acop_no_grd/acop_no_grd.shk diff --git a/integration/postrun/testdata/bbi_summary/chain/chain.ext b/integration/nmless/testdata/bbi_summary/chain/chain.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/chain/chain.ext rename to integration/nmless/testdata/bbi_summary/chain/chain.ext diff --git a/integration/postrun/testdata/bbi_summary/chain/chain.lst b/integration/nmless/testdata/bbi_summary/chain/chain.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/chain/chain.lst rename to integration/nmless/testdata/bbi_summary/chain/chain.lst diff --git a/integration/postrun/testdata/bbi_summary/example2_bayes.ctl b/integration/nmless/testdata/bbi_summary/example2_bayes.ctl similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_bayes.ctl rename to integration/nmless/testdata/bbi_summary/example2_bayes.ctl diff --git a/integration/postrun/testdata/bbi_summary/example2_bayes/.gitignore b/integration/nmless/testdata/bbi_summary/example2_bayes/.gitignore similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_bayes/.gitignore rename to integration/nmless/testdata/bbi_summary/example2_bayes/.gitignore diff --git a/integration/postrun/testdata/bbi_summary/example2_bayes/example2_bayes.cor b/integration/nmless/testdata/bbi_summary/example2_bayes/example2_bayes.cor similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_bayes/example2_bayes.cor rename to integration/nmless/testdata/bbi_summary/example2_bayes/example2_bayes.cor diff --git a/integration/postrun/testdata/bbi_summary/example2_bayes/example2_bayes.cov b/integration/nmless/testdata/bbi_summary/example2_bayes/example2_bayes.cov similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_bayes/example2_bayes.cov rename to integration/nmless/testdata/bbi_summary/example2_bayes/example2_bayes.cov diff --git a/integration/postrun/testdata/bbi_summary/example2_bayes/example2_bayes.cpu b/integration/nmless/testdata/bbi_summary/example2_bayes/example2_bayes.cpu similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_bayes/example2_bayes.cpu rename to integration/nmless/testdata/bbi_summary/example2_bayes/example2_bayes.cpu diff --git a/integration/postrun/testdata/bbi_summary/example2_bayes/example2_bayes.ctl b/integration/nmless/testdata/bbi_summary/example2_bayes/example2_bayes.ctl similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_bayes/example2_bayes.ctl rename to integration/nmless/testdata/bbi_summary/example2_bayes/example2_bayes.ctl diff --git a/integration/postrun/testdata/bbi_summary/example2_bayes/example2_bayes.ext b/integration/nmless/testdata/bbi_summary/example2_bayes/example2_bayes.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_bayes/example2_bayes.ext rename to integration/nmless/testdata/bbi_summary/example2_bayes/example2_bayes.ext diff --git a/integration/postrun/testdata/bbi_summary/example2_bayes/example2_bayes.lst b/integration/nmless/testdata/bbi_summary/example2_bayes/example2_bayes.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_bayes/example2_bayes.lst rename to integration/nmless/testdata/bbi_summary/example2_bayes/example2_bayes.lst diff --git a/integration/postrun/testdata/bbi_summary/example2_bayes/example2_bayes.shk b/integration/nmless/testdata/bbi_summary/example2_bayes/example2_bayes.shk similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_bayes/example2_bayes.shk rename to integration/nmless/testdata/bbi_summary/example2_bayes/example2_bayes.shk diff --git a/integration/postrun/testdata/bbi_summary/example2_itsimp.ctl b/integration/nmless/testdata/bbi_summary/example2_itsimp.ctl similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_itsimp.ctl rename to integration/nmless/testdata/bbi_summary/example2_itsimp.ctl diff --git a/integration/postrun/testdata/bbi_summary/example2_itsimp/.gitignore b/integration/nmless/testdata/bbi_summary/example2_itsimp/.gitignore similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_itsimp/.gitignore rename to integration/nmless/testdata/bbi_summary/example2_itsimp/.gitignore diff --git a/integration/postrun/testdata/bbi_summary/example2_itsimp/example2_itsimp.cor b/integration/nmless/testdata/bbi_summary/example2_itsimp/example2_itsimp.cor similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_itsimp/example2_itsimp.cor rename to integration/nmless/testdata/bbi_summary/example2_itsimp/example2_itsimp.cor diff --git a/integration/postrun/testdata/bbi_summary/example2_itsimp/example2_itsimp.cov b/integration/nmless/testdata/bbi_summary/example2_itsimp/example2_itsimp.cov similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_itsimp/example2_itsimp.cov rename to integration/nmless/testdata/bbi_summary/example2_itsimp/example2_itsimp.cov diff --git a/integration/postrun/testdata/bbi_summary/example2_itsimp/example2_itsimp.cpu b/integration/nmless/testdata/bbi_summary/example2_itsimp/example2_itsimp.cpu similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_itsimp/example2_itsimp.cpu rename to integration/nmless/testdata/bbi_summary/example2_itsimp/example2_itsimp.cpu diff --git a/integration/postrun/testdata/bbi_summary/example2_itsimp/example2_itsimp.ctl b/integration/nmless/testdata/bbi_summary/example2_itsimp/example2_itsimp.ctl similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_itsimp/example2_itsimp.ctl rename to integration/nmless/testdata/bbi_summary/example2_itsimp/example2_itsimp.ctl diff --git a/integration/postrun/testdata/bbi_summary/example2_itsimp/example2_itsimp.ext b/integration/nmless/testdata/bbi_summary/example2_itsimp/example2_itsimp.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_itsimp/example2_itsimp.ext rename to integration/nmless/testdata/bbi_summary/example2_itsimp/example2_itsimp.ext diff --git a/integration/postrun/testdata/bbi_summary/example2_itsimp/example2_itsimp.lst b/integration/nmless/testdata/bbi_summary/example2_itsimp/example2_itsimp.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_itsimp/example2_itsimp.lst rename to integration/nmless/testdata/bbi_summary/example2_itsimp/example2_itsimp.lst diff --git a/integration/postrun/testdata/bbi_summary/example2_itsimp/example2_itsimp.shk b/integration/nmless/testdata/bbi_summary/example2_itsimp/example2_itsimp.shk similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_itsimp/example2_itsimp.shk rename to integration/nmless/testdata/bbi_summary/example2_itsimp/example2_itsimp.shk diff --git a/integration/postrun/testdata/bbi_summary/example2_saemimp.ctl b/integration/nmless/testdata/bbi_summary/example2_saemimp.ctl similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_saemimp.ctl rename to integration/nmless/testdata/bbi_summary/example2_saemimp.ctl diff --git a/integration/postrun/testdata/bbi_summary/example2_saemimp/.gitignore b/integration/nmless/testdata/bbi_summary/example2_saemimp/.gitignore similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_saemimp/.gitignore rename to integration/nmless/testdata/bbi_summary/example2_saemimp/.gitignore diff --git a/integration/postrun/testdata/bbi_summary/example2_saemimp/example2_saemimp.cor b/integration/nmless/testdata/bbi_summary/example2_saemimp/example2_saemimp.cor similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_saemimp/example2_saemimp.cor rename to integration/nmless/testdata/bbi_summary/example2_saemimp/example2_saemimp.cor diff --git a/integration/postrun/testdata/bbi_summary/example2_saemimp/example2_saemimp.cov b/integration/nmless/testdata/bbi_summary/example2_saemimp/example2_saemimp.cov similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_saemimp/example2_saemimp.cov rename to integration/nmless/testdata/bbi_summary/example2_saemimp/example2_saemimp.cov diff --git a/integration/postrun/testdata/bbi_summary/example2_saemimp/example2_saemimp.cpu b/integration/nmless/testdata/bbi_summary/example2_saemimp/example2_saemimp.cpu similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_saemimp/example2_saemimp.cpu rename to integration/nmless/testdata/bbi_summary/example2_saemimp/example2_saemimp.cpu diff --git a/integration/postrun/testdata/bbi_summary/example2_saemimp/example2_saemimp.ctl b/integration/nmless/testdata/bbi_summary/example2_saemimp/example2_saemimp.ctl similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_saemimp/example2_saemimp.ctl rename to integration/nmless/testdata/bbi_summary/example2_saemimp/example2_saemimp.ctl diff --git a/integration/postrun/testdata/bbi_summary/example2_saemimp/example2_saemimp.ext b/integration/nmless/testdata/bbi_summary/example2_saemimp/example2_saemimp.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_saemimp/example2_saemimp.ext rename to integration/nmless/testdata/bbi_summary/example2_saemimp/example2_saemimp.ext diff --git a/integration/postrun/testdata/bbi_summary/example2_saemimp/example2_saemimp.lst b/integration/nmless/testdata/bbi_summary/example2_saemimp/example2_saemimp.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_saemimp/example2_saemimp.lst rename to integration/nmless/testdata/bbi_summary/example2_saemimp/example2_saemimp.lst diff --git a/integration/postrun/testdata/bbi_summary/example2_saemimp/example2_saemimp.shk b/integration/nmless/testdata/bbi_summary/example2_saemimp/example2_saemimp.shk similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_saemimp/example2_saemimp.shk rename to integration/nmless/testdata/bbi_summary/example2_saemimp/example2_saemimp.shk diff --git a/integration/postrun/testdata/bbi_summary/example2_saemimp/saem.ext b/integration/nmless/testdata/bbi_summary/example2_saemimp/saem.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/example2_saemimp/saem.ext rename to integration/nmless/testdata/bbi_summary/example2_saemimp/saem.ext diff --git a/integration/postrun/testdata/bbi_summary/iovmm.mod b/integration/nmless/testdata/bbi_summary/iovmm.mod similarity index 100% rename from integration/postrun/testdata/bbi_summary/iovmm.mod rename to integration/nmless/testdata/bbi_summary/iovmm.mod diff --git a/integration/postrun/testdata/bbi_summary/iovmm/.gitignore b/integration/nmless/testdata/bbi_summary/iovmm/.gitignore similarity index 100% rename from integration/postrun/testdata/bbi_summary/iovmm/.gitignore rename to integration/nmless/testdata/bbi_summary/iovmm/.gitignore diff --git a/integration/postrun/testdata/bbi_summary/iovmm/iovmm.cpu b/integration/nmless/testdata/bbi_summary/iovmm/iovmm.cpu similarity index 100% rename from integration/postrun/testdata/bbi_summary/iovmm/iovmm.cpu rename to integration/nmless/testdata/bbi_summary/iovmm/iovmm.cpu diff --git a/integration/postrun/testdata/bbi_summary/iovmm/iovmm.ext b/integration/nmless/testdata/bbi_summary/iovmm/iovmm.ext similarity index 100% rename from integration/postrun/testdata/bbi_summary/iovmm/iovmm.ext rename to integration/nmless/testdata/bbi_summary/iovmm/iovmm.ext diff --git a/integration/postrun/testdata/bbi_summary/iovmm/iovmm.grd b/integration/nmless/testdata/bbi_summary/iovmm/iovmm.grd similarity index 100% rename from integration/postrun/testdata/bbi_summary/iovmm/iovmm.grd rename to integration/nmless/testdata/bbi_summary/iovmm/iovmm.grd diff --git a/integration/postrun/testdata/bbi_summary/iovmm/iovmm.lst b/integration/nmless/testdata/bbi_summary/iovmm/iovmm.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/iovmm/iovmm.lst rename to integration/nmless/testdata/bbi_summary/iovmm/iovmm.lst diff --git a/integration/postrun/testdata/bbi_summary/iovmm/iovmm.mod b/integration/nmless/testdata/bbi_summary/iovmm/iovmm.mod similarity index 100% rename from integration/postrun/testdata/bbi_summary/iovmm/iovmm.mod rename to integration/nmless/testdata/bbi_summary/iovmm/iovmm.mod diff --git a/integration/postrun/testdata/bbi_summary/iovmm/iovmm.shk b/integration/nmless/testdata/bbi_summary/iovmm/iovmm.shk similarity index 100% rename from integration/postrun/testdata/bbi_summary/iovmm/iovmm.shk rename to integration/nmless/testdata/bbi_summary/iovmm/iovmm.shk diff --git a/integration/postrun/testdata/bbi_summary/onlysim/onlysim.lst b/integration/nmless/testdata/bbi_summary/onlysim/onlysim.lst similarity index 100% rename from integration/postrun/testdata/bbi_summary/onlysim/onlysim.lst rename to integration/nmless/testdata/bbi_summary/onlysim/onlysim.lst