Example #1
0
    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()
Example #2
0
    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']
        )
Example #4
0
    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']
        )
Example #5
0
    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_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))
Example #7
0
    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)
Example #8
0
    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_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'])
Example #10
0
    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()
Example #11
0
    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))
Example #12
0
    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
        )
Example #13
0
    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)
Example #14
0
    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)
Example #16
0
    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)
Example #17
0
    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)
Example #18
0
    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()
Example #19
0
    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)