summaryrefslogtreecommitdiff
path: root/contrib/python/podman/test
diff options
context:
space:
mode:
authorJhon Honce <jhonce@redhat.com>2019-01-09 15:05:58 -0700
committerJhon Honce <jhonce@redhat.com>2019-01-10 11:27:50 -0700
commit45fb935fe44a383ae14f16ab533281687d642c5e (patch)
treef40e0fd8fae389398a5aa6d35888944cde9f03d8 /contrib/python/podman/test
parent2169b9fe14516b724b257437ed97e32046a4d611 (diff)
downloadpodman-45fb935fe44a383ae14f16ab533281687d642c5e.tar.gz
podman-45fb935fe44a383ae14f16ab533281687d642c5e.tar.bz2
podman-45fb935fe44a383ae14f16ab533281687d642c5e.zip
Move python code from contrib to it's own repo python-podman
Signed-off-by: Jhon Honce <jhonce@redhat.com>
Diffstat (limited to 'contrib/python/podman/test')
-rw-r--r--contrib/python/podman/test/__init__.py0
-rw-r--r--contrib/python/podman/test/podman_testcase.py112
-rw-r--r--contrib/python/podman/test/retry_decorator.py43
-rw-r--r--contrib/python/podman/test/test_client.py35
-rw-r--r--contrib/python/podman/test/test_containers.py244
-rw-r--r--contrib/python/podman/test/test_images.py174
-rw-r--r--contrib/python/podman/test/test_libs.py53
-rw-r--r--contrib/python/podman/test/test_pods_ctnrs.py66
-rw-r--r--contrib/python/podman/test/test_pods_no_ctnrs.py94
-rwxr-xr-xcontrib/python/podman/test/test_runner.sh156
-rw-r--r--contrib/python/podman/test/test_system.py63
-rw-r--r--contrib/python/podman/test/test_tunnel.py86
12 files changed, 0 insertions, 1126 deletions
diff --git a/contrib/python/podman/test/__init__.py b/contrib/python/podman/test/__init__.py
deleted file mode 100644
index e69de29bb..000000000
--- a/contrib/python/podman/test/__init__.py
+++ /dev/null
diff --git a/contrib/python/podman/test/podman_testcase.py b/contrib/python/podman/test/podman_testcase.py
deleted file mode 100644
index da73c1024..000000000
--- a/contrib/python/podman/test/podman_testcase.py
+++ /dev/null
@@ -1,112 +0,0 @@
-"""Base for podman tests."""
-import contextlib
-import functools
-import itertools
-import os
-import subprocess
-import time
-import unittest
-
-from varlink import VarlinkError
-
-MethodNotImplemented = 'org.varlink.service.MethodNotImplemented'
-
-
-class PodmanTestCase(unittest.TestCase):
- """Hide the sausage making of initializing storage."""
-
- @classmethod
- def setUpClass(cls):
- """Fixture to setup podman test case."""
- if hasattr(PodmanTestCase, 'alpine_process'):
- PodmanTestCase.tearDownClass()
-
- def run_cmd(*args):
- cmd = list(itertools.chain(*args))
- try:
- pid = subprocess.Popen(
- cmd,
- close_fds=True,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- out, err = pid.communicate()
- except OSError as e:
- print('{}: {}({})'.format(cmd, e.strerror, e.returncode))
- except ValueError as e:
- print('{}: {}'.format(cmd, e.message))
- raise
- else:
- return out.strip()
-
- tmpdir = os.environ.get('TMPDIR', '/tmp')
- podman_args = [
- '--storage-driver=vfs',
- '--cgroup-manager=cgroupfs',
- '--root={}/crio'.format(tmpdir),
- '--runroot={}/crio-run'.format(tmpdir),
- '--cni-config-dir={}/cni/net.d'.format(tmpdir),
- ]
-
- run_podman = functools.partial(run_cmd, ['podman'], podman_args)
-
- id = run_podman(['pull', 'alpine'])
- setattr(PodmanTestCase, 'alpine_id', id)
-
- run_podman(['pull', 'busybox'])
- run_podman(['images'])
-
- run_cmd(['rm', '-f', '{}/alpine_gold.tar'.format(tmpdir)])
- run_podman([
- 'save', '--output', '{}/alpine_gold.tar'.format(tmpdir), 'alpine'
- ])
-
- PodmanTestCase.alpine_log = open(
- os.path.join('/tmp/', 'alpine.log'), 'w')
-
- cmd = ['podman']
- cmd.extend(podman_args)
- # cmd.extend(['run', '-d', 'alpine', 'sleep', '500'])
- cmd.extend(['run', '-dt', 'alpine', '/bin/sh'])
- PodmanTestCase.alpine_process = subprocess.Popen(
- cmd,
- stdout=PodmanTestCase.alpine_log,
- stderr=subprocess.STDOUT,
- )
-
- PodmanTestCase.busybox_log = open(
- os.path.join('/tmp/', 'busybox.log'), 'w')
-
- cmd = ['podman']
- cmd.extend(podman_args)
- cmd.extend(['create', 'busybox'])
- PodmanTestCase.busybox_process = subprocess.Popen(
- cmd,
- stdout=PodmanTestCase.busybox_log,
- stderr=subprocess.STDOUT,
- )
- # give podman time to start ctnr
- time.sleep(2)
-
- # Close our handle of file
- PodmanTestCase.alpine_log.close()
- PodmanTestCase.busybox_log.close()
-
- @classmethod
- def tearDownClass(cls):
- """Fixture to clean up after podman unittest."""
- try:
- PodmanTestCase.alpine_process.kill()
- assert 0 == PodmanTestCase.alpine_process.wait(500)
- delattr(PodmanTestCase, 'alpine_process')
-
- PodmanTestCase.busybox_process.kill()
- assert 0 == PodmanTestCase.busybox_process.wait(500)
- except Exception as e:
- print('Exception: {}'.format(e))
- raise
-
- @contextlib.contextmanager
- def assertRaisesNotImplemented(self):
- """Sugar for unimplemented varlink methods."""
- with self.assertRaisesRegex(VarlinkError, MethodNotImplemented):
- yield
diff --git a/contrib/python/podman/test/retry_decorator.py b/contrib/python/podman/test/retry_decorator.py
deleted file mode 100644
index 31e06f382..000000000
--- a/contrib/python/podman/test/retry_decorator.py
+++ /dev/null
@@ -1,43 +0,0 @@
-"""Decorator to retry failed method."""
-import functools
-import time
-
-
-def retry(ExceptionToCheck, tries=4, delay=3, backoff=2, print_=None):
- """Retry calling the decorated function using an exponential backoff.
-
- Specialized for our unittests
- from:
- http://www.saltycrane.com/blog/2009/11/trying-out-retry-decorator-python/
- original from: http://wiki.python.org/moin/PythonDecoratorLibrary#Retry
-
- :param ExceptionToCheck: the exception to check. may be a tuple of
- exceptions to check
- :type ExceptionToCheck: Exception or tuple
- :param tries: number of times to try (not retry) before giving up
- :type tries: int
- :param delay: initial delay between retries in seconds
- :type delay: int
- :param backoff: backoff multiplier e.g. value of 2 will double the delay
- each retry
- :type backoff: int
- """
- def deco_retry(f):
- @functools.wraps(f)
- def f_retry(*args, **kwargs):
- mtries, mdelay = tries, delay
- while mtries > 1:
- try:
- return f(*args, **kwargs)
- except ExceptionToCheck as e:
- if print_:
- print_('{}, Retrying in {} seconds...'.format(
- str(e), mdelay))
- time.sleep(mdelay)
- mtries -= 1
- mdelay *= backoff
- return f(*args, **kwargs)
-
- return f_retry # true decorator
-
- return deco_retry
diff --git a/contrib/python/podman/test/test_client.py b/contrib/python/podman/test/test_client.py
deleted file mode 100644
index 3fc6d39dc..000000000
--- a/contrib/python/podman/test/test_client.py
+++ /dev/null
@@ -1,35 +0,0 @@
-from __future__ import absolute_import
-
-import unittest
-from unittest.mock import patch
-
-import podman
-from podman.client import BaseClient, Client, LocalClient, RemoteClient
-
-
-class TestClient(unittest.TestCase):
- def setUp(self):
- pass
-
- @patch('podman.libs.system.System.ping', return_value=True)
- def test_local(self, mock_ping):
- p = Client(
- uri='unix:/run/podman',
- interface='io.podman',
- )
-
- self.assertIsInstance(p._client, LocalClient)
- self.assertIsInstance(p._client, BaseClient)
-
- mock_ping.assert_called_once_with()
-
- @patch('podman.libs.system.System.ping', return_value=True)
- def test_remote(self, mock_ping):
- p = Client(
- uri='unix:/run/podman',
- interface='io.podman',
- remote_uri='ssh://user@hostname/run/podman/podman',
- identity_file='~/.ssh/id_rsa')
-
- self.assertIsInstance(p._client, BaseClient)
- mock_ping.assert_called_once_with()
diff --git a/contrib/python/podman/test/test_containers.py b/contrib/python/podman/test/test_containers.py
deleted file mode 100644
index 5201956e8..000000000
--- a/contrib/python/podman/test/test_containers.py
+++ /dev/null
@@ -1,244 +0,0 @@
-import os
-import signal
-import unittest
-from pathlib import Path
-from test.podman_testcase import PodmanTestCase
-from test.retry_decorator import retry
-
-import podman
-
-
-class TestContainers(PodmanTestCase):
- @classmethod
- def setUpClass(cls):
- super().setUpClass()
-
- @classmethod
- def tearDownClass(cls):
- super().tearDownClass()
-
- def setUp(self):
- self.tmpdir = os.environ['TMPDIR']
- self.host = os.environ['PODMAN_HOST']
-
- self.pclient = podman.Client(self.host)
- self.loadCache()
-
- def tearDown(self):
- pass
-
- def loadCache(self):
- self.containers = list(self.pclient.containers.list())
-
- self.alpine_ctnr = next(
- iter([c for c in self.containers if 'alpine' in c['image']] or []),
- None)
-
- if self.alpine_ctnr and self.alpine_ctnr.status != 'running':
- self.alpine_ctnr.start()
-
- def test_list(self):
- self.assertGreaterEqual(len(self.containers), 2)
- self.assertIsNotNone(self.alpine_ctnr)
- self.assertIn('alpine', self.alpine_ctnr.image)
-
- def test_delete_stopped(self):
- before = len(self.containers)
-
- self.alpine_ctnr.stop()
- target = self.alpine_ctnr.id
- actual = self.pclient.containers.delete_stopped()
- self.assertIn(target, actual)
-
- self.loadCache()
- after = len(self.containers)
-
- self.assertLess(after, before)
- TestContainers.setUpClass()
-
- def test_get(self):
- actual = self.pclient.containers.get(self.alpine_ctnr.id)
- for k in ['id', 'status', 'ports']:
- self.assertEqual(actual[k], self.alpine_ctnr[k])
-
- with self.assertRaises(podman.ContainerNotFound):
- self.pclient.containers.get("bozo")
-
- def test_attach(self):
- # StringIO does not support fileno() so we had to go old school
- input = os.path.join(self.tmpdir, 'test_attach.stdin')
- output = os.path.join(self.tmpdir, 'test_attach.stdout')
-
- with open(input, 'w+') as mock_in, open(output, 'w+') as mock_out:
- # double quote is indeed in the expected place
- mock_in.write('echo H"ello, World"; exit\n')
- mock_in.seek(0, 0)
-
- ctnr = self.pclient.images.get(self.alpine_ctnr.image).container(
- detach=True, tty=True)
- ctnr.attach(stdin=mock_in.fileno(), stdout=mock_out.fileno())
- ctnr.start()
-
- mock_out.flush()
- mock_out.seek(0, 0)
- output = mock_out.read()
- self.assertIn('Hello', output)
-
- ctnr.remove(force=True)
-
- def test_processes(self):
- actual = list(self.alpine_ctnr.processes())
- self.assertGreaterEqual(len(actual), 2)
-
- def test_start_stop_wait(self):
- ctnr = self.alpine_ctnr.stop()
- self.assertFalse(ctnr['running'])
-
- ctnr.start()
- self.assertTrue(ctnr.running)
-
- ctnr.stop()
- self.assertFalse(ctnr['containerrunning'])
-
- actual = ctnr.wait()
- self.assertGreaterEqual(actual, 0)
-
- def test_changes(self):
- actual = self.alpine_ctnr.changes()
-
- self.assertListEqual(
- sorted(['changed', 'added', 'deleted']), sorted(
- list(actual.keys())))
-
- # TODO: brittle, depends on knowing history of ctnr
- self.assertGreaterEqual(len(actual['changed']), 0)
- self.assertGreaterEqual(len(actual['added']), 0)
- self.assertEqual(len(actual['deleted']), 0)
-
- def test_kill(self):
- self.assertTrue(self.alpine_ctnr.running)
- ctnr = self.alpine_ctnr.kill(signal.SIGKILL)
- self.assertFalse(ctnr.running)
-
- def test_inspect(self):
- actual = self.alpine_ctnr.inspect()
- self.assertEqual(actual.id, self.alpine_ctnr.id)
- # TODO: Datetime values from inspect missing offset in CI instance
- # self.assertEqual(
- # datetime_parse(actual.created),
- # datetime_parse(self.alpine_ctnr.createdat))
-
- def test_export(self):
- target = os.path.join(self.tmpdir, 'alpine_export_ctnr.tar')
-
- actual = self.alpine_ctnr.export(target)
- self.assertEqual(actual, target)
- self.assertTrue(os.path.isfile(target))
- self.assertGreater(os.path.getsize(target), 0)
-
- def test_commit(self):
- # TODO: Test for STOPSIGNAL when supported by OCI
- # TODO: Test for message when supported by OCI
- details = self.pclient.images.get(self.alpine_ctnr.image).inspect()
- changes = ['ENV=' + i for i in details.config['env']]
- changes.append('CMD=/usr/bin/zsh')
- changes.append('ENTRYPOINT=/bin/sh date')
- changes.append('ENV=TEST=test_containers.TestContainers.test_commit')
- changes.append('EXPOSE=80')
- changes.append('EXPOSE=8888')
- changes.append('LABEL=unittest=test_commit')
- changes.append('USER=bozo:circus')
- changes.append('VOLUME=/data')
- changes.append('WORKDIR=/data/application')
-
- id = self.alpine_ctnr.commit(
- 'alpine3', author='Bozo the clown', change=changes, pause=True)
- img = self.pclient.images.get(id)
- self.assertIsNotNone(img)
-
- details = img.inspect()
- self.assertEqual(details.author, 'Bozo the clown')
- self.assertListEqual(['/usr/bin/zsh'], details.config['cmd'])
- self.assertListEqual(['/bin/sh date'],
- details.config['entrypoint'])
- self.assertIn('TEST=test_containers.TestContainers.test_commit',
- details.config['env'])
- self.assertTrue(
- [e for e in details.config['env'] if 'PATH=' in e])
- self.assertDictEqual({
- '80': {},
- '8888': {},
- }, details.config['exposedports'])
- self.assertDictEqual({'unittest': 'test_commit'}, details.labels)
- self.assertEqual('bozo:circus', details.config['user'])
- self.assertEqual({'/data': {}}, details.config['volumes'])
- self.assertEqual('/data/application',
- details.config['workingdir'])
-
- def test_remove(self):
- before = len(self.containers)
-
- with self.assertRaises(podman.ErrorOccurred):
- self.alpine_ctnr.remove()
-
- self.assertEqual(
- self.alpine_ctnr.id, self.alpine_ctnr.remove(force=True))
- self.loadCache()
- after = len(self.containers)
-
- self.assertLess(after, before)
- TestContainers.setUpClass()
-
- def test_restart(self):
- self.assertTrue(self.alpine_ctnr.running)
- before = self.alpine_ctnr.runningfor
-
- ctnr = self.alpine_ctnr.restart()
- self.assertTrue(ctnr.running)
-
- after = self.alpine_ctnr.runningfor
-
- # TODO: restore check when restart zeros counter
- # self.assertLess(after, before)
-
- def test_rename(self):
- with self.assertRaisesNotImplemented():
- self.alpine_ctnr.rename('new_alpine')
-
- def test_resize_tty(self):
- with self.assertRaisesNotImplemented():
- self.alpine_ctnr.resize_tty(132, 43)
-
- def test_pause_unpause(self):
- self.assertTrue(self.alpine_ctnr.running)
-
- ctnr = self.alpine_ctnr.pause()
- self.assertEqual(ctnr.status, 'paused')
-
- ctnr = self.alpine_ctnr.unpause()
- self.assertTrue(ctnr.running)
- self.assertTrue(ctnr.status, 'running')
-
- # creating cgoups can be flakey
- @retry(podman.libs.errors.ErrorOccurred, tries=4, delay=2, print_=print)
- def test_stats(self):
- try:
- self.assertTrue(self.alpine_ctnr.running)
-
- actual = self.alpine_ctnr.stats()
- self.assertEqual(self.alpine_ctnr.id, actual.id)
- self.assertEqual(self.alpine_ctnr.names, actual.name)
- except Exception:
- info = Path('/proc/self/mountinfo')
- with info.open() as fd:
- print('{} {}'.format(self.alpine_ctnr.id, info))
- print(fd.read())
-
- def test_logs(self):
- self.assertTrue(self.alpine_ctnr.running)
- actual = list(self.alpine_ctnr.logs())
- self.assertIsNotNone(actual)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/contrib/python/podman/test/test_images.py b/contrib/python/podman/test/test_images.py
deleted file mode 100644
index af6d4741e..000000000
--- a/contrib/python/podman/test/test_images.py
+++ /dev/null
@@ -1,174 +0,0 @@
-import itertools
-import os
-import unittest
-from collections import Counter
-from datetime import datetime, timezone
-from test.podman_testcase import PodmanTestCase
-
-import podman
-from podman import FoldedString
-
-
-class TestImages(PodmanTestCase):
- @classmethod
- def setUpClass(cls):
- super().setUpClass()
-
- @classmethod
- def tearDownClass(cls):
- super().tearDownClass()
-
- def setUp(self):
- self.tmpdir = os.environ['TMPDIR']
- self.host = os.environ['PODMAN_HOST']
-
- self.pclient = podman.Client(self.host)
- self.images = self.loadCache()
-
- def tearDown(self):
- pass
-
- def loadCache(self):
- with podman.Client(self.host) as pclient:
- self.images = list(pclient.images.list())
-
- self.alpine_image = next(
- iter([
- i for i in self.images
- if 'docker.io/library/alpine:latest' in i['repoTags']
- ] or []), None)
-
- return self.images
-
- def test_list(self):
- actual = self.loadCache()
- self.assertGreaterEqual(len(actual), 2)
- self.assertIsNotNone(self.alpine_image)
-
- @unittest.skip('TODO: missing buildah json file')
- def test_build(self):
- path = os.path.join(self.tmpdir, 'ctnr', 'Dockerfile')
- img, logs = self.pclient.images.build(
- dockerfile=[path],
- tags=['alpine-unittest'],
- )
- self.assertIsNotNone(img)
- self.assertIn('localhost/alpine-unittest:latest', img.repoTags)
- self.assertLess(
- podman.datetime_parse(img.created), datetime.now(timezone.utc))
- self.assertTrue(logs)
-
- def test_create(self):
- img_details = self.alpine_image.inspect()
-
- actual = self.alpine_image.container(command=['sleep', '1h'])
- self.assertIsNotNone(actual)
- self.assertEqual(FoldedString(actual.status), 'configured')
-
- ctnr = actual.start()
- self.assertEqual(FoldedString(ctnr.status), 'running')
-
- ctnr_details = ctnr.inspect()
- for e in img_details.config['env']:
- self.assertIn(e, ctnr_details.config['env'])
-
- def test_export(self):
- path = os.path.join(self.tmpdir, 'alpine_export.tar')
- target = 'oci-archive:{}:latest'.format(path)
-
- actual = self.alpine_image.export(target, False)
- self.assertTrue(actual)
- self.assertTrue(os.path.isfile(path))
-
- def test_get(self):
- actual = self.pclient.images.get(self.alpine_image.id)
- self.assertEqual(actual, self.alpine_image)
-
- def test_history(self):
- records = []
- bucket = Counter()
- for record in self.alpine_image.history():
- self.assertIn(record.id, (self.alpine_image.id, '<missing>'))
- bucket[record.id] += 1
- records.append(record)
-
- self.assertGreater(bucket[self.alpine_image.id], 0)
- self.assertEqual(sum(bucket.values()), len(records))
-
- def test_inspect(self):
- actual = self.alpine_image.inspect()
- self.assertEqual(actual.id, self.alpine_image.id)
-
- def test_push(self):
- path = '{}/alpine_push'.format(self.tmpdir)
- target = 'dir:{}'.format(path)
- self.alpine_image.push(target, tlsverify=False)
-
- self.assertTrue(os.path.isfile(os.path.join(path, 'manifest.json')))
- self.assertTrue(os.path.isfile(os.path.join(path, 'version')))
-
- def test_tag(self):
- self.assertEqual(self.alpine_image.id,
- self.alpine_image.tag('alpine:fubar'))
- self.loadCache()
- self.assertIn('localhost/alpine:fubar', self.alpine_image.repoTags)
-
- def test_remove(self):
- before = self.loadCache()
-
- # assertRaises doesn't follow the import name :(
- with self.assertRaises(podman.ErrorOccurred):
- self.alpine_image.remove()
-
- actual = self.alpine_image.remove(force=True)
- self.assertEqual(self.alpine_image.id, actual)
- after = self.loadCache()
-
- self.assertLess(len(after), len(before))
- TestImages.setUpClass()
- self.loadCache()
-
- def test_import_delete_unused(self):
- before = self.loadCache()
- # create unused image, so we have something to delete
- source = os.path.join(self.tmpdir, 'alpine_gold.tar')
- new_img = self.pclient.images.import_image(
- source,
- 'alpine2:latest',
- 'unittest.test_import',
- )
- after = self.loadCache()
-
- self.assertEqual(len(before) + 1, len(after))
- self.assertIsNotNone(
- next(iter([i for i in after if new_img in i['id']] or []), None))
-
- actual = self.pclient.images.delete_unused()
- self.assertIn(new_img, actual)
-
- after = self.loadCache()
- self.assertGreaterEqual(len(before), len(after))
-
- TestImages.setUpClass()
- self.loadCache()
-
- def test_pull(self):
- before = self.loadCache()
- actual = self.pclient.images.pull('prom/busybox:latest')
- after = self.loadCache()
-
- self.assertEqual(len(before) + 1, len(after))
- self.assertIsNotNone(
- next(iter([i for i in after if actual in i['id']] or []), None))
-
- def test_search(self):
- actual = self.pclient.images.search('alpine', 25)
- names, length = itertools.tee(actual)
-
- for img in names:
- self.assertIn('alpine', img.name)
- self.assertTrue(0 < len(list(length)) <= 25)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/contrib/python/podman/test/test_libs.py b/contrib/python/podman/test/test_libs.py
deleted file mode 100644
index 202bed1d8..000000000
--- a/contrib/python/podman/test/test_libs.py
+++ /dev/null
@@ -1,53 +0,0 @@
-import datetime
-import unittest
-
-import podman
-
-
-class TestLibs(unittest.TestCase):
- def setUp(self):
- pass
-
- def tearDown(self):
- pass
-
- def test_parse(self):
- expected = datetime.datetime.strptime(
- '2018-05-08T14:12:53.797795-0700', '%Y-%m-%dT%H:%M:%S.%f%z')
- for v in [
- '2018-05-08T14:12:53.797795191-07:00',
- '2018-05-08T14:12:53.797795-07:00',
- '2018-05-08T14:12:53.797795-0700',
- '2018-05-08 14:12:53.797795191 -0700 MST',
- ]:
- actual = podman.datetime_parse(v)
- self.assertEqual(actual, expected)
-
- expected = datetime.datetime.strptime(
- '2018-05-08T14:12:53.797795-0000', '%Y-%m-%dT%H:%M:%S.%f%z')
- for v in [
- '2018-05-08T14:12:53.797795191Z',
- '2018-05-08T14:12:53.797795191z',
- ]:
- actual = podman.datetime_parse(v)
- self.assertEqual(actual, expected)
-
- actual = podman.datetime_parse(datetime.datetime.now().isoformat())
- self.assertIsNotNone(actual)
-
- def test_parse_fail(self):
- for v in [
- 'There is no time here.',
- ]:
- with self.assertRaises(ValueError):
- podman.datetime_parse(v)
-
- def test_format(self):
- expected = '2018-05-08T18:24:52.753227-07:00'
- dt = podman.datetime_parse(expected)
- actual = podman.datetime_format(dt)
- self.assertEqual(actual, expected)
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/contrib/python/podman/test/test_pods_ctnrs.py b/contrib/python/podman/test/test_pods_ctnrs.py
deleted file mode 100644
index 009e30720..000000000
--- a/contrib/python/podman/test/test_pods_ctnrs.py
+++ /dev/null
@@ -1,66 +0,0 @@
-import os
-from test.podman_testcase import PodmanTestCase
-
-import podman
-from podman import FoldedString
-
-pod = None
-
-
-class TestPodsCtnrs(PodmanTestCase):
- @classmethod
- def setUpClass(cls):
- # Populate storage
- super().setUpClass()
-
- @classmethod
- def tearDownClass(cls):
- super().tearDownClass()
-
- def setUp(self):
- self.tmpdir = os.environ['TMPDIR']
- self.host = os.environ['PODMAN_HOST']
-
- self.pclient = podman.Client(self.host)
-
- def test_010_populate(self):
- global pod
-
- pod = self.pclient.pods.create('pod1')
- self.assertEqual('pod1', pod.name)
-
- img = self.pclient.images.get('docker.io/library/alpine:latest')
- ctnr = img.container(pod=pod.id)
-
- pod.refresh()
- self.assertEqual('1', pod.numberofcontainers)
- self.assertEqual(ctnr.id, pod.containersinfo[0]['id'])
-
- def test_015_one_shot(self):
- global pod
-
- details = pod.inspect()
- state = FoldedString(details.containers[0]['state'])
- self.assertEqual(state, 'configured')
-
- pod = pod.start()
- status = FoldedString(pod.containersinfo[0]['status'])
- # Race on whether container is still running or finished
- self.assertIn(status, ('stopped', 'exited', 'running'))
-
- pod = pod.restart()
- status = FoldedString(pod.containersinfo[0]['status'])
- self.assertIn(status, ('stopped', 'exited', 'running'))
-
- # Pod kill is broken, so use stop for now
- killed = pod.stop()
- self.assertEqual(pod, killed)
-
- def test_999_remove(self):
- global pod
-
- ident = pod.remove(force=True)
- self.assertEqual(ident, pod.id)
-
- with self.assertRaises(StopIteration):
- next(self.pclient.pods.list())
diff --git a/contrib/python/podman/test/test_pods_no_ctnrs.py b/contrib/python/podman/test/test_pods_no_ctnrs.py
deleted file mode 100644
index 48b4f74e4..000000000
--- a/contrib/python/podman/test/test_pods_no_ctnrs.py
+++ /dev/null
@@ -1,94 +0,0 @@
-import os
-import unittest
-
-import podman
-import varlink
-
-ident = None
-pod = None
-
-
-class TestPodsNoCtnrs(unittest.TestCase):
- def setUp(self):
- self.tmpdir = os.environ['TMPDIR']
- self.host = os.environ['PODMAN_HOST']
-
- self.pclient = podman.Client(self.host)
-
- def test_010_create(self):
- global ident
-
- actual = self.pclient.pods.create('pod0')
- self.assertIsNotNone(actual)
- ident = actual.id
-
- def test_015_list(self):
- global ident, pod
-
- actual = next(self.pclient.pods.list())
- self.assertEqual('pod0', actual.name)
- self.assertEqual(ident, actual.id)
- self.assertEqual('Created', actual.status)
- self.assertEqual('0', actual.numberofcontainers)
- self.assertFalse(actual.containersinfo)
- pod = actual
-
- def test_020_get(self):
- global ident, pod
-
- actual = self.pclient.pods.get(pod.id)
- self.assertEqual('pod0', actual.name)
- self.assertEqual(ident, actual.id)
- self.assertEqual('Created', actual.status)
- self.assertEqual('0', actual.numberofcontainers)
- self.assertFalse(actual.containersinfo)
-
- def test_025_inspect(self):
- global ident, pod
-
- details = pod.inspect()
- self.assertEqual(ident, details.id)
- self.assertEqual('pod0', details.config['name'])
- self.assertIsNone(details.containers)
-
- def test_030_ident_no_ctnrs(self):
- global ident, pod
-
- actual = pod.kill()
- self.assertEqual(pod, actual)
-
- actual = pod.pause()
- self.assertEqual(pod, actual)
-
- actual = pod.unpause()
- self.assertEqual(pod, actual)
-
- actual = pod.stop()
- self.assertEqual(pod, actual)
-
- def test_045_raises_no_ctnrs(self):
- global ident, pod
-
- with self.assertRaises(podman.NoContainersInPod):
- pod.start()
-
- with self.assertRaises(podman.NoContainersInPod):
- pod.restart()
-
- with self.assertRaises(podman.NoContainerRunning):
- next(pod.stats())
-
- with self.assertRaises(varlink.error.MethodNotImplemented):
- pod.top()
-
- with self.assertRaises(varlink.error.MethodNotImplemented):
- pod.wait()
-
- def test_999_remove(self):
- global ident, pod
-
- actual = pod.remove()
- self.assertEqual(ident, actual)
-
- with self.assertRaises(StopIteration):
- next(self.pclient.pods.list())
diff --git a/contrib/python/podman/test/test_runner.sh b/contrib/python/podman/test/test_runner.sh
deleted file mode 100755
index 651b2e74f..000000000
--- a/contrib/python/podman/test/test_runner.sh
+++ /dev/null
@@ -1,156 +0,0 @@
-#!/bin/bash
-
-# podman needs to play some games with resources
-if [[ $(id -u) != 0 ]]; then
- echo >&2 $0 must be run as root.
- exit 2
-fi
-
-# setup path to find new binaries _NOT_ system binaries
-if [[ ! -x ../../../bin/podman ]]; then
- echo 1>&2 Cannot find podman binary from libpod root directory. Run \"make binaries\"
- exit 1
-fi
-export PATH=../../../bin:$PATH
-
-function usage {
- echo 1>&2 $0 '[-v] [-h] [test.<TestCase>|test.<TestCase>.<step>]'
-}
-
-while getopts "vh" arg; do
- case $arg in
- v ) VERBOSE='-v'; export LOG_LEVEL=debug ;;
- h ) usage ; exit 0 ;;
- \? ) usage ; exit 2 ;;
- esac
-done
-shift $((OPTIND -1))
-
-function cleanup {
- set +xeuo pipefail
- # aggressive cleanup as tests may crash leaving crap around
- umount '^(shm|nsfs)'
- umount '\/run\/netns'
- if [[ $RETURNCODE -eq 0 ]]; then
- rm -r "$1"
- fi
-}
-
-# Create temporary directory for storage
-export TMPDIR=`mktemp -d /tmp/podman.XXXXXXXXXX`
-trap "cleanup $TMPDIR" EXIT
-
-function umount {
- set +xeuo pipefail
- # xargs -r always ran once, so write any mount points to file first
- mount |awk "/$1/"' { print $3 }' >${TMPDIR}/mounts
- if [[ -s ${TMPDIR}/mounts ]]; then
- xargs <${TMPDIR}/mounts -t umount
- fi
-}
-
-function showlog {
- [[ -s $1 ]] && cat <<-EOT
-$1 =====
-$(cat "$1")
-
-EOT
-}
-
-# Need locations to store stuff
-mkdir -p ${TMPDIR}/{podman,crio,crio-run,cni/net.d,ctnr,tunnel}
-
-# Cannot be done in python unittest fixtures. EnvVar not picked up.
-export REGISTRIES_CONFIG_PATH=${TMPDIR}/registry.conf
-cat >$REGISTRIES_CONFIG_PATH <<-EOT
- [registries.search]
- registries = ['docker.io']
- [registries.insecure]
- registries = []
- [registries.block]
- registries = []
-EOT
-
-export CNI_CONFIG_PATH=${TMPDIR}/cni/net.d
-cat >$CNI_CONFIG_PATH/87-podman-bridge.conflist <<-EOT
-{
- "cniVersion": "0.3.0",
- "name": "podman",
- "plugins": [{
- "type": "bridge",
- "bridge": "cni0",
- "isGateway": true,
- "ipMasq": true,
- "ipam": {
- "type": "host-local",
- "subnet": "10.88.0.0/16",
- "routes": [{
- "dst": "0.0.0.0/0"
- }]
- }
- },
- {
- "type": "portmap",
- "capabilities": {
- "portMappings": true
- }
- }
- ]
-}
-EOT
-
-cat >$TMPDIR/ctnr/hello.sh <<-EOT
-echo 'Hello, World'
-exit 0
-EOT
-
-cat >$TMPDIR/ctnr/Dockerfile <<-EOT
-FROM alpine:latest
-COPY ./hello.sh /tmp/
-RUN chmod 755 /tmp/hello.sh
-ENTRYPOINT ["/tmp/hello.sh"]
-EOT
-
-export PODMAN_HOST="unix:${TMPDIR}/podman/io.podman"
-PODMAN_ARGS="--storage-driver=vfs \
- --root=${TMPDIR}/crio \
- --runroot=${TMPDIR}/crio-run \
- --cni-config-dir=$CNI_CONFIG_PATH \
- --cgroup-manager=cgroupfs \
- "
-if [[ -n $VERBOSE ]]; then
- PODMAN_ARGS="$PODMAN_ARGS --log-level=$LOG_LEVEL"
-fi
-PODMAN="podman $PODMAN_ARGS"
-
-cat <<-EOT |tee /tmp/test_podman.output
-$($PODMAN --version)
-$PODMAN varlink --timeout=0 ${PODMAN_HOST}
-==========================================
-EOT
-
-# Run podman in background without systemd for test purposes
-$PODMAN varlink --timeout=0 ${PODMAN_HOST} >>/tmp/test_podman.output 2>&1 &
-if [[ $? != 0 ]]; then
- echo 1>&2 Failed to start podman
- showlog /tmp/test_podman.output
-fi
-
-if [[ -z $1 ]]; then
- export PYTHONPATH=.
- python3 -m unittest discover -s . $VERBOSE
- RETURNCODE=$?
-else
- export PYTHONPATH=.:./test
- python3 -m unittest $1 $VERBOSE
- RETURNCODE=$?
-fi
-
-pkill -9 podman
-pkill -9 conmon
-
-showlog /tmp/test_podman.output
-showlog /tmp/alpine.log
-showlog /tmp/busybox.log
-
-exit $RETURNCODE
diff --git a/contrib/python/podman/test/test_system.py b/contrib/python/podman/test/test_system.py
deleted file mode 100644
index c483f3232..000000000
--- a/contrib/python/podman/test/test_system.py
+++ /dev/null
@@ -1,63 +0,0 @@
-import os
-import unittest
-from urllib.parse import urlparse
-
-import podman
-import varlink
-
-
-class TestSystem(unittest.TestCase):
- def setUp(self):
- self.host = os.environ['PODMAN_HOST']
- self.tmpdir = os.environ['TMPDIR']
-
- def tearDown(self):
- pass
-
- def test_bad_address(self):
- with self.assertRaisesRegex(varlink.client.ConnectionError,
- "Invalid address 'bad address'"):
- podman.Client('bad address')
-
- def test_ping(self):
- with podman.Client(self.host) as pclient:
- self.assertTrue(pclient.system.ping())
-
- @unittest.skip("TODO: Need to setup ssh under Travis")
- def test_remote_ping(self):
- host = urlparse(self.host)
- remote_uri = 'ssh://root@localhost{}'.format(host.path)
-
- local_uri = 'unix:{}/tunnel/podman.sock'.format(self.tmpdir)
- with podman.Client(
- uri=local_uri,
- remote_uri=remote_uri,
- identity_file=os.path.expanduser('~/.ssh/id_rsa'),
- ) as remote_client:
- self.assertTrue(remote_client.system.ping())
-
- def test_versions(self):
- with podman.Client(self.host) as pclient:
- # Values change with each build so we cannot test too much
- self.assertListEqual(
- sorted([
- 'built', 'client_version', 'git_commit', 'go_version',
- 'os_arch', 'version'
- ]), sorted(list(pclient.system.versions._fields)))
- pclient.system.versions
- self.assertIsNot(podman.__version__, '0.0.0')
-
- def test_info(self):
- with podman.Client(self.host) as pclient:
- actual = pclient.system.info()
- # Values change too much to do exhaustive testing
- self.assertIsNotNone(actual.podman['go_version'])
- self.assertListEqual(
- sorted([
- 'host', 'insecure_registries', 'podman', 'registries',
- 'store'
- ]), sorted(list(actual._fields)))
-
-
-if __name__ == '__main__':
- unittest.main()
diff --git a/contrib/python/podman/test/test_tunnel.py b/contrib/python/podman/test/test_tunnel.py
deleted file mode 100644
index 9a33e76cd..000000000
--- a/contrib/python/podman/test/test_tunnel.py
+++ /dev/null
@@ -1,86 +0,0 @@
-from __future__ import absolute_import
-
-import logging
-import time
-import unittest
-from unittest.mock import MagicMock, patch
-
-from podman.libs.tunnel import Context, Portal, Tunnel
-
-
-class TestTunnel(unittest.TestCase):
- def setUp(self):
- self.tunnel_01 = MagicMock(spec=Tunnel)
- self.tunnel_02 = MagicMock(spec=Tunnel)
-
- def test_portal_ops(self):
- portal = Portal(sweap=500)
- portal['unix:/01'] = self.tunnel_01
- portal['unix:/02'] = self.tunnel_02
-
- self.assertEqual(portal.get('unix:/01'), self.tunnel_01)
- self.assertEqual(portal.get('unix:/02'), self.tunnel_02)
-
- del portal['unix:/02']
- with self.assertRaises(KeyError):
- portal['unix:/02']
- self.assertEqual(len(portal), 1)
-
- def test_portal_reaping(self):
- portal = Portal(sweap=0.5)
- portal['unix:/01'] = self.tunnel_01
- portal['unix:/02'] = self.tunnel_02
-
- self.assertEqual(len(portal), 2)
- for entry in portal:
- self.assertIn(entry, (self.tunnel_01, self.tunnel_02))
-
- time.sleep(1)
- portal.reap()
- self.assertEqual(len(portal), 0)
-
- def test_portal_no_reaping(self):
- portal = Portal(sweap=500)
- portal['unix:/01'] = self.tunnel_01
- portal['unix:/02'] = self.tunnel_02
-
- portal.reap()
- self.assertEqual(len(portal), 2)
- for entry in portal:
- self.assertIn(entry, (self.tunnel_01, self.tunnel_02))
-
- @patch('subprocess.Popen')
- @patch('os.path.exists', return_value=True)
- @patch('weakref.finalize')
- def test_tunnel(self, mock_finalize, mock_exists, mock_Popen):
- mock_Popen.return_value.returncode = 0
-
- context = Context(
- 'unix:/01',
- 'io.podman',
- '/tmp/user/socket',
- '/run/podman/socket',
- 'user',
- 'hostname',
- None,
- '~/.ssh/id_rsa',
- )
- tunnel = Tunnel(context).bore()
-
- cmd = ['ssh', '-fNT']
- if logging.getLogger().getEffectiveLevel() == logging.DEBUG:
- cmd.append('-v')
- else:
- cmd.append('-q')
-
- cmd.extend((
- '-L',
- '{}:{}'.format(context.local_socket, context.remote_socket),
- '-i',
- context.identity_file,
- '{}@{}'.format(context.username, context.hostname),
- ))
-
- mock_finalize.assert_called_once_with(tunnel, tunnel.close)
- mock_exists.assert_called_once_with(context.local_socket)
- mock_Popen.assert_called_once_with(cmd, close_fds=True)