e2aa8f0cd9
Some pull/push tests are launching `registry-v2` binary which is compiled and installed if the tests are running in-container through `make test-integration-cli`. However, registry is not supported to run on non-linux platforms and we can't really spin up any registry-v2 containers in the remote DOCKER_TEST_HOST at this point. Just skipping those with the new TestRequirement called `RegistryHosting`. Signed-off-by: Ahmet Alp Balkan <ahmetalpbalkan@gmail.com>
50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os/exec"
|
|
"testing"
|
|
)
|
|
|
|
type TestCondition func() bool
|
|
|
|
type TestRequirement struct {
|
|
Condition TestCondition
|
|
SkipMessage string
|
|
}
|
|
|
|
// List test requirements
|
|
var (
|
|
SameHostDaemon = TestRequirement{
|
|
func() bool { return isLocalDaemon },
|
|
"Test requires docker daemon to runs on the same machine as CLI",
|
|
}
|
|
UnixCli = TestRequirement{
|
|
func() bool { return isUnixCli },
|
|
"Test requires posix utilities or functionality to run.",
|
|
}
|
|
ExecSupport = TestRequirement{
|
|
func() bool { return supportsExec },
|
|
"Test requires 'docker exec' capabilities on the tested daemon.",
|
|
}
|
|
RegistryHosting = TestRequirement{
|
|
func() bool {
|
|
// for now registry binary is built only if we're running inside
|
|
// container through `make test`. Figure that out by testing if
|
|
// registry binary is in PATH.
|
|
_, err := exec.LookPath(v2binary)
|
|
return err == nil
|
|
},
|
|
fmt.Sprintf("Test requires an environment that can host %s in the same host", v2binary),
|
|
}
|
|
)
|
|
|
|
// testRequires checks if the environment satisfies the requirements
|
|
// for the test to run or skips the tests.
|
|
func testRequires(t *testing.T, requirements ...TestRequirement) {
|
|
for _, r := range requirements {
|
|
if !r.Condition() {
|
|
t.Skip(r.SkipMessage)
|
|
}
|
|
}
|
|
}
|