84 lines
2.5 KiB
Python
84 lines
2.5 KiB
Python
#!/usr/bin/python3
|
|
import logging
|
|
import os
|
|
import time
|
|
|
|
from conu import DockerBackend, S2IDockerImage, Probe, DockerRunBuilder
|
|
|
|
import pytest
|
|
|
|
|
|
image_name = os.environ.get("IMAGE_NAME", "ruby").split(":")[0]
|
|
image_tag = os.environ.get("IMAGE_NAME", "ruby").split(":")[1]
|
|
test_dir = os.path.abspath(os.path.dirname(__file__))
|
|
puma_app_path = os.path.join(test_dir, "puma-test-app")
|
|
rack_app_path = os.path.join(test_dir, "rack-test-app")
|
|
app_paths = [
|
|
puma_app_path,
|
|
rack_app_path
|
|
]
|
|
|
|
|
|
backend = DockerBackend(logging_level=logging.DEBUG)
|
|
|
|
|
|
@pytest.fixture(scope="module", params=app_paths)
|
|
def app(request):
|
|
i = S2IDockerImage(image_name, tag=image_tag)
|
|
app_name = os.path.basename(request.param)
|
|
app = i.extend(request.param, app_name)
|
|
yield app
|
|
pass
|
|
app.rmi()
|
|
|
|
|
|
class TestSuite:
|
|
def test_s2i_apps(self, app):
|
|
c = app.run_via_binary()
|
|
try:
|
|
c.wait_for_port(8080)
|
|
assert c.is_port_open(8080)
|
|
response = c.http_request("/", port="8080")
|
|
assert response.ok
|
|
output = c.execute(["bash", "-c", "ruby --version"])[0]
|
|
expected = "ruby %s." % os.environ["VERSION"]
|
|
assert expected in output.decode("utf-8")
|
|
finally:
|
|
c.stop()
|
|
c.wait()
|
|
# debugging
|
|
print(list(c.logs()))
|
|
c.delete()
|
|
|
|
def test_invoking_container(self):
|
|
image = backend.ImageClass(image_name, tag=image_tag)
|
|
c = image.run_via_binary(DockerRunBuilder(command=["bash", "-c", "ruby --version"]))
|
|
try:
|
|
c.wait()
|
|
logs = list(c.logs())[0].decode("utf-8")
|
|
finally:
|
|
c.stop()
|
|
c.wait()
|
|
c.delete()
|
|
assert "ruby " in logs
|
|
if os.environ.get("VERSION", None):
|
|
assert os.environ["VERSION"] in logs
|
|
|
|
def test_usage(self):
|
|
i = S2IDockerImage(image_name, tag=image_tag)
|
|
c = i.run_via_binary()
|
|
|
|
def logs_received():
|
|
return len(list(c.logs())) > 0
|
|
|
|
try:
|
|
c.wait()
|
|
# even after waiting there is still a race in journal logging driver
|
|
Probe(timeout=10, pause=0.05, count=20, fnc=logs_received).run()
|
|
logs = [x.decode("utf-8") for x in c.logs()]
|
|
logs = "\n".join(logs).strip()
|
|
usage = i.usage()
|
|
# FIXME: workaround: `docker logs` can't handle logs like these: '\n\n\n'
|
|
assert logs.replace("\n", "") == usage.replace("\n", "")
|
|
finally:
|
|
c.delete()
|