Skip to content

Commit 1a3d2c0

Browse files
committed
basic tests
1 parent 07c3c4f commit 1a3d2c0

File tree

4 files changed

+61
-67
lines changed

4 files changed

+61
-67
lines changed

delta_backend/src/delta.py

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,6 @@
1-
import boto3
2-
import json
3-
import logging
41
from log_firehose import FirehoseLogger
5-
6-
logging.basicConfig()
7-
logger = logging.getLogger()
8-
logger.setLevel("INFO")
9-
firehose_logger = None
2+
firehose_logger = FirehoseLogger()
103

114
def handler(event, context):
12-
global firehose_logger
13-
logger.info("Starting Delta Handler")
14-
logger.info("Event: '%s'", event["text"])
15-
16-
if firehose_logger is None:
17-
firehose_logger = FirehoseLogger()
18-
logger.info("FirehoseLogger initialized")
19-
20-
firehose_logger.send_log(event)
21-
22-
return {
23-
"statusCode": 200,
24-
"body": json.dumps("Hello from Lambda!"),
25-
}
5+
firehose_logger.send_log(event)
6+
return { "statusCode": 200 }

delta_backend/src/log_firehose.py

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,21 @@
11
import boto3
2-
import logging
32
import os
3+
import json
44
from botocore.config import Config
55

6-
logging.basicConfig()
7-
logger = logging.getLogger()
8-
logger.setLevel("INFO")
9-
10-
116
class FirehoseLogger:
127
def __init__(
138
self,
14-
stream_name: str = os.getenv("SPLUNK_FIREHOSE_NAME"),
159
boto_client=boto3.client("firehose", config=Config(region_name="eu-west-2")),
10+
stream_name: str = os.getenv("SPLUNK_FIREHOSE_NAME")
1611
):
17-
logger.info(">>>>>>FirehoseLogger.init!!!")
18-
if boto_client is None:
19-
boto_client = boto3.client("firehose", config=Config(region_name="eu-west-2"))
2012
self.firehose_client = boto_client
2113
self.delivery_stream_name = stream_name
22-
logger.info(f">>>>>> Firehose stream name: {stream_name}")
2314

2415
def send_log(self, log_message):
25-
log_to_splunk = log_message
26-
logger.info(f"Log sent to Firehose for save: {log_to_splunk}")
27-
try:
28-
logger.info(f"Send log to Firehose")
29-
response = self.firehose_client.put_record(
30-
DeliveryStreamName=self.delivery_stream_name,
31-
Record={"Data": log_message},
32-
)
33-
logger.info(f"Log sent: {response}")
34-
except Exception as e:
35-
logger.exception(f"Error sending log: {e}")
16+
encoded_log_data = json.dumps(log_message).encode("utf-8")
17+
s = self.firehose_client.put_record(
18+
DeliveryStreamName=self.delivery_stream_name,
19+
Record={"Data": encoded_log_data},
20+
)
21+
print(f"Log sent to Firehose: {s}")

delta_backend/tests/test_delta.py

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,24 @@
11
import unittest
22
from unittest.mock import patch, MagicMock
3-
4-
from src.delta import handler # Import after setting environment variables
3+
from src.delta import handler
54

65

76
class DeltaTestCase(unittest.TestCase):
87

9-
def setUp(self):
10-
# Mock firehose_logger globally
11-
self.firehose_logger_patch = patch("src.delta.firehose_logger")
12-
self.mock_firehose_logger = self.firehose_logger_patch.start()
13-
14-
# Mock the firehose_client and its put_record method
15-
self.mock_firehose_client = self.mock_firehose_logger.firehose_client
16-
self.mock_firehose_client.put_record.return_value = {"ResponseMetadata": {"HTTPStatusCode": 200}}
8+
@patch("src.delta.firehose_logger") # Mock the firehose_logger instance in delta.py
9+
def test_handler(self, mock_firehose_logger):
10+
# Arrange
11+
event = {"text": "hello world"}
1712

1813
# Mock the send_log method
19-
self.mock_firehose_logger.send_log = MagicMock()
20-
21-
# Common setup if needed
22-
self.context = {}
23-
24-
def tearDown(self):
25-
# Stop the patch after each test
26-
self.firehose_logger_patch.stop()
27-
28-
def test_handler(self):
29-
# Arrange
30-
event = {"text": "hello world!"}
14+
mock_firehose_logger.send_log = MagicMock()
3115

3216
# Act
33-
result = handler(event, self.context)
17+
result = handler(event, None)
3418

3519
# Assert
20+
# Check the handler's response
3621
self.assertEqual(result["statusCode"], 200)
22+
23+
# Verify that send_log was called with the correct event
24+
mock_firehose_logger.send_log.assert_called_once_with(event)
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import unittest
2+
from unittest.mock import patch, MagicMock
3+
import os
4+
import json
5+
from src.log_firehose import FirehoseLogger # Assuming your FirehoseLogger class is in the log_firehose.py file.
6+
7+
class TestFirehoseLogger(unittest.TestCase):
8+
9+
@patch("boto3.client")
10+
def test_send_log(self, mock_boto_client):
11+
# Create a mock boto3 client and mock the put_record response
12+
mock_response = {
13+
"RecordId": "shardId-000000000000000000000001",
14+
"ResponseMetadata": {
15+
"RequestId": "12345abcde67890fghijk",
16+
"HTTPStatusCode": 200,
17+
"RetryAttempts": 0
18+
}
19+
}
20+
mock_firehose_client = MagicMock()
21+
mock_boto_client.return_value = mock_firehose_client
22+
mock_firehose_client.put_record.return_value = mock_response
23+
24+
stream_name = "stream_name"
25+
firehose_logger = FirehoseLogger(boto_client=mock_firehose_client, stream_name=stream_name)
26+
27+
log_message = {"text": "Test log message"}
28+
29+
# Call the send_log method
30+
firehose_logger.send_log(log_message)
31+
32+
# Assert that put_record was called exactly once with the correct parameters
33+
mock_firehose_client.put_record.assert_called_once()
34+
35+
# Assert that the return value is as expected (optional)
36+
self.assertEqual(mock_firehose_client.put_record.return_value, mock_response)
37+
38+
if __name__ == "__main__":
39+
unittest.main()

0 commit comments

Comments
 (0)