edf25cb299
- Check if local docker is available, if not skip the tests. So this should allow gerrit tests to pass. - Stick to docker-py 1.x, because 2.0 has lot of naming changes. - Use Fedora 25 instead of 23. - Use Ubuntu 16.04 instead of 14.04. - Use pip --pre parameter. Allowing to test dev release (pre). - Rename Dockerfiles to get more consistency using a new naming convention. - Naming convention that I hope will make Bruno happy ! ;) Change-Id: I3cbd51f201c4805ba58ebcabb023237624d4dfc8
127 lines
4.2 KiB
Python
127 lines
4.2 KiB
Python
# coding=utf-8
|
|
|
|
from __future__ import unicode_literals
|
|
from __future__ import print_function
|
|
from __future__ import division
|
|
from __future__ import absolute_import
|
|
from future import standard_library
|
|
from builtins import object
|
|
import os
|
|
import stat
|
|
import subprocess
|
|
import re
|
|
import pytest
|
|
from docker import Client
|
|
from path import Path
|
|
standard_library.install_aliases()
|
|
|
|
|
|
class DockerTest(object):
|
|
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('.dkf', '')
|
|
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)
|
|
self.cli.remove_container(container=container.get('Id'))
|
|
return(response.decode('utf8'))
|
|
|
|
|
|
def local_docker_available():
|
|
try:
|
|
mode = os.stat('/var/run/docker.sock').st_mode
|
|
except OSError:
|
|
return False
|
|
isSocket = stat.S_ISSOCK(mode)
|
|
if not isSocket:
|
|
print('Make sure docker services are running')
|
|
return False
|
|
|
|
cli = Client(base_url='unix://var/run/docker.sock')
|
|
response = cli.containers()
|
|
if not isinstance(response, list):
|
|
print('Ensure you have sufficiant' +
|
|
'credentials to use docker with' +
|
|
'your current user')
|
|
return False
|
|
return True
|
|
|
|
|
|
local_docker = pytest.mark.skipif(
|
|
not local_docker_available(), reason="Docker is not available locally")
|
|
|
|
|
|
@local_docker
|
|
def test_sources():
|
|
output = subprocess.check_output(["python", "setup.py", "sdist"])
|
|
search = re.search(r"removing '(\S+)'", str(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()
|
|
|
|
|
|
@local_docker
|
|
def test_dockerbuild():
|
|
docker = DockerTest()
|
|
# Warning : Image tag is derived from file name, do not use uppercase !!!
|
|
# because docker image tags can not use uppercase so far.
|
|
dockerfiles = ('redfish-client/tests/ubuntu-16.04-src-p2.dkf',
|
|
'redfish-client/tests/debian-8-src-p2.dkf',
|
|
'redfish-client/tests/centos-7-src-p2.dkf',
|
|
'redfish-client/tests/fedora-25-src-p2.dkf',
|
|
'redfish-client/tests/fedora-25-src-p3.dkf',
|
|
'redfish-client/tests/fedora-25-pip-p2.dkf',)
|
|
for dockerfile in dockerfiles:
|
|
print('Testing : {}'.format(dockerfile))
|
|
response = docker.build(dockerfile)
|
|
status = str(response.pop())
|
|
assert 'Successfully built' in status
|
|
|
|
|
|
@local_docker
|
|
def test_install():
|
|
docker = DockerTest()
|
|
images = ('rf-ubuntu-16.04-src-p2',
|
|
'rf-debian-8-src-p2',
|
|
'rf-centos-7-src-p2',
|
|
'rf-fedora-25-src-p2',
|
|
'rf-fedora-25-src-p3',
|
|
'rf-fedora-25-pip-p2')
|
|
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)
|
|
|
|
|
|
@local_docker
|
|
def test_versionformat():
|
|
docker = DockerTest()
|
|
images = ('rf-ubuntu-16.04-src-p2',
|
|
'rf-debian-8-src-p2',
|
|
'rf-centos-7-src-p2',
|
|
'rf-fedora-25-src-p2',
|
|
'rf-fedora-25-src-p3',
|
|
'rf-fedora-25-pip-p2')
|
|
for img in images:
|
|
print('Testing : {}'.format(img))
|
|
response = docker.run(img, 'redfish-client --version')
|
|
print(response)
|
|
assert (re.match(r'redfish-client \d+\.\d+', response))
|