Merge "Remove tests for docker container"
This commit is contained in:
commit
fbc14c99bb
@ -405,46 +405,9 @@ class DockerHTTPClient(docker.APIClient):
|
|||||||
tls=False
|
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):
|
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(
|
def pull_image(
|
||||||
self, repo, tag=None,
|
self, repo, tag=None,
|
||||||
docker_auth_url=CONF.docker.api_url):
|
docker_auth_url=CONF.docker.api_url):
|
||||||
@ -468,8 +431,3 @@ class DockerClient(object):
|
|||||||
docker_auth_url=CONF.docker.api_url):
|
docker_auth_url=CONF.docker.api_url):
|
||||||
with docker_client(docker_auth_url) as docker:
|
with docker_client(docker_auth_url) as docker:
|
||||||
return docker.remove_network(name)
|
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)
|
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
|
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
import tarfile
|
import tarfile
|
||||||
|
import testtools
|
||||||
import time
|
import time
|
||||||
import types
|
import types
|
||||||
|
|
||||||
@ -96,17 +97,23 @@ class TestContainer(base.BaseZunTest):
|
|||||||
@decorators.idempotent_id('cef53a56-22b7-4808-b01c-06b2b7126115')
|
@decorators.idempotent_id('cef53a56-22b7-4808-b01c-06b2b7126115')
|
||||||
def test_delete_container(self):
|
def test_delete_container(self):
|
||||||
_, container = self._create_container()
|
_, container = self._create_container()
|
||||||
docker_url = self._get_docker_url(container)
|
|
||||||
resp, _ = self.container_client.delete_container(container.uuid)
|
resp, _ = self.container_client.delete_container(container.uuid)
|
||||||
self.assertEqual(204, resp.status)
|
self.assertEqual(204, resp.status)
|
||||||
self.container_client.ensure_container_deleted(container.uuid)
|
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')
|
@decorators.idempotent_id('ef69c9e7-0ce0-4e14-b7ec-c1dc581a3927')
|
||||||
def test_run_container(self):
|
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')
|
@decorators.idempotent_id('a2152d78-b6a6-4f47-8767-d83d29c6fb19')
|
||||||
def test_run_container_with_minimal_params(self):
|
def test_run_container_with_minimal_params(self):
|
||||||
@ -138,29 +145,6 @@ class TestContainer(base.BaseZunTest):
|
|||||||
_, model = self._run_container(
|
_, model = self._run_container(
|
||||||
image='cirros', image_driver='glance')
|
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')
|
@decorators.idempotent_id('8fc7fec1-e1a2-3f65-a5a6-dba425c1607c')
|
||||||
def test_run_container_with_port(self):
|
def test_run_container_with_port(self):
|
||||||
project_id = self.container_client.tenant_id
|
project_id = self.container_client.tenant_id
|
||||||
@ -301,30 +285,6 @@ class TestContainer(base.BaseZunTest):
|
|||||||
subnet = self.create_subnet(network, **subnet_kwargs)
|
subnet = self.create_subnet(network, **subnet_kwargs)
|
||||||
return pool_id, subnet
|
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')
|
@decorators.idempotent_id('f181eeda-a9d1-4b2e-9746-d6634ca81e2f')
|
||||||
@utils.requires_microversion('1.20')
|
@utils.requires_microversion('1.20')
|
||||||
def test_run_container_without_security_groups(self):
|
def test_run_container_without_security_groups(self):
|
||||||
@ -610,15 +570,11 @@ class TestContainer(base.BaseZunTest):
|
|||||||
self.assertEqual(202, resp.status)
|
self.assertEqual(202, resp.status)
|
||||||
self.container_client.ensure_container_in_desired_state(
|
self.container_client.ensure_container_in_desired_state(
|
||||||
model.uuid, 'Stopped')
|
model.uuid, 'Stopped')
|
||||||
self.assertEqual('Stopped',
|
|
||||||
self._get_container_state(model))
|
|
||||||
|
|
||||||
resp, _ = self.container_client.start_container(model.uuid)
|
resp, _ = self.container_client.start_container(model.uuid)
|
||||||
self.assertEqual(202, resp.status)
|
self.assertEqual(202, resp.status)
|
||||||
self.container_client.ensure_container_in_desired_state(
|
self.container_client.ensure_container_in_desired_state(
|
||||||
model.uuid, 'Running')
|
model.uuid, 'Running')
|
||||||
self.assertEqual('Running',
|
|
||||||
self._get_container_state(model))
|
|
||||||
|
|
||||||
@decorators.idempotent_id('b5f39756-8898-4e0e-a48b-dda0a06b66b6')
|
@decorators.idempotent_id('b5f39756-8898-4e0e-a48b-dda0a06b66b6')
|
||||||
def test_pause_unpause_container(self):
|
def test_pause_unpause_container(self):
|
||||||
@ -628,15 +584,11 @@ class TestContainer(base.BaseZunTest):
|
|||||||
self.assertEqual(202, resp.status)
|
self.assertEqual(202, resp.status)
|
||||||
self.container_client.ensure_container_in_desired_state(
|
self.container_client.ensure_container_in_desired_state(
|
||||||
model.uuid, 'Paused')
|
model.uuid, 'Paused')
|
||||||
self.assertEqual('Paused',
|
|
||||||
self._get_container_state(model))
|
|
||||||
|
|
||||||
resp, _ = self.container_client.unpause_container(model.uuid)
|
resp, _ = self.container_client.unpause_container(model.uuid)
|
||||||
self.assertEqual(202, resp.status)
|
self.assertEqual(202, resp.status)
|
||||||
self.container_client.ensure_container_in_desired_state(
|
self.container_client.ensure_container_in_desired_state(
|
||||||
model.uuid, 'Running')
|
model.uuid, 'Running')
|
||||||
self.assertEqual('Running',
|
|
||||||
self._get_container_state(model))
|
|
||||||
|
|
||||||
@decorators.idempotent_id('6179a588-3d48-4372-9599-f228411d1449')
|
@decorators.idempotent_id('6179a588-3d48-4372-9599-f228411d1449')
|
||||||
def test_kill_container(self):
|
def test_kill_container(self):
|
||||||
@ -646,27 +598,15 @@ class TestContainer(base.BaseZunTest):
|
|||||||
self.assertEqual(202, resp.status)
|
self.assertEqual(202, resp.status)
|
||||||
self.container_client.ensure_container_in_desired_state(
|
self.container_client.ensure_container_in_desired_state(
|
||||||
model.uuid, 'Stopped')
|
model.uuid, 'Stopped')
|
||||||
self.assertEqual('Stopped',
|
|
||||||
self._get_container_state(model))
|
|
||||||
|
|
||||||
@decorators.idempotent_id('c2e54321-0a70-4331-ba62-9dcaa75ac250')
|
@decorators.idempotent_id('c2e54321-0a70-4331-ba62-9dcaa75ac250')
|
||||||
|
@testtools.skip('temporarily disabled')
|
||||||
def test_reboot_container(self):
|
def test_reboot_container(self):
|
||||||
_, model = self._run_container()
|
_, 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)
|
resp, _ = self.container_client.reboot_container(model.uuid)
|
||||||
self.assertEqual(202, resp.status)
|
self.assertEqual(202, resp.status)
|
||||||
self.docker_client.ensure_container_pid_changed(model.uuid, pid,
|
# TODO(hongbin): wait for reboot to complete and assure it succeeds
|
||||||
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'))
|
|
||||||
|
|
||||||
@decorators.idempotent_id('8a591ff8-6793-427f-82a6-e3921d8b4f81')
|
@decorators.idempotent_id('8a591ff8-6793-427f-82a6-e3921d8b4f81')
|
||||||
def test_exec_container(self):
|
def test_exec_container(self):
|
||||||
@ -690,10 +630,6 @@ class TestContainer(base.BaseZunTest):
|
|||||||
_, model = self._run_container(cpu=0.1, memory=100)
|
_, model = self._run_container(cpu=0.1, memory=100)
|
||||||
self.assertEqual('100', model.memory)
|
self.assertEqual('100', model.memory)
|
||||||
self.assertEqual(0.1, model.cpu)
|
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)
|
gen_model = datagen.container_patch_data(cpu=0.2, memory=200)
|
||||||
resp, model = self.container_client.update_container(model.uuid,
|
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, resp.status)
|
||||||
self.assertEqual('200', model.memory)
|
self.assertEqual('200', model.memory)
|
||||||
self.assertEqual(0.2, model.cpu)
|
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')
|
@decorators.idempotent_id('b218bea7-f19b-499f-9819-c7021ffc59f4')
|
||||||
@utils.requires_microversion('1.14')
|
@utils.requires_microversion('1.14')
|
||||||
@ -762,7 +695,6 @@ class TestContainer(base.BaseZunTest):
|
|||||||
resp, model = self.container_client.get_container(model.uuid)
|
resp, model = self.container_client.get_container(model.uuid)
|
||||||
self.assertEqual(200, resp.status)
|
self.assertEqual(200, resp.status)
|
||||||
self.assertEqual('Created', model.status)
|
self.assertEqual('Created', model.status)
|
||||||
self.assertEqual('Created', self._get_container_state(model))
|
|
||||||
return resp, model
|
return resp, model
|
||||||
|
|
||||||
def _run_container(self, gen_model=None, desired_state='Running',
|
def _run_container(self, gen_model=None, desired_state='Running',
|
||||||
@ -779,24 +711,8 @@ class TestContainer(base.BaseZunTest):
|
|||||||
# Assert the container is started
|
# Assert the container is started
|
||||||
resp, model = self.container_client.get_container(model.uuid)
|
resp, model = self.container_client.get_container(model.uuid)
|
||||||
self.assertEqual(desired_state, model.status)
|
self.assertEqual(desired_state, model.status)
|
||||||
self.assertEqual(desired_state, self._get_container_state(model))
|
|
||||||
return resp, 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):
|
def _get_all_security_groups(self, container):
|
||||||
# find all neutron ports of this container
|
# find all neutron ports of this container
|
||||||
port_ids = set()
|
port_ids = set()
|
||||||
@ -819,14 +735,9 @@ class TestContainer(base.BaseZunTest):
|
|||||||
|
|
||||||
return sg_names
|
return sg_names
|
||||||
|
|
||||||
def _get_docker_url(self, container=None, host='localhost'):
|
def _get_docker_url(self, host='localhost'):
|
||||||
protocol = 'tcp'
|
protocol = 'tcp'
|
||||||
port = '2375'
|
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
|
# NOTE(kiennt): By default, devstack-plugin-container will
|
||||||
# set docker_api_url = {
|
# set docker_api_url = {
|
||||||
# "unix://$DOCKER_ENGINE_SOCKET_FILE",
|
# "unix://$DOCKER_ENGINE_SOCKET_FILE",
|
||||||
@ -968,7 +879,6 @@ class TestContainerLegacy(TestContainer):
|
|||||||
# Assert the container is started
|
# Assert the container is started
|
||||||
resp, model = self.container_client.get_container(model.uuid)
|
resp, model = self.container_client.get_container(model.uuid)
|
||||||
self.assertEqual('Running', model.status)
|
self.assertEqual('Running', model.status)
|
||||||
self.assertEqual('Running', self._get_container_state(model))
|
|
||||||
return resp, model
|
return resp, model
|
||||||
|
|
||||||
def _create_container(self, **kwargs):
|
def _create_container(self, **kwargs):
|
||||||
@ -987,5 +897,4 @@ class TestContainerLegacy(TestContainer):
|
|||||||
resp, model = self.container_client.get_container(model.uuid)
|
resp, model = self.container_client.get_container(model.uuid)
|
||||||
self.assertEqual(200, resp.status)
|
self.assertEqual(200, resp.status)
|
||||||
self.assertEqual('Created', model.status)
|
self.assertEqual('Created', model.status)
|
||||||
self.assertEqual('Created', self._get_container_state(model))
|
|
||||||
return resp, model
|
return resp, model
|
||||||
|
@ -102,6 +102,8 @@ class BaseZunTest(api_version_utils.BaseMicroversionTest,
|
|||||||
if req_version >= api_version_request.APIVersionRequest('1.27'):
|
if req_version >= api_version_request.APIVersionRequest('1.27'):
|
||||||
cls.os_admin.container_client.delete_network(network['id'])
|
cls.os_admin.container_client.delete_network(network['id'])
|
||||||
else:
|
else:
|
||||||
|
# TODO(hongbin): remove such legacy cleanup logic after all
|
||||||
|
# branches support 'delete_network' above.
|
||||||
docker_url = 'tcp://localhost:2375'
|
docker_url = 'tcp://localhost:2375'
|
||||||
networks = cls.docker_client.list_networks(
|
networks = cls.docker_client.list_networks(
|
||||||
network['id'], docker_auth_url=docker_url)
|
network['id'], docker_auth_url=docker_url)
|
||||||
|
Loading…
Reference in New Issue
Block a user