Beispiel #1
0
    def test_associated(self, mock_criteria):
        unit_1 = Mock()
        unit_1.metadata = {}
        unit_1.unit_key = {'name': 'pulp1', 'author': 'john', 'version': '1.0'}
        unit_2 = Mock()
        unit_2.metadata = {}
        unit_2.unit_key = {'name': 'pulp2', 'author': 'josh', 'version': '2.0'}
        units = [unit_1, unit_2]

        conduit = Mock()
        conduit.get_units = Mock(return_value=units)

        criteria = Mock()
        mock_criteria.return_value = criteria

        # test

        inventory = Inventory(conduit)

        # validation

        conduit.get_units.assert_called_once_with(criteria=criteria, as_generator=True)
        mock_criteria.assert_called_once_with(
            type_ids=[constants.TYPE_PUPPET_MODULE], unit_fields=Module.UNIT_KEY_NAMES)
        self.assertEqual(len(inventory.associated), 2)
        self.assertTrue(tuple(unit_1.unit_key.items()) in inventory.associated)
        self.assertTrue(tuple(unit_2.unit_key.items()) in inventory.associated)
    def test_wrap_round_robin(self):
        cluster = Mock(spec=Cluster)
        cluster.metadata = Mock(spec=Metadata)
        hosts = [Host(str(i), SimpleConvictionPolicy) for i in range(4)]

        def get_replicas(keyspace, packed_key):
            index = struct.unpack('>i', packed_key)[0]
            return list(islice(cycle(hosts), index, index + 2))

        cluster.metadata.get_replicas.side_effect = get_replicas

        policy = TokenAwarePolicy(RoundRobinPolicy())
        policy.populate(cluster, hosts)

        for i in range(4):
            query = Statement(routing_key=struct.pack('>i', i))
            qplan = list(policy.make_query_plan(None, query))

            replicas = get_replicas(None, struct.pack('>i', i))
            other = set(h for h in hosts if h not in replicas)
            self.assertEquals(replicas, qplan[:2])
            self.assertEquals(other, set(qplan[2:]))

        # Should use the secondary policy
        for i in range(4):
            qplan = list(policy.make_query_plan())

            self.assertEquals(set(qplan), set(hosts))
Beispiel #3
0
    def test_wrap_round_robin(self):
        cluster = Mock(spec=Cluster)
        cluster.metadata = Mock(spec=Metadata)
        hosts = [Host(str(i), SimpleConvictionPolicy) for i in range(4)]
        for host in hosts:
            host.set_up()

        def get_replicas(keyspace, packed_key):
            index = struct.unpack('>i', packed_key)[0]
            return list(islice(cycle(hosts), index, index + 2))

        cluster.metadata.get_replicas.side_effect = get_replicas

        policy = TokenAwarePolicy(RoundRobinPolicy())
        policy.populate(cluster, hosts)

        for i in range(4):
            query = Statement(routing_key=struct.pack('>i', i), keyspace='keyspace_name')
            qplan = list(policy.make_query_plan(None, query))

            replicas = get_replicas(None, struct.pack('>i', i))
            other = set(h for h in hosts if h not in replicas)
            self.assertEqual(replicas, qplan[:2])
            self.assertEqual(other, set(qplan[2:]))

        # Should use the secondary policy
        for i in range(4):
            qplan = list(policy.make_query_plan())

            self.assertEqual(set(qplan), set(hosts))
Beispiel #4
0
    def test_get_metadata_from_release_key_in_release_account(self, fixtures):
        component_name = fixtures['component_name']
        version = fixtures['version']
        bucket_name = fixtures['bucket_name']
        team_name = fixtures['team_name']
        expected_metadata = {'cdflow_image_digest': 'sha:12345asdfg'}

        s3_resource = Mock()
        key = Mock()
        key.metadata = expected_metadata
        s3_resource.Object.return_value = key

        metadata = fetch_release_metadata(
            s3_resource,
            bucket_name,
            component_name,
            version,
            team_name,
        )

        assert metadata == expected_metadata

        s3_resource.Object.assert_called_once_with(
            bucket_name, '{}/{}/{}-{}.zip'.format(
                team_name,
                component_name,
                component_name,
                version,
            ))
    def _assert_shuffle(self, patched_shuffle, keyspace, routing_key):
        hosts = [Host(str(i), SimpleConvictionPolicy) for i in range(4)]
        for host in hosts:
            host.set_up()

        cluster = Mock(spec=Cluster)
        cluster.metadata = Mock(spec=Metadata)
        replicas = hosts[2:]
        cluster.metadata.get_replicas.return_value = replicas

        child_policy = Mock()
        child_policy.make_query_plan.return_value = hosts
        child_policy.distance.return_value = HostDistance.LOCAL

        policy = TokenAwarePolicy(child_policy, shuffle_replicas=True)
        policy.populate(cluster, hosts)

        cluster.metadata.get_replicas.reset_mock()
        child_policy.make_query_plan.reset_mock()
        query = Statement(routing_key=routing_key)
        qplan = list(policy.make_query_plan(keyspace, query))
        if keyspace is None or routing_key is None:
            self.assertEqual(hosts, qplan)
            self.assertEqual(cluster.metadata.get_replicas.call_count, 0)
            child_policy.make_query_plan.assert_called_once_with(keyspace, query)
            self.assertEqual(patched_shuffle.call_count, 0)
        else:
            self.assertEqual(set(replicas), set(qplan[:2]))
            self.assertEqual(hosts[:2], qplan[2:])
            child_policy.make_query_plan.assert_called_once_with(keyspace, query)
            self.assertEqual(patched_shuffle.call_count, 1)
    def _assert_shuffle(self, patched_shuffle, keyspace, routing_key):
        hosts = [Host(str(i), SimpleConvictionPolicy) for i in range(4)]
        for host in hosts:
            host.set_up()

        cluster = Mock(spec=Cluster)
        cluster.metadata = Mock(spec=Metadata)
        replicas = hosts[2:]
        cluster.metadata.get_replicas.return_value = replicas

        child_policy = Mock()
        child_policy.make_query_plan.return_value = hosts
        child_policy.distance.return_value = HostDistance.LOCAL

        policy = TokenAwarePolicy(child_policy, shuffle_replicas=True)
        policy.populate(cluster, hosts)

        cluster.metadata.get_replicas.reset_mock()
        child_policy.make_query_plan.reset_mock()
        query = Statement(routing_key=routing_key)
        qplan = list(policy.make_query_plan(keyspace, query))
        if keyspace is None or routing_key is None:
            self.assertEqual(hosts, qplan)
            self.assertEqual(cluster.metadata.get_replicas.call_count, 0)
            child_policy.make_query_plan.assert_called_once_with(keyspace, query)
            self.assertEqual(patched_shuffle.call_count, 0)
        else:
            self.assertEqual(set(replicas), set(qplan[:2]))
            self.assertEqual(hosts[:2], qplan[2:])
            child_policy.make_query_plan.assert_called_once_with(keyspace, query)
            self.assertEqual(patched_shuffle.call_count, 1)
Beispiel #7
0
 def test_retry_is_attempted(self):
     op = Mock()
     op.name = 'DescribeCluster'
     op.metadata = {'protocol': 'query'}
     self.endpoint.make_request(op, request_dict(), self.request_signer)
     call_args = self.endpoint._retry_handler.call_args
     self.assertEqual(call_args[1]['attempts'], 1)
Beispiel #8
0
    def test_custom_metadata(self):
        """Testing ExtensionInfo metadata from Extension.metadata"""
        entrypoint = Mock()
        entrypoint.dist = Mock()

        test_author = 'Test author lorem ipsum'
        test_description = 'Test description lorem ipsum'
        test_email = 'Test [email protected]'
        test_home_page = 'http://www.example.com'
        test_license = 'Test License MIT GPL Apache Drivers'
        test_module_name = 'testextension.dummy.dummy'
        test_module_to_app = 'testextension.dummy'
        test_project_name = 'TestProjectName'
        test_summary = 'Test summary lorem ipsum'
        test_version = '1.0'

        test_htdocs_path = os.path.join(settings.MEDIA_ROOT, 'ext',
                                        'Dummy')

        test_metadata = {
            'Name': test_project_name,
            'Version': test_version,
            'Summary': test_summary,
            'Description': test_description,
            'Author': test_author,
            'Author-email': test_email,
            'License': test_license,
            'Home-page': test_home_page,
        }

        entrypoint.dist.get_metadata_lines = Mock(
            return_value=[
                "%s: %s" % (key, 'Dummy')
                for key, value in six.iteritems(test_metadata)
            ])

        entrypoint.dist.project_name = 'Dummy'
        entrypoint.dist.version = 'Dummy'

        ext_class = Mock()
        ext_class.__module__ = test_module_name
        ext_class.metadata = test_metadata

        extension_info = ExtensionInfo(entrypoint, ext_class)

        self.assertEqual(extension_info.app_name, test_module_to_app)
        self.assertEqual(extension_info.author, test_author)
        self.assertEqual(extension_info.author_email, test_email)
        self.assertEqual(extension_info.description, test_description)
        self.assertFalse(extension_info.enabled)
        self.assertEqual(extension_info.installed_htdocs_path,
                         test_htdocs_path)
        self.assertFalse(extension_info.installed)
        self.assertEqual(extension_info.license, test_license)
        self.assertEqual(extension_info.metadata, test_metadata)
        self.assertEqual(extension_info.name, test_project_name)
        self.assertEqual(extension_info.summary, test_summary)
        self.assertEqual(extension_info.url, test_home_page)
        self.assertEqual(extension_info.version, test_version)
Beispiel #9
0
 def test_retry_events_are_emitted(self):
     op = Mock()
     op.name = 'DescribeInstances'
     op.metadata = {'protocol': 'query'}
     op.has_streaming_output = False
     self.endpoint.make_request(op, request_dict())
     call_args = self.event_emitter.emit.call_args
     self.assertEqual(call_args[0][0], 'needs-retry.ec2.DescribeInstances')
Beispiel #10
0
    def test_custom_metadata(self):
        """Testing ExtensionInfo metadata from Extension.metadata"""
        entrypoint = Mock()
        entrypoint.dist = Mock()

        test_author = 'Test author lorem ipsum'
        test_description = 'Test description lorem ipsum'
        test_email = 'Test [email protected]'
        test_home_page = 'http://www.example.com'
        test_license = 'Test License MIT GPL Apache Drivers'
        test_module_name = 'testextension.dummy.dummy'
        test_module_to_app = 'testextension.dummy'
        test_project_name = 'TestProjectName'
        test_summary = 'Test summary lorem ipsum'
        test_version = '1.0'

        test_htdocs_path = os.path.join(settings.EXTENSIONS_STATIC_ROOT,
                                        'Dummy')

        test_metadata = {
            'Name': test_project_name,
            'Version': test_version,
            'Summary': test_summary,
            'Description': test_description,
            'Author': test_author,
            'Author-email': test_email,
            'License': test_license,
            'Home-page': test_home_page,
        }

        entrypoint.dist.get_metadata_lines = Mock(
            return_value=[
                "%s: %s" % (key, 'Dummy')
                for key, value in six.iteritems(test_metadata)
            ])

        entrypoint.dist.project_name = 'Dummy'
        entrypoint.dist.version = 'Dummy'

        ext_class = Mock()
        ext_class.__module__ = test_module_name
        ext_class.metadata = test_metadata

        extension_info = ExtensionInfo(entrypoint, ext_class)

        self.assertEqual(extension_info.app_name, test_module_to_app)
        self.assertEqual(extension_info.author, test_author)
        self.assertEqual(extension_info.author_email, test_email)
        self.assertEqual(extension_info.description, test_description)
        self.assertFalse(extension_info.enabled)
        self.assertEqual(extension_info.installed_htdocs_path, test_htdocs_path)
        self.assertFalse(extension_info.installed)
        self.assertEqual(extension_info.license, test_license)
        self.assertEqual(extension_info.metadata, test_metadata)
        self.assertEqual(extension_info.name, test_project_name)
        self.assertEqual(extension_info.summary, test_summary)
        self.assertEqual(extension_info.url, test_home_page)
        self.assertEqual(extension_info.version, test_version)
Beispiel #11
0
 def test_retry_events_are_emitted(self):
     op = Mock()
     op.name = 'DescribeInstances'
     op.metadata = {'protocol': 'query'}
     op.has_streaming_output = False
     self.endpoint.make_request(op, request_dict())
     call_args = self.event_emitter.emit.call_args
     self.assertEqual(call_args[0][0],
                      'needs-retry.ec2.DescribeInstances')
    def test_statement_keyspace(self):
        hosts = [Host(str(i), SimpleConvictionPolicy) for i in range(4)]
        for host in hosts:
            host.set_up()

        cluster = Mock(spec=Cluster)
        cluster.metadata = Mock(spec=Metadata)
        replicas = hosts[2:]
        cluster.metadata.get_replicas.return_value = replicas

        child_policy = Mock()
        child_policy.make_query_plan.return_value = hosts
        child_policy.distance.return_value = HostDistance.LOCAL

        policy = TokenAwarePolicy(child_policy)
        policy.populate(cluster, hosts)

        # no keyspace, child policy is called
        keyspace = None
        routing_key = 'routing_key'
        query = Statement(routing_key=routing_key)
        qplan = list(policy.make_query_plan(keyspace, query))
        self.assertEqual(hosts, qplan)
        self.assertEqual(cluster.metadata.get_replicas.call_count, 0)
        child_policy.make_query_plan.assert_called_once_with(keyspace, query)

        # working keyspace, no statement
        cluster.metadata.get_replicas.reset_mock()
        keyspace = 'working_keyspace'
        routing_key = 'routing_key'
        query = Statement(routing_key=routing_key)
        qplan = list(policy.make_query_plan(keyspace, query))
        self.assertEqual(replicas + hosts[:2], qplan)
        cluster.metadata.get_replicas.assert_called_with(keyspace, routing_key)

        # statement keyspace, no working
        cluster.metadata.get_replicas.reset_mock()
        working_keyspace = None
        statement_keyspace = 'statement_keyspace'
        routing_key = 'routing_key'
        query = Statement(routing_key=routing_key, keyspace=statement_keyspace)
        qplan = list(policy.make_query_plan(working_keyspace, query))
        self.assertEqual(replicas + hosts[:2], qplan)
        cluster.metadata.get_replicas.assert_called_with(
            statement_keyspace, routing_key)

        # both keyspaces set, statement keyspace used for routing
        cluster.metadata.get_replicas.reset_mock()
        working_keyspace = 'working_keyspace'
        statement_keyspace = 'statement_keyspace'
        routing_key = 'routing_key'
        query = Statement(routing_key=routing_key, keyspace=statement_keyspace)
        qplan = list(policy.make_query_plan(working_keyspace, query))
        self.assertEqual(replicas + hosts[:2], qplan)
        cluster.metadata.get_replicas.assert_called_with(
            statement_keyspace, routing_key)
Beispiel #13
0
 def test_retry_events_can_alter_behavior(self):
     op = Mock()
     op.name = 'DescribeCluster'
     op.metadata = {'protocol': 'json'}
     self.retry_handler.side_effect = [
         0,  # Check if retry needed. Retry needed.
         None  # Check if retry needed. Retry not needed.
     ]
     self.endpoint.make_request(op, request_dict(), self.request_signer)
     self.assertEqual(self.retry_handler.call_count, 2)
Beispiel #14
0
    def test_custom_metadata(self):
        """Testing ExtensionInfo metadata from Extension.metadata"""
        entrypoint = Mock()
        entrypoint.dist = Mock()

        test_author = "Test author lorem ipsum"
        test_description = "Test description lorem ipsum"
        test_email = "Test [email protected]"
        test_home_page = "http://www.example.com"
        test_license = "Test License MIT GPL Apache Drivers"
        test_module_name = "testextension.dummy.dummy"
        test_module_to_app = "testextension.dummy"
        test_project_name = "TestProjectName"
        test_summary = "Test summary lorem ipsum"
        test_version = "1.0"

        test_htdocs_path = os.path.join(settings.EXTENSIONS_STATIC_ROOT, "Dummy")

        test_metadata = {
            "Name": test_project_name,
            "Version": test_version,
            "Summary": test_summary,
            "Description": test_description,
            "Author": test_author,
            "Author-email": test_email,
            "License": test_license,
            "Home-page": test_home_page,
        }

        entrypoint.dist.get_metadata_lines = Mock(
            return_value=["%s: %s" % (key, "Dummy") for key, value in six.iteritems(test_metadata)]
        )

        entrypoint.dist.project_name = "Dummy"
        entrypoint.dist.version = "Dummy"

        ext_class = Mock()
        ext_class.__module__ = test_module_name
        ext_class.metadata = test_metadata

        extension_info = ExtensionInfo(entrypoint, ext_class)

        self.assertEqual(extension_info.app_name, test_module_to_app)
        self.assertEqual(extension_info.author, test_author)
        self.assertEqual(extension_info.author_email, test_email)
        self.assertEqual(extension_info.description, test_description)
        self.assertFalse(extension_info.enabled)
        self.assertEqual(extension_info.installed_htdocs_path, test_htdocs_path)
        self.assertFalse(extension_info.installed)
        self.assertEqual(extension_info.license, test_license)
        self.assertEqual(extension_info.metadata, test_metadata)
        self.assertEqual(extension_info.name, test_project_name)
        self.assertEqual(extension_info.summary, test_summary)
        self.assertEqual(extension_info.url, test_home_page)
        self.assertEqual(extension_info.version, test_version)
Beispiel #15
0
def listener():
    mock_archiver = Mock()
    mock_archiver.test_type = 'something'
    mock_archiver.repository = 'somewhere'
    mock_archiver.execution_context = 'PR'
    mock_archiver.execution_id = 'job-name-here'
    engine = ChangeEngineListener(mock_archiver, 'tidii')
    mock_suite = Mock()
    mock_suite.metadata = {'changes': 'path/to/changes'}
    engine.suites = [mock_suite]
    return engine
Beispiel #16
0
    def test_statement_keyspace(self):
        hosts = [Host(str(i), SimpleConvictionPolicy) for i in range(4)]
        for host in hosts:
            host.set_up()

        cluster = Mock(spec=Cluster)
        cluster.metadata = Mock(spec=Metadata)
        replicas = hosts[2:]
        cluster.metadata.get_replicas.return_value = replicas

        child_policy = Mock()
        child_policy.make_query_plan.return_value = hosts
        child_policy.distance.return_value = HostDistance.LOCAL

        policy = TokenAwarePolicy(child_policy)
        policy.populate(cluster, hosts)

        # no keyspace, child policy is called
        keyspace = None
        routing_key = 'routing_key'
        query = Statement(routing_key=routing_key)
        qplan = list(policy.make_query_plan(keyspace, query))
        self.assertEqual(hosts, qplan)
        self.assertEqual(cluster.metadata.get_replicas.call_count, 0)
        child_policy.make_query_plan.assert_called_once_with(keyspace, query)

        # working keyspace, no statement
        cluster.metadata.get_replicas.reset_mock()
        keyspace = 'working_keyspace'
        routing_key = 'routing_key'
        query = Statement(routing_key=routing_key)
        qplan = list(policy.make_query_plan(keyspace, query))
        self.assertEqual(replicas + hosts[:2], qplan)
        cluster.metadata.get_replicas.assert_called_with(keyspace, routing_key)

        # statement keyspace, no working
        cluster.metadata.get_replicas.reset_mock()
        working_keyspace = None
        statement_keyspace = 'statement_keyspace'
        routing_key = 'routing_key'
        query = Statement(routing_key=routing_key, keyspace=statement_keyspace)
        qplan = list(policy.make_query_plan(working_keyspace, query))
        self.assertEqual(replicas + hosts[:2], qplan)
        cluster.metadata.get_replicas.assert_called_with(statement_keyspace, routing_key)

        # both keyspaces set, statement keyspace used for routing
        cluster.metadata.get_replicas.reset_mock()
        working_keyspace = 'working_keyspace'
        statement_keyspace = 'statement_keyspace'
        routing_key = 'routing_key'
        query = Statement(routing_key=routing_key, keyspace=statement_keyspace)
        qplan = list(policy.make_query_plan(working_keyspace, query))
        self.assertEqual(replicas + hosts[:2], qplan)
        cluster.metadata.get_replicas.assert_called_with(statement_keyspace, routing_key)
Beispiel #17
0
 def test_retry_attempts_added_to_response_metadata(self):
     op = Mock(name='DescribeInstances')
     op.metadata = {'protocol': 'query'}
     self.event_emitter.emit.side_effect = [
         [(None, None)],    # Request created.
         [(None, 0)],       # Check if retry needed. Retry needed.
         [(None, None)],    # Request created.
         [(None, None)]     # Check if retry needed. Retry not needed.
     ]
     parser = Mock()
     parser.parse.return_value = {'ResponseMetadata': {}}
     self.factory.return_value.create_parser.return_value = parser
     response = self.endpoint.make_request(op, request_dict())
     self.assertEqual(response[1]['ResponseMetadata']['RetryAttempts'], 1)
Beispiel #18
0
 def test_reset_stream_on_retry(self):
     op = Mock()
     body = RecordStreamResets('foobar')
     op.name = 'PutObject'
     op.has_streaming_output = True
     op.has_event_stream_output = False
     op.metadata = {'protocol': 'rest-xml'}
     request = request_dict()
     request['body'] = body
     self.event_emitter.emit.side_effect = self.get_emitter_responses(
         num_retries=2)
     self.endpoint.make_request(op, request)
     # 2 seeks for the resets and 6 (2 per creation) for content-length
     self.assertEqual(body.total_resets, 8)
Beispiel #19
0
 def test_reset_stream_on_retry(self):
     op = Mock()
     body = RecordStreamResets('foobar')
     op.name = 'PutObject'
     op.has_streaming_output = True
     op.has_event_stream_output = False
     op.metadata = {'protocol': 'rest-xml'}
     request = request_dict()
     request['body'] = body
     self.event_emitter.emit.side_effect = self.get_emitter_responses(
         num_retries=2
     )
     self.endpoint.make_request(op, request)
     # 2 seeks for the resets and 6 (2 per creation) for content-length
     self.assertEqual(body.total_resets, 8)
Beispiel #20
0
 def test_retry_attempts_added_to_response_metadata(self):
     op = Mock(name='DescribeInstances')
     op.metadata = {'protocol': 'query'}
     op.has_event_stream_output = False
     self.event_emitter.emit.side_effect = [
         [(None, None)],    # Request created.
         [(None, 0)],       # Check if retry needed. Retry needed.
         [(None, None)],    # Request created.
         [(None, None)]     # Check if retry needed. Retry not needed.
     ]
     parser = Mock()
     parser.parse.return_value = {'ResponseMetadata': {}}
     self.factory.return_value.create_parser.return_value = parser
     response = self.endpoint.make_request(op, request_dict())
     self.assertEqual(response[1]['ResponseMetadata']['RetryAttempts'], 1)
Beispiel #21
0
    def vms(self):
        metadata = Mock()
        metadata.name = "win-2016"
        metadata.namespace = "default"

        status = Mock()
        status.node_name = "master"

        vm = Mock()
        vm.metadata = metadata
        vm.status = status

        vms = Mock()
        vms.items = [vm]

        return vms
Beispiel #22
0
 def test_reset_stream_on_retry(self):
     op = Mock()
     body = RecordStreamResets('foobar')
     op.name = 'PutObject'
     op.has_streaming_output = True
     op.metadata = {'protocol': 'rest-xml'}
     request = request_dict()
     request['body'] = body
     self.event_emitter.emit.side_effect = [
         [(None, None)],   # Request created.
         [(None, 0)],      # Check if retry needed. Needs Retry.
         [(None, None)],   # Request created.
         [(None, 0)],      # Check if retry needed again. Needs Retry.
         [(None, None)],   # Request created.
         [(None, None)],   # Finally emit no rety is needed.
     ]
     self.endpoint.make_request(op, request)
     self.assertEqual(body.total_resets, 2)
Beispiel #23
0
 def test_reset_stream_on_retry(self):
     op = Mock()
     body = RecordStreamResets('foobar')
     op.name = 'PutObject'
     op.has_streaming_output = True
     op.metadata = {'protocol': 'rest-xml'}
     request = request_dict()
     request['body'] = body
     self.event_emitter.emit.side_effect = [
         [(None, None)],   # Request created.
         [(None, 0)],      # Check if retry needed. Needs Retry.
         [(None, None)],   # Request created.
         [(None, 0)],      # Check if retry needed again. Needs Retry.
         [(None, None)],   # Request created.
         [(None, None)],   # Finally emit no rety is needed.
     ]
     self.endpoint.make_request(op, request)
     self.assertEqual(body.total_resets, 2)
    def test_wrap_dc_aware(self):
        cluster = Mock(spec=Cluster)
        cluster.metadata = Mock(spec=Metadata)
        hosts = [Host(str(i), SimpleConvictionPolicy) for i in range(4)]
        for host in hosts:
            host.set_up()
        for h in hosts[:2]:
            h.set_location_info("dc1", "rack1")
        for h in hosts[2:]:
            h.set_location_info("dc2", "rack1")

        def get_replicas(keyspace, packed_key):
            index = struct.unpack('>i', packed_key)[0]
            # return one node from each DC
            if index % 2 == 0:
                return [hosts[0], hosts[2]]
            else:
                return [hosts[1], hosts[3]]

        cluster.metadata.get_replicas.side_effect = get_replicas

        policy = TokenAwarePolicy(
            DCAwareRoundRobinPolicy("dc1", used_hosts_per_remote_dc=1))
        policy.populate(cluster, hosts)

        for i in range(4):
            query = Statement(routing_key=struct.pack('>i', i),
                              keyspace='keyspace_name')
            qplan = list(policy.make_query_plan(None, query))
            replicas = get_replicas(None, struct.pack('>i', i))

            # first should be the only local replica
            self.assertIn(qplan[0], replicas)
            self.assertEqual(qplan[0].datacenter, "dc1")

            # then the local non-replica
            self.assertNotIn(qplan[1], replicas)
            self.assertEqual(qplan[1].datacenter, "dc1")

            # then one of the remotes (used_hosts_per_remote_dc is 1, so we
            # shouldn't see two remotes)
            self.assertEqual(qplan[2].datacenter, "dc2")
            self.assertEqual(3, len(qplan))
Beispiel #25
0
    def test_custom_metadata(self):
        """Testing ExtensionInfo metadata from Extension.metadata"""
        app_name = 'test_extension.dummy'
        project_name = 'DummyExtension'
        module_name = 'test_extension.dummy.submodule'
        extension_id = '%s:DummyExtension' % module_name
        htdocs_path = os.path.join(settings.MEDIA_ROOT, 'ext',
                                   project_name)
        metadata = {
            'Name': 'OverrideName',
            'Version': '3.14159',
            'Summary': 'Lorem ipsum dolor sit amet.',
            'Description': 'Tempus fugit.',
            'Author': 'Somebody',
            'Author-email': '*****@*****.**',
            'License': 'None',
            'Home-page': 'http://127.0.0.1/',
        }

        ext_class = Mock()
        ext_class.__module__ = module_name
        ext_class.metadata = metadata
        ext_class.id = extension_id

        entry_point = FakeEntryPoint(ext_class, project_name=project_name)

        extension_info = ExtensionInfo(entry_point, ext_class)

        self.assertEqual(extension_info.app_name, app_name)
        self.assertEqual(extension_info.author, metadata['Author'])
        self.assertEqual(extension_info.author_email, metadata['Author-email'])
        self.assertEqual(extension_info.description, metadata['Description'])
        self.assertFalse(extension_info.enabled)
        self.assertEqual(extension_info.installed_htdocs_path,
                         htdocs_path)
        self.assertFalse(extension_info.installed)
        self.assertEqual(extension_info.license, metadata['License'])
        self.assertEqual(extension_info.metadata, metadata)
        self.assertEqual(extension_info.name, metadata['Name'])
        self.assertEqual(extension_info.summary, metadata['Summary'])
        self.assertEqual(extension_info.url, metadata['Home-page'])
        self.assertEqual(extension_info.version, metadata['Version'])
Beispiel #26
0
 def test_retry_events_can_alter_behavior(self):
     op = Mock()
     op.name = 'DescribeInstances'
     op.metadata = {'protocol': 'json'}
     self.event_emitter.emit.side_effect = [
         [],  # For initially preparing request
         [(None, 0)],  # Check if retry needed. Retry needed.
         [],  # For preparing the request again
         [(None, None)]  # Check if retry needed. Retry not needed.
     ]
     self.endpoint.make_request(op, request_dict())
     call_args = self.event_emitter.emit.call_args_list
     self.assertEqual(self.event_emitter.emit.call_count, 4)
     # Check that all of the events are as expected.
     self.assertEqual(call_args[0][0][0], 'before-auth.ec2')
     self.assertEqual(call_args[1][0][0],
                      'needs-retry.ec2.DescribeInstances')
     self.assertEqual(call_args[2][0][0], 'before-auth.ec2')
     self.assertEqual(call_args[3][0][0],
                      'needs-retry.ec2.DescribeInstances')
Beispiel #27
0
    def test_wrap_dc_aware(self):
        cluster = Mock(spec=Cluster)
        cluster.metadata = Mock(spec=Metadata)
        hosts = [Host(str(i), SimpleConvictionPolicy) for i in range(4)]
        for host in hosts:
            host.set_up()
        for h in hosts[:2]:
            h.set_location_info("dc1", "rack1")
        for h in hosts[2:]:
            h.set_location_info("dc2", "rack1")

        def get_replicas(keyspace, packed_key):
            index = struct.unpack('>i', packed_key)[0]
            # return one node from each DC
            if index % 2 == 0:
                return [hosts[0], hosts[2]]
            else:
                return [hosts[1], hosts[3]]

        cluster.metadata.get_replicas.side_effect = get_replicas

        policy = TokenAwarePolicy(DCAwareRoundRobinPolicy("dc1", used_hosts_per_remote_dc=1))
        policy.populate(cluster, hosts)

        for i in range(4):
            query = Statement(routing_key=struct.pack('>i', i), keyspace='keyspace_name')
            qplan = list(policy.make_query_plan(None, query))
            replicas = get_replicas(None, struct.pack('>i', i))

            # first should be the only local replica
            self.assertIn(qplan[0], replicas)
            self.assertEqual(qplan[0].datacenter, "dc1")

            # then the local non-replica
            self.assertNotIn(qplan[1], replicas)
            self.assertEqual(qplan[1].datacenter, "dc1")

            # then one of the remotes (used_hosts_per_remote_dc is 1, so we
            # shouldn't see two remotes)
            self.assertEqual(qplan[2].datacenter, "dc2")
            self.assertEqual(3, len(qplan))
Beispiel #28
0
 def test_retry_events_can_alter_behavior(self):
     op = Mock()
     op.name = 'DescribeInstances'
     op.metadata = {'protocol': 'json'}
     self.event_emitter.emit.side_effect = [
         [(None, None)],    # Request created.
         [(None, 0)],       # Check if retry needed. Retry needed.
         [(None, None)],    # Request created.
         [(None, None)]     # Check if retry needed. Retry not needed.
     ]
     self.endpoint.make_request(op, request_dict())
     call_args = self.event_emitter.emit.call_args_list
     self.assertEqual(self.event_emitter.emit.call_count, 4)
     # Check that all of the events are as expected.
     self.assertEqual(call_args[0][0][0],
                      'request-created.ec2.DescribeInstances')
     self.assertEqual(call_args[1][0][0],
                      'needs-retry.ec2.DescribeInstances')
     self.assertEqual(call_args[2][0][0],
                      'request-created.ec2.DescribeInstances')
     self.assertEqual(call_args[3][0][0],
                      'needs-retry.ec2.DescribeInstances')
Beispiel #29
0
    def test_wrap_round_robin(self):
        cluster = Mock(spec=Cluster)
        cluster.metadata = Mock(spec=Metadata)
        hosts = [Host(str(i), SimpleConvictionPolicy) for i in range(4)]

        def get_replicas(packed_key):
            index = struct.unpack(">i", packed_key)[0]
            return list(islice(cycle(hosts), index, index + 2))

        cluster.metadata.get_replicas.side_effect = get_replicas

        policy = TokenAwarePolicy(RoundRobinPolicy())
        policy.populate(cluster, hosts)

        for i in range(4):
            query = Query(routing_key=struct.pack(">i", i))
            qplan = list(policy.make_query_plan(query))

            replicas = get_replicas(struct.pack(">i", i))
            other = set(h for h in hosts if h not in replicas)
            self.assertEquals(replicas, qplan[:2])
            self.assertEquals(other, set(qplan[2:]))
Beispiel #30
0
 def test_retry_events_can_alter_behavior(self):
     op = Mock()
     op.name = 'DescribeInstances'
     op.metadata = {'protocol': 'json'}
     op.has_event_stream_output = False
     self.event_emitter.emit.side_effect = [
         [(None, None)],  # Request created.
         [(None, 0)],  # Check if retry needed. Retry needed.
         [(None, None)],  # Request created.
         [(None, None)]  # Check if retry needed. Retry not needed.
     ]
     self.endpoint.make_request(op, request_dict())
     call_args = self.event_emitter.emit.call_args_list
     self.assertEqual(self.event_emitter.emit.call_count, 4)
     # Check that all of the events are as expected.
     self.assertEqual(call_args[0][0][0],
                      'request-created.ec2.DescribeInstances')
     self.assertEqual(call_args[1][0][0],
                      'needs-retry.ec2.DescribeInstances')
     self.assertEqual(call_args[2][0][0],
                      'request-created.ec2.DescribeInstances')
     self.assertEqual(call_args[3][0][0],
                      'needs-retry.ec2.DescribeInstances')
Beispiel #31
0
    def test_metadata_from_package(self):
        """Testing ExtensionInfo metadata from package"""
        app_name = 'test_extension.dummy'
        project_name = 'DummyExtension'
        module_name = 'test_extension.dummy.submodule'
        extension_id = '%s:DummyExtension' % module_name
        htdocs_path = os.path.join(settings.MEDIA_ROOT, 'ext',
                                   project_name)
        static_path = os.path.join(settings.STATIC_ROOT, 'ext',
                                   extension_id)

        ext_class = Mock()
        ext_class.__module__ = module_name
        ext_class.id = extension_id
        ext_class.metadata = None

        entrypoint = FakeEntryPoint(ext_class, project_name=project_name)
        extension_info = ExtensionInfo(entrypoint, ext_class)
        metadata = entrypoint.dist.metadata

        self.assertEqual(extension_info.app_name, app_name)
        self.assertEqual(extension_info.author, metadata['Author'])
        self.assertEqual(extension_info.author_email, metadata['Author-email'])
        self.assertEqual(extension_info.description, metadata['Description'])
        self.assertFalse(extension_info.enabled)
        self.assertEqual(extension_info.installed_htdocs_path,
                         htdocs_path)
        self.assertEqual(extension_info.installed_static_path,
                         static_path)
        self.assertFalse(extension_info.installed)
        self.assertEqual(extension_info.license, metadata['License'])
        self.assertEqual(extension_info.metadata, metadata)
        self.assertEqual(extension_info.name, metadata['Name'])
        self.assertEqual(extension_info.summary, metadata['Summary'])
        self.assertEqual(extension_info.url, metadata['Home-page'])
        self.assertEqual(extension_info.version, metadata['Version'])
Beispiel #32
0
    def nodes(self):
        metadata = Mock()
        metadata.name = "master"

        node_info = Mock()
        node_info.machine_id = "52c01ad890e84b15a1be4be18bd64ecd"
        node_info.kubelet_version = "v1.9.1+a0ce1bc657"

        address = Mock()
        address.address = "master"

        status = Mock()
        status.node_info = node_info
        status.addresses = [address]
        status.allocatable = {"cpu": "2"}

        node = Mock()
        node.metadata = metadata
        node.status = status

        nodes = Mock()
        nodes.items = [node]

        return nodes