diff options
Diffstat (limited to 'tests/test_docker.c')
-rw-r--r-- | tests/test_docker.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/tests/test_docker.c b/tests/test_docker.c new file mode 100644 index 0000000..eac385e --- /dev/null +++ b/tests/test_docker.c @@ -0,0 +1,73 @@ +#include "testing.h" +struct DockerCapabilities cap_suite; + +void test_docker_capable() { + struct DockerCapabilities cap; + int result = docker_capable(&cap); + OMC_ASSERT(result == true, "docker installation unusable"); + OMC_ASSERT(cap.available, "docker is not available"); + OMC_ASSERT(cap.build != 0, "docker cannot build images"); + // no cap.podman assertion. doesn't matter if we have docker or podman + OMC_ASSERT(cap.usable, "docker is unusable"); +} + +void test_docker_exec() { + OMC_ASSERT(docker_exec("system info", 0) == 0, "unable to print docker information"); + OMC_ASSERT(docker_exec("system info", OMC_DOCKER_QUIET) == 0, "unable to be quiet"); +} + +void test_docker_sanitize_tag() { + const char *data = " !\"#$%&'()*+,-;<=>?@[\\]^_`{|}~"; + char *input = strdup(data); + docker_sanitize_tag(input); + int result = 0; + for (size_t i = 0; i < strlen(data); i++) { + if (input[i] != '-') { + result = 1; + break; + } + } + OMC_ASSERT(result == 0, "proper tag characters were not replaced correctly"); + guard_free(input); +} + +void test_docker_build_and_script_and_save() { + OMC_SKIP_IF(docker_exec("pull alpine:latest", OMC_DOCKER_QUIET), "unable to pull an image"); + + const char *dockerfile_contents = "FROM alpine:latest\nCMD [\"sh\", \"-l\"]\n"; + mkdir("test_docker_build", 0755); + if (!pushd("test_docker_build")) { + omc_testing_write_ascii("Dockerfile", dockerfile_contents); + OMC_ASSERT(docker_build(".", "-t test_docker_build", cap_suite.build) == 0, "docker build test failed"); + OMC_ASSERT(docker_script("test_docker_build", "uname -a", 0) == 0, "simple docker container script execution failed"); + OMC_ASSERT(docker_save("test_docker_build", ".", OMC_DOCKER_IMAGE_COMPRESSION) == 0, "saving a simple image failed"); + OMC_ASSERT(docker_exec("load < test_docker_build.tar.*", 0) == 0, "loading a simple image failed"); + docker_exec("image rm -f test_docker_build", 0); + remove("Dockerfile"); + popd(); + remove("test_docker_build"); + } else { + OMC_ASSERT(false, "dir change failed"); + return; + } +} + +void test_docker_validate_compression_program() { + OMC_ASSERT(docker_validate_compression_program(OMC_DOCKER_IMAGE_COMPRESSION) == 0, "baked-in compression program does not exist"); +} + +int main(int argc, char *argv[]) { + OMC_TEST_BEGIN_MAIN(); + if (!docker_capable(&cap_suite)) { + return OMC_TEST_SUITE_SKIP; + } + OMC_TEST_FUNC *tests[] = { + test_docker_capable, + test_docker_exec, + test_docker_build_and_script_and_save, + test_docker_sanitize_tag, + test_docker_validate_compression_program, + }; + OMC_TEST_RUN(tests); + OMC_TEST_END_MAIN(); +}
\ No newline at end of file |