Merge "Add more tempest tests for container run"
This commit is contained in:
commit
9952e0ea9b
@ -13,7 +13,7 @@
|
|||||||
from six.moves.urllib import parse
|
from six.moves.urllib import parse
|
||||||
from tempest import config
|
from tempest import config
|
||||||
from tempest.lib.common import rest_client
|
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 tempest import manager
|
||||||
|
|
||||||
from zun.container.docker import utils as docker_utils
|
from zun.container.docker import utils as docker_utils
|
||||||
@ -30,9 +30,9 @@ class Manager(manager.Manager):
|
|||||||
def __init__(self, credentials=None, service=None):
|
def __init__(self, credentials=None, service=None):
|
||||||
super(Manager, self).__init__(credentials=credentials)
|
super(Manager, self).__init__(credentials=credentials)
|
||||||
|
|
||||||
params = {'service': CONF.container_management.catalog_type,
|
params = {'service': 'image',
|
||||||
'region': CONF.identity.region}
|
'region': CONF.identity.region}
|
||||||
self.keypairs_client = keypairs_client.KeyPairsClient(
|
self.images_client = images_client.ImagesClient(
|
||||||
self.auth_provider, **params)
|
self.auth_provider, **params)
|
||||||
self.container_client = ZunClient(self.auth_provider)
|
self.container_client = ZunClient(self.auth_provider)
|
||||||
|
|
||||||
@ -203,3 +203,15 @@ class DockerClient(object):
|
|||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
utils.wait_for_condition(is_pid_changed)
|
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)
|
||||||
|
@ -52,9 +52,15 @@ def container_data(**kwargs):
|
|||||||
'name': data_utils.rand_name('container'),
|
'name': data_utils.rand_name('container'),
|
||||||
'image': 'cirros:latest',
|
'image': 'cirros:latest',
|
||||||
'command': 'sleep 10000',
|
'command': 'sleep 10000',
|
||||||
|
'cpu': 0.1,
|
||||||
'memory': '100',
|
'memory': '100',
|
||||||
'environment': {},
|
'environment': {},
|
||||||
'image_driver': 'docker'
|
'labels': {},
|
||||||
|
'image_driver': 'docker',
|
||||||
|
'image_pull_policy': 'always',
|
||||||
|
'restart_policy': {'Name': 'no'},
|
||||||
|
'workdir': '/',
|
||||||
|
'interactive': False
|
||||||
}
|
}
|
||||||
|
|
||||||
data.update(kwargs)
|
data.update(kwargs)
|
||||||
|
@ -34,6 +34,7 @@ class TestContainer(base.BaseZunTest):
|
|||||||
super(TestContainer, cls).setup_clients()
|
super(TestContainer, cls).setup_clients()
|
||||||
cls.container_client = cls.os.container_client
|
cls.container_client = cls.os.container_client
|
||||||
cls.docker_client = clients.DockerClient()
|
cls.docker_client = clients.DockerClient()
|
||||||
|
cls.images_client = cls.os.images_client
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def resource_setup(cls):
|
def resource_setup(cls):
|
||||||
@ -77,6 +78,67 @@ class TestContainer(base.BaseZunTest):
|
|||||||
def test_run_container(self):
|
def test_run_container(self):
|
||||||
self._run_container()
|
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')
|
@decorators.idempotent_id('3fa024ef-aba1-48fe-9682-0d6b7854faa3')
|
||||||
def test_start_stop_container(self):
|
def test_start_stop_container(self):
|
||||||
_, model = self._run_container()
|
_, model = self._run_container()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user