from unittest import mock import pytest from aws_testing_utils import cloudwatch_log_handler from tests.conftest import get_client_error @mock.patch('boto3.client') def test_get_latest_streams(mock_client: mock.MagicMock) -> None: streams = {'logStreams': [{'logStreamName': 'testLogStream'}]} mock_client.return_value.describe_log_streams.return_value = streams handler = cloudwatch_log_handler.CloudwatchLogHandler() assert handler.get_latest_streams('test') == streams['logStreams'] @mock.patch('boto3.client') def test_get_latest_streams_no_lambda(mock_client: mock.MagicMock) -> None: error = get_client_error() mock_client.return_value.describe_log_streams.side_effect = error with pytest.raises(RuntimeError): handler = cloudwatch_log_handler.CloudwatchLogHandler() handler.get_latest_streams('test') @mock.patch('boto3.client') def test_get_stream_logs(mock_client: mock.MagicMock) -> None: logs = {'events': ['event1', 'event2']} mock_client.return_value.get_log_events.return_value = logs handler = cloudwatch_log_handler.CloudwatchLogHandler() assert handler.get_stream_logs('test', 'StreamName') == logs @mock.patch('boto3.client') def test_get_stream_logs_no_lambda(mock_client: mock.MagicMock) -> None: error = get_client_error() mock_client.return_value.get_log_events.side_effect = error with pytest.raises(RuntimeError): handler = cloudwatch_log_handler.CloudwatchLogHandler() handler.get_stream_logs('test', 'StreamName') @mock.patch( 'aws_testing_utils.cloudwatch_log_handler.CloudwatchLogHandler.get_latest_streams' ) @mock.patch( 'aws_testing_utils.cloudwatch_log_handler.CloudwatchLogHandler.get_stream_logs' ) def test_get_new_lambda_logs( mock_get_logs: mock.MagicMock, mock_get_streams: mock.MagicMock ) -> None: streams = [{'logStreamName': 'StreamName'}] logs = {'events': [{'message': 'messageVal'}]} mock_get_streams.return_value = streams mock_get_logs.return_value = logs handler = cloudwatch_log_handler.CloudwatchLogHandler() assert handler.get_new_lambda_logs('test') == logs @mock.patch( 'aws_testing_utils.cloudwatch_log_handler.CloudwatchLogHandler.get_new_lambda_logs' ) def test_assert_lambda_invoked(mock_get_logs: mock.MagicMock) -> None: lambda_name = 'test' mock_get_logs.return_value = {'events': 'someEvents'} handler = cloudwatch_log_handler.CloudwatchLogHandler() handler.assert_lambda_invoked(lambda_name, 1) mock_get_logs.assert_called_with(lambda_name) @mock.patch( 'aws_testing_utils.cloudwatch_log_handler.CloudwatchLogHandler.get_new_lambda_logs' ) def test_assert_lambda_invoked_no_logs(mock_get_logs: mock.MagicMock) -> None: lambda_name = 'test' mock_get_logs.return_value = {'events': ''} handler = cloudwatch_log_handler.CloudwatchLogHandler() with pytest.raises(AssertionError): handler.assert_lambda_invoked(lambda_name, 1) @mock.patch( 'aws_testing_utils.cloudwatch_log_handler.CloudwatchLogHandler.get_latest_streams' ) @mock.patch( 'aws_testing_utils.cloudwatch_log_handler.CloudwatchLogHandler.get_stream_logs' ) def test_assert_lambda_logs_message( mock_get_logs: mock.MagicMock, mock_get_streams: mock.MagicMock ) -> None: message = 'testMessage' streams = [{'logStreamName': 'StreamName'}] logs = {'events': [{'message': message}]} mock_get_streams.return_value = streams mock_get_logs.return_value = logs handler = cloudwatch_log_handler.CloudwatchLogHandler() handler.assert_lambda_logs_message('test', message) @mock.patch( 'aws_testing_utils.cloudwatch_log_handler.CloudwatchLogHandler.get_latest_streams' ) @mock.patch( 'aws_testing_utils.cloudwatch_log_handler.CloudwatchLogHandler.get_stream_logs' ) def test_assert_lambda_logs_message_error( mock_get_logs: mock.MagicMock, mock_get_streams: mock.MagicMock ) -> None: message = 'testMessage' streams = [{'logStreamName': 'StreamName'}] logs = {'events': [{'message': message}]} mock_get_streams.return_value = streams mock_get_logs.return_value = logs handler = cloudwatch_log_handler.CloudwatchLogHandler() with pytest.raises(AssertionError): handler.assert_lambda_logs_message('test', 'missingMessage', max_tries=2)