Merge "Remove tests for docker container"

This commit is contained in:
Zuul 2019-06-30 00:09:26 +00:00 committed by Gerrit Code Review
commit fbc14c99bb
3 changed files with 17 additions and 148 deletions

View File

@ -405,46 +405,9 @@ class DockerHTTPClient(docker.APIClient):
tls=False
)
def list_instances(self, inspect=False):
"""List all containers."""
res = []
for container in self.containers(all=True):
info = self.inspect_container(container['Id'])
if not info:
continue
if inspect:
res.append(info)
else:
res.append(info['Config'].get('Hostname'))
return res
def list_containers(self):
return self.containers(all=True, filters={'name': 'zun-'})
class DockerClient(object):
def get_container(self, container_id,
docker_auth_url=CONF.docker.api_url):
with docker_client(docker_auth_url) as docker:
for info in docker.list_instances(inspect=True):
if container_id in info['Name']:
return info
return None
def ensure_container_pid_changed(
self, container_id, pid,
docker_auth_url=CONF.docker.api_url):
def is_pid_changed():
container = self.get_container(container_id,
docker_auth_url=docker_auth_url)
new_pid = container.get('State').get('Pid')
if pid != new_pid:
return True
else:
return False
utils.wait_for_condition(is_pid_changed)
def pull_image(
self, repo, tag=None,
docker_auth_url=CONF.docker.api_url):
@ -468,8 +431,3 @@ class DockerClient(object):
docker_auth_url=CONF.docker.api_url):
with docker_client(docker_auth_url) as docker:
return docker.remove_network(name)
def get_archive(self, container_id, path,
docker_auth_url=CONF.docker.api_url):
with docker_client(docker_auth_url) as docker:
return docker.get_archive(container_id, path)

View File

@ -12,6 +12,7 @@
from io import BytesIO
import tarfile
import testtools
import time
import types
@ -96,17 +97,23 @@ class TestContainer(base.BaseZunTest):
@decorators.idempotent_id('cef53a56-22b7-4808-b01c-06b2b7126115')
def test_delete_container(self):
_, container = self._create_container()
docker_url = self._get_docker_url(container)
resp, _ = self.container_client.delete_container(container.uuid)
self.assertEqual(204, resp.status)
self.container_client.ensure_container_deleted(container.uuid)
container = self.docker_client.get_container(
container.uuid, docker_url)
self.assertIsNone(container)
@decorators.idempotent_id('ef69c9e7-0ce0-4e14-b7ec-c1dc581a3927')
def test_run_container(self):
self._run_container()
_, model = self._run_container(
environment={'key1': 'env1', 'key2': 'env2'},
labels={'key1': 'label1', 'key2': 'label2'},
restart_policy={'Name': 'on-failure', 'MaximumRetryCount': 2},
)
resp, model = self.container_client.get_container(model.uuid)
self.assertEqual(200, resp.status)
self.assertEqual({'key1': 'env1', 'key2': 'env2'}, model.environment)
self.assertEqual({'key1': 'label1', 'key2': 'label2'}, model.labels)
self.assertEqual({'Name': 'on-failure', 'MaximumRetryCount': '2'},
model.restart_policy)
@decorators.idempotent_id('a2152d78-b6a6-4f47-8767-d83d29c6fb19')
def test_run_container_with_minimal_params(self):
@ -138,29 +145,6 @@ class TestContainer(base.BaseZunTest):
_, model = self._run_container(
image='cirros', image_driver='glance')
@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,
self._get_docker_url(model))
env = container.get('Config').get('Env')
self.assertTrue('key1=env1' in env)
self.assertTrue('key2=env2' in 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,
self._get_docker_url(model))
labels = container.get('Config').get('Labels')
self.assertEqual({'key1': 'label1', 'key2': 'label2'}, labels)
@decorators.idempotent_id('8fc7fec1-e1a2-3f65-a5a6-dba425c1607c')
def test_run_container_with_port(self):
project_id = self.container_client.tenant_id
@ -301,30 +285,6 @@ class TestContainer(base.BaseZunTest):
subnet = self.create_subnet(network, **subnet_kwargs)
return pool_id, subnet
@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,
self._get_docker_url(model))
policy = container.get('HostConfig').get('RestartPolicy')
self.assertEqual('on-failure', policy['Name'])
self.assertEqual(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,
self._get_docker_url(model))
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('f181eeda-a9d1-4b2e-9746-d6634ca81e2f')
@utils.requires_microversion('1.20')
def test_run_container_without_security_groups(self):
@ -610,15 +570,11 @@ class TestContainer(base.BaseZunTest):
self.assertEqual(202, resp.status)
self.container_client.ensure_container_in_desired_state(
model.uuid, 'Stopped')
self.assertEqual('Stopped',
self._get_container_state(model))
resp, _ = self.container_client.start_container(model.uuid)
self.assertEqual(202, resp.status)
self.container_client.ensure_container_in_desired_state(
model.uuid, 'Running')
self.assertEqual('Running',
self._get_container_state(model))
@decorators.idempotent_id('b5f39756-8898-4e0e-a48b-dda0a06b66b6')
def test_pause_unpause_container(self):
@ -628,15 +584,11 @@ class TestContainer(base.BaseZunTest):
self.assertEqual(202, resp.status)
self.container_client.ensure_container_in_desired_state(
model.uuid, 'Paused')
self.assertEqual('Paused',
self._get_container_state(model))
resp, _ = self.container_client.unpause_container(model.uuid)
self.assertEqual(202, resp.status)
self.container_client.ensure_container_in_desired_state(
model.uuid, 'Running')
self.assertEqual('Running',
self._get_container_state(model))
@decorators.idempotent_id('6179a588-3d48-4372-9599-f228411d1449')
def test_kill_container(self):
@ -646,27 +598,15 @@ class TestContainer(base.BaseZunTest):
self.assertEqual(202, resp.status)
self.container_client.ensure_container_in_desired_state(
model.uuid, 'Stopped')
self.assertEqual('Stopped',
self._get_container_state(model))
@decorators.idempotent_id('c2e54321-0a70-4331-ba62-9dcaa75ac250')
@testtools.skip('temporarily disabled')
def test_reboot_container(self):
_, model = self._run_container()
docker_base_url = self._get_docker_url(model)
container = self.docker_client.get_container(model.uuid,
docker_base_url)
pid = container.get('State').get('Pid')
resp, _ = self.container_client.reboot_container(model.uuid)
self.assertEqual(202, resp.status)
self.docker_client.ensure_container_pid_changed(model.uuid, pid,
docker_base_url)
self.assertEqual('Running',
self._get_container_state(model))
# assert pid is changed
container = self.docker_client.get_container(model.uuid,
docker_base_url)
self.assertNotEqual(pid, container.get('State').get('Pid'))
# TODO(hongbin): wait for reboot to complete and assure it succeeds
@decorators.idempotent_id('8a591ff8-6793-427f-82a6-e3921d8b4f81')
def test_exec_container(self):
@ -690,10 +630,6 @@ class TestContainer(base.BaseZunTest):
_, model = self._run_container(cpu=0.1, memory=100)
self.assertEqual('100', model.memory)
self.assertEqual(0.1, model.cpu)
# docker_base_url = self._get_docker_url(model)
# container = self.docker_client.get_container(model.uuid,
# docker_base_url)
# self._assert_resource_constraints(container, cpu=0.1, memory=100)
gen_model = datagen.container_patch_data(cpu=0.2, memory=200)
resp, model = self.container_client.update_container(model.uuid,
@ -701,9 +637,6 @@ class TestContainer(base.BaseZunTest):
self.assertEqual(200, resp.status)
self.assertEqual('200', model.memory)
self.assertEqual(0.2, model.cpu)
# container = self.docker_client.get_container(model.uuid,
# docker_base_url)
# self._assert_resource_constraints(container, cpu=0.2, memory=200)
@decorators.idempotent_id('b218bea7-f19b-499f-9819-c7021ffc59f4')
@utils.requires_microversion('1.14')
@ -762,7 +695,6 @@ class TestContainer(base.BaseZunTest):
resp, model = self.container_client.get_container(model.uuid)
self.assertEqual(200, resp.status)
self.assertEqual('Created', model.status)
self.assertEqual('Created', self._get_container_state(model))
return resp, model
def _run_container(self, gen_model=None, desired_state='Running',
@ -779,24 +711,8 @@ class TestContainer(base.BaseZunTest):
# Assert the container is started
resp, model = self.container_client.get_container(model.uuid)
self.assertEqual(desired_state, model.status)
self.assertEqual(desired_state, self._get_container_state(model))
return resp, model
def _get_container_state(self, model):
container = self.docker_client.get_container(
model.uuid, self._get_docker_url(model))
status = container.get('State')
if status.get('Error') is True:
return 'Error'
elif status.get('Paused'):
return 'Paused'
elif status.get('Running'):
return 'Running'
elif status.get('Status') == 'created':
return 'Created'
else:
return 'Stopped'
def _get_all_security_groups(self, container):
# find all neutron ports of this container
port_ids = set()
@ -819,14 +735,9 @@ class TestContainer(base.BaseZunTest):
return sg_names
def _get_docker_url(self, container=None, host='localhost'):
def _get_docker_url(self, host='localhost'):
protocol = 'tcp'
port = '2375'
if container:
if not hasattr(container, 'host'):
_, container = self.os_admin.container_client.get_container(
container.uuid, params={'all_projects': True})
host = container.host
# NOTE(kiennt): By default, devstack-plugin-container will
# set docker_api_url = {
# "unix://$DOCKER_ENGINE_SOCKET_FILE",
@ -968,7 +879,6 @@ class TestContainerLegacy(TestContainer):
# Assert the container is started
resp, model = self.container_client.get_container(model.uuid)
self.assertEqual('Running', model.status)
self.assertEqual('Running', self._get_container_state(model))
return resp, model
def _create_container(self, **kwargs):
@ -987,5 +897,4 @@ class TestContainerLegacy(TestContainer):
resp, model = self.container_client.get_container(model.uuid)
self.assertEqual(200, resp.status)
self.assertEqual('Created', model.status)
self.assertEqual('Created', self._get_container_state(model))
return resp, model

View File

@ -102,6 +102,8 @@ class BaseZunTest(api_version_utils.BaseMicroversionTest,
if req_version >= api_version_request.APIVersionRequest('1.27'):
cls.os_admin.container_client.delete_network(network['id'])
else:
# TODO(hongbin): remove such legacy cleanup logic after all
# branches support 'delete_network' above.
docker_url = 'tcp://localhost:2375'
networks = cls.docker_client.list_networks(
network['id'], docker_auth_url=docker_url)