def test_service_project_link_alert_is_not_returned_when_its_scope_is_related_to_another_project( self): not_owned_alert = logging_factories.AlertFactory( scope=factories.TestServiceProjectLinkFactory()) spl = factories.TestServiceProjectLinkFactory(project=self.project) owned_alert = logging_factories.AlertFactory(scope=spl) result = self._make_aggregate_request('project', self.project.uuid.hex) self.assertTrue(result.filter(uuid=owned_alert.uuid).exists()) self.assertFalse(result.filter(uuid=not_owned_alert.uuid).exists())
def test_alert_can_be_filtered_by_content_type(self): project = structure_factories.ProjectFactory(customer=self.customer) alert1 = factories.AlertFactory(scope=project) alert2 = factories.AlertFactory(scope=self.customer) self.client.force_authenticate(self.owner) response = self.client.get(factories.AlertFactory.get_list_url(), data={'content_type': ['structure.project']}) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertIn(alert1.uuid.hex, [a['uuid'] for a in response.data]) self.assertNotIn(alert2.uuid.hex, [a['uuid'] for a in response.data])
def test_alert_list_can_be_aggregated_for_concreate_customer(self): project = structure_factories.ProjectFactory(customer=self.customer) alert1 = factories.AlertFactory(scope=project) alert2 = factories.AlertFactory() self.client.force_authenticate(self.owner) response = self.client.get(factories.AlertFactory.get_list_url(), data={ 'aggregate': 'customer', 'uuid': self.customer.uuid.hex}) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertIn(alert1.uuid.hex, [a['uuid'] for a in response.data]) self.assertNotIn(alert2.uuid.hex, [a['uuid'] for a in response.data])
def test_alert_list_can_be_filtered_by_scope_type(self): # XXX: this tests will removed after content type filter implementation at portal project = structure_factories.ProjectFactory(customer=self.customer) alert1 = factories.AlertFactory(scope=project) alert2 = factories.AlertFactory(scope=self.customer) self.client.force_authenticate(self.owner) response = self.client.get(factories.AlertFactory.get_list_url(), data={'scope_type': 'customer'}) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertIn(alert2.uuid.hex, [a['uuid'] for a in response.data]) self.assertNotIn(alert1.uuid.hex, [a['uuid'] for a in response.data])
def test_alert_list_can_be_filtered_by_severity_list(self): project = structure_factories.ProjectFactory(customer=self.customer) alert1 = factories.AlertFactory(scope=project, severity=models.Alert.SeverityChoices.WARNING) alert2 = factories.AlertFactory(scope=project, severity=models.Alert.SeverityChoices.ERROR) alert3 = factories.AlertFactory(scope=project, severity=models.Alert.SeverityChoices.INFO) self.client.force_authenticate(self.owner) response = self.client.get(factories.AlertFactory.get_list_url(), data={'severity': ['Warning', 'Error']}) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertIn(alert1.uuid.hex, [a['uuid'] for a in response.data]) self.assertIn(alert2.uuid.hex, [a['uuid'] for a in response.data]) self.assertNotIn(alert3.uuid.hex, [a['uuid'] for a in response.data])
def test_alert_list_can_be_filtered_by_created_date(self): project = structure_factories.ProjectFactory(customer=self.customer) alert1 = factories.AlertFactory(scope=project, created=timezone.now()-timedelta(days=1)) alert2 = factories.AlertFactory(scope=project, created=timezone.now()-timedelta(days=3)) self.client.force_authenticate(self.owner) response = self.client.get(factories.AlertFactory.get_list_url(), data={ 'created_from': core_utils.datetime_to_timestamp(timezone.now()-timedelta(days=2)), 'created_to': core_utils.datetime_to_timestamp(timezone.now())}) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertIn(alert1.uuid.hex, [a['uuid'] for a in response.data]) self.assertNotIn(alert2.uuid.hex, [a['uuid'] for a in response.data])
def test_alerts_can_be_filtered_by_project(self): project1_alerts = [ logging_factories.AlertFactory( severity=logging_models.Alert.SeverityChoices.WARNING, scope=self.membership1, closed=None, created=timezone.now() - timedelta(minutes=1)) for _ in range(3) ] # project 2 alerts for _ in range(2): logging_factories.AlertFactory( severity=logging_models.Alert.SeverityChoices.ERROR, scope=self.membership2, closed=None, created=timezone.now() - timedelta(minutes=1)) self.client.force_authenticate(self.customer_owner) response = self.client.get( self.url, data={ 'from': core_utils.datetime_to_timestamp(timezone.now() - timedelta(minutes=10)), 'aggregate': 'project', 'uuid': self.project1.uuid.hex, }) self.assertEqual(response.status_code, status.HTTP_200_OK) severity_names = dict(logging_models.Alert.SeverityChoices.CHOICES) self.assertItemsEqual( response.data, { severity_names[logging_models.Alert.SeverityChoices.ERROR].lower( ): 0, severity_names[logging_models.Alert.SeverityChoices.WARNING].lower( ): len(project1_alerts), severity_names[logging_models.Alert.SeverityChoices.INFO].lower( ): 0, severity_names[logging_models.Alert.SeverityChoices.DEBUG].lower( ): 0, })
def setUp(self): self.project = structure_factories.ProjectFactory() self.staff = get_user_model().objects.create_superuser( username='******', password='******', email='*****@*****.**') self.alert = factories.AlertFactory(scope=self.project) self.admin = structure_factories.UserFactory() self.project.add_user(self.admin, structure_models.ProjectRole.ADMINISTRATOR)
def test_alerts_stats_can_be_filtered_by_time_interval(self): # new alerts for _ in range(3): logging_factories.AlertFactory( severity=logging_models.Alert.SeverityChoices.WARNING, scope=self.membership1, closed=timezone.now(), created=timezone.now() - timedelta(minutes=10)) old_alerts = [ logging_factories.AlertFactory( severity=logging_models.Alert.SeverityChoices.WARNING, scope=self.membership2, closed=timezone.now() - timedelta(minutes=20), created=timezone.now() - timedelta(minutes=30)) for _ in range(2) ] self.client.force_authenticate(self.customer_owner) response = self.client.get( self.url, data={ 'from': core_utils.datetime_to_timestamp(timezone.now() - timedelta(minutes=35)), 'to': core_utils.datetime_to_timestamp(timezone.now() - timedelta(minutes=15)) }) self.assertEqual(response.status_code, status.HTTP_200_OK) severity_names = dict(logging_models.Alert.SeverityChoices.CHOICES) self.assertItemsEqual( response.data, { severity_names[logging_models.Alert.SeverityChoices.ERROR].lower( ): 0, severity_names[logging_models.Alert.SeverityChoices.WARNING].lower( ): len(old_alerts), severity_names[logging_models.Alert.SeverityChoices.INFO].lower( ): 0, severity_names[logging_models.Alert.SeverityChoices.DEBUG].lower( ): 0, })
def test_customer_owner_cannot_see_alert_about_other_customer(self): alert = factories.AlertFactory() self.client.force_authenticate(self.owner) response = self.client.get(factories.AlertFactory.get_list_url()) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertNotIn(alert.uuid.hex, [a['uuid'] for a in response.data])
def test_customer_owner_can_see_stats_for_all_alerts_that_are_related_to_his_customer( self): warning_alerts = [ logging_factories.AlertFactory( severity=logging_models.Alert.SeverityChoices.WARNING, scope=self.membership1, closed=None, created=timezone.now() - timedelta(minutes=1)) for _ in range(3) ] error_alerts = [ logging_factories.AlertFactory( severity=logging_models.Alert.SeverityChoices.ERROR, scope=self.membership2, closed=None, created=timezone.now() - timedelta(minutes=1)) for _ in range(2) ] self.client.force_authenticate(self.customer_owner) response = self.client.get( self.url, data={ 'from': core_utils.datetime_to_timestamp(timezone.now() - timedelta(minutes=10)) }) self.assertEqual(response.status_code, status.HTTP_200_OK) severity_names = dict(logging_models.Alert.SeverityChoices.CHOICES) self.assertItemsEqual( response.data, { severity_names[logging_models.Alert.SeverityChoices.ERROR].lower( ): len(error_alerts), severity_names[logging_models.Alert.SeverityChoices.WARNING].lower( ): len(warning_alerts), severity_names[logging_models.Alert.SeverityChoices.INFO].lower( ): 0, severity_names[logging_models.Alert.SeverityChoices.DEBUG].lower( ): 0, })
def test_only_alerts_where_scopes_customer_is_the_aggregated_one_are_returned( self): customer_related_alerts = [] logging_factories.AlertFactory(scope=factories.ProjectFactory()) spl = factories.TestServiceProjectLinkFactory( service__customer=self.customer) customer_related_alerts.append( logging_factories.AlertFactory(scope=spl)) service = factories.TestServiceFactory(customer=self.customer) customer_related_alerts.append( logging_factories.AlertFactory(scope=service)) expected_alerts_ids = [alert.uuid for alert in customer_related_alerts] result = self._make_aggregate_request('customer', self.customer.uuid.hex) actual_alerts_ids = [alert.uuid for alert in result] self.assertItemsEqual(expected_alerts_ids, actual_alerts_ids)
def test_project_alert_is_not_returned_when_its_scope_belongs_to_another_customer( self): alert = logging_factories.AlertFactory( scope=factories.ProjectFactory()) result = self._make_aggregate_request('customer', self.customer.uuid.hex) self.assertFalse(result.filter(uuid=alert.uuid).exists())
def test_customer_owner_can_see_alert_about_his_project(self): project = structure_factories.ProjectFactory(customer=self.customer) alert = factories.AlertFactory(scope=project) self.client.force_authenticate(self.owner) response = self.client.get(factories.AlertFactory.get_list_url()) self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertIn(alert.uuid.hex, [a['uuid'] for a in response.data])
def test_service_alert_is_returned_when_aggregate_customer_is_the_same_as_its_scope_customer( self): scope = factories.TestServiceFactory(customer=self.customer) alert = logging_factories.AlertFactory(scope=scope) result = self._make_aggregate_request('customer', self.customer.uuid.hex) self.assertEqual(len(result), 1) self.assertTrue(result.filter(uuid=alert.uuid).exists())
def test_instances_alerts_are_counted_in_project_alerts(self): instance = factories.InstanceFactory( cloud_project_membership=self.membership1) instances_alerts = [ logging_factories.AlertFactory( severity=logging_models.Alert.SeverityChoices.WARNING, scope=instance, closed=None, created=timezone.now() - timedelta(minutes=1)) for _ in range(3) ] self.client.force_authenticate(self.project1_admin) response = self.client.get( self.url, data={ 'from': core_utils.datetime_to_timestamp(timezone.now() - timedelta(minutes=10)), }) self.assertEqual(response.status_code, status.HTTP_200_OK) severity_names = dict(logging_models.Alert.SeverityChoices.CHOICES) self.assertItemsEqual( response.data, { severity_names[logging_models.Alert.SeverityChoices.ERROR].lower( ): 0, severity_names[logging_models.Alert.SeverityChoices.WARNING].lower( ): len(instances_alerts), severity_names[logging_models.Alert.SeverityChoices.INFO].lower( ): 0, severity_names[logging_models.Alert.SeverityChoices.DEBUG].lower( ): 0, })