def test_get_samples_multi_metric_pollster(self): pollster = DynamicPollster( self.pollster_definition_all_fields_multi_metrics) fake_manager = self.FakeManager() samples = pollster.get_samples(fake_manager, None, ["https://endpoint.server.name.com/"]) samples_list = list(samples) self.assertEqual(4, len(samples_list)) create_bucket_sample = [ s for s in samples_list if s.name == "test-pollster.create_bucket" ][0] get_obj_sample = [ s for s in samples_list if s.name == "test-pollster.get_obj" ][0] list_bucket_sample = [ s for s in samples_list if s.name == "test-pollster.list_bucket" ][0] put_obj_sample = [ s for s in samples_list if s.name == "test-pollster.put_obj" ][0] self.assertEqual(2, create_bucket_sample.volume) self.assertEqual(46, get_obj_sample.volume) self.assertEqual(8, list_bucket_sample.volume) self.assertEqual(46, put_obj_sample.volume)
def test_execute_request_get_samples_empty_keys(self): sample = { 'user_id_attribute': "123456789", 'project_id_attribute': "dfghyt432345t", 'resource_id_attribute': "sdfghjt543" } def execute_request_get_samples_mock(self, **kwargs): samples = [sample] return samples DynamicPollster.execute_request_get_samples = \ execute_request_get_samples_mock self.pollster_definition_all_fields['user_id_attribute'] = None self.pollster_definition_all_fields['project_id_attribute'] = None self.pollster_definition_all_fields['resource_id_attribute'] = None pollster = DynamicPollster(self.pollster_definition_all_fields) params = {"d": "d"} response = pollster.execute_request_get_samples(**params) self.assertNotIn('user_id', response[0]) self.assertNotIn('project_id', response[0]) self.assertNotIn('id', response[0])
def test_pollster_defintions_instantiation(self): def validate_definitions_instance(instance, isNonOpenstack, isMultiMetric, isSingleMetric): self.assertIs( isinstance(instance, NonOpenStackApisPollsterDefinition), isNonOpenstack) self.assertIs(isinstance(instance, MultiMetricPollsterDefinitions), isMultiMetric) self.assertIs( isinstance(instance, SingleMetricPollsterDefinitions), isSingleMetric) pollster = DynamicPollster( self.pollster_definition_all_fields_multi_metrics) validate_definitions_instance(pollster.definitions, True, True, False) pollster = DynamicPollster(self.pollster_definition_all_fields) validate_definitions_instance(pollster.definitions, True, False, True) pollster = DynamicPollster( self.pollster_definition_only_openstack_required_multi_metric) validate_definitions_instance(pollster.definitions, False, True, False) pollster = DynamicPollster( self.pollster_definition_only_openstack_required_single_metric) validate_definitions_instance(pollster.definitions, False, False, True)
def test_default_discovery_empty_secret_id(self): pollster = DynamicPollster( self.pollster_definition_only_required_fields) self.assertEqual( "barbican:", pollster.definitions.sample_gatherer.default_discovery)
def test_execute_request_get_samples_non_empty_keys(self): sample = { 'user_id_attribute': "123456789", 'project_id_attribute': "dfghyt432345t", 'resource_id_attribute': "sdfghjt543" } def execute_request_get_samples_mock(self, **kwargs): samples = [sample] return samples PollsterSampleGatherer.execute_request_get_samples = \ execute_request_get_samples_mock self.pollster_definition_all_fields[ 'user_id_attribute'] = 'user_id_attribute' self.pollster_definition_all_fields[ 'project_id_attribute'] = 'project_id_attribute' self.pollster_definition_all_fields[ 'resource_id_attribute'] = 'resource_id_attribute' pollster = DynamicPollster(self.pollster_definition_all_fields) params = {"d": "d"} response = pollster.definitions.sample_gatherer. \ execute_request_get_samples(**params) self.assertEqual(sample['user_id_attribute'], response[0]['user_id']) self.assertEqual(sample['project_id_attribute'], response[0]['project_id']) self.assertEqual(sample['resource_id_attribute'], response[0]['id'])
def test_internal_execute_request_get_samples_status_code_not_ok( self, get_mock): sys.modules['module-name'] = mock.MagicMock() pollster = DynamicPollster( self.pollster_definition_only_required_fields) for http_status_code in requests.status_codes._codes.keys(): if http_status_code >= 400: return_value = self.FakeResponse() return_value.status_code = http_status_code return_value.json_object = {} return_value.reason = requests.status_codes._codes[ http_status_code][0] get_mock.return_value = return_value kwargs = {'resource': "credentials"} exception = self.assertRaises( NonOpenStackApisDynamicPollsterException, pollster.definitions.sample_gatherer. internal_execute_request_get_samples, kwargs) self.assertEqual( "NonOpenStackApisDynamicPollsterException" " None: Error while executing request[%s]." " Status[%s] and reason [%s]." % (self.pollster_definition_only_required_fields['url_path'], http_status_code, return_value.reason), str(exception))
def test_instantiate_dynamic_pollster_standard_pollster(self): pollster_definition_only_required_fields = { 'name': "test-pollster", 'sample_type': "gauge", 'unit': "test", 'value_attribute': "volume", 'endpoint_type': "test", 'url_path': "v1/test/endpoint/fake"} pollster = DynamicPollster(pollster_definition_only_required_fields) self.assertIsInstance(pollster.definitions, SingleMetricPollsterDefinitions)
def test_instantiate_dynamic_pollster_non_openstack_api(self): pollster_definition_only_required_fields = { 'name': "test-pollster", 'sample_type': "gauge", 'unit': "test", 'value_attribute': "volume", 'url_path': "v1/test/endpoint/fake", 'module': "module-name", 'authentication_object': "authentication_object"} pollster = DynamicPollster(pollster_definition_only_required_fields) self.assertIsInstance(pollster.definitions, NonOpenStackApisPollsterDefinition)
def test_set_default_values(self): pollster = DynamicPollster( self.pollster_definition_only_required_fields) pollster_definitions = pollster.pollster_definitions self.assertEqual(None, pollster_definitions['user_id_attribute']) self.assertEqual(None, pollster_definitions['project_id_attribute']) self.assertEqual(None, pollster_definitions['resource_id_attribute']) self.assertEqual('', pollster_definitions['barbican_secret_id']) self.assertEqual('', pollster_definitions['authentication_parameters'])
def test_generate_new_attributes_in_sample(self): pollster = DynamicPollster( self.pollster_definition_only_required_fields) sample = {"test": "2"} new_key = "new-key" pollster.definitions.sample_gatherer. \ generate_new_attributes_in_sample(sample, "test", new_key) self.assertIn(new_key, sample) self.assertEqual(sample["test"], sample[new_key])
def test_user_set_optional_parameters(self): pollster = DynamicPollster(self.pollster_definition_all_fields) pollster_definitions = pollster.pollster_definitions self.assertEqual('user_id', pollster_definitions['user_id_attribute']) self.assertEqual('project_id', pollster_definitions['project_id_attribute']) self.assertEqual('id', pollster_definitions['resource_id_attribute']) self.assertEqual('barbican_id', pollster_definitions['barbican_secret_id']) self.assertEqual('parameters', pollster_definitions['authentication_parameters'])
def test_get_request_linked_samples_url_no_next_sample(self): pollster = DynamicPollster( self.pollster_definition_only_required_fields) expected_url = self.pollster_definition_only_required_fields[ 'url_path'] kwargs = {'resource': "non-openstack-resource"} url = pollster.definitions.sample_gatherer\ .get_request_linked_samples_url(kwargs) self.assertEqual(expected_url, url)
def test_get_request_linked_samples_url_next_sample_only_url_path(self): pollster = DynamicPollster( self.pollster_definition_only_required_fields) base_url = self.pollster_definition_only_required_fields['url_path'] next_sample_path = "/next_page" expected_url = urlparse.urljoin(base_url, next_sample_path) kwargs = {'next_sample_url': next_sample_path} url = pollster.definitions.sample_gatherer\ .get_request_linked_samples_url(kwargs) self.assertEqual(expected_url, url)
def test_execute_request_get_samples_non_empty_keys(self): sample = { 'user_id_attribute': "123456789", 'project_id_attribute': "dfghyt432345t", 'resource_id_attribute': "sdfghjt543" } def internal_execute_request_get_samples_mock(self, arg): class Response: def json(self): return [sample] return Response(), "url" original_method = NonOpenStackApisSamplesGatherer. \ internal_execute_request_get_samples try: NonOpenStackApisSamplesGatherer. \ internal_execute_request_get_samples = \ internal_execute_request_get_samples_mock self.pollster_definition_all_fields[ 'user_id_attribute'] = 'user_id_attribute' self.pollster_definition_all_fields[ 'project_id_attribute'] = 'project_id_attribute' self.pollster_definition_all_fields[ 'resource_id_attribute'] = 'resource_id_attribute' pollster = DynamicPollster(self.pollster_definition_all_fields) params = {"d": "d"} response = pollster.definitions.sample_gatherer. \ execute_request_get_samples(**params) self.assertEqual(sample['user_id_attribute'], response[0]['user_id']) self.assertEqual(sample['project_id_attribute'], response[0]['project_id']) self.assertEqual(sample['resource_id_attribute'], response[0]['id']) finally: NonOpenStackApisSamplesGatherer. \ internal_execute_request_get_samples = original_method
def test_internal_execute_request_get_samples_status_code_ok( self, get_mock): sys.modules['module-name'] = mock.MagicMock() pollster = DynamicPollster( self.pollster_definition_only_required_fields) return_value = self.FakeResponse() return_value.status_code = requests.codes.ok return_value.json_object = {} return_value.reason = "Ok" get_mock.return_value = return_value kwargs = {'resource': "credentials"} resp, url = pollster.definitions.sample_gatherer. \ internal_execute_request_get_samples(kwargs) self.assertEqual( self.pollster_definition_only_required_fields['url_path'], url) self.assertEqual(return_value, resp)
def test_default_discovery_not_empty_secret_id(self): pollster = DynamicPollster(self.pollster_definition_all_fields) self.assertEqual( "barbican:barbican_id", pollster.definitions.sample_gatherer.default_discovery)