diff --git a/tests/integration/runtest.sh b/tests/integration/runtest.sh new file mode 100644 index 0000000..3a56327 --- /dev/null +++ b/tests/integration/runtest.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +pytest-3 -vv ./test_container.py diff --git a/tests/integration/test_container.py b/tests/integration/test_container.py new file mode 100644 index 0000000..83ab5a2 --- /dev/null +++ b/tests/integration/test_container.py @@ -0,0 +1,79 @@ +#!/usr/bin/python3 + +import logging +import os + +import conu + +import pytest + + +IMAGE = os.environ.get("IMAGE_NAME", "registry.fedoraproject.org/f27/tools") +TAG = os.environ.get("IMAGE_TAG", "latest") + + +@pytest.fixture(scope="module") +def container(request): + with conu.DockerBackend(logging_level=logging.DEBUG) as backend: + im = backend.ImageClass(IMAGE, tag=TAG) + b = conu.DockerRunBuilder(command=["sleep", "infinity"]) + b.options += [ + "--net", "host", + "--pid=host", + "--ipc", "host", + "-it", + "--privileged", + "-v", "/run:/run", + "-v", "/:/host", + "-v", "/var/log:/var/log", + ] + machine_id_path = "/etc/machine-id" + if os.path.exists(machine_id_path): + b.options += [ + "-v", "%s:%s" % (machine_id_path, machine_id_path) + ] + localtime_path = "/etc/localtime" + if os.path.exists(localtime_path): + b.options += [ + "-v", "%s:%s" % (localtime_path, localtime_path) + ] + container = im.run_via_binary(b) + yield container + container.stop() + container.delete() + + +class TestContainer: + def test_ethtool(self, container): + # with self.container.mount() as fs: + # networks_devices = os.listdir(fs.p("/sys/class/net")) + networks_devices = ["lo"] + for device in networks_devices: + container.execute(["ethtool", device]) + with pytest.raises(conu.ConuException): + container.execute(["ethtool", "quantum-teleport"]) + + def test_netstat(self, container): + container.execute(["netstat"]) + + def test_ss(self, container): + container.execute(["ss"]) + + def test_pstack(self, container): + container.execute(["pstack", "1"]) + + def test_nstat(self, container): + container.execute(["nstat"]) + + def test_numastat(self, container): + container.execute(["numastat"]) + + def test_pmap(self, container): + container.execute(["pmap", "1"]) + + def test_strace(self, container): + container.execute(["strace", "-V"]) + + +if __name__ == '__main__': + pytest.main() diff --git a/tests/inventory b/tests/inventory new file mode 100644 index 0000000..df8b5f6 --- /dev/null +++ b/tests/inventory @@ -0,0 +1,2 @@ +[all] +localhost ansible_connection=local diff --git a/tests/tests.yml b/tests/tests.yml new file mode 100644 index 0000000..bc0cd18 --- /dev/null +++ b/tests/tests.yml @@ -0,0 +1,13 @@ +- hosts: localhost + roles: + - role: standard-test-basic + tags: + - container + tests: + - integration + required_packages: + - python3-conu + - python3-pytest + - docker + required_services: + - docker