Skip to content

Commit 8d0a139

Browse files
committed
ci: add in missing benchmarks
1 parent e739c78 commit 8d0a139

File tree

7 files changed

+123
-66
lines changed

7 files changed

+123
-66
lines changed

packages/appconfig/__benchmarks__/index.js

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
/*
21
import { Bench } from 'tinybench'
32
import middy from '../../core/index.js'
43
import middleware from '../index.js'
@@ -16,8 +15,15 @@ const context = {
1615
getRemainingTimeInMillis: () => 30000
1716
}
1817
const setupHandler = (options = {}) => {
18+
const strToUintArray = (str) =>
19+
Uint8Array.from(str.split('').map((x) => x.charCodeAt()))
20+
1921
mockClient(AppConfigDataClient)
20-
.on(StartConfigurationSessionCommand, params)
22+
.on(StartConfigurationSessionCommand, {
23+
ApplicationIdentifier: '...',
24+
ConfigurationProfileIdentifier: '...',
25+
EnvironmentIdentifier: '...'
26+
})
2127
.resolves({
2228
ContentType: 'application/json',
2329
InitialConfigurationToken: 'InitialToken...'
@@ -57,4 +63,3 @@ await bench
5763
.run()
5864

5965
console.table(bench.table())
60-
*/
Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
/*
21
import { Bench } from 'tinybench'
32
import middy from '../../core/index.js'
43
import middleware from '../index.js'
@@ -8,28 +7,26 @@ const bench = new Bench({ time: 1_000 })
87
const context = {
98
getRemainingTimeInMillis: () => 30000
109
}
11-
const setupHandler = () => {
10+
const setupHandler = (options = {}) => {
1211
const baseHandler = () => {}
13-
return middy(baseHandler)
14-
.use(middleware({ namespace: 'namespace' }))
12+
return middy(baseHandler).use(middleware({ namespace: 'namespace' }))
1513
}
1614

15+
const coldHandler = setupHandler({ cacheExpiry: 0 })
1716
const warmHandler = setupHandler()
1817

19-
// TODO fix error
2018
await bench
21-
.add('Cold Invocation', async (event = {}) => {
22-
const coldHandler = setupHandler()
19+
.add('without cache', async (event = {}) => {
2320
try {
2421
await coldHandler(event, context)
2522
} catch (e) {}
2623
})
27-
.add('Warm Invocation', async (event = {}) => {
24+
.add('with cache', async (event = {}) => {
2825
try {
2926
await warmHandler(event, context)
3027
} catch (e) {}
3128
})
3229

3330
.run()
3431

35-
console.table(bench.table()) */
32+
console.table(bench.table())

packages/core/__tests__/index.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -877,7 +877,7 @@ test('Should trigger all plugin hooks', async (t) => {
877877
t.is(plugin.requestEnd.callCount, 1)
878878
})
879879

880-
test('Should abort handler', async (t) => {
880+
test('Should abort handler when timeout expires', async (t) => {
881881
const plugin = {
882882
timeoutEarlyInMillis: 1,
883883
timeoutEarlyResponse: () => true
@@ -899,15 +899,15 @@ test('Should abort handler', async (t) => {
899899
} catch (e) {}
900900
})
901901

902-
test('Should abort timeout', async (t) => {
902+
test('Should throw error when timeout expires', async (t) => {
903903
const plugin = {
904-
timeoutEarlyInMillis: 50
904+
timeoutEarlyInMillis: 1
905905
}
906906
const context = {
907907
getRemainingTimeInMillis: () => 100
908908
}
909909
const handler = middy(async (event, context, { signal }) => {
910-
await setTimeout(200)
910+
await setTimeout(100)
911911
return true
912912
}, plugin)
913913

@@ -916,6 +916,7 @@ test('Should abort timeout', async (t) => {
916916
} catch (e) {
917917
t.is(e.name, 'TimeoutError')
918918
t.is(e.message, '[AbortError]: The operation was aborted.')
919+
t.deepEqual(e.cause, { package: '@middy/core' })
919920
}
920921
})
921922

packages/core/index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ const middy = (lambdaHandler = defaultLambdaHandler, plugin = {}) => {
4242

4343
return runRequest(
4444
request,
45-
[...beforeMiddlewares],
45+
beforeMiddlewares,
4646
lambdaHandler,
47-
[...afterMiddlewares],
48-
[...onErrorMiddlewares],
47+
afterMiddlewares,
48+
onErrorMiddlewares,
4949
plugin
5050
)
5151
}

packages/dynamodb/__benchmarks__/index.js

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,30 @@
1-
/*
21
import { Bench } from 'tinybench'
32
import middy from '../../core/index.js'
43
import middleware from '../index.js'
54

65
import { mockClient } from 'aws-sdk-client-mock'
7-
import {
8-
SecretsManagerClient,
9-
GetSecretValueCommand
10-
} from '@aws-sdk/client-dynamodb'
6+
import { DynamoDBClient, GetItemCommand } from '@aws-sdk/client-dynamodb'
117

128
const bench = new Bench({ time: 1_000 })
139

1410
const context = {
1511
getRemainingTimeInMillis: () => 30000
1612
}
1713
const setupHandler = (options = {}) => {
18-
mockClient(SecretsManagerClient)
19-
.on(GetSecretValueCommand)
20-
.resolves({ SecretString: 'token' })
14+
mockClient(DynamoDBClient)
15+
.on(GetItemCommand)
16+
.resolvesOnce({
17+
Item: {
18+
value: {
19+
S: 'value'
20+
}
21+
}
22+
})
2123
const baseHandler = () => {}
2224
return middy(baseHandler).use(
2325
middleware({
2426
...options,
25-
AwsClient: SecretsManagerClient
27+
AwsClient: DynamoDBClient
2628
})
2729
)
2830
}
@@ -45,4 +47,3 @@ await bench
4547
.run()
4648

4749
console.table(bench.table())
48-
*/

packages/event-normalizer/__benchmarks__/index.js

Lines changed: 77 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
/*
21
import { Bench } from 'tinybench'
32
import createEvent from '@serverless/event-mocks'
43
import middy from '../../core/index.js'
@@ -15,38 +14,86 @@ const setupHandler = () => {
1514
}
1615

1716
const warmHandler = setupHandler()
18-
const dynamoEvent = createEvent.default('aws:dynamo')
19-
const kinesisEvent = { event: createEvent.default('aws:kinesis') }
20-
const s3Event = createEvent.default('aws:s3')
21-
const sqsEvent = createEvent.default('aws:sqs')
22-
const snsEvent = createEvent.default('aws:sns')
23-
24-
kinesisEvent.event.Records[0].kinesis.data = Buffer.from(
25-
JSON.stringify({ hello: 'world' }),
26-
'utf-8'
27-
).toString('base64')
17+
const dynamoEvent = () => createEvent.default('aws:dynamo')
18+
const kinesisEvent = () => {
19+
const event = createEvent.default('aws:kinesis')
20+
event.Records[0].kinesis.data = Buffer.from(
21+
JSON.stringify({ hello: 'world' }),
22+
'utf-8'
23+
).toString('base64')
24+
return { event }
25+
}
26+
const s3Event = () => createEvent.default('aws:s3')
27+
const sqsEvent = () => createEvent.default('aws:sqs')
28+
const snsEvent = () => {
29+
const event = createEvent.default('aws:sns')
30+
event.Records[0].Sns.Message = JSON.stringify(sqsEvent())
31+
return event
32+
}
2833

29-
const deepJsonEvent = createEvent.default('aws:sqs')
30-
snsEvent.Records[0].Sns.Message = JSON.stringify(sqsEvent)
31-
deepJsonEvent.Records[0].body = JSON.stringify(snsEvent)
34+
const deepJsonEvent = () => {
35+
const event = createEvent.default('aws:sqs')
36+
event.Records[0].body = JSON.stringify(snsEvent())
37+
return event
38+
}
3239

40+
let event
3341
await bench
34-
.add('S3 Event', async (event = { ...s3Event }) => {
35-
await warmHandler(event, context)
36-
})
37-
.add('Shallow JSON (SQS) Event', async (event = { ...sqsEvent }) => {
38-
await warmHandler(event, context)
39-
})
40-
.add('Deep JSON (S3>SNS>SQS) Event', async (event = { ...deepJsonEvent }) => {
41-
await warmHandler(event, context)
42-
})
43-
.add('DynamoDB Event', async (event = { ...dynamoEvent }) => {
44-
await warmHandler(event, context)
45-
})
46-
.add('Kinesis Event', async (event = { ...kinesisEvent }) => {
47-
await warmHandler(event, context)
48-
})
42+
.add(
43+
'S3 Event',
44+
async () => {
45+
await warmHandler(event, context)
46+
},
47+
{
48+
beforeEach: () => {
49+
event = s3Event()
50+
}
51+
}
52+
)
53+
.add(
54+
'Shallow JSON (SQS) Event',
55+
async () => {
56+
await warmHandler(event, context)
57+
},
58+
{
59+
beforeEach: () => {
60+
event = sqsEvent()
61+
}
62+
}
63+
)
64+
.add(
65+
'Deep JSON (S3>SNS>SQS) Event',
66+
async () => {
67+
await warmHandler(event, context)
68+
},
69+
{
70+
beforeEach: () => {
71+
event = deepJsonEvent()
72+
}
73+
}
74+
)
75+
.add(
76+
'DynamoDB Event',
77+
async () => {
78+
await warmHandler(event, context)
79+
},
80+
{
81+
beforeEach: () => {
82+
event = dynamoEvent()
83+
}
84+
}
85+
)
86+
.add(
87+
'Kinesis Event',
88+
async () => {
89+
await warmHandler(event, context)
90+
},
91+
{
92+
beforeEach: () => {
93+
event = kinesisEvent()
94+
}
95+
}
96+
)
4997
.run()
5098

5199
console.table(bench.table())
52-
*/

packages/s3/__benchmarks__/index.js

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,32 @@
1-
/*
21
import { Bench } from 'tinybench'
32
import middy from '../../core/index.js'
43
import middleware from '../index.js'
54

65
import { mockClient } from 'aws-sdk-client-mock'
7-
import { SecretsManagerClient, GetSecretValueCommand } from '@aws-sdk/client-s3'
6+
import { S3Client, GetObjectCommand } from '@aws-sdk/client-s3'
87

98
const bench = new Bench({ time: 1_000 })
109

1110
const context = {
1211
getRemainingTimeInMillis: () => 30000
1312
}
1413
const setupHandler = (options = {}) => {
15-
mockClient(SecretsManagerClient)
16-
.on(GetSecretValueCommand)
17-
.resolves({ SecretString: 'token' })
14+
const s3Response = (content) => {
15+
return {
16+
transformToString: async () => content
17+
}
18+
}
19+
mockClient(S3Client)
20+
.on(GetObjectCommand)
21+
.resolvesOnce({
22+
ContentType: 'application/json',
23+
Body: s3Response('{"option":"value"}')
24+
})
1825
const baseHandler = () => {}
1926
return middy(baseHandler).use(
2027
middleware({
2128
...options,
22-
AwsClient: SecretsManagerClient
29+
AwsClient: S3Client
2330
})
2431
)
2532
}
@@ -42,4 +49,3 @@ await bench
4249
.run()
4350

4451
console.table(bench.table())
45-
*/

0 commit comments

Comments
 (0)