mirror of
https://github.com/containers/podman.git
synced 2025-08-02 09:12:36 +08:00
Refactor libpod python varlink bindings
- More pythonic - Leverage context managers to help with socket leaks - Add system unittest's - Add image unittest's - Add container unittest's - Add models for system, containers and images, and their collections - Add helper functions for datetime parsing/formatting - GetInfo() implemented - Add support for setuptools - Update documentation - Support for Python 3.4-3.6 Signed-off-by: Jhon Honce <jhonce@redhat.com> Closes: #748 Approved by: baude
This commit is contained in:
106
contrib/python/test/podman_testcase.py
Normal file
106
contrib/python/test/podman_testcase.py
Normal file
@ -0,0 +1,106 @@
|
||||
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):
|
||||
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',
|
||||
'--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'])
|
||||
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):
|
||||
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):
|
||||
with self.assertRaisesRegex(VarlinkError, MethodNotImplemented):
|
||||
yield
|
Reference in New Issue
Block a user