Skip to content

Commit 6f29e77

Browse files
committed
test
1 parent 850f0e2 commit 6f29e77

File tree

2 files changed

+171
-167
lines changed

2 files changed

+171
-167
lines changed

delta_backend/src/log_firehose.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@ def __init__(
1616
stream_name: str = os.getenv("SPLUNK_FIREHOSE_NAME", "AAA"),
1717
boto_client=None,
1818
):
19-
logger.info(">>>>>>FirehoseLogger.init!!!")
19+
logger.info(">>>>>>FirehoseLogger.init DUMP ENV VARIABLES!!!")
2020
if boto_client is None:
2121
boto_client = boto3.client("firehose", config=Config(region_name="eu-west-2"))
2222
self.firehose_client = boto_client
2323
self.delivery_stream_name = stream_name
2424
logger.info(f">>>>>> Firehose stream name: {stream_name}")
25-
# for key, value in os.environ.items():
26-
# logger.info(f">>> VAR: {key}: {value}")
25+
for key, value in os.environ.items():
26+
logger.info(f">>> VAR: {key}: {value}")
2727

2828

2929
def send_log(self, log_message):

delta_backend/tests/test_delta.py

Lines changed: 168 additions & 164 deletions
Original file line numberDiff line numberDiff line change
@@ -89,179 +89,183 @@ def get_event_record(pk, event_name="INSERT", operation="CREATE", supplier="EMIS
8989
},
9090
}
9191

92-
@patch("boto3.client")
93-
def test_send_message_success(self, mock_boto_client):
94-
logger.info("Test send_message success")
95-
# Arrange
96-
mock_sqs = self.setup_mock_sqs(mock_boto_client)
97-
record = {"key": "value"}
98-
99-
# Act
100-
send_message(record)
101-
102-
# Assert
103-
mock_sqs.send_message.assert_called_once_with(
104-
QueueUrl=os.environ["AWS_SQS_QUEUE_URL"], MessageBody=json.dumps(record)
105-
)
106-
107-
@patch("boto3.client")
108-
@patch("logging.Logger.info")
109-
def test_send_message_client_error(self, mock_logger_info, mock_boto_client):
110-
logger.info("Test send_message client error")
111-
# Arrange
112-
mock_sqs = MagicMock()
113-
mock_boto_client.return_value = mock_sqs
114-
record = {"key": "value"}
115-
116-
# Simulate ClientError
117-
error_response = {"Error": {"Code": "500", "Message": "Internal Server Error"}}
118-
mock_sqs.send_message.side_effect = ClientError(error_response, "SendMessage")
119-
120-
# Act
121-
send_message(record)
122-
123-
# Assert
124-
mock_logger_info.assert_called_once_with(
125-
f"Error sending record to DLQ: An error occurred (500) when calling the SendMessage operation: Internal Server Error"
126-
)
127-
128-
@patch("boto3.resource")
129-
def test_handler_success_insert(self, mock_boto_resource):
130-
logger.info("Test handler success insert")
131-
# Arrange
132-
self.setup_mock_dynamodb(mock_boto_resource)
133-
suppilers = ["DPS", "EMIS"]
134-
for supplier in suppilers:
135-
event = self.get_event(supplier=supplier)
136-
137-
# Act
138-
result = handler(event, self.context)
139-
140-
# Assert
141-
self.assertEqual(result["statusCode"], 200)
142-
143-
@patch("boto3.resource")
144-
def test_handler_failure(self, mock_boto_resource):
145-
logger.info("Test handler failure")
146-
# Arrange
147-
self.setup_mock_dynamodb(mock_boto_resource, status_code=500)
148-
event = self.get_event()
149-
150-
# Act
151-
result = handler(event, self.context)
152-
153-
# Assert
154-
self.assertEqual(result["statusCode"], 500)
155-
156-
@patch("boto3.resource")
157-
def test_handler_success_update(self, mock_boto_resource):
158-
logger.info("Test handler success update")
159-
# Arrange
160-
self.setup_mock_dynamodb(mock_boto_resource)
161-
event = self.get_event(event_name="UPDATE", operation="UPDATE")
162-
163-
# Act
164-
result = handler(event, self.context)
165-
166-
# Assert
167-
self.assertEqual(result["statusCode"], 200)
168-
169-
@patch("boto3.resource")
170-
def test_handler_success_remove(self, mock_boto_resource):
171-
logger.info("Test handler success remove")
172-
# Arrange
173-
self.setup_mock_dynamodb(mock_boto_resource)
174-
event = self.get_event(event_name="REMOVE", operation="DELETE")
175-
176-
# Act
177-
result = handler(event, self.context)
178-
179-
# Assert
180-
self.assertEqual(result["statusCode"], 200)
181-
92+
# @patch("boto3.client")
93+
# def test_send_message_success(self, mock_boto_client):
94+
# logger.info("Test send_message success")
95+
# # Arrange
96+
# mock_sqs = self.setup_mock_sqs(mock_boto_client)
97+
# record = {"key": "value"}
98+
99+
# # Act
100+
# send_message(record)
101+
102+
# # Assert
103+
# mock_sqs.send_message.assert_called_once_with(
104+
# QueueUrl=os.environ["AWS_SQS_QUEUE_URL"], MessageBody=json.dumps(record)
105+
# )
106+
107+
# @patch("boto3.client")
108+
# @patch("logging.Logger.info")
109+
# def test_send_message_client_error(self, mock_logger_info, mock_boto_client):
110+
# logger.info("Test send_message client error")
111+
# # Arrange
112+
# mock_sqs = MagicMock()
113+
# mock_boto_client.return_value = mock_sqs
114+
# record = {"key": "value"}
115+
116+
# # Simulate ClientError
117+
# error_response = {"Error": {"Code": "500", "Message": "Internal Server Error"}}
118+
# mock_sqs.send_message.side_effect = ClientError(error_response, "SendMessage")
119+
120+
# # Act
121+
# send_message(record)
122+
123+
# # Assert
124+
# mock_logger_info.assert_called_once_with(
125+
# f"Error sending record to DLQ: An error occurred (500) when calling the SendMessage operation: Internal Server Error"
126+
# )
127+
128+
# @patch("boto3.resource")
129+
# def test_handler_success_insert(self, mock_boto_resource):
130+
# logger.info("Test handler success insert")
131+
# # Arrange
132+
# self.setup_mock_dynamodb(mock_boto_resource)
133+
# suppilers = ["DPS", "EMIS"]
134+
# for supplier in suppilers:
135+
# event = self.get_event(supplier=supplier)
136+
137+
# # Act
138+
# result = handler(event, self.context)
139+
140+
# # Assert
141+
# self.assertEqual(result["statusCode"], 200)
142+
143+
# @patch("boto3.resource")
144+
# def test_handler_failure(self, mock_boto_resource):
145+
# logger.info("Test handler failure")
146+
# # Arrange
147+
# self.setup_mock_dynamodb(mock_boto_resource, status_code=500)
148+
# event = self.get_event()
149+
150+
# # Act
151+
# result = handler(event, self.context)
152+
153+
# # Assert
154+
# self.assertEqual(result["statusCode"], 500)
155+
156+
# @patch("boto3.resource")
157+
# def test_handler_success_update(self, mock_boto_resource):
158+
# logger.info("Test handler success update")
159+
# # Arrange
160+
# self.setup_mock_dynamodb(mock_boto_resource)
161+
# event = self.get_event(event_name="UPDATE", operation="UPDATE")
162+
163+
# # Act
164+
# result = handler(event, self.context)
165+
166+
# # Assert
167+
# self.assertEqual(result["statusCode"], 200)
168+
169+
# @patch("boto3.resource")
170+
# def test_handler_success_remove(self, mock_boto_resource):
171+
# logger.info("Test handler success remove")
172+
# # Arrange
173+
# self.setup_mock_dynamodb(mock_boto_resource)
174+
# event = self.get_event(event_name="REMOVE", operation="DELETE")
175+
176+
# # Act
177+
# result = handler(event, self.context)
178+
179+
# # Assert
180+
# self.assertEqual(result["statusCode"], 200)
181+
182+
# @patch("boto3.resource")
183+
# @patch("boto3.client")
184+
# def test_handler_exception_intrusion_check(self, mock_boto_resource, mock_boto_client):
185+
# logger.info("Test handler exception intrusion check")
186+
# # Arrange
187+
# self.setup_mock_dynamodb(mock_boto_resource, status_code=500)
188+
# mock_boto_client.return_value = MagicMock()
189+
# event = self.get_event()
190+
191+
# # Act & Assert
192+
193+
# result = handler(event, self.context)
194+
# self.assertEqual(result["statusCode"], 500)
195+
196+
# @patch("boto3.resource")
197+
# @patch("boto3.client")
198+
# def test_handler_exception_intrusion(self, mock_boto_resource, mock_boto_client):
199+
# logger.info("Test handler exception intrusion")
200+
# # Arrange
201+
# self.setUp_mock_resources(mock_boto_resource, mock_boto_client)
202+
# event = self.get_event()
203+
# context = {}
204+
205+
# # Act & Assert
206+
# with self.assertRaises(Exception):
207+
# handler(event, context)
208+
209+
# # @SW why has master got @patch("delta.handler")?
182210
@patch("boto3.resource")
183-
@patch("boto3.client")
184-
def test_handler_exception_intrusion_check(self, mock_boto_resource, mock_boto_client):
185-
logger.info("Test handler exception intrusion check")
186-
# Arrange
187-
self.setup_mock_dynamodb(mock_boto_resource, status_code=500)
188-
mock_boto_client.return_value = MagicMock()
189-
event = self.get_event()
190-
191-
# Act & Assert
192-
193-
result = handler(event, self.context)
194-
self.assertEqual(result["statusCode"], 500)
195-
196-
@patch("boto3.resource")
197-
@patch("boto3.client")
198-
def test_handler_exception_intrusion(self, mock_boto_resource, mock_boto_client):
199-
logger.info("Test handler exception intrusion")
200-
# Arrange
201-
self.setUp_mock_resources(mock_boto_resource, mock_boto_client)
202-
event = self.get_event()
203-
context = {}
204-
205-
# Act & Assert
206-
with self.assertRaises(Exception):
207-
handler(event, context)
208-
209-
# @SW why has master got @patch("delta.handler")?
210-
@patch("boto3.resource")
211-
@patch("delta.handler")
211+
@patch("delta.handler") # mock incorrect boto resource to simulate intrusion
212212
def test_handler_exception_intrusion_check_false(self, mock_boto_resource, mock_boto_client):
213213
logger.info("Test handler exception intrusion check false")
214214
# Arrange
215215
self.setUp_mock_resources(mock_boto_resource, mock_boto_client)
216+
217+
# thow an exception when boto_client is called
218+
mock_boto_client.side_effect = Exception("Test Exception")
219+
216220
event = self.get_event()
217221
context = {}
218222

219223
# Act & Assert
220224
with self.assertRaises(Exception):
221225
handler(event, context)
222226

223-
@patch("delta.firehose_logger.send_log") # Mock Firehose logger
224-
@patch("delta.logger.info") # Mock logging
225-
def test_dps_record_skipped(self, mock_logger_info, mock_firehose_send_log):
226-
logger.info("Test DPS record skipped")
227-
event = self.get_event(supplier="DPSFULL")
228-
context = {}
229-
230-
response = handler(event, context)
231-
print(f"final response1: {response}")
232-
233-
self.assertEqual(response["statusCode"], 200)
234-
self.assertEqual(response["body"], "Record from DPS skipped for 12345")
235-
236-
# Check logging and Firehose were called
237-
mock_logger_info.assert_called_with("Record from DPS skipped for 12345")
238-
239-
# TODO - amend test once error handling implemented
240-
@patch("delta.firehose_logger.send_log")
241-
@patch("delta.logger.info")
242-
@patch("Converter.Converter")
243-
@patch("delta.boto3.resource")
244-
def test_partial_success_with_errors(self, mock_dynamodb, mock_converter, mock_logger_info, mock_firehose_send_log):
245-
logger.info("Test partial success with errors")
246-
mock_converter_instance = MagicMock()
247-
mock_converter_instance.runConversion.return_value = [{}]
248-
mock_converter_instance.getErrorRecords.return_value = [{"error": "Invalid field"}]
249-
mock_converter.return_value = mock_converter_instance
250-
251-
# Mock DynamoDB put_item success
252-
mock_table = MagicMock()
253-
mock_dynamodb.return_value.Table.return_value = mock_table
254-
mock_table.put_item.return_value = {"ResponseMetadata": {"HTTPStatusCode": 200}}
255-
256-
event = self.get_event()
257-
context = {}
258-
259-
response = handler(event, context)
260-
print(f"final response: {response}")
261-
262-
# self.assertEqual(response["statusCode"], 207)
263-
# self.assertIn("Partial success", response["body"])
264-
265-
# Check logging and Firehose were called
266-
# mock_logger_info.assert_called()
267-
# mock_firehose_send_log.assert_called()
227+
# @patch("delta.firehose_logger.send_log") # Mock Firehose logger
228+
# @patch("delta.logger.info") # Mock logging
229+
# def test_dps_record_skipped(self, mock_logger_info, mock_firehose_send_log):
230+
# logger.info("Test DPS record skipped")
231+
# event = self.get_event(supplier="DPSFULL")
232+
# context = {}
233+
234+
# response = handler(event, context)
235+
# print(f"final response1: {response}")
236+
237+
# self.assertEqual(response["statusCode"], 200)
238+
# self.assertEqual(response["body"], "Record from DPS skipped for 12345")
239+
240+
# # Check logging and Firehose were called
241+
# mock_logger_info.assert_called_with("Record from DPS skipped for 12345")
242+
243+
# # TODO - amend test once error handling implemented
244+
# @patch("delta.firehose_logger.send_log")
245+
# @patch("delta.logger.info")
246+
# @patch("Converter.Converter")
247+
# @patch("delta.boto3.resource")
248+
# def test_partial_success_with_errors(self, mock_dynamodb, mock_converter, mock_logger_info, mock_firehose_send_log):
249+
# logger.info("Test partial success with errors")
250+
# mock_converter_instance = MagicMock()
251+
# mock_converter_instance.runConversion.return_value = [{}]
252+
# mock_converter_instance.getErrorRecords.return_value = [{"error": "Invalid field"}]
253+
# mock_converter.return_value = mock_converter_instance
254+
255+
# # Mock DynamoDB put_item success
256+
# mock_table = MagicMock()
257+
# mock_dynamodb.return_value.Table.return_value = mock_table
258+
# mock_table.put_item.return_value = {"ResponseMetadata": {"HTTPStatusCode": 200}}
259+
260+
# event = self.get_event()
261+
# context = {}
262+
263+
# response = handler(event, context)
264+
# print(f"final response: {response}")
265+
266+
# # self.assertEqual(response["statusCode"], 207)
267+
# # self.assertIn("Partial success", response["body"])
268+
269+
# # Check logging and Firehose were called
270+
# # mock_logger_info.assert_called()
271+
# # mock_firehose_send_log.assert_called()

0 commit comments

Comments
 (0)