3
3
# #
4
4
# # This source file is part of the SwiftAWSLambdaRuntime open source project
5
5
# #
6
- # # Copyright (c) 2017-2022 Apple Inc. and the SwiftAWSLambdaRuntime project authors
6
+ # # Copyright (c) 2017-2025 Apple Inc. and the SwiftAWSLambdaRuntime project authors
7
7
# # Licensed under Apache License v2.0
8
8
# #
9
9
# # See LICENSE.txt for license information
13
13
# #
14
14
# #===----------------------------------------------------------------------===##
15
15
16
- set -eu
16
+ log () { printf -- " ** %s\n" " $* " >&2 ; }
17
+ error () { printf -- " ** ERROR: %s\n" " $* " >&2 ; }
18
+ fatal () { error " $@ " ; exit 1; }
17
19
18
20
export HOST=127.0.0.1
19
- export PORT=3000
21
+ export PORT=7000
20
22
export AWS_LAMBDA_RUNTIME_API=" $HOST :$PORT "
21
- export LOG_LEVEL=warning # important, otherwise log becomes a bottleneck
23
+ export LOG_LEVEL=error # important, otherwise log becomes a bottleneck
24
+
25
+ DATE_CMD=" date"
26
+ # using gdate on darwin for nanoseconds
27
+ # gdate is installed by coreutils on macOS
28
+ if [[ $( uname -s) == " Darwin" ]]; then
29
+ if ! command -v gdate & > /dev/null; then
30
+ # shellcheck disable=SC2006 # we explicitly want to use backticks here
31
+ fatal " gdate could not be found. Please \` brew install coreutils\` to proceed."
32
+ fi
33
+ DATE_CMD=" gdate"
34
+ fi
35
+ echo " ⏱️ using $DATE_CMD to count time"
22
36
23
- # using gdate on mdarwin for nanoseconds
24
- if [[ $( uname -s) == " Linux" ]]; then
25
- shopt -s expand_aliases
26
- alias gdate=" date"
37
+ if ! command -v " $DATE_CMD " & > /dev/null; then
38
+ fatal " $DATE_CMD could not be found. Please install $DATE_CMD to proceed."
27
39
fi
28
40
41
+ echo " 🏗️ Building library and test functions"
29
42
swift build -c release -Xswiftc -g
30
43
LAMBDA_USE_LOCAL_DEPS=../.. swift build --package-path Examples/HelloWorld -c release -Xswiftc -g
31
44
LAMBDA_USE_LOCAL_DEPS=../.. swift build --package-path Examples/HelloJSON -c release -Xswiftc -g
32
45
33
46
cleanup () {
34
- kill -9 $server_pid # ignore-unacceptable-language
47
+ pkill -9 MockServer && echo " killed previous mock server " # ignore-unacceptable-language
35
48
}
36
49
37
- trap " cleanup" ERR
50
+ # start a mock server
51
+ start_mockserver () {
52
+ if [ $# -ne 2 ]; then
53
+ fatal " Usage: $0 <mode> <invocations>"
54
+ fi
55
+ MODE=$1
56
+ INVOCATIONS=$2
57
+ pkill -9 MockServer && echo " killed previous mock server" && sleep 1 # ignore-unacceptable-language
58
+ echo " 👨🔧 starting server in $MODE mode for $INVOCATIONS invocations"
59
+ (MAX_INVOCATIONS=" $INVOCATIONS " MODE=" $MODE " ./.build/release/MockServer) &
60
+ server_pid=$!
61
+ sleep 1
62
+ kill -0 $server_pid # check server is alive # ignore-unacceptable-language
63
+ }
38
64
39
- cold_iterations=1000
40
- warm_iterations=10000
65
+ cold_iterations=100
66
+ warm_iterations=1000
41
67
results=()
42
68
43
69
# ------------------
44
70
# string
45
71
# ------------------
46
72
47
- export MODE=string
73
+ MODE=string
48
74
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
75
+ # Start mock server
76
+ start_mockserver " $MODE " " $cold_iterations "
56
77
57
78
# cold start
58
- echo " running $MODE mode cold test"
79
+ echo " 🚀❄️ running $MODE mode $cold_iterations cold test"
59
80
cold=()
60
- export MAX_REQUESTS=1
61
81
for (( i= 0 ; i< cold_iterations; i++ )) ; do
62
- start=$( gdate +%s%N)
82
+ start=$( " $DATE_CMD " +%s%N)
63
83
./Examples/HelloWorld/.build/release/MyLambda
64
- end=$( gdate +%s%N)
84
+ end=$( " $DATE_CMD " +%s%N)
65
85
cold+=( $(( end- start)) )
66
86
done
67
87
sum_cold=$( IFS=+; echo " $(( ${cold[*]} )) " )
68
88
avg_cold=$(( sum_cold/ cold_iterations))
69
89
results+=( " $MODE , cold: $avg_cold (ns)" )
70
90
91
+ # reset mock server
92
+ start_mockserver " $MODE " " $warm_iterations "
93
+
71
94
# normal calls
72
- echo " running $MODE mode warm test"
73
- export MAX_REQUESTS=$warm_iterations
74
- start=$( gdate +%s%N)
95
+ echo " 🚀🌤️ running $MODE mode warm test"
96
+ start=$( " $DATE_CMD " +%s%N)
75
97
./Examples/HelloWorld/.build/release/MyLambda
76
- end=$( gdate +%s%N)
98
+ end=$( " $DATE_CMD " +%s%N)
77
99
sum_warm=$(( end- start- avg_cold)) # substract by avg cold since the first call is cold
78
100
avg_warm=$(( sum_warm/ (warm_iterations- 1 )) ) # substract since the first call is cold
79
101
results+=( " $MODE , warm: $avg_warm (ns)" )
@@ -84,34 +106,30 @@ results+=( "$MODE, warm: $avg_warm (ns)" )
84
106
85
107
export MODE=json
86
108
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
109
+ # Start mock server
110
+ start_mockserver " $MODE " " $cold_iterations "
94
111
95
112
# cold start
96
- echo " running $MODE mode cold test"
113
+ echo " 🚀❄️ running $MODE mode cold test"
97
114
cold=()
98
- export MAX_REQUESTS=1
99
115
for (( i= 0 ; i< cold_iterations; i++ )) ; do
100
- start=$( gdate +%s%N)
101
- ./Examples/HelloJSON/.build/release/MyLambda
102
- end=$( gdate +%s%N)
116
+ start=$( " $DATE_CMD " +%s%N)
117
+ ./Examples/HelloJSON/.build/release/HelloJSON
118
+ end=$( " $DATE_CMD " +%s%N)
103
119
cold+=( $(( end- start)) )
104
120
done
105
121
sum_cold=$( IFS=+; echo " $(( ${cold[*]} )) " )
106
122
avg_cold=$(( sum_cold/ cold_iterations))
107
123
results+=( " $MODE , cold: $avg_cold (ns)" )
108
124
125
+ # reset mock server
126
+ start_mockserver " $MODE " " $warm_iterations "
127
+
109
128
# 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)
129
+ echo " 🚀🌤️ running $MODE mode warm test"
130
+ start=$( " $DATE_CMD " +%s%N)
131
+ ./Examples/HelloJSON/.build/release/HelloJSON
132
+ end=$( " $DATE_CMD " +%s%N)
115
133
sum_warm=$(( end- start- avg_cold)) # substract by avg cold since the first call is cold
116
134
avg_warm=$(( sum_warm/ (warm_iterations- 1 )) ) # substract since the first call is cold
117
135
results+=( " $MODE , warm: $avg_warm (ns)" )
0 commit comments