def test_stdio_stdin(): docker = Docker() yield from docker.pull("debian:jessie") config = { "Cmd": ["sh"], "Image": "debian:jessie", "AttachStdin": True, "AttachStdout": True, "AttachStderr": True, "Tty": False, "OpenStdin": True, "StdinOnce": True, } container = yield from docker.containers.create_or_replace(config=config, name='testing') yield from container.start(config) ws = yield from container.websocket(stdin=True, stdout=True, stream=True) ws.send_str('echo hello world\n') resp = yield from ws.receive() assert resp.data == "hello world\n" ws.close() output = yield from container.log(stdout=True) print("log output:", output) assert output == "hello world\n" #TODO ensure container stopped on its own because stdin was closed print("removing container") yield from container.delete(force=True)
def test_wait_timeout(): docker = Docker() yield from docker.pull("debian:jessie") config = { "Cmd": ["sh"], "Image": "debian:jessie", "AttachStdin": True, "AttachStdout": True, "AttachStderr": True, "Tty": False, "OpenStdin": True, "StdinOnce": True, } container = yield from docker.containers.create_or_replace(config=config, name='testing') yield from container.start(config) print("waiting for container to stop") try: yield from container.wait(timeout=1) except TimeoutError: pass else: assert "TimeoutError should have occured" print("removing container") yield from container.delete(force=True)
def test_events(): docker = Docker() queue = yield from docker.events.query() yield from docker.pull("debian:jessie") config = { "Cmd": ["sh"], "Image": "debian:jessie", } container = yield from docker.containers.create_or_replace(config=config, name='testing') #print("put archive response:", result) yield from container.start(config) i = yield from queue.__aiter__() while True: try: event = yield from asyncio.wait_for(i.__anext__(), 2) except StopAsyncIteration: assert False, "Event queue should not terminate" else: if event.get('status', None) == 'start': if event['id'] == container._id: yield from container.stop() break yield from container.delete(force=True)
def test_container_lifecycles(): docker = Docker() containers = yield from docker.containers.list(all=True) for container in containers: yield from container.delete(force=True) yield from docker.pull("debian:jessie") config = { "Cmd": ["dmesg"], "Image": "debian:jessie", "AttachStdin": True, "AttachStdout": True, "AttachStderr": True, "Tty": False, "OpenStdin": False, "StdinOnce": False, } for i in range(3): container = yield from docker.containers.create(config=config) assert container containers = yield from docker.containers.list(all=True) assert len(containers) == 3 f_container = containers[0] yield from f_container.start(config) info = yield from f_container.show() for container in containers: yield from container.delete(force=True)
def test_stdio_stdin(): docker = Docker() yield from docker.pull("debian:jessie") config = { "Cmd": ["sh"], "Image": "debian:jessie", "AttachStdin": True, "AttachStdout": True, "AttachStderr": True, "Tty": False, "OpenStdin": True, "StdinOnce": True, } container = yield from docker.containers.create_or_replace(config=config, name="testing") yield from container.start() ws = yield from container.websocket(stdin=True, stdout=True, stream=True) ws.send_str("echo hello world\n") resp = yield from ws.receive() assert resp.data == "hello world\n" ws.close() output = yield from container.log(stdout=True) print("log output:", output) assert output == "hello world\n" # TODO ensure container stopped on its own because stdin was closed print("removing container") yield from container.delete(force=True)
def test_wait_timeout(): docker = Docker() yield from docker.pull("debian:jessie") config = { "Cmd": ["sh"], "Image": "debian:jessie", "AttachStdin": True, "AttachStdout": True, "AttachStderr": True, "Tty": False, "OpenStdin": True, "StdinOnce": True, } container = yield from docker.containers.create_or_replace(config=config, name="testing") yield from container.start() print("waiting for container to stop") try: yield from container.wait(timeout=1) except TimeoutError: pass else: assert "TimeoutError should have occured" print("removing container") yield from container.delete(force=True)
def test_container_lifecycles(): docker = Docker() containers = yield from docker.containers.list(all=True) for container in containers: yield from container.delete(force=True) yield from docker.pull("debian:jessie") config = { "Cmd": ["dmesg"], "Image": "debian:jessie", "AttachStdin": True, "AttachStdout": True, "AttachStderr": True, "Tty": False, "OpenStdin": False, "StdinOnce": False, } for i in range(3): container = yield from docker.containers.create(config=config) assert container containers = yield from docker.containers.list(all=True) assert len(containers) == 3 f_container = containers[0] yield from f_container.start() info = yield from f_container.show() for container in containers: yield from container.delete(force=True)
def test_events(): docker = Docker() queue = yield from docker.events.query() yield from docker.pull("debian:jessie") config = {"Cmd": ["sh"], "Image": "debian:jessie"} container = yield from docker.containers.create_or_replace(config=config, name="testing") # print("put archive response:", result) yield from container.start() i = yield from queue.__aiter__() while True: try: event = yield from asyncio.wait_for(i.__anext__(), 2) except StopAsyncIteration: assert False, "Event queue should not terminate" else: if event.get("status", None) == "start": if event["id"] == container._id: yield from container.stop() break yield from container.delete(force=True)
def test_put_archive(): docker = Docker() yield from docker.pull("debian:jessie") config = { "Cmd": ["cat", "/tmp/bar/foo.txt"], #"Cmd":["ls", "-l", "/tmp"], "Image": "debian:jessie", "AttachStdin": True, "AttachStdout": True, "AttachStderr": True, "Tty": False, "OpenStdin": False } file_data = b"hello world" file_like_object = io.BytesIO() tar = tarfile.open(fileobj=file_like_object, mode='w') info = tarfile.TarInfo(name='bar') info.type = tarfile.DIRTYPE info.mode = 493 #755 oct -> dec info.mtime = time.time() tar.addfile(tarinfo=info) tarinfo = tarfile.TarInfo(name="bar/foo.txt") tarinfo.size = len(file_data) tar.addfile(tarinfo, io.BytesIO(file_data)) tar.list() tar.close() container = yield from docker.containers.create_or_replace(config=config, name='testing') result = yield from container.put_archive(path='/tmp', data=file_like_object.getvalue()) #print("put archive response:", result) yield from container.start(config) yield from container.wait(timeout=1) output = yield from container.log(stdout=True, stderr=True) print("log output:", output) assert output == "hello world\n" print("removing container") yield from container.delete(force=True)
def test_put_archive(): docker = Docker() yield from docker.pull("debian:jessie") config = { "Cmd": ["cat", "/tmp/bar/foo.txt"], # "Cmd":["ls", "-l", "/tmp"], "Image": "debian:jessie", "AttachStdin": True, "AttachStdout": True, "AttachStderr": True, "Tty": False, "OpenStdin": False, } file_data = b"hello world" file_like_object = io.BytesIO() tar = tarfile.open(fileobj=file_like_object, mode="w") info = tarfile.TarInfo(name="bar") info.type = tarfile.DIRTYPE info.mode = 493 # 755 oct -> dec info.mtime = time.time() tar.addfile(tarinfo=info) tarinfo = tarfile.TarInfo(name="bar/foo.txt") tarinfo.size = len(file_data) tar.addfile(tarinfo, io.BytesIO(file_data)) tar.list() tar.close() container = yield from docker.containers.create_or_replace(config=config, name="testing") result = yield from container.put_archive(path="/tmp", data=file_like_object.getvalue()) # print("put archive response:", result) yield from container.start() yield from container.wait(timeout=1) output = yield from container.log(stdout=True, stderr=True) print("log output:", output) assert output == "hello world\n" print("removing container") yield from container.delete(force=True)
def test_port(): docker = Docker() yield from docker.pull("redis:latest") config = {"Image": "redis:latest", "PublishAllPorts": True} container = yield from docker.containers.create_or_replace(config=config, name="testing") # print("put archive response:", result) yield from container.start() port = yield from container.port(6379) print(container._container.get("NetworkSettings")) assert port yield from container.delete(force=True)
def test_port(): docker = Docker() yield from docker.pull("redis:latest") config = { "Image": "redis:latest", "PublishAllPorts": True, } container = yield from docker.containers.create_or_replace(config=config, name='testing') #print("put archive response:", result) yield from container.start(config) port = yield from container.port(6379) print(container._container.get("NetworkSettings")) assert port yield from container.delete(force=True)
def test_image_push(): docker = Docker() yield from docker.pull("debian") yield from docker.images.tag("debian", repo=os.environ["DOCKER_REGISTRY"] + "/debian")