def test_no_wait(self): stdout = MagicMock() mock_wait_for_conductr = MagicMock() with \ patch('conductr_cli.terminal.docker_images', return_value=''), \ patch('conductr_cli.terminal.docker_pull', return_value=''), \ patch('conductr_cli.terminal.docker_ps', return_value=''), \ patch('conductr_cli.terminal.docker_inspect', return_value='10.10.10.10'), \ patch('conductr_cli.terminal.docker_run', return_value='') as mock_docker_run, \ patch('conductr_cli.sandbox_common.resolve_running_docker_containers', return_value=[]), \ patch('conductr_cli.sandbox_run.wait_for_conductr', mock_wait_for_conductr): args = self.default_args.copy() args.update({'no_wait': True}) input_args = MagicMock(**args) logging_setup.configure_logging(input_args, stdout) sandbox_run.run(input_args) expected_stdout = strip_margin("""|Pulling down the ConductR development image.. ||------------------------------------------------| || Starting ConductR | ||------------------------------------------------| |Starting container cond-0.. |""") expected_optional_args = self.default_general_args('cond-0') + self.default_env_args + self.default_port_args expected_image = '{}:{}'.format(CONDUCTR_DEV_IMAGE, LATEST_CONDUCTR_VERSION) expected_positional_args = self.default_positional_args self.assertEqual(expected_stdout, self.output(stdout)) mock_docker_run.assert_called_once_with(expected_optional_args, expected_image, expected_positional_args) mock_wait_for_conductr.assert_not_called()
def test_with_custom_args_v1(self): stdout = MagicMock() image_version = '1.1.0' conductr_roles = [['role1', 'role2']] envs = ['key1=value1', 'key2=value2'] image = 'my-image' log_level = 'debug' nr_of_containers = 1 ports = [3000, 3001] features = [['visualization'], ['logging']] with \ patch('conductr_cli.terminal.docker_images', return_value='some-image'), \ patch('conductr_cli.terminal.docker_ps', return_value=''), \ patch('conductr_cli.terminal.docker_inspect', return_value='10.10.10.10'), \ patch('conductr_cli.terminal.docker_run', return_value='') as mock_docker_run, \ patch('conductr_cli.sandbox_common.resolve_running_docker_containers', return_value=[]), \ patch('conductr_cli.sandbox_run.wait_for_conductr') as mock_wait_for_conductr: args = self.default_args.copy() args.update({ 'image_version': image_version, 'conductr_roles': conductr_roles, 'envs': envs, 'image': image, 'log_level': log_level, 'nr_of_containers': nr_of_containers, 'ports': ports, 'bundle_http_port': 7222, 'features': features }) input_args = MagicMock(**args) logging_setup.configure_logging(input_args, stdout) sandbox_run.run(input_args) expected_stdout = strip_margin("""||------------------------------------------------| || Starting ConductR | ||------------------------------------------------| |Starting container cond-0 exposing 127.0.0.1:3000, 127.0.0.1:3001, 127.0.0.1:5601, 127.0.0.1:9200, 127.0.0.1:9999.. ||------------------------------------------------| || Summary | ||------------------------------------------------| |ConductR has been started |Check resource consumption of Docker container that run the ConductR node with: | docker stats cond-0 |Check current bundle status with: | conduct info |""") self.assertEqual(expected_stdout, self.output(stdout)) mock_docker_run.assert_called_once_with( ['-d', '--name', 'cond-0', '-e', 'key1=value1', '-e', 'key2=value2', '-e', 'CONDUCTR_INSTANCE=0', '-e', 'CONDUCTR_NR_OF_INSTANCES=1', '-e', 'AKKA_LOGLEVEL=debug', '-e', 'CONDUCTR_FEATURES=visualization,logging', '-e', 'CONDUCTR_ROLES=role1,role2', '-p', '5601:5601', '-p', '9004:9004', '-p', '9005:9005', '-p', '9006:9006', '-p', '9999:9999', '-p', '9200:9200', '-p', '7222:7222', '-p', '3000:3000', '-p', '3001:3001'], '{}:{}'.format(image, image_version), self.default_positional_args ) mock_wait_for_conductr.assert_called_once_with(input_args, 0, DEFAULT_WAIT_RETRIES, DEFAULT_WAIT_RETRY_INTERVAL)
def test_roles(self): stdout = MagicMock() nr_of_containers = 3 conductr_roles = [['role1', 'role2'], ['role3']] with \ patch('conductr_cli.terminal.docker_images', return_value='some-image'), \ patch('conductr_cli.terminal.docker_ps', return_value=''), \ patch('conductr_cli.terminal.docker_inspect', return_value='10.10.10.10'), \ patch('conductr_cli.terminal.docker_run', return_value='') as mock_docker_run, \ patch('conductr_cli.sandbox_common.resolve_running_docker_containers', return_value=[]), \ patch('conductr_cli.sandbox_common.resolve_host_ip', return_value='192.168.99.100'): args = self.default_args.copy() args.update({ 'nr_of_containers': nr_of_containers, 'conductr_roles': conductr_roles }) logging_setup.configure_logging(MagicMock(**args), stdout) sandbox_run.run(MagicMock(**args)) expected_stdout = strip_margin("""|Starting ConductR nodes.. |Starting container cond-0.. |Starting container cond-1.. |Starting container cond-2.. |""") expected_image = '{}:{}'.format(CONDUCTR_DEV_IMAGE, LATEST_CONDUCTR_VERSION) self.assertEqual(expected_stdout, self.output(stdout)) # Assert cond-0 mock_docker_run.assert_any_call( ['-d', '--name', 'cond-0', '-e', 'AKKA_LOGLEVEL=info', '-e', 'CONDUCTR_ROLES=role1,role2', '-p', '9200:9200', '-p', '5601:5601', '-p', '9004:9004', '-p', '9005:9005', '-p', '9006:9006', '-p', '9999:9999'], expected_image, self.default_positional_args ) # Assert cond-1 mock_docker_run.assert_any_call( ['-d', '--name', 'cond-1', '-e', 'AKKA_LOGLEVEL=info', '-e', 'SYSLOG_IP=10.10.10.10', '-e', 'CONDUCTR_ROLES=role3', '-p', '9210:9200', '-p', '5611:5601', '-p', '9014:9004', '-p', '9015:9005', '-p', '9016:9006', '-p', '9909:9999'], expected_image, self.default_positional_args + ['--seed', '10.10.10.10:9004'] ) # Assert cond-2 mock_docker_run.assert_any_call( ['-d', '--name', 'cond-2', '-e', 'AKKA_LOGLEVEL=info', '-e', 'SYSLOG_IP=10.10.10.10', '-e', 'CONDUCTR_ROLES=role1,role2', '-p', '9220:9200', '-p', '5621:5601', '-p', '9024:9004', '-p', '9025:9005', '-p', '9026:9006', '-p', '9919:9999'], expected_image, self.default_positional_args + ['--seed', '10.10.10.10:9004'] )
def test_roles(self): stdout = MagicMock() nr_of_containers = 3 conductr_roles = [['role1', 'role2'], ['role3']] with \ patch('conductr_cli.terminal.docker_images', return_value='some-image'), \ patch('conductr_cli.terminal.docker_ps', return_value=''), \ patch('conductr_cli.terminal.docker_inspect', return_value='10.10.10.10'), \ patch('conductr_cli.terminal.docker_run', return_value='') as mock_docker_run, \ patch('conductr_cli.sandbox_common.resolve_running_docker_containers', return_value=[]), \ patch('conductr_cli.sandbox_common.resolve_host_ip', return_value='192.168.99.100'): args = self.default_args.copy() args.update({ 'nr_of_containers': nr_of_containers, 'conductr_roles': conductr_roles }) logging_setup.configure_logging(MagicMock(**args), stdout) sandbox_run.run(MagicMock(**args)) expected_stdout = strip_margin("""|Starting ConductR nodes.. |Starting container cond-0.. |Starting container cond-1.. |Starting container cond-2.. |""") expected_image = '{}:{}'.format(CONDUCTR_DEV_IMAGE, LATEST_CONDUCTR_VERSION) self.assertEqual(expected_stdout, self.output(stdout)) # Assert cond-0 mock_docker_run.assert_any_call( ['-d', '--name', 'cond-0', '-e', 'AKKA_LOGLEVEL=info', '-e', 'CONDUCTR_ROLES=role1,role2', '-p', '5601:5601', '-p', '9000:9000', '-p', '9004:9004', '-p', '9005:9005', '-p', '9006:9006', '-p', '9999:9999'], expected_image, self.default_positional_args ) # Assert cond-1 mock_docker_run.assert_any_call( ['-d', '--name', 'cond-1', '-e', 'AKKA_LOGLEVEL=info', '-e', 'SYSLOG_IP=10.10.10.10', '-e', 'CONDUCTR_ROLES=role3', '-p', '5611:5601', '-p', '9010:9000', '-p', '9014:9004', '-p', '9015:9005', '-p', '9016:9006', '-p', '9909:9999'], expected_image, self.default_positional_args + ['--seed', '10.10.10.10:9004'] ) # Assert cond-2 mock_docker_run.assert_any_call( ['-d', '--name', 'cond-2', '-e', 'AKKA_LOGLEVEL=info', '-e', 'SYSLOG_IP=10.10.10.10', '-e', 'CONDUCTR_ROLES=role1,role2', '-p', '5621:5601', '-p', '9020:9000', '-p', '9024:9004', '-p', '9025:9005', '-p', '9026:9006', '-p', '9919:9999'], expected_image, self.default_positional_args + ['--seed', '10.10.10.10:9004'] )
def test_containers_already_running(self): stdout = MagicMock() with \ patch('conductr_cli.terminal.docker_images', return_value='some-image'), \ patch('conductr_cli.sandbox_common.resolve_running_docker_containers', return_value=['cond-0']): logging_setup.configure_logging(MagicMock(**self.default_args), stdout) sandbox_run.run(MagicMock(**self.default_args)) expected_stdout = strip_margin("""|ConductR nodes {} already exists, leaving them alone. |""".format('cond-0')) self.assertEqual(expected_stdout, self.output(stdout))
def test_wait_options(self): stdout = MagicMock() mock_wait_for_conductr = MagicMock() wait_retries = 3 wait_retry_interval = 1.0 wait_options = { 'CONDUCTR_SANDBOX_WAIT_RETRIES': str(wait_retries), 'CONDUCTR_SANDBOX_WAIT_RETRY_INTERVAL': str(wait_retry_interval) } def wait_env(key, default=None): return wait_options[key] if key in wait_options else os.environ.get(key, default) input_args = MagicMock(**self.default_args) with \ patch('conductr_cli.terminal.docker_images', return_value=''), \ patch('conductr_cli.terminal.docker_pull', return_value=''), \ patch('conductr_cli.terminal.docker_ps', return_value=''), \ patch('conductr_cli.terminal.docker_inspect', return_value='10.10.10.10'), \ patch('conductr_cli.terminal.docker_run', return_value='') as mock_docker_run, \ patch('conductr_cli.sandbox_common.resolve_running_docker_containers', return_value=[]), \ patch('conductr_cli.sandbox_run.wait_for_conductr', mock_wait_for_conductr), \ patch('os.getenv', side_effect=wait_env) as mock_getenv: logging_setup.configure_logging(input_args, stdout) sandbox_run.run(input_args) expected_stdout = strip_margin("""|Pulling down the ConductR development image.. ||------------------------------------------------| || Starting ConductR | ||------------------------------------------------| |Starting container cond-0.. ||------------------------------------------------| || Summary | ||------------------------------------------------| |ConductR has been started |Check resource consumption of Docker container that run the ConductR node with: | docker stats cond-0 |Check current bundle status with: | conduct info |""") expected_optional_args = self.default_general_args('cond-0') + self.default_env_args + self.default_port_args expected_image = '{}:{}'.format(CONDUCTR_DEV_IMAGE, LATEST_CONDUCTR_VERSION) expected_positional_args = self.default_positional_args self.assertEqual(expected_stdout, self.output(stdout)) mock_getenv.assert_any_call('CONDUCTR_SANDBOX_WAIT_RETRIES', DEFAULT_WAIT_RETRIES) mock_getenv.assert_any_call('CONDUCTR_SANDBOX_WAIT_RETRY_INTERVAL', DEFAULT_WAIT_RETRY_INTERVAL) mock_docker_run.assert_called_once_with(expected_optional_args, expected_image, expected_positional_args) mock_wait_for_conductr.assert_called_once_with(input_args, 0, wait_retries, wait_retry_interval)
def test_scaling_down(self): stdout = MagicMock() with \ patch('conductr_cli.terminal.docker_images', return_value='some-image'), \ patch('conductr_cli.terminal.docker_rm', return_value='') as mock_docker_rm, \ patch('conductr_cli.sandbox_common.resolve_running_docker_containers', return_value=['cond-0', 'cond-1', 'cond-2']): logging_setup.configure_logging(MagicMock(**self.default_args), stdout) sandbox_run.run(MagicMock(**self.default_args)) expected_stdout = strip_margin("""|Stopping ConductR nodes.. |""".format('cond-0')) self.assertEqual(expected_stdout, self.output(stdout)) mock_docker_rm.assert_called_once_with(['cond-1', 'cond-2'])
def test_docker_sandbox(self): conductr_version = '1.1.11' mock_feature = MagicMock() features = [mock_feature] mock_collect_features = MagicMock(return_value=features) sandbox_run_result = sandbox_run_docker.SandboxRunResult(self.container_names, '192.168.99.100') mock_sandbox_run_docker = MagicMock(return_value=sandbox_run_result) mock_wait_for_conductr = MagicMock(return_value=True) mock_log_run_attempt = MagicMock() args = self.default_args.copy() args.update({ 'image_version': conductr_version }) input_args = MagicMock(**args) with \ patch('conductr_cli.sandbox_features.collect_features', mock_collect_features), \ patch('conductr_cli.sandbox_run_docker.run', mock_sandbox_run_docker), \ patch('conductr_cli.sandbox_run_docker.log_run_attempt', mock_log_run_attempt), \ patch('conductr_cli.sandbox_run.wait_for_conductr', mock_wait_for_conductr): self.assertTrue(sandbox_run.run(input_args)) mock_sandbox_run_docker.assert_called_once_with(input_args, features) mock_wait_for_conductr.assert_called_once_with(input_args, sandbox_run_result, 0, DEFAULT_WAIT_RETRIES, DEFAULT_WAIT_RETRY_INTERVAL) mock_log_run_attempt.assert_called_with(input_args, sandbox_run_result, True, 60) mock_feature.assert_not_called()
def test_jvm_validation_java_version_parse_error(self): conductr_version = '2.0.0' stdout = MagicMock() stderr = MagicMock() mock_feature = MagicMock() features = [mock_feature] mock_collect_features = MagicMock(return_value=features) mock_sandbox_run_jvm = MagicMock(side_effect=JavaVersionParseError('this is the output from java -version')) args = self.default_args.copy() args.update({ 'image_version': conductr_version }) input_args = MagicMock(**args) with \ patch('conductr_cli.sandbox_features.collect_features', mock_collect_features), \ patch('conductr_cli.sandbox_run_jvm.run', mock_sandbox_run_jvm): logging_setup.configure_logging(input_args, stdout, stderr) self.assertFalse(sandbox_run.run(input_args)) mock_sandbox_run_jvm.assert_called_once_with(input_args, features) expected_output = strip_margin(as_error("""|Error: Unable to obtain java version from the `java -version` command. |Error: Please ensure Oracle JVM 1.8 and above is installed. |""")) self.assertEqual(expected_output, self.output(stderr))
def test_with_custom_args(self): stdout = MagicMock() image_version = '1.1.0' conductr_roles = [['role1', 'role2']] envs = ['key1=value1', 'key2=value2'] image = 'my-image' log_level = 'debug' nr_of_containers = 1 ports = [3000, 3001] features = ['visualization', 'logging'] with \ patch('conductr_cli.terminal.docker_images', return_value='some-image'), \ patch('conductr_cli.terminal.docker_ps', return_value=''), \ patch('conductr_cli.terminal.docker_inspect', return_value='10.10.10.10'), \ patch('conductr_cli.terminal.docker_run', return_value='') as mock_docker_run, \ patch('conductr_cli.sandbox_common.resolve_running_docker_containers', return_value=[]), \ patch('conductr_cli.sandbox_common.resolve_host_ip', return_value='192.168.99.100'): args = self.default_args.copy() args.update({ 'image_version': image_version, 'conductr_roles': conductr_roles, 'envs': envs, 'image': image, 'log_level': log_level, 'nr_of_containers': nr_of_containers, 'ports': ports, 'bundle_http_port': 7222, 'features': features }) logging_setup.configure_logging(MagicMock(**args), stdout) sandbox_run.run(MagicMock(**args)) expected_stdout = strip_margin("""|Starting ConductR nodes.. |Starting container cond-0 exposing 192.168.99.100:3000, 192.168.99.100:3001, 192.168.99.100:5601, 192.168.99.100:9999.. |""") self.assertEqual(expected_stdout, self.output(stdout)) mock_docker_run.assert_called_once_with( ['-d', '--name', 'cond-0', '-e', 'key1=value1', '-e', 'key2=value2', '-e', 'AKKA_LOGLEVEL=debug', '-e', 'CONDUCTR_FEATURES=visualization,logging', '-e', 'CONDUCTR_ROLES=role1,role2', '-p', '5601:5601', '-p', '9004:9004', '-p', '9005:9005', '-p', '9006:9006', '-p', '9999:9999', '-p', '7222:7222', '-p', '3000:3000', '-p', '3001:3001'], '{}:{}'.format(image, image_version), self.default_positional_args )
def test_containers_already_running(self): stdout = MagicMock() mock_wait_for_conductr = MagicMock() running_containers = ['cond-0'] input_args = MagicMock(**self.default_args) with \ patch('conductr_cli.terminal.docker_images', return_value='some-image'), \ patch('conductr_cli.terminal.docker_pull', return_value=''), \ patch('conductr_cli.terminal.docker_ps', return_value=''), \ patch('conductr_cli.terminal.docker_inspect', return_value='10.10.10.10'), \ patch('conductr_cli.terminal.docker_run', return_value=''), \ patch('conductr_cli.sandbox_common.resolve_running_docker_containers', return_value=running_containers), \ patch('conductr_cli.sandbox_run.wait_for_conductr', mock_wait_for_conductr), \ patch('conductr_cli.terminal.docker_rm') as mock_docker_rm: logging_setup.configure_logging(input_args, stdout) sandbox_run.run(input_args) expected_stdout = strip_margin("""||------------------------------------------------| || Stopping ConductR | ||------------------------------------------------| ||------------------------------------------------| || Starting ConductR | ||------------------------------------------------| |Starting container cond-0.. ||------------------------------------------------| || Summary | ||------------------------------------------------| |ConductR has been started |Check resource consumption of Docker container that run the ConductR node with: | docker stats cond-0 |Check current bundle status with: | conduct info |""") self.assertEqual(expected_stdout, self.output(stdout)) mock_docker_rm.assert_called_once_with(running_containers) mock_wait_for_conductr.assert_called_once_with(input_args, 0, DEFAULT_WAIT_RETRIES, DEFAULT_WAIT_RETRY_INTERVAL)
def test_default_args(self): stdout = MagicMock() mock_wait_for_conductr = MagicMock() input_args = MagicMock(**self.default_args) with \ patch('conductr_cli.terminal.docker_images', return_value=''), \ patch('conductr_cli.terminal.docker_pull', return_value=''), \ patch('conductr_cli.terminal.docker_ps', return_value=''), \ patch('conductr_cli.terminal.docker_inspect', return_value='10.10.10.10'), \ patch('conductr_cli.terminal.docker_run', return_value='') as mock_docker_run, \ patch('conductr_cli.sandbox_common.resolve_running_docker_containers', return_value=[]), \ patch('conductr_cli.sandbox_run.wait_for_conductr', mock_wait_for_conductr): logging_setup.configure_logging(MagicMock(**self.default_args), stdout) sandbox_run.run(input_args) expected_stdout = strip_margin("""|Pulling down the ConductR development image.. ||------------------------------------------------| || Starting ConductR | ||------------------------------------------------| |Starting container cond-0.. ||------------------------------------------------| || Summary | ||------------------------------------------------| |ConductR has been started |Check resource consumption of Docker container that run the ConductR node with: | docker stats cond-0 |Check current bundle status with: | conduct info |""") expected_optional_args = self.default_general_args('cond-0') + self.default_env_args + self.default_port_args expected_image = '{}:{}'.format(CONDUCTR_DEV_IMAGE, LATEST_CONDUCTR_VERSION) expected_positional_args = self.default_positional_args self.assertEqual(expected_stdout, self.output(stdout)) mock_docker_run.assert_called_once_with(expected_optional_args, expected_image, expected_positional_args) mock_wait_for_conductr.assert_called_once_with(input_args, 0, DEFAULT_WAIT_RETRIES, DEFAULT_WAIT_RETRY_INTERVAL)
def test_default_args(self): stdout = MagicMock() with \ patch('conductr_cli.terminal.docker_images', return_value=''), \ patch('conductr_cli.terminal.docker_pull', return_value=''), \ patch('conductr_cli.terminal.docker_ps', return_value=''), \ patch('conductr_cli.terminal.docker_inspect', return_value='10.10.10.10'), \ patch('conductr_cli.terminal.docker_run', return_value='') as mock_docker_run, \ patch('conductr_cli.sandbox_common.resolve_running_docker_containers', return_value=[]), \ patch('conductr_cli.sandbox_common.resolve_host_ip', return_value='192.168.99.100'): logging_setup.configure_logging(MagicMock(**self.default_args), stdout) sandbox_run.run(MagicMock(**self.default_args)) expected_stdout = strip_margin("""|Pulling down the ConductR development image.. |Starting ConductR nodes.. |Starting container cond-0.. |""") expected_optional_args = self.default_general_args('cond-0') + self.default_env_args + self.default_port_args expected_image = '{}:{}'.format(CONDUCTR_DEV_IMAGE, LATEST_CONDUCTR_VERSION) expected_positional_args = self.default_positional_args self.assertEqual(expected_stdout, self.output(stdout)) mock_docker_run.assert_called_once_with(expected_optional_args, expected_image, expected_positional_args)
def test_jvm_sandbox(self): conductr_version = '2.0.0' mock_feature = MagicMock() mock_feature.ports = [10001] features = [mock_feature] mock_collect_features = MagicMock(return_value=features) sandbox_run_result = sandbox_run_jvm.SandboxRunResult([1001], ['192.168.1.1'], [1002], ['192.168.1.1']) mock_sandbox_run_jvm = MagicMock(return_value=sandbox_run_result) mock_wait_for_conductr = MagicMock(return_value=True) mock_start_proxy = MagicMock(return_value=True) mock_log_run_attempt = MagicMock() args = self.default_args.copy() args.update({ 'image_version': conductr_version, 'ports': [3553] }) input_args = MagicMock(**args) with \ patch('conductr_cli.sandbox_features.collect_features', mock_collect_features), \ patch('conductr_cli.sandbox_run_jvm.run', mock_sandbox_run_jvm), \ patch('conductr_cli.sandbox_run_jvm.log_run_attempt', mock_log_run_attempt), \ patch('conductr_cli.sandbox_run.wait_for_conductr', mock_wait_for_conductr), \ patch('conductr_cli.sandbox_proxy.start_proxy', mock_start_proxy): self.assertTrue(sandbox_run.run(input_args)) mock_sandbox_run_jvm.assert_called_once_with(input_args, features) mock_wait_for_conductr.assert_called_once_with(input_args, sandbox_run_result, 0, DEFAULT_WAIT_RETRIES, DEFAULT_WAIT_RETRY_INTERVAL) mock_start_proxy.assert_called_once_with(proxy_bind_addr='192.168.1.1', proxy_ports=[3553, 10001]) mock_log_run_attempt.assert_called_with(input_args, sandbox_run_result, True, 60)
def test_docker_sandbox_instance_count_error(self): conductr_version = '1.1.11' stdout = MagicMock() stderr = MagicMock() mock_feature = MagicMock() features = [mock_feature] mock_collect_features = MagicMock(return_value=features) nr_of_containers = '2:3' mock_sandbox_run_docker = MagicMock(side_effect=[InstanceCountError(conductr_version, nr_of_containers, 'Test only')]) args = self.default_args.copy() args.update({ 'image_version': conductr_version, 'nr_of_containers': nr_of_containers }) input_args = MagicMock(**args) with \ patch('conductr_cli.sandbox_features.collect_features', mock_collect_features), \ patch('conductr_cli.sandbox_run_docker.run', mock_sandbox_run_docker): logging_setup.configure_logging(input_args, stdout, stderr) self.assertFalse(sandbox_run.run(input_args)) mock_sandbox_run_docker.assert_called_once_with(input_args, features) expected_output = strip_margin(as_error("""|Error: Invalid number of containers 2:3 for ConductR version 1.1.11 |Error: Test only |""")) self.assertEqual(expected_output, self.output(stderr)) mock_feature.assert_not_called()
def test_multiple_container(self): stdout = MagicMock() mock_wait_for_conductr = MagicMock() nr_of_containers = 3 with \ patch('conductr_cli.terminal.docker_images', return_value='some-image'), \ patch('conductr_cli.terminal.docker_ps', return_value=''), \ patch('conductr_cli.terminal.docker_inspect', return_value='10.10.10.10'), \ patch('conductr_cli.terminal.docker_run', return_value='') as mock_docker_run, \ patch('conductr_cli.sandbox_common.resolve_running_docker_containers', return_value=[]), \ patch('conductr_cli.sandbox_run.wait_for_conductr', mock_wait_for_conductr): args = self.default_args.copy() args.update({'nr_of_containers': nr_of_containers}) input_args = MagicMock(**args) logging_setup.configure_logging(input_args, stdout) sandbox_run.run(input_args) expected_stdout = strip_margin("""||------------------------------------------------| || Starting ConductR | ||------------------------------------------------| |Starting container cond-0.. |Starting container cond-1.. |Starting container cond-2.. ||------------------------------------------------| || Summary | ||------------------------------------------------| |ConductR has been started |Check resource consumption of Docker containers that run the ConductR nodes with: | docker stats cond-0 cond-1 cond-2 |Check current bundle status with: | conduct info |""") expected_image = '{}:{}'.format(CONDUCTR_DEV_IMAGE, LATEST_CONDUCTR_VERSION) self.assertEqual(expected_stdout, self.output(stdout)) # Assert cond-0 mock_docker_run.assert_any_call( ['-d', '--name', 'cond-0', '-e', 'CONDUCTR_INSTANCE=0', '-e', 'CONDUCTR_NR_OF_INSTANCES=3', '-e', 'AKKA_LOGLEVEL=info', '-p', '9000:9000', '-p', '9004:9004', '-p', '9005:9005', '-p', '9006:9006'], expected_image, self.default_positional_args ) # Assert cond-1 mock_docker_run.assert_any_call( ['-d', '--name', 'cond-1', '-e', 'CONDUCTR_INSTANCE=1', '-e', 'CONDUCTR_NR_OF_INSTANCES=3', '-e', 'AKKA_LOGLEVEL=info', '-e', 'SYSLOG_IP=10.10.10.10', '-p', '9010:9000', '-p', '9014:9004', '-p', '9015:9005', '-p', '9016:9006'], expected_image, self.default_positional_args + ['--seed', '10.10.10.10:9004'] ) # Assert cond-2 mock_docker_run.assert_any_call( ['-d', '--name', 'cond-2', '-e', 'CONDUCTR_INSTANCE=2', '-e', 'CONDUCTR_NR_OF_INSTANCES=3', '-e', 'AKKA_LOGLEVEL=info', '-e', 'SYSLOG_IP=10.10.10.10', '-p', '9020:9000', '-p', '9024:9004', '-p', '9025:9005', '-p', '9026:9006'], expected_image, self.default_positional_args + ['--seed', '10.10.10.10:9004'] ) mock_wait_for_conductr.assert_called_once_with(input_args, 0, DEFAULT_WAIT_RETRIES, DEFAULT_WAIT_RETRY_INTERVAL)