Skip to content

Commit 620fd05

Browse files
committed
change env vars and use moto for test
1 parent 24ee9d8 commit 620fd05

File tree

4 files changed

+20
-81
lines changed

4 files changed

+20
-81
lines changed

infrastructure/instance/file_name_processor.tf

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,19 @@ resource "aws_iam_policy" "filenameprocessor_lambda_exec_policy" {
162162
"firehose:PutRecordBatch"
163163
],
164164
"Resource" : "arn:aws:firehose:*:*:deliverystream/${module.splunk.firehose_stream_name}"
165+
},
166+
{
167+
"Effect" : "Allow",
168+
"Action" : [
169+
"s3:GetObject",
170+
"s3:PutObject",
171+
"s3:DeleteObject",
172+
"s3:ListBucket"
173+
],
174+
"Resource" : [
175+
"arn:aws:s3:::nhsd-dspp-core-ref-extended-attributes-gdp",
176+
"arn:aws:s3:::nhsd-dspp-core-ref-extended-attributes-gdp/*"
177+
]
165178
}
166179
]
167180
})
@@ -277,9 +290,10 @@ resource "aws_lambda_function" "file_processor_lambda" {
277290

278291
environment {
279292
variables = {
280-
ACCOUNT_ID = var.immunisation_account_id
293+
ACCOUNT_ID = var.dspp_core_account_id
281294
SOURCE_BUCKET_NAME = aws_s3_bucket.batch_data_source_bucket.bucket
282295
ACK_BUCKET_NAME = aws_s3_bucket.batch_data_destination_bucket.bucket
296+
DPS_BUCKET_NAME = "nhsd-dspp-core-ref-extended-attributes-gdp"
283297
QUEUE_URL = aws_sqs_queue.batch_file_created.url
284298
REDIS_HOST = data.aws_elasticache_cluster.existing_redis.cache_nodes[0].address
285299
REDIS_PORT = data.aws_elasticache_cluster.existing_redis.cache_nodes[0].port

lambdas/filenameprocessor/src/constants.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
SOURCE_BUCKET_NAME = os.getenv("SOURCE_BUCKET_NAME")
1414

1515
# We have used an internal temporary bucket here and an actual dps bucket will replace this
16-
DPS_DESTINATION_BUCKET_NAME = os.getenv("ACK_BUCKET_NAME")
16+
DPS_DESTINATION_BUCKET_NAME = os.getenv("DPS_BUCKET_NAME")
1717
EXPECTED_BUCKET_OWNER_ACCOUNT = os.getenv("ACCOUNT_ID")
1818
AUDIT_TABLE_NAME = os.getenv("AUDIT_TABLE_NAME")
1919
AUDIT_TABLE_TTL_DAYS = os.getenv("AUDIT_TABLE_TTL_DAYS")
@@ -22,7 +22,10 @@
2222
VACCINE_TYPE_TO_DISEASES_HASH_KEY = "vacc_to_diseases"
2323
ODS_CODE_TO_SUPPLIER_SYSTEM_HASH_KEY = "ods_code_to_supplier"
2424
EXTENDED_ATTRIBUTES_FILE_PREFIX = "Vaccination_Extended_Attributes"
25+
26+
# Currently only COVID extended attributes files are supported, might be extended in future for other vaccine types
2527
EXTENDED_ATTRIBUTES_VACC_TYPE = "COVID"
28+
2629
DPS_DESTINATION_PREFIX = "dps_destination"
2730
EXTENDED_ATTRIBUTES_ARCHIVE_PREFIX = "extended-attributes-archive"
2831
VALID_EA_VERSIONS = ["V1_5"]

lambdas/filenameprocessor/tests/test_lambda_handler.py

Lines changed: 0 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -274,26 +274,6 @@ def test_lambda_handler_extended_attributes_success(self, mock_get_redis_client)
274274
with (
275275
patch("file_name_processor.validate_permissions_for_extended_attributes_files", return_value="X8E5B_COVID"),
276276
patch("file_name_processor.uuid4", return_value=test_cases[0].message_id),
277-
patch(
278-
"file_name_processor.copy_file_to_external_bucket",
279-
side_effect=lambda src_bucket, key, dst_bucket, dst_key, exp_owner, exp_src_owner: (
280-
s3_client.put_object(
281-
Bucket=BucketNames.DESTINATION,
282-
Key=dst_key,
283-
Body=s3_client.get_object(Bucket=src_bucket, Key=key)["Body"].read(),
284-
),
285-
),
286-
),
287-
patch(
288-
"file_name_processor.move_file",
289-
side_effect=lambda source_bucket, source_key, destination_key: (
290-
s3_client.put_object(
291-
Bucket=source_bucket,
292-
Key=destination_key,
293-
Body=s3_client.get_object(Bucket=source_bucket, Key=source_key)["Body"].read(),
294-
),
295-
),
296-
),
297277
):
298278
lambda_handler(self.make_event([self.make_record(test_cases[0].file_key)]), None)
299279

@@ -310,7 +290,6 @@ def test_lambda_handler_extended_attributes_success(self, mock_get_redis_client)
310290
self.assertEqual(item[AuditTableKeys.EXPIRES_AT]["N"], str(test_cases[0].expires_at))
311291
# File should be moved to destination/
312292
dest_key = f"dps_destination/{test_cases[0].file_key}"
313-
print(f" destination file is at {s3_client.list_objects(Bucket=BucketNames.DESTINATION)}")
314293
retrieved = s3_client.get_object(Bucket=BucketNames.DESTINATION, Key=dest_key)
315294
self.assertIsNotNone(retrieved)
316295

@@ -352,17 +331,6 @@ def test_lambda_handler_extended_attributes_failure(self, mock_get_redis_client)
352331
patch("file_name_processor.validate_permissions_for_extended_attributes_files", return_value="X8E5B_COVID"),
353332
patch("file_name_processor.uuid4", return_value=test_cases[0].message_id),
354333
patch("file_name_processor.copy_file_to_external_bucket", side_effect=Exception("Test ClientError")),
355-
patch(
356-
"file_name_processor.move_file",
357-
side_effect=lambda bucket, key, dst_key: (
358-
s3_client.put_object(
359-
Bucket=bucket,
360-
Key=dst_key,
361-
Body=s3_client.get_object(Bucket=bucket, Key=key)["Body"].read(),
362-
),
363-
s3_client.delete_object(Bucket=bucket, Key=key),
364-
),
365-
),
366334
):
367335
lambda_handler(self.make_event([self.make_record(test_cases[0].file_key)]), None)
368336

@@ -384,7 +352,6 @@ def test_lambda_handler_extended_attributes_failure(self, mock_get_redis_client)
384352
self.assertEqual(item[AuditTableKeys.EXPIRES_AT]["N"], str(test_cases[0].expires_at))
385353
# File should be moved to source under archive/
386354
dest_key = f"extended-attributes-archive/{test_cases[0].file_key}"
387-
print(f" destination file is at {s3_client.list_objects(Bucket=BucketNames.SOURCE)}")
388355
retrieved = s3_client.get_object(Bucket=BucketNames.SOURCE, Key=dest_key)
389356
self.assertIsNotNone(retrieved)
390357

@@ -484,27 +451,6 @@ def test_lambda_handler_extended_attributes_extension_checks(self, mock_get_redi
484451
return_value=["COVID.CUDS"],
485452
),
486453
patch("file_name_processor.uuid4", return_value="EA_csv_id"),
487-
patch(
488-
"file_name_processor.copy_file_to_external_bucket",
489-
side_effect=lambda src_bucket, key, dst_bucket, dst_key, exp_owner, exp_src_owner: (
490-
s3_client.put_object(
491-
Bucket=BucketNames.DESTINATION,
492-
Key=dst_key,
493-
Body=s3_client.get_object(Bucket=src_bucket, Key=key)["Body"].read(),
494-
),
495-
),
496-
),
497-
patch(
498-
"file_name_processor.move_file",
499-
side_effect=lambda bucket, key, dst_key: (
500-
s3_client.put_object(
501-
Bucket=bucket,
502-
Key=dst_key,
503-
Body=s3_client.get_object(Bucket=bucket, Key=key)["Body"].read(),
504-
),
505-
s3_client.delete_object(Bucket=bucket, Key=key),
506-
),
507-
),
508454
):
509455
lambda_handler(self.make_event([self.make_record(csv_key)]), None)
510456
# Ensure processed path hit by checking destination (implementation currently uses single slash)
@@ -516,27 +462,6 @@ def test_lambda_handler_extended_attributes_extension_checks(self, mock_get_redi
516462
with (
517463
patch("file_name_processor.validate_permissions_for_extended_attributes_files", return_value="X8E5B_COVID"),
518464
patch("file_name_processor.uuid4", return_value="EA_dat_id"),
519-
patch(
520-
"file_name_processor.copy_file_to_external_bucket",
521-
side_effect=lambda src_bucket, key, dst_bucket, dst_key, exp_owner, exp_src_owner: (
522-
s3_client.put_object(
523-
Bucket=BucketNames.DESTINATION,
524-
Key=dst_key,
525-
Body=s3_client.get_object(Bucket=src_bucket, Key=key)["Body"].read(),
526-
),
527-
),
528-
),
529-
patch(
530-
"file_name_processor.move_file",
531-
side_effect=lambda bucket, key, dst_key: (
532-
s3_client.put_object(
533-
Bucket=bucket,
534-
Key=dst_key,
535-
Body=s3_client.get_object(Bucket=bucket, Key=key)["Body"].read(),
536-
),
537-
s3_client.delete_object(Bucket=bucket, Key=key),
538-
),
539-
),
540465
):
541466
lambda_handler(self.make_event([self.make_record(dat_key)]), None)
542467
s3_client.get_object(Bucket=BucketNames.DESTINATION, Key=f"dps_destination/{dat_key}")
@@ -569,10 +494,6 @@ def test_lambda_handler_extended_attributes_extension_checks(self, mock_get_redi
569494
Key=invalid_file_key,
570495
Body=MOCK_EXTENDED_ATTRIBUTES_FILE_CONTENT,
571496
)
572-
573-
# TODO: rewrite the bucket patches to use moto
574-
575-
# Patch uuid4 (message id), and don't move the file
576497
with (
577498
patch("file_name_processor.uuid4", return_value=test_cases[0].message_id),
578499
patch(

lambdas/filenameprocessor/tests/utils_for_tests/mock_environment_variables.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class Sqs:
3636
MOCK_ENVIRONMENT_DICT = {
3737
"SOURCE_BUCKET_NAME": BucketNames.SOURCE,
3838
"ACK_BUCKET_NAME": BucketNames.DESTINATION,
39+
"ACCOUNT_ID": MOCK_ACCOUNT_ID,
3940
"QUEUE_URL": "https://sqs.eu-west-2.amazonaws.com/123456789012/imms-batch-file-created-queue.fifo",
4041
"REDIS_HOST": "localhost",
4142
"REDIS_PORT": "6379",

0 commit comments

Comments
 (0)