33# #
44# # This source file is part of the SwiftAWSLambdaRuntime open source project
55# #
6- # # Copyright (c) 2017-2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors
6+ # # Copyright (c) 2017-2025 Apple Inc. and the SwiftAWSLambdaRuntime project authors
77# # Licensed under Apache License v2.0
88# #
99# # See LICENSE.txt for license information
1313# #
1414# #===----------------------------------------------------------------------===##
1515
16- set -eu
16+ # set -eu
17+ # set -euo pipefail
18+
19+ log () { printf -- " ** %s\n" " $* " >&2 ; }
20+ error () { printf -- " ** ERROR: %s\n" " $* " >&2 ; }
21+ fatal () { error " $@ " ; exit 1; }
1722
1823export HOST=127.0.0.1
19- export PORT=3000
24+ export PORT=7000
2025export AWS_LAMBDA_RUNTIME_API=" $HOST :$PORT "
21- export LOG_LEVEL=warning # important, otherwise log becomes a bottleneck
26+ export LOG_LEVEL=error # important, otherwise log becomes a bottleneck
27+
28+ DATE_CMD=" date"
29+ # using gdate on darwin for nanoseconds
30+ if [[ $( uname -s) == " Darwin" ]]; then
31+ # DATE_CMD="gdate"
32+ DATE_CMD=" date" # temp for testing
33+ fi
34+ echo " ⏱️ using $DATE_CMD to count time"
2235
23- # using gdate on mdarwin for nanoseconds
24- if [[ $( uname -s) == " Linux" ]]; then
25- shopt -s expand_aliases
26- alias gdate=" date"
36+ if ! command -v " $DATE_CMD " & > /dev/null; then
37+ fatal " $DATE_CMD could not be found. Please install $DATE_CMD to proceed."
2738fi
2839
40+ echo " 🏗️ Building library and test functions"
2941swift build -c release -Xswiftc -g
3042LAMBDA_USE_LOCAL_DEPS=../.. swift build --package-path Examples/HelloWorld -c release -Xswiftc -g
3143LAMBDA_USE_LOCAL_DEPS=../.. swift build --package-path Examples/HelloJSON -c release -Xswiftc -g
3244
3345cleanup () {
34- kill -9 $server_pid # ignore-unacceptable-language
46+ pkill -9 MockServer && echo " killed previous mock server " # ignore-unacceptable-language
3547}
3648
37- trap " cleanup" ERR
49+ # start a mock server
50+ start_mockserver () {
51+ # TODO: check if we have two parameters
52+ MODE=$1
53+ INVOCATIONS=$2
54+ pkill -9 MockServer && echo " killed previous mock server" && sleep 1 # ignore-unacceptable-language
55+ echo " 👨🔧 starting server in $MODE mode for $INVOCATIONS invocations"
56+ (MAX_INVOCATIONS=" $INVOCATIONS " MODE=" $MODE " ./.build/release/MockServer) &
57+ server_pid=$!
58+ sleep 1
59+ kill -0 $server_pid # check server is alive # ignore-unacceptable-language
60+ }
3861
39- cold_iterations=1000
40- warm_iterations=10000
62+ cold_iterations=100
63+ warm_iterations=1000
4164results=()
4265
4366# ------------------
4467# string
4568# ------------------
4669
47- export MODE=string
70+ MODE=string
4871
49- # start (fork) mock server
50- pkill -9 MockServer && echo " killed previous servers" && sleep 1 # ignore-unacceptable-language
51- echo " starting server in $MODE mode"
52- (./.build/release/MockServer) &
53- server_pid=$!
54- sleep 1
55- kill -0 $server_pid # check server is alive # ignore-unacceptable-language
72+ # Start mock server
73+ start_mockserver $MODE $cold_iterations
5674
5775# cold start
58- echo " running $MODE mode cold test"
76+ echo " 🚀❄️ running $MODE mode $cold_iterations cold test"
5977cold=()
60- export MAX_REQUESTS=1
6178for (( i= 0 ; i< cold_iterations; i++ )) ; do
62- start=$( gdate +%s%N)
79+ start=$( " $DATE_CMD " +%s%N)
6380 ./Examples/HelloWorld/.build/release/MyLambda
64- end=$( gdate +%s%N)
81+ end=$( " $DATE_CMD " +%s%N)
6582 cold+=( $(( end- start)) )
6683done
6784sum_cold=$( IFS=+; echo " $(( ${cold[*]} )) " )
6885avg_cold=$(( sum_cold/ cold_iterations))
6986results+=( " $MODE , cold: $avg_cold (ns)" )
7087
88+ # reset mock server
89+ start_mockserver $MODE $warm_iterations
90+
7191# normal calls
72- echo " running $MODE mode warm test"
73- export MAX_REQUESTS=$warm_iterations
74- start=$( gdate +%s%N)
92+ echo " 🚀🌤️ running $MODE mode warm test"
93+ start=$( " $DATE_CMD " +%s%N)
7594./Examples/HelloWorld/.build/release/MyLambda
76- end=$( gdate +%s%N)
95+ end=$( " $DATE_CMD " +%s%N)
7796sum_warm=$(( end- start- avg_cold)) # substract by avg cold since the first call is cold
7897avg_warm=$(( sum_warm/ (warm_iterations- 1 )) ) # substract since the first call is cold
7998results+=( " $MODE , warm: $avg_warm (ns)" )
@@ -84,34 +103,30 @@ results+=( "$MODE, warm: $avg_warm (ns)" )
84103
85104export MODE=json
86105
87- # start (fork) mock server
88- pkill -9 MockServer && echo " killed previous servers" && sleep 1 # ignore-unacceptable-language
89- echo " starting server in $MODE mode"
90- (./.build/release/MockServer) &
91- server_pid=$!
92- sleep 1
93- kill -0 $server_pid # check server is alive # ignore-unacceptable-language
106+ # Start mock server
107+ start_mockserver $MODE $cold_iterations
94108
95109# cold start
96- echo " running $MODE mode cold test"
110+ echo " 🚀❄️ running $MODE mode cold test"
97111cold=()
98- export MAX_REQUESTS=1
99112for (( i= 0 ; i< cold_iterations; i++ )) ; do
100- start=$( gdate +%s%N)
101- ./Examples/HelloJSON/.build/release/MyLambda
102- end=$( gdate +%s%N)
113+ start=$( " $DATE_CMD " +%s%N)
114+ ./Examples/HelloJSON/.build/release/HelloJSON
115+ end=$( " $DATE_CMD " +%s%N)
103116 cold+=( $(( end- start)) )
104117done
105118sum_cold=$( IFS=+; echo " $(( ${cold[*]} )) " )
106119avg_cold=$(( sum_cold/ cold_iterations))
107120results+=( " $MODE , cold: $avg_cold (ns)" )
108121
122+ # reset mock server
123+ start_mockserver $MODE $warm_iterations
124+
109125# normal calls
110- echo " running $MODE mode warm test"
111- export MAX_REQUESTS=$warm_iterations
112- start=$( gdate +%s%N)
113- ./Examples/HelloJSON/.build/release/MyLambda
114- end=$( gdate +%s%N)
126+ echo " 🚀🌤️ running $MODE mode warm test"
127+ start=$( " $DATE_CMD " +%s%N)
128+ ./Examples/HelloJSON/.build/release/HelloJSON
129+ end=$( " $DATE_CMD " +%s%N)
115130sum_warm=$(( end- start- avg_cold)) # substract by avg cold since the first call is cold
116131avg_warm=$(( sum_warm/ (warm_iterations- 1 )) ) # substract since the first call is cold
117132results+=( " $MODE , warm: $avg_warm (ns)" )
0 commit comments