def test_delete_archived_data_success(self, mock_resource): """Test that delete_archived_data correctly interacts with AWS S3.""" schema_name = 'acct10001' provider_type = Provider.PROVIDER_AWS provider_uuid = '00000000-0000-0000-0000-000000000001' expected_prefix = 'data_archive/acct10001/aws/00000000-0000-0000-0000-000000000001/' # Generate enough fake objects to expect calling the S3 delete api twice. mock_bucket = mock_resource.return_value.Bucket.return_value bucket_objects = [DummyS3Object(key=fake.file_path()) for _ in range(1234)] expected_keys = [{'Key': bucket_object.key} for bucket_object in bucket_objects] # Leave one object mysteriously not deleted to cover the LOG.warning use case. mock_bucket.objects.filter.side_effect = [bucket_objects, bucket_objects[:1]] with self.assertLogs('masu.celery.tasks', 'WARNING') as captured_logs: tasks.delete_archived_data(schema_name, provider_type, provider_uuid) mock_resource.assert_called() mock_bucket.delete_objects.assert_has_calls( [ call(Delete={'Objects': expected_keys[:1000]}), call(Delete={'Objects': expected_keys[1000:]}), ] ) mock_bucket.objects.filter.assert_has_calls( [call(Prefix=expected_prefix), call(Prefix=expected_prefix)] ) self.assertIn('Found 1 objects after attempting', captured_logs.output[-1])
def test_delete_archived_data_bad_inputs_exception(self): """Test that delete_archived_data raises an exception when given bad inputs.""" schema_name, provider_type, provider_uuid = "", "", "" with self.assertRaises(TypeError) as e: tasks.delete_archived_data(schema_name, provider_type, provider_uuid) self.assertIn("schema_name", str(e.exception)) self.assertIn("provider_type", str(e.exception)) self.assertIn("provider_uuid", str(e.exception))
def test_delete_archived_data_success(self, mock_delete): """Test that delete_archived_data correctly interacts with AWS S3.""" schema_name = "acct10001" provider_type = Provider.PROVIDER_AWS provider_uuid = "00000000-0000-0000-0000-000000000001" tasks.delete_archived_data(schema_name, provider_type, provider_uuid) mock_delete.assert_called()
def test_delete_archived_data_archiving_false(self): """Test that delete_archived_data correctly interacts with AWS S3.""" schema_name = "acct10001" provider_type = Provider.PROVIDER_AWS provider_uuid = "00000000-0000-0000-0000-000000000001" with self.assertLogs("masu.celery.tasks", "INFO") as captured_logs: tasks.delete_archived_data(schema_name, provider_type, provider_uuid) self.assertIn("Skipping delete_archived_data. Upload feature is disabled.", captured_logs.output[0])
def test_delete_archived_data_missing_bucket_path_exception( self, mock_resource): """Test that delete_archived_data raises an exception with an empty bucket path.""" schema_name, provider_type, provider_uuid = fake.slug( ), 'AWS', fake.uuid4() with self.assertRaises(ImproperlyConfigured): tasks.delete_archived_data(schema_name, provider_type, provider_uuid) mock_resource.assert_not_called()
def test_delete_archived_data_archiving_disabled_noop(self, mock_resource): """Test that delete_archived_data returns early when feature is disabled.""" schema_name, provider_type, provider_uuid = fake.slug(), Provider.PROVIDER_AWS, fake.uuid4() tasks.delete_archived_data(schema_name, provider_type, provider_uuid) mock_resource.assert_not_called()