def test_remote_connection_string(docker_client, create_and_pull): with temp_network(docker_client) as network, \ PostgreSQLService.run(docker_client) as service, \ connect(network, service) as service_alias: with service.connection() as connection: connection.execute(""" CREATE TABLE foo (x INTEGER, y TEXT); INSERT INTO foo VALUES (1,'one'), (2, 'two'), (3, 'three'), (10, 'ten'); """) conn_string = service.container_connection_string(service_alias[0]) container = create_and_pull( docker_client, "python:latest", 'sh -c "pip install sqlalchemy psycopg2 && python ./main.py"', detach=True, remove=False # todo ) upload_file( container, './main.py', bytes( "import sqlalchemy as sa;" f"e = sa.create_engine('{conn_string}');" "e.execute('DELETE FROM foo WHERE x < 3');", 'ascii')) with connect(network, container): container.start() return_status = container.wait() assert return_status["StatusCode"] == 0 with service.connection() as connection: results = connection.execute("SELECT y from foo") vals = [row['y'] for row in results] assert vals == ['three', 'ten']
def test_upload_fileobj(docker_client, fileobj_creation, create_and_pull): container = create_and_pull(docker_client, "alpine:latest", ["cat", "/tmp/test"]) with fileobj_creation(b"testfile") as file: upload_file(container, "/tmp/test", fileobj=file) container.start() assert container.wait()["StatusCode"] == 0 assert download_file(container, "/tmp/test").read() == b"testfile"
def test_upload_file(docker_client, create_and_pull): container = create_and_pull(docker_client, "alpine:latest", ["cat", "/tmp/test"]) container.start() assert container.wait()["StatusCode"] != 0 container = create_and_pull(docker_client, "alpine:latest", ["cat", "/tmp/test"]) upload_file(container, "/tmp/test", b"testfile") container.start() assert container.wait()["StatusCode"] == 0 assert download_file(container, "/tmp/test").read() == b"testfile"
def __init__(self, docker_client: DockerClient, image='rabbitmq:latest', *, user="******", password="******", virtual_host="/", **kwargs): self.user = user self.password = password self.virtual_host = virtual_host super().__init__(create_and_pull( docker_client, image, publish_all_ports=True, detach=True, ports={RABBIT_HTTP_API_PORT: 0}, # Forward management port by default. ), **kwargs) upload_file(self.container, '/etc/rabbitmq/rabbitmq.conf', f''' default_pass = {password} default_user = {user} default_vhost = {virtual_host} loopback_users = none '''.encode())
def test_download_file(docker_client, create_and_pull): container = create_and_pull(docker_client, "alpine:latest") upload_file(container, "/tmp/test", b"abcd") with download_file(container, "/tmp/test") as file: assert file.read() == b"abcd"
def set_rdb(self, redis_file: IO[bytes]): if self.started: raise RuntimeError("Server already started. Cannot set RDB.") upload_file(self.container, DEFAULT_RDB_PATH, fileobj=redis_file)