4
4
* @group unit/parser/schema/
5
5
*/
6
6
7
+ import { gunzipSync } from 'node:zlib' ;
7
8
import {
8
9
KinesisDataStreamRecord ,
9
10
KinesisDataStreamSchema ,
10
11
KinesisFirehoseRecordSchema ,
11
12
KinesisFirehoseSchema ,
12
13
KinesisFirehoseSqsRecordSchema ,
13
14
KinesisFirehoseSqsSchema ,
15
+ SqsRecordSchema ,
14
16
} from '../../../src/schemas/' ;
15
17
import type {
16
18
KinesisDataStreamEvent ,
@@ -25,61 +27,131 @@ import { TestEvents } from './utils.js';
25
27
26
28
describe ( 'Kinesis ' , ( ) => {
27
29
it ( 'should parse kinesis event' , ( ) => {
28
- const kinesisStreamEvent = TestEvents . kinesisStreamEvent ;
30
+ const kinesisStreamEvent =
31
+ TestEvents . kinesisStreamEvent as KinesisDataStreamEvent ;
29
32
const parsed = KinesisDataStreamSchema . parse ( kinesisStreamEvent ) ;
30
33
31
- expect ( parsed . Records [ 0 ] . kinesis . data ) . toEqual ( 'Hello, this is a test.' ) ;
34
+ const transformedInput = {
35
+ Records : kinesisStreamEvent . Records . map ( ( record , index ) => {
36
+ return {
37
+ ...record ,
38
+ kinesis : {
39
+ ...record . kinesis ,
40
+ data : Buffer . from ( record . kinesis . data , 'base64' ) . toString ( ) ,
41
+ } ,
42
+ } ;
43
+ } ) ,
44
+ } ;
45
+
46
+ expect ( parsed ) . toStrictEqual ( transformedInput ) ;
32
47
} ) ;
33
48
it ( 'should parse single kinesis record' , ( ) => {
34
- const kinesisStreamEventOneRecord = TestEvents . kinesisStreamEventOneRecord ;
49
+ const kinesisStreamEventOneRecord =
50
+ TestEvents . kinesisStreamEventOneRecord as KinesisDataStreamEvent ;
35
51
const parsed = KinesisDataStreamSchema . parse ( kinesisStreamEventOneRecord ) ;
36
52
37
- expect ( parsed . Records [ 0 ] . kinesis . data ) . toEqual ( {
38
- message : 'test message' ,
39
- username : 'test' ,
40
- } ) ;
53
+ const transformedInput = {
54
+ Records : kinesisStreamEventOneRecord . Records . map ( ( record , index ) => {
55
+ return {
56
+ ...record ,
57
+ kinesis : {
58
+ ...record . kinesis ,
59
+ data : JSON . parse (
60
+ Buffer . from ( record . kinesis . data , 'base64' ) . toString ( )
61
+ ) ,
62
+ } ,
63
+ } ;
64
+ } ) ,
65
+ } ;
66
+
67
+ expect ( parsed ) . toStrictEqual ( transformedInput ) ;
41
68
} ) ;
42
69
it ( 'should parse Firehose event' , ( ) => {
43
- const kinesisFirehoseKinesisEvent = TestEvents . kinesisFirehoseKinesisEvent ;
70
+ const kinesisFirehoseKinesisEvent =
71
+ TestEvents . kinesisFirehoseKinesisEvent as KinesisFireHoseEvent ;
44
72
const parsed = KinesisFirehoseSchema . parse ( kinesisFirehoseKinesisEvent ) ;
45
- expect ( parsed . records [ 0 ] . data ) . toEqual ( 'Hello World' ) ;
73
+
74
+ const transformedInput = {
75
+ ...kinesisFirehoseKinesisEvent ,
76
+ records : kinesisFirehoseKinesisEvent . records . map ( ( record ) => {
77
+ return {
78
+ ...record ,
79
+ data : Buffer . from ( record . data , 'base64' ) . toString ( ) ,
80
+ kinesisRecordMetadata : record . kinesisRecordMetadata ,
81
+ } ;
82
+ } ) ,
83
+ } ;
84
+ expect ( parsed ) . toStrictEqual ( transformedInput ) ;
46
85
} ) ;
47
86
it ( 'should parse Kinesis Firehose PutEvents event' , ( ) => {
48
- const kinesisFirehosePutEvent = TestEvents . kinesisFirehosePutEvent ;
87
+ const kinesisFirehosePutEvent =
88
+ TestEvents . kinesisFirehosePutEvent as KinesisFireHoseEvent ;
49
89
const parsed = KinesisFirehoseSchema . parse ( kinesisFirehosePutEvent ) ;
50
- expect ( JSON . parse ( parsed . records [ 1 ] . data ) ) . toEqual ( {
51
- Hello : 'World' ,
52
- } ) ;
90
+
91
+ const transformedInput = {
92
+ ...kinesisFirehosePutEvent ,
93
+ records : kinesisFirehosePutEvent . records . map ( ( record ) => {
94
+ return {
95
+ ...record ,
96
+ data : Buffer . from ( record . data , 'base64' ) . toString ( ) ,
97
+ } ;
98
+ } ) ,
99
+ } ;
100
+
101
+ expect ( parsed ) . toStrictEqual ( transformedInput ) ;
53
102
} ) ;
54
103
it ( 'should parse Firehose event with SQS event' , ( ) => {
55
- const kinesisFirehoseSQSEvent = TestEvents . kinesisFirehoseSQSEvent ;
104
+ const kinesisFirehoseSQSEvent =
105
+ TestEvents . kinesisFirehoseSQSEvent as KinesisFireHoseSqsEvent ;
56
106
const parsed = KinesisFirehoseSqsSchema . parse ( kinesisFirehoseSQSEvent ) ;
57
- expect ( parsed . records [ 0 ] . data ) . toMatchObject ( {
58
- messageId : '5ab807d4-5644-4c55-97a3-47396635ac74' ,
59
- body : 'Test message.' ,
60
- } ) ;
107
+
108
+ const transformedInput = {
109
+ ...kinesisFirehoseSQSEvent ,
110
+ records : kinesisFirehoseSQSEvent . records . map ( ( record ) => {
111
+ return {
112
+ ...record ,
113
+ data : JSON . parse (
114
+ Buffer . from ( record . data as string , 'base64' ) . toString ( )
115
+ ) ,
116
+ } ;
117
+ } ) ,
118
+ } ;
119
+
120
+ expect ( parsed ) . toStrictEqual ( transformedInput ) ;
61
121
} ) ;
62
122
it ( 'should parse Kinesis event with CloudWatch event' , ( ) => {
63
123
const kinesisStreamCloudWatchLogsEvent =
64
- TestEvents . kinesisStreamCloudWatchLogsEvent ;
124
+ TestEvents . kinesisStreamCloudWatchLogsEvent as KinesisDataStreamEvent ;
65
125
const parsed = KinesisDataStreamSchema . parse (
66
126
kinesisStreamCloudWatchLogsEvent
67
127
) ;
68
128
69
- expect ( parsed . Records [ 0 ] . kinesis . data ) . toMatchObject ( {
70
- messageType : 'DATA_MESSAGE' ,
71
- owner : '231436140809' ,
72
- logGroup : '/aws/lambda/pt-1488-DummyLogDataFunction-gnWXPvL6jJyG' ,
73
- logStream : '2022/11/10/[$LATEST]26b6a45d574f442ea28438923cbf7bf7' ,
74
- } ) ;
129
+ const transformedInput = {
130
+ Records : kinesisStreamCloudWatchLogsEvent . Records . map ( ( record , index ) => {
131
+ return {
132
+ ...record ,
133
+ kinesis : {
134
+ ...record . kinesis ,
135
+ data : JSON . parse (
136
+ gunzipSync ( Buffer . from ( record . kinesis . data , 'base64' ) ) . toString (
137
+ 'utf8'
138
+ )
139
+ ) ,
140
+ } ,
141
+ } ;
142
+ } ) ,
143
+ } ;
144
+
145
+ expect ( parsed ) . toStrictEqual ( transformedInput ) ;
75
146
} ) ;
76
147
it ( 'should return original value if cannot parse KinesisFirehoseSqsRecord' , ( ) => {
77
148
const kinesisFirehoseSQSEvent = TestEvents . kinesisFirehoseSQSEvent as {
78
149
records : { data : string } [ ] ;
79
150
} ;
80
151
kinesisFirehoseSQSEvent . records [ 0 ] . data = 'not a valid json' ;
81
152
const parsed = KinesisFirehoseSqsSchema . parse ( kinesisFirehoseSQSEvent ) ;
82
- expect ( parsed . records [ 0 ] . data ) . toEqual ( 'not a valid json' ) ;
153
+
154
+ expect ( parsed ) . toStrictEqual ( kinesisFirehoseSQSEvent ) ;
83
155
} ) ;
84
156
it ( 'should parse a kinesis record from a kinesis event' , ( ) => {
85
157
const kinesisStreamEvent : KinesisDataStreamEvent =
@@ -88,6 +160,7 @@ describe('Kinesis ', () => {
88
160
kinesisStreamEvent . Records [ 0 ]
89
161
) ;
90
162
163
+ expect ( parsedRecord . eventSource ) . toEqual ( 'aws:kinesis' ) ;
91
164
expect ( parsedRecord . eventName ) . toEqual ( 'aws:kinesis:record' ) ;
92
165
} ) ;
93
166
0 commit comments