e2e deflake namespaces: only check namespace jobs

Deflake namespace e2e test by only asserting on jobs related to the
namespace tests. During our e2e tests, some left over jobs (e.g.
prometheus) are left running while being shutdown and cause the test to
fail.
This commit is contained in:
Mahmood Ali
2021-01-20 10:24:23 -05:00
parent f045ec2d0b
commit 60bb50c432
2 changed files with 37 additions and 31 deletions

View File

@@ -208,7 +208,7 @@ func AllocExec(allocID, taskID, execCmd, ns string, wc *WaitConfig) (string, err
got, err = Command(cmd[0], cmd[1:]...)
return err == nil, err
}, func(e error) {
err = fmt.Errorf("exec failed: '%s'", strings.Join(cmd, " "))
err = fmt.Errorf("exec failed: '%s': %v", strings.Join(cmd, " "), e)
})
return got, err
}

View File

@@ -3,6 +3,7 @@ package namespaces
import (
"fmt"
"os"
"strings"
e2e "github.com/hashicorp/nomad/e2e/e2eutil"
"github.com/hashicorp/nomad/e2e/framework"
@@ -88,61 +89,69 @@ func (tc *NamespacesE2ETest) TestNamespacesFiltering(f *framework.F) {
jobDefault := run("namespaces/input/namespace_default.nomad", "")
// exercise 'nomad job status' filtering
parse := func(out string) []map[string]string {
rows, err := e2e.ParseColumns(out)
f.NoError(err, "failed to parse job status output: %v", out)
result := make([]map[string]string, 0, len(rows))
for _, row := range rows {
jobID := row["Job ID"]
if jobID == "" {
jobID = row["ID"]
}
if strings.HasPrefix(jobID, "test-namespace-") {
result = append(result, row)
}
}
return result
}
out, err := e2e.Command("nomad", "job", "status", "-namespace", "NamespaceA")
f.NoError(err, "'nomad job status -namespace NamespaceA' failed")
rows, err := e2e.ParseColumns(out)
f.NoError(err, "could not parse job status output")
f.Equal(1, len(rows))
rows := parse(out)
f.Len(rows, 1)
f.Equal(jobA, rows[0]["ID"])
out, err = e2e.Command("nomad", "job", "status", "-namespace", "NamespaceB")
f.NoError(err, "'nomad job status -namespace NamespaceB' failed")
rows, err = e2e.ParseColumns(out)
f.NoError(err, "could not parse job status output")
f.Equal(1, len(rows))
rows = parse(out)
f.Len(rows, 1)
f.Equal(jobB, rows[0]["ID"])
out, err = e2e.Command("nomad", "job", "status", "-namespace", "*")
f.NoError(err, "'nomad job status -namespace *' failed")
rows, err = e2e.ParseColumns(out)
f.NoError(err, "could not parse job status output")
rows = parse(out)
f.Equal(3, len(rows))
out, err = e2e.Command("nomad", "job", "status")
f.NoError(err, "'nomad job status' failed")
rows, err = e2e.ParseColumns(out)
f.NoError(err, "could not parse job status output")
f.Equal(1, len(rows))
rows = parse(out)
f.Len(rows, 1)
f.Equal(jobDefault, rows[0]["ID"])
// exercise 'nomad status' filtering
out, err = e2e.Command("nomad", "status", "-namespace", "NamespaceA")
f.NoError(err, "'nomad job status -namespace NamespaceA' failed")
rows, err = e2e.ParseColumns(out)
f.NoError(err, "could not parse status output")
f.Equal(1, len(rows))
rows = parse(out)
f.Len(rows, 1)
f.Equal(jobA, rows[0]["ID"])
out, err = e2e.Command("nomad", "status", "-namespace", "NamespaceB")
f.NoError(err, "'nomad job status -namespace NamespaceB' failed")
rows, err = e2e.ParseColumns(out)
f.NoError(err, "could not parse status output")
f.Equal(1, len(rows))
rows = parse(out)
f.Len(rows, 1)
f.Equal(jobB, rows[0]["ID"])
out, err = e2e.Command("nomad", "status", "-namespace", "*")
f.NoError(err, "'nomad job status -namespace *' failed")
rows, err = e2e.ParseColumns(out)
f.NoError(err, "could not parse status output")
rows = parse(out)
f.Equal(3, len(rows))
out, err = e2e.Command("nomad", "status")
f.NoError(err, "'nomad status' failed")
rows, err = e2e.ParseColumns(out)
f.NoError(err, "could not parse status output")
f.Equal(1, len(rows))
rows = parse(out)
f.Len(rows, 1)
f.Equal(jobDefault, rows[0]["ID"])
// exercise 'nomad deployment list' filtering
@@ -150,23 +159,20 @@ func (tc *NamespacesE2ETest) TestNamespacesFiltering(f *framework.F) {
out, err = e2e.Command("nomad", "deployment", "list", "-namespace", "NamespaceA")
f.NoError(err, "'nomad job status -namespace NamespaceA' failed")
rows, err = e2e.ParseColumns(out)
f.NoError(err, "could not parse deployment list output")
f.Equal(1, len(rows))
rows = parse(out)
f.Len(rows, 1)
f.Equal(jobA, rows[0]["Job ID"])
out, err = e2e.Command("nomad", "deployment", "list", "-namespace", "NamespaceB")
f.NoError(err, "'nomad job status -namespace NamespaceB' failed")
rows, err = e2e.ParseColumns(out)
f.NoError(err, "could not parse deployment list output")
rows = parse(out)
f.Equal(len(rows), 1)
f.Equal(jobB, rows[0]["Job ID"])
out, err = e2e.Command("nomad", "deployment", "list")
f.NoError(err, "'nomad deployment list' failed")
rows, err = e2e.ParseColumns(out)
f.NoError(err, "could not parse deployment list output")
f.Equal(1, len(rows))
rows = parse(out)
f.Len(rows, 1)
f.Equal(jobDefault, rows[0]["Job ID"])
out, err = e2e.Command("nomad", "job", "stop", jobA)