def test_numa_req_less_mem_than_available(self, mock_execlp): argv = [ "docker", "run", "--env=PIN_TO_NUMA_NODE=1", "--env=MARATHON_APP_RESOURCE_CPUS=2", "--env=MARATHON_APP_RESOURCE_MEM=20000.0", ] with self._patch_docker_wrapper_dependencies( is_numa_enabled=True, node_mem=32000, cpu_info=[ "physical id : 0", "physical id : 1", "physical id : 0", "physical id : 1", ], ): docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call( "docker", "docker", "run", "--cpuset-mems=1", "--cpuset-cpus=1,3", "--env=PIN_TO_NUMA_NODE=1", "--env=MARATHON_APP_RESOURCE_CPUS=2", "--env=MARATHON_APP_RESOURCE_MEM=20000.0", ) ]
def test_numa_req_exact_amount_of_cores(self, mock_execlp): argv = [ 'docker', 'run', '--env=PIN_TO_NUMA_NODE=1', '--env=MARATHON_APP_RESOURCE_CPUS=2', ] with self._patch_docker_wrapper_dependencies( is_numa_enabled=True, node_mem=32000, cpu_info=[ 'physical id : 0', 'physical id : 1', 'physical id : 0', 'physical id : 1', ], ): docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call( 'docker', 'docker', 'run', '--cpuset-mems=1', '--cpuset-cpus=1,3', '--env=PIN_TO_NUMA_NODE=1', '--env=MARATHON_APP_RESOURCE_CPUS=2', ) ]
def test_cpuset_already_set(self, mock_execlp): argv = [ "docker", "run", "--cpuset-cpus=0,2", "--env=PIN_TO_NUMA_NODE=1", "--env=MARATHON_APP_RESOURCE_CPUS=1.5", ] with self._patch_docker_wrapper_dependencies( is_numa_enabled=True, node_mem=32000, cpu_info=[ "physical id : 0", "physical id : 1", "physical id : 0", "physical id : 1", ], ): docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call( "docker", "docker", "run", "--cpuset-cpus=0,2", "--env=PIN_TO_NUMA_NODE=1", "--env=MARATHON_APP_RESOURCE_CPUS=1.5", ) ]
def test_not_run(self, mock_execlp): argv = ["docker", "ps", "--env=MESOS_TASK_ID=my-mesos-task-id"] docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call("docker", "docker", "ps", "--env=MESOS_TASK_ID=my-mesos-task-id") ]
def test_numa_too_many_cores_requested(self, mock_execlp): argv = [ 'docker', 'run', '--env=PIN_TO_NUMA_NODE=1', '--env=MARATHON_APP_RESOURCE_CPUS=3.0', ] with self._patch_docker_wrapper_dependencies( is_numa_enabled=True, node_mem=32000, cpu_info=[ 'physical id : 0', 'physical id : 1', 'physical id : 0', 'physical id : 1', ], ): docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call( 'docker', 'docker', 'run', '--env=PIN_TO_NUMA_NODE=1', '--env=MARATHON_APP_RESOURCE_CPUS=3.0', ) ]
def test_numa_string_value(self, mock_execlp): argv = ["docker", "run", '--env=PIN_TO_NUMA_NODE="true"'] docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call("docker", "docker", "run", '--env=PIN_TO_NUMA_NODE="true"') ]
def test_prepare_new_container_error( self, mock_prepare_new_container, mock_firewall_flock, capsys, mock_mac_address, mock_execlp, mock_firewall_env_args, ): argv = [ 'docker', 'run', ] + mock_firewall_env_args docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call( 'docker', 'docker', 'run', '--mac-address=00:00:00:00:00:00', *mock_firewall_env_args, ) ] _, err = capsys.readouterr() assert err.startswith('Unable to add firewall rules: Oh noes')
def test_numa_enabled_unknown_cpu_requirement_skips_cpusets( self, mock_execlp): argv = [ 'docker', 'run', '--env=PIN_TO_NUMA_NODE=1', ] with self._patch_docker_wrapper_dependencies( is_numa_enabled=True, node_mem=32000, cpu_info=[ 'physical id : 0', 'physical id : 1', 'physical id : 0', 'physical id : 1', ], ): docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call( 'docker', 'docker', 'run', '--cpuset-mems=1', '--cpuset-cpus=1,3', '--env=PIN_TO_NUMA_NODE=1', ) ]
def test_numa_wrong_cpu(self, mock_execlp): argv = [ 'docker', 'run', '--env=PIN_TO_NUMA_NODE=2', ] with self._patch_docker_wrapper_dependencies( is_numa_enabled=True, node_mem=32000, cpu_info=[ 'physical id : 0', 'physical id : 1', 'physical id : 0', 'physical id : 1', ], ): docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call( 'docker', 'docker', 'run', '--env=PIN_TO_NUMA_NODE=2', ) ]
def test_mac_address( self, mock_prepare_new_container, mock_firewall_flock, mock_mac_address, mock_execlp, mock_firewall_env_args, ): argv = ["docker", "run"] + mock_firewall_env_args docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call( "docker", "docker", "run", "--mac-address=00:00:00:00:00:00", *mock_firewall_env_args, ) ] assert mock_firewall_flock.return_value.__enter__.called is True assert mock_prepare_new_container.mock_calls == [ mock.call( docker_wrapper.DEFAULT_SOA_DIR, docker_wrapper.DEFAULT_SYNAPSE_SERVICE_DIR, "myservice", "myinstance", "00:00:00:00:00:00", ) ]
def test_mac_address_not_run(self, mock_mac_address, mock_execlp, mock_firewall_env_args): argv = ["docker", "inspect"] + mock_firewall_env_args docker_wrapper.main(argv) assert mock_mac_address.call_count == 0 assert mock_execlp.mock_calls == [ mock.call("docker", "docker", "inspect", *mock_firewall_env_args) ]
def test_env_not_present(self, mock_execlp): argv = [ 'docker', 'run', 'foobar', ] docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call('docker', 'docker', 'run', 'foobar') ]
def test_numa_bogus_node(self, mock_execlp): argv = [ 'docker', 'run', '--env=PIN_TO_NUMA_NODE=True', ] docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call('docker', 'docker', 'run', '--env=PIN_TO_NUMA_NODE=True') ]
def test_not_run(self, mock_execlp): argv = [ 'docker', 'ps', '--env=MESOS_TASK_ID=my-mesos-task-id', ] docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call('docker', 'docker', 'ps', '--env=MESOS_TASK_ID=my-mesos-task-id') ]
def test_numa_string_value(self, mock_execlp): argv = [ 'docker', 'run', '--env=PIN_TO_NUMA_NODE="true"', ] docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call('docker', 'docker', 'run', '--env=PIN_TO_NUMA_NODE="true"') ]
def test_numa_single_cpu_doesnt_bother_with_cpusets(self, mock_execlp): argv = ["docker", "run", "--env=PIN_TO_NUMA_NODE=1"] with self._patch_docker_wrapper_dependencies( is_numa_enabled=True, node_mem=32000, cpu_info=["physical id : 0", "physical id : 0"], ): docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call("docker", "docker", "run", "--env=PIN_TO_NUMA_NODE=1") ]
def test_mac_address_not_run(self, mock_mac_address, mock_execlp, mock_firewall_env_args): argv = [ 'docker', 'inspect', ] + mock_firewall_env_args docker_wrapper.main(argv) assert mock_mac_address.call_count == 0 assert mock_execlp.mock_calls == [mock.call( 'docker', 'docker', 'inspect', *mock_firewall_env_args, )]
def test_already_has_hostname(self, mock_execlp): argv = [ 'docker', 'run', '--env=MESOS_TASK_ID=my-mesos-task-id', '--hostname=somehostname', ] with mock.patch.object(socket, 'getfqdn', return_value='myhostname'): docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call('docker', 'docker', 'run', '--env=MESOS_TASK_ID=my-mesos-task-id', '--hostname=somehostname') ]
def test_mac_address_already_set(self, mock_mac_address, mock_execlp, mock_firewall_env_args): argv = [ 'docker', 'run', '--mac-address=12:34:56:78:90:ab', ] + mock_firewall_env_args docker_wrapper.main(argv) assert mock_mac_address.call_count == 0 assert mock_execlp.mock_calls == [ mock.call('docker', 'docker', 'run', '--mac-address=12:34:56:78:90:ab', *mock_firewall_env_args) ]
def test_chronos(self, mock_execlp): argv = [ 'docker', 'run', '--env=mesos_task_id=ct:1487804100000:0:thirdparty_feeds thirdparty_feeds-cloudflare-all:', ] with mock.patch.object(socket, 'getfqdn', return_value='myhostname'): docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call( 'docker', 'docker', 'run', '--hostname=myhostname-ct-1487804100000-0-thirdparty-feeds-thirdparty-feeds', '--env=mesos_task_id=ct:1487804100000:0:thirdparty_feeds thirdparty_feeds-cloudflare-all:' ) ]
def test_marathon(self, mock_execlp): argv = [ 'docker', 'run', '--env=MESOS_TASK_ID=paasta--canary.main.git332d4a22.config458863b1.0126a188-f944-11e6-bdfb-12abac3adf8c', ] with mock.patch.object(socket, 'getfqdn', return_value='myhostname'): docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call( 'docker', 'docker', 'run', '--hostname=myhostname-0126a188-f944-11e6-bdfb-12abac3adf8c', '--env=MESOS_TASK_ID=paasta--canary.main.git332d4a22.config458863b1.0126a188-f944-11e6-bdfb-12abac3adf8c' ) ]
def test_mac_address_no_lockdir( self, capsys, mock_execlp, tmpdir, mock_firewall_env_args ): nonexistent = tmpdir.join("nonexistent") with mock.patch.object(docker_wrapper, "LOCK_DIRECTORY", str(nonexistent)): argv = ["docker", "run"] + mock_firewall_env_args docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call("docker", "docker", "run", *mock_firewall_env_args) ] _, err = capsys.readouterr() assert err.startswith( "Unable to add mac address: [Errno 2] No such file or directory" )
def test_mac_address(self, mock_mac_address, mock_execlp): argv = [ 'docker', 'run', '--env=PAASTA_FIREWALL=1', ] docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call( 'docker', 'docker', 'run', '--mac-address=00:00:00:00:00:00', '--env=PAASTA_FIREWALL=1', ) ]
def test_mac_address_not_run(self, mock_mac_address, mock_execlp): argv = [ 'docker', 'inspect', '--env=PAASTA_FIREWALL=1', ] docker_wrapper.main(argv) assert mock_mac_address.call_count == 0 assert mock_execlp.mock_calls == [ mock.call( 'docker', 'docker', 'inspect', '--env=PAASTA_FIREWALL=1', ) ]
def test_marathon(self, mock_execlp): argv = [ "docker", "run", "--env=MESOS_TASK_ID=paasta--canary.main.git332d4a22.config458863b1.0126a188-f944-11e6-bdfb-12abac3adf8c", ] with mock.patch.object(socket, "getfqdn", return_value="myhostname"): docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call( "docker", "docker", "run", "--hostname=myhostname-0126a188-f944-11e6-bdfb-12abac3adf8c", "--env=MESOS_TASK_ID=paasta--canary.main.git332d4a22.config458863b1.0126a188-f944-11e6-bdfb-12abac3adf8c", ) ]
def test_chronos(self, mock_execlp): argv = [ "docker", "run", "--env=mesos_task_id=ct:1487804100000:0:thirdparty_feeds thirdparty_feeds-cloudflare-all:", ] with mock.patch.object(socket, "getfqdn", return_value="myhostname"): docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call( "docker", "docker", "run", "--hostname=myhostname-ct-1487804100000-0-thirdparty-feeds-thirdparty-fe", "--env=mesos_task_id=ct:1487804100000:0:thirdparty_feeds thirdparty_feeds-cloudflare-all:", ) ]
def test_numa_wrong_cpu(self, mock_execlp): argv = ["docker", "run", "--env=PIN_TO_NUMA_NODE=2"] with self._patch_docker_wrapper_dependencies( is_numa_enabled=True, node_mem=32000, cpu_info=[ "physical id : 0", "physical id : 1", "physical id : 0", "physical id : 1", ], ): docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call("docker", "docker", "run", "--env=PIN_TO_NUMA_NODE=2") ]
def test_mac_address_no_lockdir(self, capsys, mock_execlp, tmpdir, mock_firewall_env_args): nonexistent = tmpdir.join('nonexistent') with mock.patch.object(docker_wrapper, 'LOCK_DIRECTORY', str(nonexistent)): argv = [ 'docker', 'run', ] + mock_firewall_env_args docker_wrapper.main(argv) assert mock_execlp.mock_calls == [mock.call( 'docker', 'docker', 'run', *mock_firewall_env_args, )] _, err = capsys.readouterr() assert err.startswith('Unable to add mac address: [Errno 2] No such file or directory')
def test_already_has_hostname(self, mock_execlp): argv = [ "docker", "run", "--env=MESOS_TASK_ID=my-mesos-task-id", "--hostname=somehostname", ] with mock.patch.object(socket, "getfqdn", return_value="myhostname"): docker_wrapper.main(argv) assert mock_execlp.mock_calls == [ mock.call( "docker", "docker", "run", "--env=MESOS_TASK_ID=my-mesos-task-id", "--hostname=somehostname", ) ]
def test_mac_address_already_set(self, mock_mac_address, mock_execlp, mock_firewall_env_args): argv = [ "docker", "run", "--mac-address=12:34:56:78:90:ab", ] + mock_firewall_env_args docker_wrapper.main(argv) assert mock_mac_address.call_count == 0 assert mock_execlp.mock_calls == [ mock.call( "docker", "docker", "run", "--mac-address=12:34:56:78:90:ab", *mock_firewall_env_args, ) ]