예제 #1
0
def test_invoke_function_from_sqs_exception():
    logs_conn = boto3.client("logs", region_name="us-east-1")
    sqs = boto3.resource("sqs", region_name="us-east-1")
    queue = sqs.create_queue(QueueName="test-sqs-queue1")

    conn = boto3.client("lambda", region_name="us-east-1")
    func = conn.create_function(
        FunctionName="testFunction",
        Runtime="python2.7",
        Role=get_role_name(),
        Handler="lambda_function.lambda_handler",
        Code={"ZipFile": get_test_zip_file1()},
        Description="test lambda function",
        Timeout=3,
        MemorySize=128,
        Publish=True,
    )

    response = conn.create_event_source_mapping(
        EventSourceArn=queue.attributes["QueueArn"],
        FunctionName=func["FunctionArn"])

    assert response["EventSourceArn"] == queue.attributes["QueueArn"]
    assert response["State"] == "Enabled"

    entries = [{
        "Id":
        "1",
        "MessageBody":
        json.dumps({
            "uuid": str(uuid.uuid4()),
            "test": "test"
        }),
    }]

    queue.send_messages(Entries=entries)

    start = time.time()
    while (time.time() - start) < 30:
        result = logs_conn.describe_log_streams(
            logGroupName="/aws/lambda/testFunction")
        log_streams = result.get("logStreams")
        if not log_streams:
            time.sleep(1)
            continue
        assert len(log_streams) >= 1

        result = logs_conn.get_log_events(
            logGroupName="/aws/lambda/testFunction",
            logStreamName=log_streams[0]["logStreamName"],
        )
        for event in result.get("events"):
            if "custom log event" in event["message"]:
                return
        time.sleep(1)

    assert False, "Test Failed"
예제 #2
0
    def test_rotate_secret_lambda_invocations():
        conn = boto3.client("iam", region_name="us-east-1")
        logs_conn = boto3.client("logs", region_name="us-east-1")
        role = conn.create_role(
            RoleName="role",
            AssumeRolePolicyDocument="some policy",
            Path="/my-path/",
        )

        conn = boto3.client("lambda", region_name="us-east-1")
        func = conn.create_function(
            FunctionName="testFunction",
            Code=dict(ZipFile=get_test_zip_file1()),
            Handler="lambda_function.lambda_handler",
            Runtime="python2.7",
            Role=role["Role"]["Arn"],
        )

        secretsmanager_backend = server.create_backend_app("secretsmanager")
        secretsmanager_client = secretsmanager_backend.test_client()

        secretsmanager_client.post(
            "/",
            data={
                "Name": DEFAULT_SECRET_NAME,
                "SecretString": "foosecret"
            },
            headers={"X-Amz-Target": "secretsmanager.CreateSecret"},
        )

        with pytest.raises(logs_conn.exceptions.ResourceNotFoundException):
            # The log group doesn't exist yet
            logs_conn.describe_log_streams(
                logGroupName="/aws/lambda/testFunction")

        secretsmanager_client.post(
            "/",
            data={
                "SecretId": DEFAULT_SECRET_NAME,
                "RotationLambdaARN": func["FunctionArn"],
            },
            headers={"X-Amz-Target": "secretsmanager.RotateSecret"},
        )

        # The log group now exists and has been logged to 4 times (for each invocation)
        logs = logs_conn.describe_log_streams(
            logGroupName="/aws/lambda/testFunction")
        assert len(logs["logStreams"]) == 4