From e79e27a73f11e09cb8060ef99365cd3c5e52d89f Mon Sep 17 00:00:00 2001 From: ziajka Date: Tue, 27 Feb 2018 16:33:55 +0100 Subject: [PATCH] Handle docker env with last empty line, Fixes: #2420 --- gns3server/compute/docker/docker_vm.py | 2 +- tests/compute/docker/test_docker_vm.py | 60 +++++++++++++------------- 2 files changed, 32 insertions(+), 30 deletions(-) diff --git a/gns3server/compute/docker/docker_vm.py b/gns3server/compute/docker/docker_vm.py index 37396726..3d291550 100644 --- a/gns3server/compute/docker/docker_vm.py +++ b/gns3server/compute/docker/docker_vm.py @@ -314,7 +314,7 @@ class DockerVM(BaseNode): params["Env"].append("GNS3_VOLUMES={}".format(":".join(self._volumes))) if self._environment: - for e in self._environment.split("\n"): + for e in self._environment.strip().split("\n"): e = e.strip() if not e.startswith("GNS3_"): params["Env"].append(e) diff --git a/tests/compute/docker/test_docker_vm.py b/tests/compute/docker/test_docker_vm.py index f5f8f7e0..d48fcc98 100644 --- a/tests/compute/docker/test_docker_vm.py +++ b/tests/compute/docker/test_docker_vm.py @@ -257,35 +257,37 @@ def test_create_environment(loop, project, manager): vm = DockerVM("test", str(uuid.uuid4()), project, manager, "ubuntu") vm.environment = "YES=1\nNO=0\nGNS3_MAX_ETHERNET=eth2" loop.run_until_complete(asyncio.async(vm.create())) - mock.assert_called_with("POST", "containers/create", data={ - "Tty": True, - "OpenStdin": True, - "StdinOnce": False, - "HostConfig": - { - "CapAdd": ["ALL"], - "Binds": [ - "{}:/gns3:ro".format(get_resource("compute/docker/resources")), - "{}:/gns3volumes/etc/network:rw".format(os.path.join(vm.working_dir, "etc", "network")) - ], - "Privileged": True - }, - "Env": [ - "container=docker", - "GNS3_MAX_ETHERNET=eth0", - "GNS3_VOLUMES=/etc/network", - "YES=1", - "NO=0" - ], - "Volumes": {}, - "NetworkDisabled": True, - "Name": "test", - "Hostname": "test", - "Image": "ubuntu:latest", - "Entrypoint": ["/gns3/init.sh"], - "Cmd": ["/bin/sh"] - }) - assert vm._cid == "e90e34656806" + assert mock.call_args[1]['data']['Env'] == [ + "container=docker", + "GNS3_MAX_ETHERNET=eth0", + "GNS3_VOLUMES=/etc/network", + "YES=1", + "NO=0" + ] + + +def test_create_environment_with_last_new_line_character(loop, project, manager): + """ + Allow user to pass an environnement. User can't override our + internal variables + """ + + response = { + "Id": "e90e34656806", + "Warnings": [] + } + with asyncio_patch("gns3server.compute.docker.Docker.list_images", return_value=[{"image": "ubuntu"}]): + with asyncio_patch("gns3server.compute.docker.Docker.query", return_value=response) as mock: + vm = DockerVM("test", str(uuid.uuid4()), project, manager, "ubuntu") + vm.environment = "YES=1\nNO=0\nGNS3_MAX_ETHERNET=eth2\n" + loop.run_until_complete(asyncio.async(vm.create())) + assert mock.call_args[1]['data']['Env'] == [ + "container=docker", + "GNS3_MAX_ETHERNET=eth0", + "GNS3_VOLUMES=/etc/network", + "YES=1", + "NO=0" + ] def test_create_image_not_available(loop, project, manager):