Skip to content

Commit 17c8210

Browse files
authored
Merge pull request #4 from maxhoheiser/feature/localStackIntegrationTests
2 parents 72fdf6a + c0ab7cd commit 17c8210

File tree

4 files changed

+110
-0
lines changed

4 files changed

+110
-0
lines changed

bin/deploy.sh

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
os=$(uname -s)
2+
if [ "$os" == "Linux" ]; then
3+
(
4+
cd lambdas/updateDockerHubImageStats
5+
rm -rf package lambda.zip
6+
mkdir package
7+
pip install -r requirements.txt -t package
8+
cp -r ../../src libs/src
9+
zip lambda.zip lambda_function.py
10+
cd package
11+
zip -r ../lambda.zip *;
12+
)
13+
else
14+
(
15+
cd lambdas/updateDockerHubImageStats
16+
rm -rf libs lambda.zip
17+
docker run --platform linux/x86_64 -v "$PWD":/var/task "public.ecr.aws/sam/build-python3.10" /bin/sh -c "pip install -r requirements.txt -t libs; exit"
18+
cp -r ../../src libs/src
19+
cd libs && zip -r ../lambda.zip . && cd ..
20+
zip lambda.zip lambda_function.py
21+
rm -rf libs
22+
)
23+
fi
24+
25+
awslocal dynamodb create-table \
26+
--table-name localstack \
27+
--key-schema AttributeName=user_name,KeyType=HASH AttributeName=image_name,KeyType=RANGE \
28+
--attribute-definitions AttributeName=user_name,AttributeType=S AttributeName=image_name,AttributeType=S \
29+
--billing-mode PAY_PER_REQUEST \
30+
--region ap-south-1
31+
32+
awslocal lambda create-function \
33+
--function-name update_docker_hub_image_stats \
34+
--runtime python3.10 \
35+
--timeout 10 \
36+
--zip-file fileb://lambdas/updateDockerHubImageStats/lambda.zip \
37+
--handler lambda_function.lambda_handler \
38+
--dead-letter-config TargetArn=arn:aws:sns:eu-west-1:000000000000:failed-resize-topic \
39+
--role arn:aws:iam::000000000000:role/lambda-role \
40+
--environment Variables="{STAGE=local}"
41+
42+
rm -rf lambdas/updateDockerHubImageStats/lambda.zip
43+
44+
awslocal lambda wait function-active-v2 --function-name update_docker_hub_image_stats
45+
awslocal lambda create-function-url-config \
46+
--function-name update_docker_hub_image_stats \
47+
--auth-type NONE
48+
49+
lambda_url=$(awslocal lambda list-function-url-configs --function-name update_docker_hub_image_stats | jq -r '.FunctionUrlConfigs[0].FunctionUrl')
50+
curl -v $lambda_url
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
boto3==1.29.3
2+
botocore==1.32.3
3+
certifi==2023.11.17
4+
charset-normalizer==3.3.2
5+
idna==3.4
6+
jmespath==1.0.1
7+
python-dateutil==2.8.2
8+
requests==2.31.0
9+
s3transfer==0.7.0
10+
six==1.16.0
11+
urllib3==2.0.7

tests/integration/__init__.py

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import json
2+
from datetime import datetime
3+
4+
import boto3
5+
import pytest
6+
7+
IMAGE_PULL = 100
8+
IMAGE_STAR = 50
9+
10+
input_string = "2022-01-01T00:00:00Z"
11+
datetime_object = datetime.strptime(input_string, "%Y-%m-%dT%H:%M:%SZ")
12+
DATE_TIME = datetime_object.isoformat()
13+
14+
15+
awslambda = boto3.client(
16+
"lambda", endpoint_url="http://localhost.localstack.cloud:4566"
17+
)
18+
19+
20+
@pytest.fixture(autouse=True)
21+
def _wait_for_lambdas():
22+
awslambda.get_waiter("function_active").wait(
23+
FunctionName="update_docker_hub_image_stats"
24+
)
25+
26+
27+
def test_lambda_handler():
28+
response = awslambda.invoke(
29+
FunctionName="update_docker_hub_image_stats",
30+
InvocationType="RequestResponse",
31+
Payload=json.dumps({"None": "None"}),
32+
)
33+
34+
payload = json.loads(response["Payload"].read())
35+
# need to use payload status code, since response status code is always 200
36+
statusCode = payload.get("statusCode")
37+
# body = payload.get("body")
38+
39+
assert statusCode == 200
40+
# extend this test with mock DockerHubService and get_iso_date_time_now return values
41+
# assert (
42+
# body
43+
# == f"successful update for dynamoDB table: localstack, for pull_count: {IMAGE_PULL}
44+
# and star_count: {IMAGE_STAR}, at date_time: {DATE_TIME}"
45+
# )
46+
47+
48+
if __name__ == "__main__":
49+
pytest.main()

0 commit comments

Comments
 (0)