Example #1
0
def test_log(mock_stderr, mock_stdout):
    tshuttle.helpers.log("message")
    tshuttle.helpers.log("abc")
    tshuttle.helpers.log("message 1\n")
    tshuttle.helpers.log("message 2\nline2\nline3\n")
    tshuttle.helpers.log("message 3\nline2\nline3")
    assert mock_stdout.mock_calls == [
        call.flush(),
        call.flush(),
        call.flush(),
        call.flush(),
        call.flush(),
    ]
    assert mock_stderr.mock_calls == [
        call.write('prefix: message\n'),
        call.flush(),
        call.write('prefix: abc\n'),
        call.flush(),
        call.write('prefix: message 1\n'),
        call.flush(),
        call.write('prefix: message 2\n'),
        call.write('    line2\n'),
        call.write('    line3\n'),
        call.flush(),
        call.write('prefix: message 3\n'),
        call.write('    line2\n'),
        call.write('    line3\n'),
        call.flush(),
    ]
    def test_periodic_check_between_events(self):
        count_installations_mock = MagicMock(side_effect=[0, 0, 1])
        url_mock = MagicMock(return_value='/bundle-events/endpoint')
        conductr_host = '10.0.0.1'
        conductr_host_mock = MagicMock(return_value=conductr_host)
        get_events_mock = MagicMock(return_value=[
            create_heartbeat_event(),
            create_test_event('bundleInstallationAdded'),
            create_heartbeat_event(),
            create_heartbeat_event(),
            create_heartbeat_event(),
            create_test_event('bundleInstallationAdded')
        ])

        stdout = MagicMock()
        is_tty_mock = MagicMock(return_value=True)

        bundle_id = 'a101449418187d92c789d1adc240b6d6'
        dcos_mode = True
        args = MagicMock(**{
            'dcos_mode': dcos_mode,
            'wait_timeout': 10,
            'conductr_auth': self.conductr_auth,
            'server_verification_file': self.server_verification_file
        })
        with patch('conductr_cli.conduct_url.url', url_mock), \
                patch('conductr_cli.conduct_url.conductr_host', conductr_host_mock), \
                patch('conductr_cli.bundle_installation.count_installations', count_installations_mock), \
                patch('conductr_cli.sse_client.get_events', get_events_mock), \
                patch('sys.stdout.isatty', is_tty_mock):
            logging_setup.configure_logging(args, stdout)
            bundle_installation.wait_for_installation(bundle_id, args)

        self.assertEqual(count_installations_mock.call_args_list, [
            call(bundle_id, args),
            call(bundle_id, args),
            call(bundle_id, args)
        ])

        url_mock.assert_called_with('bundles/events', args)

        conductr_host_mock.assert_called_with(args)

        get_events_mock.assert_called_with(dcos_mode, conductr_host, '/bundle-events/endpoint', auth=self.conductr_auth,
                                           verify=self.server_verification_file)

        self.assertEqual(stdout.method_calls, [
            call.write('Bundle a101449418187d92c789d1adc240b6d6 waiting to be installed'),
            call.write('\n'),
            call.flush(),
            call.write('Bundle a101449418187d92c789d1adc240b6d6 still waiting to be installed\r'),
            call.write(''),
            call.flush(),
            call.write('Bundle a101449418187d92c789d1adc240b6d6 still waiting to be installed\n'),
            call.write(''),
            call.flush(),
            call.write('Bundle a101449418187d92c789d1adc240b6d6 installed'),
            call.write('\n'),
            call.flush(),
        ])
    def test_periodic_check_between_events(self):
        count_installations_mock = MagicMock(side_effect=[0, 0, 1])
        url_mock = MagicMock(return_value='/bundle-events/endpoint')
        conductr_host = '10.0.0.1'
        conductr_host_mock = MagicMock(return_value=conductr_host)
        get_events_mock = MagicMock(return_value=[
            create_heartbeat_event(),
            create_test_event('bundleInstallationAdded'),
            create_heartbeat_event(),
            create_heartbeat_event(),
            create_heartbeat_event(),
            create_test_event('bundleInstallationAdded')
        ])

        stdout = MagicMock()

        bundle_id = 'a101449418187d92c789d1adc240b6d6'
        dcos_mode = True
        args = MagicMock(**{
            'dcos_mode': dcos_mode,
            'wait_timeout': 10,
            'conductr_auth': self.conductr_auth,
            'server_verification_file': self.server_verification_file
        })
        with patch('conductr_cli.conduct_url.url', url_mock), \
                patch('conductr_cli.conduct_url.conductr_host', conductr_host_mock), \
                patch('conductr_cli.bundle_installation.count_installations', count_installations_mock), \
                patch('conductr_cli.sse_client.get_events', get_events_mock):
            logging_setup.configure_logging(args, stdout)
            bundle_installation.wait_for_installation(bundle_id, args)

        self.assertEqual(count_installations_mock.call_args_list, [
            call(bundle_id, args),
            call(bundle_id, args),
            call(bundle_id, args)
        ])

        url_mock.assert_called_with('bundles/events', args)

        conductr_host_mock.assert_called_with(args)

        get_events_mock.assert_called_with(dcos_mode, conductr_host, '/bundle-events/endpoint', auth=self.conductr_auth,
                                           verify=self.server_verification_file)

        self.assertEqual(stdout.method_calls, [
            call.write('Bundle a101449418187d92c789d1adc240b6d6 waiting to be installed'),
            call.write('\n'),
            call.flush(),
            call.write('Bundle a101449418187d92c789d1adc240b6d6 still waiting to be installed\r'),
            call.write(''),
            call.flush(),
            call.write('Bundle a101449418187d92c789d1adc240b6d6 still waiting to be installed\n'),
            call.write(''),
            call.flush(),
            call.write('Bundle a101449418187d92c789d1adc240b6d6 installed'),
            call.write('\n'),
            call.flush(),
        ])
Example #4
0
def test_debug3(mock_stderr, mock_stdout):
    tshuttle.helpers.debug3("message")
    assert mock_stdout.mock_calls == [
        call.flush(),
    ]
    assert mock_stderr.mock_calls == [
        call.write('prefix: message\n'),
        call.flush(),
    ]
Example #5
0
    def test_wait_timeout_all_events(self):
        get_scale_mock = MagicMock(return_value=0)
        url_mock = MagicMock(return_value='/bundle-events/endpoint')
        conductr_host = '10.0.0.1'
        conductr_host_mock = MagicMock(return_value=conductr_host)
        get_events_mock = MagicMock(return_value=[
            self.create_test_event('bundleExecutionAdded'),
            self.create_test_event('bundleExecutionAdded'),
            self.create_test_event('bundleExecutionAdded')
        ])

        stdout = MagicMock()

        bundle_id = 'a101449418187d92c789d1adc240b6d6'
        dcos_mode = False
        args = MagicMock(**{
            'dcos_mode': dcos_mode,
            'wait_timeout': 10,
            'conductr_auth': self.conductr_auth,
            'server_verification_file': self.server_verification_file
        })
        with patch('conductr_cli.conduct_url.url', url_mock), \
                patch('conductr_cli.conduct_url.conductr_host', conductr_host_mock), \
                patch('conductr_cli.bundle_scale.get_scale', get_scale_mock), \
                patch('conductr_cli.sse_client.get_events', get_events_mock):
            logging_setup.configure_logging(args, stdout)
            self.assertRaises(WaitTimeoutError, bundle_scale.wait_for_scale, bundle_id, 3, args)

        self.assertEqual(get_scale_mock.call_args_list, [
            call(bundle_id, args),
            call(bundle_id, args),
            call(bundle_id, args),
            call(bundle_id, args)
        ])

        url_mock.assert_called_with('bundles/events', args)

        conductr_host_mock.assert_called_with(args)

        get_events_mock.assert_called_with(dcos_mode, conductr_host, '/bundle-events/endpoint', auth=self.conductr_auth,
                                           verify=self.server_verification_file)

        self.assertEqual(stdout.method_calls, [
            call.write('Bundle a101449418187d92c789d1adc240b6d6 waiting to reach expected scale 3'),
            call.write('\n'),
            call.flush(),
            call.write('Bundle a101449418187d92c789d1adc240b6d6 has scale 0, expected 3\r'),
            call.write(''),
            call.flush(),
            call.write('Bundle a101449418187d92c789d1adc240b6d6 has scale 0, expected 3.\r'),
            call.write(''),
            call.flush(),
            call.write('Bundle a101449418187d92c789d1adc240b6d6 has scale 0, expected 3..\r'),
            call.write(''),
            call.flush()
        ])
    def test_return_immediately_if_deployment_is_successful(self):
        get_deployment_state_mock = MagicMock(side_effect=[
            self.create_deployment_state('deploymentSuccess'),
        ])
        url_mock = MagicMock(return_value='/deployments/events')
        conductr_host = '10.0.0.1'
        conductr_host_mock = MagicMock(return_value=conductr_host)
        get_events_mock = MagicMock()

        stdout = MagicMock()

        deployment_id = 'a101449418187d92c789d1adc240b6d6'
        resolved_version = {
            'org': 'typesafe',
            'repo': 'bundle',
            'package_name': 'cassandra',
            'compatibility_version': 'v1',
            'digest': 'abcdef',
            'resolver': bintray_resolver.__name__
        }
        dcos_mode = False
        args = MagicMock(
            **{
                'dcos_mode': dcos_mode,
                'long_ids': False,
                'wait_timeout': 10,
                'conductr_auth': self.conductr_auth,
                'server_verification_file': self.server_verification_file
            })
        with patch('conductr_cli.conduct_url.url', url_mock), \
                patch('conductr_cli.conduct_url.conductr_host', conductr_host_mock), \
                patch('conductr_cli.bundle_deploy.get_deployment_state', get_deployment_state_mock), \
                patch('conductr_cli.sse_client.get_events', get_events_mock):
            logging_setup.configure_logging(args, stdout)
            bundle_deploy.wait_for_deployment_complete(deployment_id,
                                                       resolved_version, args)

        self.assertEqual(get_deployment_state_mock.call_args_list,
                         [call(deployment_id, args)])

        url_mock.assert_not_called()

        conductr_host_mock.assert_not_called()

        get_events_mock.assert_not_called()

        self.assertEqual(stdout.method_calls, [
            call.write('Deploying cassandra:v1-abcdef'),
            call.write('\n'),
            call.flush(),
            call.write('Success'),
            call.write('\n'),
            call.flush()
        ])
Example #7
0
def test_main(mock_get_method, mock_setup_daemon, mock_rewrite_etc_hosts):
    stdin, stdout = setup_daemon()
    mock_setup_daemon.return_value = stdin, stdout

    mock_get_method("not_auto").name = "test"
    mock_get_method.reset_mock()

    sshuttle.firewall.main("not_auto", False)

    assert mock_rewrite_etc_hosts.mock_calls == [
        call({'1.2.3.3': 'existing'}, 1024),
        call({}, 1024),
    ]

    assert stdout.mock_calls == [
        call.write('READY test\n'),
        call.flush(),
        call.write('STARTED\n'),
        call.flush()
    ]
    assert mock_setup_daemon.mock_calls == [call()]
    assert mock_get_method.mock_calls == [
        call('not_auto'),
        call().is_supported(),
        call().is_supported().__bool__(),
        call().setup_firewall(
            1024, 1026,
            [(AF_INET6, u'2404:6800:4004:80c::33')],
            AF_INET6,
            [(AF_INET6, 64, False, u'2404:6800:4004:80c::', 0, 0),
                (AF_INET6, 128, True, u'2404:6800:4004:80c::101f', 80, 80)],
            True,
            None,
            '0x01'),
        call().setup_firewall(
            1025, 1027,
            [(AF_INET, u'1.2.3.33')],
            AF_INET,
            [(AF_INET, 24, False, u'1.2.3.0', 8000, 9000),
                (AF_INET, 32, True, u'1.2.3.66', 8080, 8080)],
            True,
            None,
            '0x01'),
        call().restore_firewall(1024, AF_INET6, True, None),
        call().restore_firewall(1025, AF_INET, True, None),
    ]
Example #8
0
def test_train(return_predictions_batch):
    batch_size = 2
    num_items = sum(len(batch) for batch in return_predictions_batch)
    return_predictions_batch_copy = copy.deepcopy(return_predictions_batch)

    formatter = VowpalWabbitDummyFormatter()

    common_features = '|a user1'
    items_features = ['|b item{}'.format(i) for i in range(num_items)]
    weights = [random.random() for _ in range(num_items)]
    labels = [random.random() for _ in range(num_items)]

    def get_next_prediction():
        if return_predictions_batch_copy[0]:
            return str(return_predictions_batch_copy[0].pop(0))
        else:
            return_predictions_batch_copy.pop(0)
            return get_next_prediction()

    vw_process = Mock(
        stdin=Mock(),
        stdout=Mock(
            readline=Mock(side_effect=lambda: bytes(get_next_prediction() + '\n', encoding='utf-8'))
        )
    )
    popen = Mock(
        return_value=vw_process
    )
    with patch('subwabbit.blocking.subprocess.Popen', new=popen):
        model = VowpalWabbitProcess(
            formatter=formatter,
            batch_size=batch_size,
            vw_args=[]
        )
        assert model.vw_process == vw_process
        model.train(common_features, iter(items_features), iter(labels), iter(weights))

        expected_calls = []
        for i, item_features in enumerate(return_predictions_batch):
            items_from = i * batch_size
            items_to = i * batch_size + batch_size
            expected_calls.append(
                call.write(
                    bytes(
                        '\n'.join([
                            formatter.get_formatted_example(common_features, item_features, label, weight)
                            for item_features, label, weight in zip(
                                items_features[items_from:items_to],
                                labels[items_from:items_to],
                                weights[items_from:items_to])
                        ]) + '\n',
                        encoding='utf-8'
                    )
                )
            )
            expected_calls.append(call.flush())
        vw_process.stdin.assert_has_calls(expected_calls)
        assert model.unprocessed_batch_sizes == []
Example #9
0
    def test_save(self):
        session = MagicMock()
        k = KvkUpdateMessageRepository(session)
        message = KvkUpdateMessage()

        self.assertEqual(message, k.save(message))
        session.assert_has_calls([
            call.add(message),
            call.flush(),
        ])
Example #10
0
    def test_wait_for_start_timeout(self):
        stdout = MagicMock()
        is_tty_mock = MagicMock(return_value=True)
        mock_get_env = MagicMock(return_value=1)

        members_url = '/members'
        mock_url = MagicMock(return_value=members_url)

        mock_http_get = MagicMock(side_effect=[ConnectionError()])

        with \
                patch('os.getenv', mock_get_env), \
                patch('conductr_cli.conduct_url.url', mock_url), \
                patch('conductr_cli.conduct_request.get', mock_http_get), \
                patch('sys.stdout.isatty', is_tty_mock):
            args = MagicMock(**{})
            logging_setup.configure_logging(args, stdout)
            run_result = MagicMock(**{'host': '10.0.0.1'})
            self.assertRaises(ConductrStartupError,
                              sandbox_common.wait_for_start, run_result)

        self.assertEqual([
            call('CONDUCTR_SANDBOX_WAIT_RETRIES', DEFAULT_WAIT_RETRIES),
            call('CONDUCTR_SANDBOX_WAIT_RETRY_INTERVAL',
                 DEFAULT_WAIT_RETRY_INTERVAL)
        ], mock_get_env.call_args_list)

        mock_http_get.assert_called_once_with(dcos_mode=False,
                                              host='10.0.0.1',
                                              timeout=5,
                                              url='/members')

        self.assertEqual([
            call.write('Waiting for ConductR to start\r'),
            call.write(''),
            call.flush(),
            call.write('Waiting for ConductR to start.\r'),
            call.write(''),
            call.flush(),
            call.write('Waiting for ConductR to start.\n'),
            call.write(''),
            call.flush()
        ], stdout.method_calls)
Example #11
0
    def test_save_all(self):
        objs = ['a', 'b']
        session = MagicMock()
        k = KvkUpdateMessageRepository(session)
        self.assertEqual(objs, k.save_all(objs))

        session.assert_has_calls([
            call.add('a'),
            call.add('b'),
            call.flush(),
        ])
Example #12
0
    def test_wait_for_start(self):
        stdout = MagicMock()
        mock_get_env = MagicMock(return_value=1)

        members_url = '/members'
        mock_url = MagicMock(return_value=members_url)

        mock_http_get = MagicMock(return_value='test only')

        with \
                patch('os.getenv', mock_get_env), \
                patch('conductr_cli.conduct_url.url', mock_url), \
                patch('conductr_cli.conduct_request.get', mock_http_get):
            args = MagicMock(**{
                'no_wait': False
            })
            logging_setup.configure_logging(args, stdout)
            run_result = MagicMock(**{
                'host': '10.0.0.1'
            })
            result = sandbox_run.wait_for_start(args, run_result)
            self.assertEqual((True, 1.0), result)

        self.assertEqual([
            call('CONDUCTR_SANDBOX_WAIT_RETRIES', DEFAULT_WAIT_RETRIES),
            call('CONDUCTR_SANDBOX_WAIT_RETRY_INTERVAL', DEFAULT_WAIT_RETRY_INTERVAL)
        ], mock_get_env.call_args_list)

        mock_http_get.assert_called_once_with(dcos_mode=False, host='10.0.0.1', timeout=5, url='/members')

        self.assertEqual([
            call.write('Waiting for ConductR to start\r'),
            call.write(''),
            call.flush(),
            call.write('Waiting for ConductR to start.\r'),
            call.write(''),
            call.flush(),
            call.write('Waiting for ConductR to start.\n'),
            call.write(''),
            call.flush()
        ], stdout.method_calls)
Example #13
0
def test_firewall_command_darwin(mock_pf_get_dev, mock_ioctl, mock_stdout):
    method = get_method('pf')
    assert not method.firewall_command("somthing")

    command = "QUERY_PF_NAT %d,%d,%s,%d,%s,%d\n" % (
        AF_INET, socket.IPPROTO_TCP, "127.0.0.1", 1025, "127.0.0.2", 1024)
    assert method.firewall_command(command)

    assert mock_pf_get_dev.mock_calls == [call()]
    assert mock_ioctl.mock_calls == [
        call(mock_pf_get_dev(), 0xc0544417, ANY),
    ]
    assert mock_stdout.mock_calls == [
        call.write('QUERY_PF_NAT_SUCCESS 0.0.0.0,0\n'),
        call.flush(),
    ]
Example #14
0
    def test_pre_expval(self):

        with patch('pennylane_pq.devices.ProjectQIBMBackend.expval_queue',
                   new_callable=PropertyMock) as mock_expval_queue:
            mock_PauliX = MagicMock(wires=[0])
            mock_PauliX.name = 'PauliX'
            mock_PauliY = MagicMock(wires=[0])
            mock_PauliY.name = 'PauliY'
            mock_Hadamard = MagicMock(wires=[0])
            mock_Hadamard.name = 'Hadamard'
            mock_Hermitian = MagicMock(wires=[0])
            mock_Hermitian.name = 'Hermitian'

            mock_expval_queue.return_value = [
                mock_PauliX,
                mock_PauliY,
                mock_Hadamard,
            ]
            dev = ProjectQIBMBackend(wires=2,
                                     use_hardware=False,
                                     num_runs=8 * 1024,
                                     user='******',
                                     password='******',
                                     verbose=True)
            dev._eng = MagicMock()
            dev.apply = MagicMock()

            with patch('projectq.ops.All',
                       new_callable=PropertyMock) as mock_All:
                dev.pre_expval()

            dev._eng.assert_has_calls([call.flush()])
            # The following might have to be changed in case a more elegant/efficient/different
            # implementation of the effective measurements is found
            dev.apply.assert_has_calls([
                call('Hadamard', [0], []),
                call('PauliZ', [0], []),
                call('S', [0], []),
                call('Hadamard', [0], []),
                call('RY', [0], [-0.7853981633974483])
            ])

            mock_expval_queue.return_value = [mock_Hermitian]
            with patch('projectq.ops.All',
                       new_callable=PropertyMock) as mock_All:
                self.assertRaises(NotImplementedError, dev.pre_expval)
Example #15
0
    def test_close(self, fp):
        # Prepare test
        self.key = self.test_close.__name__
        self.cache.fp = fp
        self.cache.cache_dict[self.key] = self.cache_entry
        self.cache.count = 1
        # Execute test
        self.cache.close()

        # Evaluate internal state (attribute values)
        self.assertIsNone(self.cache.fp,
                          ASSERT_INVALID_VALUE_FMT.format('sr_cache.fp'))
        self.assertDictEqual(
            {}, self.cache.cache_dict,
            ASSERT_INVALID_VALUE_FMT.format('sr_cache.cache_dict'))
        self.assertEqual(0, self.cache.count,
                         ASSERT_INVALID_VALUE_FMT.format('sr_cache.count'))

        # Evaluate external calls
        expected = [call.flush(), call.close()]
        self.assertEqual(expected, fp.mock_calls)
Example #16
0
    def test_exit(self, mock_sessionmaker):
        ds = DatabaseSession()
        session = MagicMock()
        ds.session = session
        ds.__exit__(None, None, None)

        session.assert_has_calls([
            call.flush(),
            call.expunge_all(),
            call.close(),
        ])
        session.rollback.assert_not_called()
        self.assertIsNone(ds.session)

        session.reset_mock()
        ds.session = session

        ds.__exit__('exc type', 'exc val', 'exc tb')
        session.assert_has_calls(
            [call.rollback(),
             call.expunge_all(),
             call.close()])
        session.flush.assert_not_called()
        self.assertIsNone(ds.session)
    def test_wait_timeout_all_events(self):
        count_installations_mock = MagicMock(return_value=1)
        url_mock = MagicMock(return_value='/bundle-events/endpoint')
        conductr_host = '10.0.0.1'
        conductr_host_mock = MagicMock(return_value=conductr_host)
        get_events_mock = MagicMock(return_value=[
            create_test_event('bundleInstallationAdded'),
            create_test_event('bundleInstallationAdded'),
            create_test_event('bundleInstallationAdded')
        ])

        stdout = MagicMock()

        bundle_id = 'a101449418187d92c789d1adc240b6d6'
        dcos_mode = True
        args = MagicMock(
            **{
                'dcos_mode': dcos_mode,
                'wait_timeout': 10,
                'conductr_auth': self.conductr_auth,
                'server_verification_file': self.server_verification_file
            })
        with patch('conductr_cli.conduct_url.url', url_mock), \
                patch('conductr_cli.bundle_installation.count_installations', count_installations_mock), \
                patch('conductr_cli.conduct_url.conductr_host', conductr_host_mock), \
                patch('conductr_cli.sse_client.get_events', get_events_mock):
            logging_setup.configure_logging(args, stdout)
            self.assertRaises(WaitTimeoutError,
                              bundle_installation.wait_for_uninstallation,
                              bundle_id, args)

        self.assertEqual(count_installations_mock.call_args_list, [
            call(bundle_id, args),
            call(bundle_id, args),
            call(bundle_id, args),
            call(bundle_id, args)
        ])

        url_mock.assert_called_with('bundles/events', args)

        conductr_host_mock.assert_called_with(args)

        get_events_mock.assert_called_with(
            dcos_mode,
            conductr_host,
            '/bundle-events/endpoint',
            auth=self.conductr_auth,
            verify=self.server_verification_file)

        self.assertEqual(stdout.method_calls, [
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 waiting to be uninstalled'
            ),
            call.write('\n'),
            call.flush(),
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 still waiting to be uninstalled\r'
            ),
            call.write(''),
            call.flush(),
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 still waiting to be uninstalled.\r'
            ),
            call.write(''),
            call.flush(),
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 still waiting to be uninstalled..\r'
            ),
            call.write(''),
            call.flush(),
        ])
    def test_wait_timeout_all_events(self):
        get_scale_mock = MagicMock(return_value=0)
        url_mock = MagicMock(return_value='/bundle-events/endpoint')
        conductr_host = '10.0.0.1'
        conductr_host_mock = MagicMock(return_value=conductr_host)
        get_events_mock = MagicMock(return_value=[
            self.create_test_event('bundleExecutionAdded'),
            self.create_test_event('bundleExecutionAdded'),
            self.create_test_event('bundleExecutionAdded')
        ])

        stdout = MagicMock()
        is_tty_mock = MagicMock(return_value=True)

        bundle_id = 'a101449418187d92c789d1adc240b6d6'
        dcos_mode = False
        args = MagicMock(
            **{
                'dcos_mode': dcos_mode,
                'wait_timeout': 10,
                'conductr_auth': self.conductr_auth,
                'server_verification_file': self.server_verification_file
            })
        with patch('conductr_cli.conduct_url.url', url_mock), \
                patch('conductr_cli.conduct_url.conductr_host', conductr_host_mock), \
                patch('conductr_cli.bundle_scale.get_scale', get_scale_mock), \
                patch('conductr_cli.sse_client.get_events', get_events_mock), \
                patch('sys.stdout.isatty', is_tty_mock):
            logging_setup.configure_logging(args, stdout)
            self.assertRaises(WaitTimeoutError,
                              bundle_scale.wait_for_scale,
                              bundle_id,
                              3,
                              wait_for_is_active=True,
                              args=args)

        self.assertEqual(get_scale_mock.call_args_list, [
            call(bundle_id, True, args),
            call(bundle_id, True, args),
            call(bundle_id, True, args),
            call(bundle_id, True, args)
        ])

        url_mock.assert_called_with('bundles/events', args)

        conductr_host_mock.assert_called_with(args)

        get_events_mock.assert_called_with(
            dcos_mode,
            conductr_host,
            '/bundle-events/endpoint',
            auth=self.conductr_auth,
            verify=self.server_verification_file)

        self.assertEqual(stdout.method_calls, [
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 waiting to reach expected scale 3'
            ),
            call.write('\n'),
            call.flush(),
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 has scale 0, expected 3\r'
            ),
            call.write(''),
            call.flush(),
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 has scale 0, expected 3.\r'
            ),
            call.write(''),
            call.flush(),
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 has scale 0, expected 3..\r'
            ),
            call.write(''),
            call.flush()
        ])
    def test_deployment_completed_with_failure(self):
        get_deployment_state_mock = MagicMock(side_effect=[
            self.create_deployment_state('deploymentStarted'),
            self.create_deployment_state('bundleDownload'),
            self.create_deployment_state(
                'configDownload', {
                    'compatibleBundleId':
                    'abf60451c6af18adcc851d67b369b7f5-a53237c1f4a067e13ef00090627fb3de'
                }),
            self.create_deployment_state(
                'load', {'configFileName': 'cassandra-prod-config.zip'}),
            self.create_deployment_state('deploy', {
                'bundleOld': {
                    'scale': 1
                },
                'bundleNew': {
                    'scale': 0
                }
            }),
            self.create_deployment_state('deploy', {
                'bundleOld': {
                    'scale': 0
                },
                'bundleNew': {
                    'scale': 1
                }
            }),
            self.create_deployment_state('deploymentFailure',
                                         {'failure': 'test only'}),
        ])
        url_mock = MagicMock(return_value='/deployments/events')
        conductr_host = '10.0.0.1'
        conductr_host_mock = MagicMock(return_value=conductr_host)
        get_events_mock = MagicMock(return_value=[
            self.create_test_event(None),
            self.create_test_event('deploymentStarted'),
            self.create_test_event(None),
            self.create_test_event('bundleDownload'),
            self.create_test_event(None),
            self.create_test_event(None),
            self.create_test_event(None),
            self.create_test_event('configDownload'),
            self.create_test_event('load'),
            self.create_test_event(None),
            self.create_test_event('deploy'),
            self.create_test_event(None),
            self.create_test_event(None),
            self.create_test_event(None),
            self.create_test_event('deploy'),
            self.create_test_event(None),
            self.create_test_event(None),
            self.create_test_event(None),
            self.create_test_event(None),
            self.create_test_event('deploymentFailure')
        ])

        stdout = MagicMock()

        deployment_id = 'a101449418187d92c789d1adc240b6d6'
        resolved_version = {
            'org': 'typesafe',
            'repo': 'bundle',
            'package_name': 'cassandra',
            'compatibility_version': 'v1',
            'digest': 'abcdef',
            'resolver': bintray_resolver.__name__
        }
        dcos_mode = False
        args = MagicMock(
            **{
                'dcos_mode': dcos_mode,
                'long_ids': False,
                'wait_timeout': 10,
                'conductr_auth': self.conductr_auth,
                'server_verification_file': self.server_verification_file
            })
        with patch('conductr_cli.conduct_url.url', url_mock), \
                patch('conductr_cli.conduct_url.conductr_host', conductr_host_mock), \
                patch('conductr_cli.bundle_deploy.get_deployment_state', get_deployment_state_mock), \
                patch('conductr_cli.sse_client.get_events', get_events_mock):
            logging_setup.configure_logging(args, stdout)
            self.assertRaises(ContinuousDeliveryError,
                              bundle_deploy.wait_for_deployment_complete,
                              deployment_id, resolved_version, args)

        self.assertEqual(get_deployment_state_mock.call_args_list, [
            call(deployment_id, args),
            call(deployment_id, args),
            call(deployment_id, args),
            call(deployment_id, args),
            call(deployment_id, args),
            call(deployment_id, args),
            call(deployment_id, args)
        ])

        url_mock.assert_called_with('deployments/events', args)

        conductr_host_mock.assert_called_with(args)

        get_events_mock.assert_called_with(
            dcos_mode,
            conductr_host,
            '/deployments/events',
            auth=self.conductr_auth,
            verify=self.server_verification_file)

        self.assertEqual(stdout.method_calls, [
            call.write('Deploying cassandra:v1-abcdef'),
            call.write('\n'),
            call.flush(),
            call.write('Downloading bundle\r'),
            call.write(''),
            call.flush(),
            call.write('Downloading bundle\n'),
            call.write(''),
            call.flush(),
            call.write('Downloading config from bundle abf6045-a53237c\r'),
            call.write(''),
            call.flush(),
            call.write('Downloading config from bundle abf6045-a53237c\n'),
            call.write(''),
            call.flush(),
            call.write('Loading bundle with config\r'),
            call.write(''),
            call.flush(),
            call.write('Loading bundle with config\n'),
            call.write(''),
            call.flush(),
            call.write('Deploying - 1 old instance vs 0 new instance\r'),
            call.write(''),
            call.flush(),
            call.write('Deploying - 1 old instance vs 0 new instance\n'),
            call.write(''),
            call.flush(),
            call.write('Deploying - 0 old instance vs 1 new instance\r'),
            call.write(''),
            call.flush(),
            call.write('Deploying - 0 old instance vs 1 new instance\n'),
            call.write(''),
            call.flush()
        ])
Example #20
0
 def test_moving_cursor(self, stdout, print, input):
     thespiae.cli._position_after_bars(5)
     self.assertSequenceEqual(stdout.mock_calls, [call.write('\r'), call.write('\x1b[4B'), call.flush()])
     print.assert_not_called()
     input.assert_not_called()
Example #21
0
 def test_write(self):
     self.file_view.write(sentinel.input_string)
     self.assertEqual([
         call.write(sentinel.input_string),
         call.flush(),
     ], self._write_file_handler.method_calls)
Example #22
0
    def test_periodic_check_between_events(self):
        get_scale_mock = MagicMock(side_effect=[0, 1, 2, 2, 2, 3])
        url_mock = MagicMock(return_value='/bundle-events/endpoint')
        conductr_host = '10.0.0.1'
        conductr_host_mock = MagicMock(return_value=conductr_host)
        get_events_mock = MagicMock(return_value=[
            self.create_test_event(None),
            self.create_test_event('bundleExecutionAdded'),
            self.create_test_event('bundleExecutionAdded'),
            self.create_test_event('otherEvent'),
            self.create_test_event(None),
            self.create_test_event(None),
            self.create_test_event(None),
            self.create_test_event('bundleExecutionAdded')
        ])

        stdout = MagicMock()

        bundle_id = 'a101449418187d92c789d1adc240b6d6'
        dcos_mode = False
        args = MagicMock(
            **{
                'dcos_mode': dcos_mode,
                'wait_timeout': 10,
                'conductr_auth': self.conductr_auth,
                'server_verification_file': self.server_verification_file
            })
        with patch('conductr_cli.conduct_url.url', url_mock), \
                patch('conductr_cli.conduct_url.conductr_host', conductr_host_mock), \
                patch('conductr_cli.bundle_scale.get_scale', get_scale_mock), \
                patch('conductr_cli.sse_client.get_events', get_events_mock):
            logging_setup.configure_logging(args, stdout)
            bundle_scale.wait_for_scale(bundle_id, 3, args)

        self.assertEqual(get_scale_mock.call_args_list, [
            call(bundle_id, args),
            call(bundle_id, args),
            call(bundle_id, args),
            call(bundle_id, args),
            call(bundle_id, args),
            call(bundle_id, args)
        ])

        url_mock.assert_called_with('bundles/events', args)

        conductr_host_mock.assert_called_with(args)

        get_events_mock.assert_called_with(
            dcos_mode,
            conductr_host,
            '/bundle-events/endpoint',
            auth=self.conductr_auth,
            verify=self.server_verification_file)

        self.assertEqual(stdout.method_calls, [
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 waiting to reach expected scale 3'
            ),
            call.write('\n'),
            call.flush(),
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 has scale 1, expected 3\r'
            ),
            call.write(''),
            call.flush(),
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 has scale 1, expected 3\n'
            ),
            call.write(''),
            call.flush(),
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 has scale 2, expected 3\r'
            ),
            call.write(''),
            call.flush(),
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 has scale 2, expected 3.\r'
            ),
            call.write(''),
            call.flush(),
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 has scale 2, expected 3..\r'
            ),
            call.write(''),
            call.flush(),
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 has scale 2, expected 3..\n'
            ),
            call.write(''),
            call.flush(),
            call.write(
                'Bundle a101449418187d92c789d1adc240b6d6 expected scale 3 is met'
            ),
            call.write('\n'),
            call.flush()
        ])
Example #23
0
    def test_dump_condensed_debug_msg(self, mock_stdout, mock_stderr):
        """
        Tests for dumping error msg to stdout and stderr.

        Args/kwargs:
            `mock_stdout`
                Mocked stdout from a decorator.
            `mock_stderr`
                Mocked stderr from a decorator.
        """
        assert sys.exc_info() == (None, None, None)

        # Dump debug msg to stdout
        stdout_msg = '<dump_condensed_debug_msg header stdout>'
        dump_condensed_debug_msg(stdout_msg, sys.stdout)
        stdout_call = list(mock_stdout.mock_calls)[0]
        self.assertTrue(stdout_msg in str(stdout_call))
        self.assertEqual(mock_stdout.mock_calls[-1], call.flush())

        # Dump debug msg to stderr
        stderr_msg = '<dump_condensed_debug_msg header stderr>'
        dump_condensed_debug_msg(stderr_msg, sys.stderr)
        stderr_call = list(mock_stderr.mock_calls)[0]
        self.assertTrue(stderr_msg in str(stderr_call))
        self.assertEqual(mock_stderr.mock_calls[-1], call.flush())

        mock_stderr.reset_mock()
        mock_stdout.reset_mock()

        # Test while handling exception
        try:
            raise ValueError('ValueError msg')
        except ValueError:
            # Dump exception debug msg to stdout
            exc_stdout_msg = re.compile(
                r"\\nstdout\\n\\nCONDENSED DEBUG INFO: \[.+\] \[.+@.+\] "
                r"ValueError:.+ValueError msg.+raise ValueError"
                r"\(\\?'ValueError msg\\?'\).+test_common_helpers.+`")
            dump_condensed_debug_msg(header='stdout', stream=sys.stdout)
            stdout_call = str(list(mock_stdout.mock_calls)[0])
            self.assertRegex(text=stdout_call, expected_regex=exc_stdout_msg)
            self.assertEqual(mock_stdout.mock_calls[-1], call.flush())

            # Dump exception debug msg to stderr
            exc_stderr_msg = re.compile(
                r"\\nstderr\\n\\nCONDENSED DEBUG INFO: \[.+\] \[.+@.+\] "
                r"ValueError:.+ValueError msg.+raise ValueError"
                r"\(\\?'ValueError msg\\?'\).+test_common_helpers.+`")
            dump_condensed_debug_msg(header='stderr', stream=sys.stderr)
            stderr_call = str(list(mock_stderr.mock_calls)[0])
            self.assertRegex(text=stderr_call, expected_regex=exc_stderr_msg)
            self.assertEqual(mock_stderr.mock_calls[-1], call.flush())

            # Same but specifying argument `debug_msg`
            mock_stderr.reset_mock()
            exc_stderr_msg = re.compile(
                r"\\nstderr\\n\\nCONDENSED DEBUG INFO: \[[^@]+\] "
                r"my_debug_msg\\n\W*\Z")
            dump_condensed_debug_msg(header='stderr',
                                     stream=sys.stderr,
                                     debug_msg='my_debug_msg')
            stderr_call = str(list(mock_stderr.mock_calls)[0])
            self.assertRegex(text=stderr_call, expected_regex=exc_stderr_msg)
            self.assertEqual(mock_stderr.mock_calls[-1], call.flush())