Merge "Add more tempest tests for container run"

This commit is contained in:
Jenkins 2017-05-27 05:01:01 +00:00 committed by Gerrit Code Review
commit 9952e0ea9b
3 changed files with 84 additions and 4 deletions

View File

@ -13,7 +13,7 @@
from six.moves.urllib import parse
from tempest import config
from tempest.lib.common import rest_client
from tempest.lib.services.compute import keypairs_client
from tempest.lib.services.image.v2 import images_client
from tempest import manager
from zun.container.docker import utils as docker_utils
@ -30,9 +30,9 @@ class Manager(manager.Manager):
def __init__(self, credentials=None, service=None):
super(Manager, self).__init__(credentials=credentials)
params = {'service': CONF.container_management.catalog_type,
params = {'service': 'image',
'region': CONF.identity.region}
self.keypairs_client = keypairs_client.KeyPairsClient(
self.images_client = images_client.ImagesClient(
self.auth_provider, **params)
self.container_client = ZunClient(self.auth_provider)
@ -203,3 +203,15 @@ class DockerClient(object):
else:
return False
utils.wait_for_condition(is_pid_changed)
def pull_image(self, repo, tag=None):
with docker_utils.docker_client() as docker:
docker.pull(repo, tag=tag)
def get_image(self, name):
with docker_utils.docker_client() as docker:
return docker.get_image(name)
def delete_image(self, name):
with docker_utils.docker_client() as docker:
return docker.remove_image(name)

View File

@ -52,9 +52,15 @@ def container_data(**kwargs):
'name': data_utils.rand_name('container'),
'image': 'cirros:latest',
'command': 'sleep 10000',
'cpu': 0.1,
'memory': '100',
'environment': {},
'image_driver': 'docker'
'labels': {},
'image_driver': 'docker',
'image_pull_policy': 'always',
'restart_policy': {'Name': 'no'},
'workdir': '/',
'interactive': False
}
data.update(kwargs)

View File

@ -34,6 +34,7 @@ class TestContainer(base.BaseZunTest):
super(TestContainer, cls).setup_clients()
cls.container_client = cls.os.container_client
cls.docker_client = clients.DockerClient()
cls.images_client = cls.os.images_client
@classmethod
def resource_setup(cls):
@ -77,6 +78,67 @@ class TestContainer(base.BaseZunTest):
def test_run_container(self):
self._run_container()
@decorators.idempotent_id('c32f93e3-da88-4c13-be38-25d2e662a28e')
def test_run_container_with_image_driver_glance(self):
image = None
try:
self.docker_client.pull_image('cirros')
image_data = self.docker_client.get_image('cirros')
image = self.images_client.create_image(
name='cirros', disk_format='raw', container_format='docker')
self.images_client.store_image_file(image['id'], image_data)
# delete the local image that was previously pulled down
self.docker_client.delete_image('cirros')
_, model = self._run_container(
image='cirros', image_driver='glance')
finally:
if image:
try:
self.images_client.delete_image(image['id'])
except Exception:
pass
@decorators.idempotent_id('b70bedbc-5ba2-400c-8f5f-0cf05ca17151')
def test_run_container_with_environment(self):
_, model = self._run_container(environment={
'key1': 'env1', 'key2': 'env2'})
container = self.docker_client.get_container(model.uuid)
env = container.get('Config').get('Env')
self.assertTrue('key1=env1', env)
self.assertTrue('key2=env2', env)
@decorators.idempotent_id('0e59d549-58ff-440f-8704-10e223c31cbc')
def test_run_container_with_labels(self):
_, model = self._run_container(labels={
'key1': 'label1', 'key2': 'label2'})
container = self.docker_client.get_container(model.uuid)
labels = container.get('Config').get('Labels')
self.assertTrue('key1=label1', labels)
self.assertTrue('key2=label2', labels)
@decorators.idempotent_id('9fc7fec0-e1a9-4f65-a5a6-dba425c1607c')
def test_run_container_with_restart_policy(self):
_, model = self._run_container(restart_policy={
'Name': 'on-failure', 'MaximumRetryCount': 2})
container = self.docker_client.get_container(model.uuid)
policy = container.get('HostConfig').get('RestartPolicy')
self.assertEqual('on-failure', policy['Name'])
self.assertTrue(2, policy['MaximumRetryCount'])
@decorators.idempotent_id('58585a4f-cdce-4dbd-9741-4416d1098f94')
def test_run_container_with_interactive(self):
_, model = self._run_container(interactive=True)
container = self.docker_client.get_container(model.uuid)
tty = container.get('Config').get('Tty')
stdin_open = container.get('Config').get('OpenStdin')
self.assertIs(True, tty)
self.assertIs(True, stdin_open)
@decorators.idempotent_id('3fa024ef-aba1-48fe-9682-0d6b7854faa3')
def test_start_stop_container(self):
_, model = self._run_container()