Beispiel #1
0
    def test_wrong_format_event(self):
        logger.info("TEST: test_wrong_format_event")

        event = {'awslogs': {}}
        data_body = {'logStream': 'TestStream', 'messageType': 'DATA_MESSAGE', 'logEvents': []}

        # Adding wrong format log
        log = "{'timestamp' : '10', 'message' : 'wrong_format', 'id' : '10'}"
        data_body['logEvents'].append(log)
        data_body['owner'] = 'Test'
        data_body['subscriptionFilters'] = ['TestFilters']
        data_body['logGroup'] = 'TestlogGroup'

        zip_text_file = StringIO()
        zipper = gzip.GzipFile(mode='wb', fileobj=zip_text_file)
        zipper.write(json.dumps(data_body))
        zipper.close()
        enc_data = base64.b64encode(zip_text_file.getvalue())

        event['awslogs']['data'] = enc_data
        httpretty.register_uri(httpretty.POST, self._logzioUrl, status=200, content_type="application/json")

        class Context(object):
            function_version = 1
            invoked_function_arn = 1
            memory_limit_in_mb = 128

        with self.assertRaises(TypeError):
            worker.lambda_handler(event, Context)
        logger.info("Catched the correct exception, wrong format message")
def test_should_not_send_activity_message(monkeypatch):
    prepare_env(monkeypatch)
    monkeypatch.setenv('SEND_BULK_ACTIVITY_MESSAGE', 'FALSE')

    s3 = boto3.client('s3', region_name=_region)
    s3_key = 'test/create-users/dce.test/users.csv'
    meta = {
        'requester-exid': 'admin|exid',
        'requester-ip': '1.2.3.4',
        'requester-city': 'Minas Tirith',
        'requester-countrycode': 'Gondor'
    }
    s3.put_object(
        Bucket=_bucket,
        Key=s3_key,
        Body='email, name\[email protected],User1\[email protected],User2',
        Metadata=meta)

    # When
    lambda_function.lambda_handler(_event, {})

    # What
    sqs = boto3.client('sqs', region_name=_region)
    mes1 = sqs.receive_message(QueueUrl='CREATE_USERS_SQS_QUEUE',
                               MaxNumberOfMessages=2)
    assert len(mes1.get('Messages')) == 2

    mes2 = sqs.receive_message(QueueUrl='BULK_ACTIVITY_SQS_QUEUE',
                               MaxNumberOfMessages=2)
    assert 'Messages' not in mes2
Beispiel #3
0
    def test_retry_request(self):
        logger.info("TEST: test_retry_request")
        event = self._generate_aws_logs_event(_random_string_builder)
        httpretty.register_uri(httpretty.POST,
                               self._logzioUrl,
                               responses=[
                                   httpretty.Response(body="1st Fail",
                                                      status=500),
                                   httpretty.Response(body="2nd Fail",
                                                      status=500),
                                   httpretty.Response(body="3rd Success",
                                                      status=200)
                               ])

        class Context(object):
            function_version = 1
            invoked_function_arn = 1
            memory_limit_in_mb = 128

        try:
            worker.lambda_handler(event['enc'], Context)
        except Exception:
            assert True, "Should have succeeded on last try"

        request = httpretty.HTTPretty.last_request
        self._check_data(request, event['dec'], Context)
Beispiel #4
0
    def test_wrong_compression_format(self):
        event_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        curr_month, prev_month = utils.get_months_range()
        key = "{0}/{1}/12345678-1234-1234-1234-123456789123/{2}".format(
            os.environ['REPORT_PATH'], curr_month, os.environ['REPORT_NAME'])
        manifest_content = {"reportKeys": ["{}-1.csv.zip".format(key)]}
        utils.put_object(
            s3client, os.environ['S3_BUCKET_NAME'],
            "{0}/{1}/{2}-Manifest.json".format(os.environ['REPORT_PATH'],
                                               curr_month,
                                               os.environ['REPORT_NAME']),
            json.dumps(manifest_content))
        s3res = boto3.resource('s3')
        utils.upload_gzipped(s3res, os.environ['S3_BUCKET_NAME'],
                             manifest_content["reportKeys"][0],
                             SAMPLE_CSV_ZIP_1)

        event = {
            "detail-type": "Scheduled Event",
            "source": "aws.events",
            "time": event_time
        }
        # TODO - catch exact string in the error
        try:
            worker.lambda_handler(event, {})
        except zlib_error:
            return
        assert True, "wrong compression - {}".format(zlib_error)
Beispiel #5
0
    def test_bad_url(self):
        logger.info("TEST: test_retry_request")
        event = self._generate_aws_logs_event(_random_string_builder)
        httpretty.register_uri(httpretty.POST, self._logzioUrl, status=404)

        class Context(object):
            function_version = 1
            invoked_function_arn = 1
            memory_limit_in_mb = 128

        with self.assertRaises(UnknownURL):
            worker.lambda_handler(event['enc'], Context)
def test_should_get_file_from_s3(monkeypatch):
    prepare_env(monkeypatch)
    s3 = boto3.client('s3', region_name=_region)
    s3_key = 'test/create-users/dce.test/users.csv'
    meta = {
        'requester-exid': 'admin|exid',
        'requester-ip': '1.2.3.4',
        'requester-city': 'Minas Tirith',
        'requester-countrycode': 'Gondor'
    }
    s3.put_object(
        Bucket=_bucket,
        Key=s3_key,
        Body='email, name\[email protected],User1\[email protected],User2',
        Metadata=meta)

    # When
    lambda_function.lambda_handler(_event, {})

    # What
    sqs = boto3.client('sqs', region_name=_region)
    mes1 = sqs.receive_message(QueueUrl='CREATE_USERS_SQS_QUEUE',
                               MaxNumberOfMessages=2)
    payload = mes1.get('Messages')[0].get('Body')
    assert payload == '{"payload": {"requester": {"exid": "admin|exid", "ip": "1.2.3.4", "city": "Minas Tirith", ' \
                      '"countrycode": "Gondor"}, ' \
                      '"realm": "dce.test", "taskId": "1325419200000-users.csv", "user": {"email": ' \
                      '"*****@*****.**", "name": "User1"}}, "headers": {}, "properties": {}}'
    payload = mes1.get('Messages')[1].get('Body')
    assert payload == '{"payload": {"requester": {"exid": "admin|exid", "ip": "1.2.3.4", "city": "Minas Tirith", ' \
                      '"countrycode": "Gondor"}, ' \
                      '"realm": "dce.test", "taskId": "1325419200000-users.csv", "user": {"email": ' \
                      '"*****@*****.**", "name": "User2"}}, "headers": {}, "properties": {}}'

    mes1 = sqs.receive_message(QueueUrl='BULK_ACTIVITY_SQS_QUEUE',
                               MaxNumberOfMessages=2)
    payload = mes1.get('Messages')[0].get('Body')
    assert payload == '{"payload": {"requester": {"exid": "admin|exid", "ip": "1.2.3.4", "city": "Minas Tirith", ' \
                      '"countrycode": "Gondor"}, ' \
                      '"realm": "dce.test", "taskId": "1325419200000-users.csv", "taskType": ' \
                      '"CREATE_USER", "task": {"fileName": "users.csv", "uploadedTime": "2012-01-01T12:00:00.000000Z", ' \
                      '"expected": 0}}, "headers": {}, "properties": {}}'

    payload = mes1.get('Messages')[1].get('Body')
    assert payload == '{"payload": {"requester": {"exid": "admin|exid", "ip": "1.2.3.4", "city": "Minas Tirith", ' \
                      '"countrycode": "Gondor"}, ' \
                      '"realm": "dce.test", "taskId": "1325419200000-users.csv", "taskType": ' \
                      '"CREATE_USER", "task": {"fileName": "users.csv", "uploadedTime": "2012-01-01T12:00:00.000000Z", ' \
                      '"expected": 2}}, "headers": {}, "properties": {}}'

    # File been deleted from s3
    s3_obj = s3.list_objects(Bucket=_bucket)
    assert 'Contents' not in s3_obj
def test_should_fails_if_no_requester_meta(monkeypatch):
    prepare_env(monkeypatch)
    s3 = boto3.client('s3', region_name=_region)
    s3_key = 'test/create-users/dce.test/users.csv'
    meta = {}
    s3.put_object(
        Bucket=_bucket,
        Key=s3_key,
        Body='email, name\[email protected],User1\[email protected],User2',
        Metadata=meta)
    # When
    with pytest.raises(AttributeError):
        lambda_function.lambda_handler(_event, {})
def test_lambda_handler_handles_general_exceptions(mock_get_random_text,
                                                   mock_get_table_resource):
    mock_get_random_text.side_effect = AttributeError
    assert lambda_handler(None, None) == {
        'functionError': 'Service failed unexpectedly',
        'statusCode': 500
    }
Beispiel #9
0
    def test_lambda_handler(self):
        """Test test_lambda_handler(self)."""
        eq_(None, l.lambda_handler(self.event, self.context))

        l.LOGS_CLIENT.describe_log_groups.side_effect = Exception("test")
        eq_(None, l.lambda_handler(self.event, self.context))

        l.LOGS_CLIENT.describe_log_groups.side_effect = l.ClientError(
            {
                'Error': {
                    'Code': 404,
                    'Message': 'NotFound',
                },
            },
            'NotoFound',
        )
        eq_(None, l.lambda_handler(self.event, self.context))
def test_lambda_handler_handles_lambda_exception(mock_get_random_text,
                                                 mock_get_table_resource):
    mock_get_random_text.side_effect = LambdaException('asdf', 404)

    assert lambda_handler(None, None) == {
        'functionError': 'asdf',
        'statusCode': 404
    }
Beispiel #11
0
def test_lambda_handler(apigw_event, mocker):

    ret = lambda_function.lambda_handler(apigw_event, "")
    data = json.loads(ret["body"])

    assert ret["statusCode"] == 200
    assert "message" in ret["body"]
    assert data["message"] == "hello world"
 def test_can_return_message(self):
     event = {"message": "This is a test message"}
     assert lambda_handler(event, None) == {
         "return_message": "This is a test message",
         "config": {
             "foo": "bar"
         },
     }
Beispiel #13
0
    def test_ok_request(self):
        logger.info("TEST: test_ok_request")
        event = self._generate_aws_logs_event(_random_string_builder)
        httpretty.register_uri(httpretty.POST, self._logzioUrl, body="first", status=200,
                               content_type="application/json")

        class Context(object):
            function_version = 1
            invoked_function_arn = 1
            memory_limit_in_mb = 128

        try:
            worker.lambda_handler(event['enc'], Context)
        except Exception:
            self.fail("Failed on handling a legit event. Expected status_code = 200")

        request = httpretty.HTTPretty.last_request
        self._check_data(request, event['dec'], Context)
Beispiel #14
0
def test_lambda_handler(apigw_event):
    """
    test the expected output for a given event
    """

    ret = lambda_function.lambda_handler(apigw_event, "")
    data = json.loads(ret["body"])

    assert ret["statusCode"] == 200
    assert "message" in ret["body"]
    assert data["message"] == "hello world"
Beispiel #15
0
    def test_bad_request(self):
        logger.info("TEST: test_bad_request")
        event = self._generate_aws_logs_event(_random_string_builder)
        httpretty.register_uri(httpretty.POST, self._logzioUrl, responses=[
                                httpretty.Response(body="first", status=400),
                                httpretty.Response(body="second", status=401),
                            ])

        class Context(object):
            function_version = 1
            invoked_function_arn = 1
            memory_limit_in_mb = 128

        with self.assertRaises(BadLogsException):
            worker.lambda_handler(event['enc'], Context)
        logger.info("Catched the correct exception. Status code = 400")

        with self.assertRaises(UnauthorizedAccessException):
            worker.lambda_handler(event['enc'], Context)
        logger.info("Catched the correct exception. Status code = 401")
Beispiel #16
0
    def test_no_report(self):
        event_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
        curr_month, prev_month = utils.get_months_range()
        key = "{0}/{1}/12345678-1234-1234-1234-123456789123/{2}".format(
            os.environ['REPORT_PATH'], curr_month, os.environ['REPORT_NAME'])
        manifest_content = {"reportKeys": ["{}-1.csv.gz".format(key)]}
        utils.put_object(
            s3client, os.environ['S3_BUCKET_NAME'],
            "{0}/{1}/{2}-Manifest.json".format(os.environ['REPORT_PATH'],
                                               curr_month,
                                               os.environ['REPORT_NAME']),
            json.dumps(manifest_content))

        event = {
            "detail-type": "Scheduled Event",
            "source": "aws.events",
            "time": event_time
        }
        with self.assertRaises(s3client.exceptions.NoSuchKey):
            worker.lambda_handler(event, {})
Beispiel #17
0
    def test_large_body(self):
        logger.info("TEST: test_large_body")
        body_size = 2000
        event = self._generate_aws_logs_event(_random_string_builder, body_size)
        httpretty.register_uri(httpretty.POST, self._logzioUrl, body="first", status=200,
                               content_type="application/json")

        class Context(object):
            function_version = 1
            invoked_function_arn = 1
            memory_limit_in_mb = 128

        try:
            worker.lambda_handler(event['enc'], Context)
        except Exception:
            self.fail("Failed on handling a legit event. Expected status_code = 200")

        request = httpretty.HTTPretty.last_request
        last_bulk_length = len(request.body.splitlines())
        assert last_bulk_length <= 2000, "Logs were not fragmented"
Beispiel #18
0
    def test_lambda_cancel_response(self):
        mock_intent = {
                    "name": "AMAZON_CancelIntent",
                    "slots": {}
                }
        mock_event = self.get_mock_event(intent=mock_intent)

        result = lambda_handler(mock_event)
        self.assertTrue(result)
        response = result.get("response")

        self.assertTrue(response.get("shouldEndSession", False), "The session did not end.")
Beispiel #19
0
    def test_lambda_gets_berry(self):
        mock_intent = {
            "name": "GetMember",
        }
        mock_event = self.get_mock_event(intent=mock_intent)

        result = lambda_handler(mock_event, {})
        self.assertTrue(result)
        response = result.get("response")
        attributes = result.get("sessionAttributes")

        self.assertFalse(response.get("shouldEndSession", True),
                         "The session ended.")
        self.assertFalse(attributes, "Attributes found")
Beispiel #20
0
    def test_gzip_typo_request(self):
        logger.info("TEST: test_ok_gzip_request")
        os.environ['COMPRESS'] = 'fakecompress'
        event = self._generate_aws_logs_event(_random_string_builder)
        httpretty.register_uri(httpretty.POST, self._logzioUrl, body="first", status=200,
                               content_type="application/json")

        class Context(object):
            function_version = 1
            invoked_function_arn = 1
            memory_limit_in_mb = 128

        try:
            worker.lambda_handler(event['enc'], Context)
        except Exception:
            assert "Failed on handling a legit event. Expected status_code = 200"

        request = httpretty.HTTPretty.last_request
        try:
            gzip_header = request.headers["Content-Encoding"]
            self.fail("Failed to send uncompressed logs with typo in compress env filed")
        except KeyError:
            pass
Beispiel #21
0
    def test_lambda_gets_context_attributes(self):
        mock_intent = {
            "name": "AMAZON_HelpIntent",
        }
        mock_event = self.get_mock_event(intent=mock_intent)

        result = lambda_handler(mock_event, {})
        self.assertTrue(result)

        response = result.get("response")
        attributes = result.get("sessionAttributes")
        context = attributes.get('context')

        self.assertFalse(response.get("shouldEndSession", True), "The session ended.")
        self.assertFalse(context, "Context found")
def test_lambda_handler_happy_path(mock_get_random_text,
                                   mock_get_table_resource):
    mock_get_random_text.return_value = {
        'firstLine': line_1,
        'secondLine': line_2
    }

    assert lambda_handler(None, None) == {
        'isBase64Encoded': False,
        'statusCode': 200,
        'headers': {
            'Access-Control-Allow-Origin': '*'
        },
        'body': dumps({
            'firstLine': line_1,
            'secondLine': line_2
        })
    }
Beispiel #23
0
def main():
    tests_passed = True
    testpath = 'tests'
    testfiles = [join(testpath, f)
                 for f in listdir(testpath) if isfile(join(testpath, f))]
    for test in testfiles:
        if test.endswith('.md'):
            continue
        print("Testing:", test)
        try:
            request_obj = json.load(open(test))
            response = lambda_handler(request_obj)
            if verbose:
                print(json.dumps(request_obj, indent=4))
            print("OK")
        except Exception as e:
            print("Fail because of", e)
            tests_passed=False
    if not tests_passed:
        raise Exception("Tests did not pass")
Beispiel #24
0
    def test_lambda_sets_berry(self):
        mock_intent = {
            "name": "SetMember",
            "slots": {
                "berry": {
                    "name": "berry",
                    "value": "star wars"
                }
            }
        }
        mock_event = self.get_mock_event(intent=mock_intent)

        result = lambda_handler(mock_event, {})
        self.assertTrue(result)
        response = result.get("response")
        attributes = result.get("sessionAttributes")

        self.assertFalse(response.get("shouldEndSession", True),
                         "The session ended.")
        self.assertEqual(attributes.get("berry", ""), "star wars",
                         "I don't memeber")
Beispiel #25
0
def test_diagnostic(mocker):
    response = lambda_function.lambda_handler(event("US", "/diagnostic"), "")
    assert response['status'] == '200'
Beispiel #26
0
def test_lambda_handler():
    assert lambda_handler({}, None) == 'OK'
Beispiel #27
0
import dotenv
from src.lambda_function import lambda_handler

### runs the bot locally ###
dotenv.load_dotenv()
if __name__ == "__main__":
    lambda_handler(event=None, context=None)
"""
Local tester class to test lambda function.
"""
from src import lambda_function

EVENT = {'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}


class TestLambdaContext():
    """
    Dummy lambda context class for local testing.
    """
    function_name = 'lambda-structured-logging'
    function_version = 'LATEST'
    invoked_function_arn = 'arn:aws:lambda:us-east-1:1234567890:lambda-structured-logging'
    aws_request_id = '022660DA-7F3E-4559-A551-B5E96A6D5E93'
    log_group_name = '/aws/lambda/lambda-structured-logging'
    log_stream_name = '2020/01/20/[$LATEST]/A551B5E96A6D5E93'


if __name__ == '__main__':
    lambda_function.lambda_handler(EVENT, TestLambdaContext)
Beispiel #29
0
    def test_lambda_launch_request(self):
        mock_event = self.launch_request()

        result = lambda_handler(mock_event, {})
        self.assertTrue(result)
Beispiel #30
0
import os
from src import lambda_function

event = {
  'title': "Test Issue",
  'page_url': "/example.html",
  'message': "Test Message",
  'name': "Joe Bloggs"
}

lambda_function.lambda_handler(event, {})
Beispiel #31
0
 def test_lambda_handler(self, report_mock, invocation_mock):
     response = module.lambda_handler(MagicMock(), MagicMock())
     self.assertEqual("byeworld", response)
     self.assertEqual(1, invocation_mock.call_count)