From 096d58f25e4ed6d1bc62c744a01ff838e1e604b1 Mon Sep 17 00:00:00 2001 From: Uggla Date: Fri, 4 Mar 2016 11:59:08 +0100 Subject: [PATCH] Introduce client testing This is a first implementation probably a bit raw. So it needs improvement. Tests require: - docker available on host. - docker credentials to the user who is running the tests. Current tests: - Check docker socket - Check docker can be used by api. - Check source installation on Ubuntu, Debian, Fedora. - Check pip installation in Fedora. - Check if client can show an empty configuration. - Check client version format (basic). --- redfish-client/tests/Dockerfile.debian | 13 ++++ redfish-client/tests/Dockerfile.fedora | 11 +++ redfish-client/tests/Dockerfile.fedorapip | 7 ++ redfish-client/tests/Dockerfile.ubuntu | 13 ++++ redfish-client/tests/test_client.py | 89 +++++++++++++++++++++++ test-requirements.txt | 14 +--- 6 files changed, 137 insertions(+), 10 deletions(-) create mode 100644 redfish-client/tests/Dockerfile.debian create mode 100644 redfish-client/tests/Dockerfile.fedora create mode 100644 redfish-client/tests/Dockerfile.fedorapip create mode 100644 redfish-client/tests/Dockerfile.ubuntu create mode 100644 redfish-client/tests/test_client.py diff --git a/redfish-client/tests/Dockerfile.debian b/redfish-client/tests/Dockerfile.debian new file mode 100644 index 0000000..bb09658 --- /dev/null +++ b/redfish-client/tests/Dockerfile.debian @@ -0,0 +1,13 @@ +FROM debian:jessie +ENV DEBIAN_FRONTEND noninteractive +RUN apt-get update && \ +apt-get install -y apt-utils && \ +apt-get install -y python-pip +COPY python-redfish.src.tar.gz /python-redfish.src.tar.gz +RUN mkdir /var/log/python-redfish +RUN tar xvvf python-redfish.src.tar.gz +RUN cd python-redfish* && \ +pip install -r requirements.txt && \ +python setup.py install +CMD ["/bin/bash"] + diff --git a/redfish-client/tests/Dockerfile.fedora b/redfish-client/tests/Dockerfile.fedora new file mode 100644 index 0000000..4770d9f --- /dev/null +++ b/redfish-client/tests/Dockerfile.fedora @@ -0,0 +1,11 @@ +FROM fedora:23 +RUN dnf install -y python-pip && \ +dnf install -y git && \ +dnf install -y tar +COPY python-redfish.src.tar.gz /python-redfish.src.tar.gz +RUN mkdir /var/log/python-redfish +RUN tar xvvf python-redfish.src.tar.gz +RUN cd python-redfish* && \ +pip install -r requirements.txt && \ +python setup.py install +CMD ["/bin/bash"] diff --git a/redfish-client/tests/Dockerfile.fedorapip b/redfish-client/tests/Dockerfile.fedorapip new file mode 100644 index 0000000..dfb0cad --- /dev/null +++ b/redfish-client/tests/Dockerfile.fedorapip @@ -0,0 +1,7 @@ +FROM fedora:23 +RUN dnf install -y python-pip && \ +dnf install -y git +RUN mkdir /var/log/python-redfish +RUN pip install python-redfish +CMD ["/bin/bash"] + diff --git a/redfish-client/tests/Dockerfile.ubuntu b/redfish-client/tests/Dockerfile.ubuntu new file mode 100644 index 0000000..c77091c --- /dev/null +++ b/redfish-client/tests/Dockerfile.ubuntu @@ -0,0 +1,13 @@ +FROM ubuntu:wily +ENV DEBIAN_FRONTEND noninteractive +RUN apt-get update && \ +apt-get install -y apt-utils && \ +apt-get install -y python-pip +COPY python-redfish.src.tar.gz /python-redfish.src.tar.gz +RUN mkdir /var/log/python-redfish +RUN tar xvvf python-redfish.src.tar.gz +RUN cd python-redfish* && \ +pip install -r requirements.txt && \ +python setup.py install +CMD ["/bin/bash"] + diff --git a/redfish-client/tests/test_client.py b/redfish-client/tests/test_client.py new file mode 100644 index 0000000..7cd157d --- /dev/null +++ b/redfish-client/tests/test_client.py @@ -0,0 +1,89 @@ +# coding=utf-8 +import os +import stat +import subprocess +import re +from docker import Client +from path import Path + + +class DockerTest(): + def __init__(self): + self.cli = Client(base_url='unix://var/run/docker.sock') + + def build(self, dockerfile): + dockerfile = Path(dockerfile) + tag = 'rf' + dockerfile.basename().replace('Dockerfile.', '') + dockerfile.copy('redfish-client/tests/Dockerfile') + response = [line for line in self.cli.build( + path='redfish-client/tests', + tag=tag, + rm=True)] + return(response) + + def run(self, image, command): + container = self.cli.create_container(image=image, + command=command, + tty=True, + stdin_open=True) + self.cli.start(container=container.get('Id')) + self.cli.wait(container=container.get('Id')) + response = self.cli.logs(container=container.get('Id'), + stdout=True) + return(response) + + +def test_dockersocket(): + mode = os.stat('/var/run/docker.sock').st_mode + isSocket = stat.S_ISSOCK(mode) + assert isSocket, 'Make sure docker services are running' + + +def test_docker(): + cli = Client(base_url='unix://var/run/docker.sock') + response = cli.containers() + assert isinstance(response, list), 'Ensure you have sufficiant' + \ + 'credentials to use docker with' + \ + 'your current user' + + +def test_sources(): + output = subprocess.check_output(["python", "setup.py", "sdist"]) + search = re.search(r"removing '(\S+)'", output) + filename = Path('dist/' + search.group(1) + '.tar.gz') + filename.copy('redfish-client/tests/python-redfish.src.tar.gz') + assert Path('redfish-client/tests/python-redfish.src.tar.gz').isfile() + + +def test_dockerbuild(): + docker = DockerTest() + dockerfiles = ('redfish-client/tests/Dockerfile.ubuntu', + 'redfish-client/tests/Dockerfile.debian', + 'redfish-client/tests/Dockerfile.fedora', + 'redfish-client/tests/Dockerfile.fedorapip') + for dockerfile in dockerfiles: + print('Testing : {}'.format(dockerfile)) + response = docker.build(dockerfile) + status = response.pop() + assert 'Successfully built' in status + + +def test_install(): + docker = DockerTest() + images = ('rfubuntu', 'rfdebian', 'rffedora', 'rffedorapip') + for img in images: + print('Testing : {}'.format(img)) + response = docker.run(img, 'redfish-client config showall') + print(response) + assert ('Managers configured' in response and 'None' in response) + + +def test_versionformat(): + docker = DockerTest() + images = ('rfubuntu', 'rfdebian', 'rffedora', 'rffedorapip') + for img in images: + print('Testing : {}'.format(img)) + response = docker.run(img, 'redfish-client --version') + print(response) + assert (re.match('redfish-client \d+\.\d+', response)) + diff --git a/test-requirements.txt b/test-requirements.txt index 1da9f7e..2dd9159 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -2,14 +2,8 @@ # of appearance. Changing the order has an impact on the overall integration # process, which may cause wedges in the gate later. -hacking<0.11,>=0.10.0 - +pytest>=2.6.4 coverage>=3.6 -discover -python-subunit>=0.0.18 -sphinx>=1.1.2,!=1.2.0,!=1.3b1,<1.3 -#oslosphinx>=2.2.0 # Apache-2.0 -#oslotest>=1.2.0 # Apache-2.0 -testrepository>=0.0.18 -testscenarios>=0.4 -testtools>=0.9.36,!=1.2.0 +mock>=1.0.1 +docker-py>=1.1.0 +path.py>=5.2