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
+ # 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; }
17
22
18
23
export HOST=127.0.0.1
19
- export PORT=3000
24
+ export PORT=7000
20
25
export 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"
22
35
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."
27
38
fi
28
39
40
+ echo " 🏗️ Building library and test functions"
29
41
swift build -c release -Xswiftc -g
30
42
LAMBDA_USE_LOCAL_DEPS=../.. swift build --package-path Examples/HelloWorld -c release -Xswiftc -g
31
43
LAMBDA_USE_LOCAL_DEPS=../.. swift build --package-path Examples/HelloJSON -c release -Xswiftc -g
32
44
33
45
cleanup () {
34
- kill -9 $server_pid # ignore-unacceptable-language
46
+ pkill -9 MockServer && echo " killed previous mock server " # ignore-unacceptable-language
35
47
}
36
48
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
+ }
38
61
39
- cold_iterations=1000
40
- warm_iterations=10000
62
+ cold_iterations=100
63
+ warm_iterations=1000
41
64
results=()
42
65
43
66
# ------------------
44
67
# string
45
68
# ------------------
46
69
47
- export MODE=string
70
+ MODE=string
48
71
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
56
74
57
75
# cold start
58
- echo " running $MODE mode cold test"
76
+ echo " 🚀❄️ running $MODE mode $cold_iterations cold test"
59
77
cold=()
60
- export MAX_REQUESTS=1
61
78
for (( i= 0 ; i< cold_iterations; i++ )) ; do
62
- start=$( gdate +%s%N)
79
+ start=$( " $DATE_CMD " +%s%N)
63
80
./Examples/HelloWorld/.build/release/MyLambda
64
- end=$( gdate +%s%N)
81
+ end=$( " $DATE_CMD " +%s%N)
65
82
cold+=( $(( end- start)) )
66
83
done
67
84
sum_cold=$( IFS=+; echo " $(( ${cold[*]} )) " )
68
85
avg_cold=$(( sum_cold/ cold_iterations))
69
86
results+=( " $MODE , cold: $avg_cold (ns)" )
70
87
88
+ # reset mock server
89
+ start_mockserver $MODE $warm_iterations
90
+
71
91
# 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)
75
94
./Examples/HelloWorld/.build/release/MyLambda
76
- end=$( gdate +%s%N)
95
+ end=$( " $DATE_CMD " +%s%N)
77
96
sum_warm=$(( end- start- avg_cold)) # substract by avg cold since the first call is cold
78
97
avg_warm=$(( sum_warm/ (warm_iterations- 1 )) ) # substract since the first call is cold
79
98
results+=( " $MODE , warm: $avg_warm (ns)" )
@@ -84,34 +103,30 @@ results+=( "$MODE, warm: $avg_warm (ns)" )
84
103
85
104
export MODE=json
86
105
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
94
108
95
109
# cold start
96
- echo " running $MODE mode cold test"
110
+ echo " 🚀❄️ running $MODE mode cold test"
97
111
cold=()
98
- export MAX_REQUESTS=1
99
112
for (( 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)
103
116
cold+=( $(( end- start)) )
104
117
done
105
118
sum_cold=$( IFS=+; echo " $(( ${cold[*]} )) " )
106
119
avg_cold=$(( sum_cold/ cold_iterations))
107
120
results+=( " $MODE , cold: $avg_cold (ns)" )
108
121
122
+ # reset mock server
123
+ start_mockserver $MODE $warm_iterations
124
+
109
125
# 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)
115
130
sum_warm=$(( end- start- avg_cold)) # substract by avg cold since the first call is cold
116
131
avg_warm=$(( sum_warm/ (warm_iterations- 1 )) ) # substract since the first call is cold
117
132
results+=( " $MODE , warm: $avg_warm (ns)" )
0 commit comments