diff --git a/pkg/e2e/build_test.go b/pkg/e2e/build_test.go index 243f5ee5f8b..0f4702c3c1b 100644 --- a/pkg/e2e/build_test.go +++ b/pkg/e2e/build_test.go @@ -19,7 +19,9 @@ package e2e import ( "fmt" "net/http" + "regexp" "runtime" + "strconv" "strings" "testing" "time" @@ -366,10 +368,21 @@ func TestBuildPrivileged(t *testing.T) { }) t.Run("use build privileged mode to run insecure build command", func(t *testing.T) { - res := c.RunDockerComposeCmdNoCheck(t, "--project-directory", "fixtures/build-test/privileged", "build") - assert.NilError(t, res.Error, res.Stderr()) - res.Assert(t, icmd.Expected{Out: "CapEff:\t0000003fffffffff"}) - + res := c.RunDockerComposeCmd(t, "--project-directory", "fixtures/build-test/privileged", "build") + capEffRe := regexp.MustCompile("CapEff:\t([0-9a-f]+)") + matches := capEffRe.FindStringSubmatch(res.Stdout()) + assert.Equal(t, 2, len(matches), "Did not match CapEff in output, matches: %v", matches) + + capEff, err := strconv.ParseUint(matches[1], 16, 64) + assert.NilError(t, err, "Parsing CapEff: %s", matches[1]) + + // NOTE: can't use constant from x/sys/unix or tests won't compile on macOS/Windows + // #define CAP_SYS_ADMIN 21 + // https://github.com/torvalds/linux/blob/v6.1/include/uapi/linux/capability.h#L278 + const capSysAdmin = 0x15 + if capEff&capSysAdmin != capSysAdmin { + t.Fatalf("CapEff %s is missing CAP_SYS_ADMIN", matches[1]) + } }) }