Skip to content
This repository was archived by the owner on Mar 19, 2024. It is now read-only.

Commit 0293f63

Browse files
Merge pull request #30 from Andrea-Scuderi/feature/lambdaci-test
Test Lambda with LambCI and LocalStack
2 parents d7a4578 + b163bc5 commit 0293f63

File tree

17 files changed

+282
-22
lines changed

17 files changed

+282
-22
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
.DS_Store
22
/.build
3+
.tmp
34
/Packages
45
/*.xcodeproj
56
lambda.zip

.travis.yml

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,23 @@ dist: xenial
77
services:
88
- docker
99

10+
env:
11+
global:
12+
- AWS_REGION=us-east-1
13+
- AWS_ACCESS_KEY_ID=AKFAKEACCESSKEYID
14+
- AWS_DEFAULT_REGION=us-east-1
15+
- AWS_SECRET_ACCESS_KEY=AKFAKESECRETACCESSKEY
16+
- AWS_PROFILE=default
17+
1018
addons:
1119
snaps:
1220
- name: aws-cli
1321
confinement: classic # or devmode
1422
channel: latest/edge
1523

24+
before_install:
25+
- ./scripts/aws_travis_credentials.sh
26+
1627
install:
1728
- make --version
1829
- make docker_build
@@ -23,4 +34,19 @@ script:
2334
- make package_lambda
2435
- make swift_test
2536
- make swift_test SWIFT_EXECUTABLE=HTTPSRequest SWIFT_PROJECT_PATH=Examples/HTTPSRequest LAMBDA_FUNCTION_NAME=HTTPSRequest LAMBDA_HANDLER=HTTPSRequest.getHttps
26-
- make swift_test SWIFT_EXECUTABLE=S3Test SWIFT_PROJECT_PATH=Examples/S3Test LAMBDA_FUNCTION_NAME=S3Test LAMBDA_HANDLER=S3Test.getObject
37+
- make swift_test SWIFT_EXECUTABLE=S3Test SWIFT_PROJECT_PATH=Examples/S3Test LAMBDA_FUNCTION_NAME=S3Test LAMBDA_HANDLER=S3Test.getObject
38+
- make build_lambda_local
39+
- make start_docker_compose_env
40+
- make invoke_lambda_local
41+
- make stop_docker_compose_env
42+
- make test_lambda_local_output
43+
- make build_lambda_local SWIFT_EXECUTABLE=HTTPSRequest SWIFT_PROJECT_PATH=Examples/HTTPSRequest LAMBDA_FUNCTION_NAME=HTTPSRequest LAMBDA_HANDLER=HTTPSRequest.getHttps
44+
- make start_docker_compose_env SWIFT_EXECUTABLE=HTTPSRequest SWIFT_PROJECT_PATH=Examples/HTTPSRequest LAMBDA_FUNCTION_NAME=HTTPSRequest LAMBDA_HANDLER=HTTPSRequest.getHttps
45+
- make invoke_lambda_local SWIFT_EXECUTABLE=HTTPSRequest SWIFT_PROJECT_PATH=Examples/HTTPSRequest LAMBDA_FUNCTION_NAME=HTTPSRequest LAMBDA_HANDLER=HTTPSRequest.getHttps
46+
- make stop_docker_compose_env SWIFT_EXECUTABLE=HTTPSRequest SWIFT_PROJECT_PATH=Examples/HTTPSRequest LAMBDA_FUNCTION_NAME=HTTPSRequest LAMBDA_HANDLER=HTTPSRequest.getHttps
47+
- make test_lambda_local_output SWIFT_EXECUTABLE=HTTPSRequest SWIFT_PROJECT_PATH=Examples/HTTPSRequest LAMBDA_FUNCTION_NAME=HTTPSRequest LAMBDA_HANDLER=HTTPSRequest.getHttps
48+
- make build_lambda_local SWIFT_EXECUTABLE=S3Test SWIFT_PROJECT_PATH=Examples/S3Test LAMBDA_FUNCTION_NAME=S3Test LAMBDA_HANDLER=S3Test.getObject
49+
- make start_docker_compose_env SWIFT_EXECUTABLE=S3Test SWIFT_PROJECT_PATH=Examples/S3Test LAMBDA_FUNCTION_NAME=S3Test LAMBDA_HANDLER=S3Test.getObject
50+
- make invoke_lambda_local SWIFT_EXECUTABLE=S3Test SWIFT_PROJECT_PATH=Examples/S3Test LAMBDA_FUNCTION_NAME=S3Test LAMBDA_HANDLER=S3Test.getObject
51+
- make stop_docker_compose_env SWIFT_EXECUTABLE=S3Test SWIFT_PROJECT_PATH=Examples/S3Test LAMBDA_FUNCTION_NAME=S3Test LAMBDA_HANDLER=S3Test.getObject
52+
- make test_lambda_local_output SWIFT_EXECUTABLE=S3Test SWIFT_PROJECT_PATH=Examples/S3Test LAMBDA_FUNCTION_NAME=S3Test LAMBDA_HANDLER=S3Test.getObject

Examples/HTTPSRequest/Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Note: This must be launched from the root path
2+
SWIFT_PROJECT_PATH=Examples/HTTPSRequest
3+
4+
start_docker_compose_env:
5+
cd $(SWIFT_PROJECT_PATH); docker-compose up -d ; sleep 2
6+
7+
stop_docker_compose_env:
8+
cd $(SWIFT_PROJECT_PATH); docker-compose stop

Examples/HTTPSRequest/Sources/HTTPSRequest/main.swift

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ struct Event: Codable {
2828
}
2929

3030
struct Response: Codable {
31-
let url: String
3231
let content: String
3332
}
3433

@@ -59,7 +58,7 @@ let syncCodableNIOLambda: SyncCodableNIOLambda<Event, Response> = { (event, cont
5958
}
6059
return value
6160
}.map { content -> Response in
62-
return Response(url: event.url, content: content)
61+
return Response(content: content)
6362
}
6463
return future
6564
}
@@ -92,8 +91,7 @@ let syncDictionaryNIOLambda: SyncDictionaryNIOLambda = { (event, context) throws
9291
}
9392
return value
9493
}.map { content -> [String: Any] in
95-
return ["url": url,
96-
"content": content]
94+
return ["content": content]
9795
}
9896
return future
9997
}
@@ -126,8 +124,7 @@ let asynchDictionayNIOLambda: AsyncDictionaryNIOLambda = { (event, context, comp
126124
}
127125
return value
128126
}.map { content -> [String: Any] in
129-
return ["url": url,
130-
"content": content]
127+
return ["content": content]
131128
}
132129
.wait()
133130
completion(.success(dictionary))
@@ -160,7 +157,7 @@ let asyncCodableNIOLambda: AsyncCodableNIOLambda<Event, Response> = { (event, co
160157
}
161158
return value
162159
}.map { content -> Response in
163-
return Response(url: event.url, content: content)
160+
return Response(content: content)
164161
}
165162
.wait()
166163
completion(.success(reponse))
@@ -198,7 +195,7 @@ let lambda: SyncCodableLambda<Event, Response> = { (input, context) throws -> Re
198195
}
199196
let content = String(data: data, encoding: .utf8) ?? ""
200197

201-
return Response(url: input.url, content: content)
198+
return Response(content: content)
202199
}
203200

204201

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
version: '3'
2+
services:
3+
lambci:
4+
image: "lambci/lambda:provided"
5+
volumes:
6+
- ../../.build/local:/var/task:ro,delegated
7+
- ../../bootstrap:/opt/bootstrap:ro,delegated
8+
- ../../swift-shared-libs:/opt/swift-shared-libs:ro,delegated
9+
environment:
10+
- DOCKER_LAMBDA_STAY_OPEN=1
11+
- AWS_LAMBDA_FUNCTION_TIMEOUT=3
12+
- LAMB_CI_EXEC=1
13+
command:
14+
- HTTPSRequest.getHttps
15+
ports:
16+
- "9001:9001"

Examples/HTTPSRequest/event.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
"url": "https://swift.org"
2+
"url": "https://www.example.com"
33
}

Examples/HTTPSRequest/outfile.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"content":"<!doctype html>\n<html>\n<head>\n <title>Example Domain<\/title>\n\n <meta charset=\"utf-8\" \/>\n <meta http-equiv=\"Content-type\" content=\"text\/html; charset=utf-8\" \/>\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" \/>\n <style type=\"text\/css\">\n body {\n background-color: #f0f0f2;\n margin: 0;\n padding: 0;\n font-family: -apple-system, system-ui, BlinkMacSystemFont, \"Segoe UI\", \"Open Sans\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n \n }\n div {\n width: 600px;\n margin: 5em auto;\n padding: 2em;\n background-color: #fdfdff;\n border-radius: 0.5em;\n box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);\n }\n a:link, a:visited {\n color: #38488f;\n text-decoration: none;\n }\n @media (max-width: 700px) {\n div {\n margin: 0 auto;\n width: auto;\n }\n }\n <\/style> \n<\/head>\n\n<body>\n<div>\n <h1>Example Domain<\/h1>\n <p>This domain is for use in illustrative examples in documents. You may use this\n domain in literature without prior coordination or asking for permission.<\/p>\n <p><a href=\"https:\/\/www.iana.org\/domains\/example\">More information...<\/a><\/p>\n<\/div>\n<\/body>\n<\/html>\n"}

Examples/HelloWorld/Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Note: This must be launched from the root path
2+
SWIFT_PROJECT_PATH=Examples/HelloWorld
3+
4+
start_docker_compose_env:
5+
cd $(SWIFT_PROJECT_PATH); docker-compose up -d ; sleep 2
6+
7+
stop_docker_compose_env:
8+
cd $(SWIFT_PROJECT_PATH); docker-compose stop
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
version: '3'
2+
services:
3+
lambci:
4+
image: "lambci/lambda:provided"
5+
volumes:
6+
- ../../.build/local:/var/task:ro,delegated
7+
- ../../bootstrap:/opt/bootstrap:ro,delegated
8+
- ../../swift-shared-libs:/opt/swift-shared-libs:ro,delegated
9+
environment:
10+
- DOCKER_LAMBDA_STAY_OPEN=1
11+
- AWS_LAMBDA_FUNCTION_TIMEOUT=3
12+
- LAMB_CI_EXEC=1
13+
command:
14+
- HelloWorld.helloWorld
15+
ports:
16+
- "9001:9001"

Examples/HelloWorld/outfile.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{"message":"Hello World! Hello Swift-Sprinter!"}

0 commit comments

Comments
 (0)