def test_extract_port_flags(self): port_mappings = PortMappings() flags = extract_port_flags("foo -p 1234:1234 bar", port_mappings=port_mappings) assert flags == "foo bar" mapping_str = port_mappings.to_str() assert mapping_str == "-p 1234:1234" port_mappings = PortMappings() flags = extract_port_flags("foo -p 1234:1234 bar -p 80-90:81-91 baz", port_mappings=port_mappings) assert flags == "foo bar baz" mapping_str = port_mappings.to_str() assert "-p 1234:1234" in mapping_str assert "-p 80-90:81-91" in mapping_str
def test_extract_port_flags(self): port_mappings = PortMappings() flags = extract_port_flags("foo -p 1234:1234 bar", port_mappings=port_mappings) self.assertEqual("foo bar", flags) mapping_str = port_mappings.to_str() self.assertEqual("-p 1234:1234", mapping_str) port_mappings = PortMappings() flags = extract_port_flags( "foo -p 1234:1234 bar -p 80-90:81-91 baz", port_mappings=port_mappings ) self.assertEqual("foo bar baz", flags) mapping_str = port_mappings.to_str() self.assertIn("-p 1234:1234", mapping_str) self.assertIn("-p 80-90:81-91", mapping_str)
def test_argument_parsing(): test_port_string = "-p 80:8080/udp" test_port_string_with_host = "-p 127.0.0.1:6000:7000/tcp" test_port_string_many_to_one = "-p 9230-9231:9230" test_env_string = "-e TEST_ENV_VAR=test_string=123" test_mount_string = "-v /var/test:/opt/test" argument_string = f"{test_port_string} {test_env_string} {test_mount_string} {test_port_string_with_host} {test_port_string_many_to_one}" env_vars = {} ports = PortMappings() mounts = [] Util.parse_additional_flags(argument_string, env_vars, ports, mounts) assert env_vars == {"TEST_ENV_VAR": "test_string=123"} assert ports.to_str() == "-p 80:8080/udp -p 6000:7000 -p 9230-9231:9230" assert mounts == [("/var/test", "/opt/test")] argument_string = ( "--add-host host.docker.internal:host-gateway --add-host arbitrary.host:127.0.0.1" ) _, _, _, extra_hosts, _ = Util.parse_additional_flags( argument_string, env_vars, ports, mounts) assert { "host.docker.internal": "host-gateway", "arbitrary.host": "127.0.0.1" } == extra_hosts with pytest.raises(NotImplementedError): argument_string = "--somerandomargument" Util.parse_additional_flags(argument_string, env_vars, ports, mounts) with pytest.raises(ValueError): argument_string = "--publish 80:80:80:80" Util.parse_additional_flags(argument_string, env_vars, ports, mounts) # Test windows paths argument_string = r'-v "C:\Users\SomeUser\SomePath:/var/task"' _, _, mounts, _, _ = Util.parse_additional_flags(argument_string) assert mounts == [(r"C:\Users\SomeUser\SomePath", "/var/task")] argument_string = r'-v "C:\Users\SomeUser\SomePath:/var/task:ro"' _, _, mounts, _, _ = Util.parse_additional_flags(argument_string) assert mounts == [(r"C:\Users\SomeUser\SomePath", "/var/task")] argument_string = r'-v "C:\Users\Some User\Some Path:/var/task:ro"' _, _, mounts, _, _ = Util.parse_additional_flags(argument_string) assert mounts == [(r"C:\Users\Some User\Some Path", "/var/task")] argument_string = r'-v "/var/test:/var/task:ro"' _, _, mounts, _, _ = Util.parse_additional_flags(argument_string) assert mounts == [("/var/test", "/var/task")] # Test file paths argument_string = r'-v "/tmp/test.jar:/tmp/foo bar/test.jar"' _, _, mounts, _, _ = Util.parse_additional_flags(argument_string) assert mounts == [(r"/tmp/test.jar", "/tmp/foo bar/test.jar")] argument_string = r'-v "/tmp/test-foo_bar.jar:/tmp/test-foo_bar2.jar"' _, _, mounts, _, _ = Util.parse_additional_flags(argument_string) assert mounts == [(r"/tmp/test-foo_bar.jar", "/tmp/test-foo_bar2.jar")] # Test file paths argument_string = r'-v "/tmp/test.jar:/tmp/foo bar/test.jar" --network mynet123' _, _, _, _, network = Util.parse_additional_flags(argument_string) assert network == "mynet123"
def test_port_ranges_with_bind_host(self): port_mappings = PortMappings(bind_host="0.0.0.0") port_mappings.add(5000) port_mappings.add(5001) port_mappings.add(5003) port_mappings.add([5004, 5006], 9000) result = port_mappings.to_str() self.assertEqual( "-p 0.0.0.0:5000-5001:5000-5001 -p 0.0.0.0:5003:5003 -p 0.0.0.0:5004-5006:9000", result )
def test_overlapping_port_ranges(self): port_mappings = PortMappings() port_mappings.add(4590) port_mappings.add(4591) port_mappings.add(4593) port_mappings.add(4592) port_mappings.add(4593) result = port_mappings.to_str() # assert that ranges are non-overlapping, i.e., no duplicate ports self.assertEqual("-p 4590-4592:4590-4592 -p 4593:4593", result)
def test_port_mappings(self): map = PortMappings() map.add(123) self.assertEqual("-p 123:123", map.to_str()) map.add(124) self.assertEqual("-p 123-124:123-124", map.to_str()) map.add(234) self.assertEqual("-p 123-124:123-124 -p 234:234", map.to_str()) map.add(345, 346) self.assertEqual("-p 123-124:123-124 -p 234:234 -p 345:346", map.to_str()) map.add([456, 458]) self.assertEqual( "-p 123-124:123-124 -p 234:234 -p 345:346 -p 456-458:456-458", map.to_str()) map = PortMappings() map.add([123, 124]) self.assertEqual("-p 123-124:123-124", map.to_str()) map.add([234, 237], [345, 348]) self.assertEqual("-p 123-124:123-124 -p 234-237:345-348", map.to_str())