@@ -72,13 +72,6 @@ describe("middleware-websocket", () => {
7272 const logSink = vi . fn ( ) ;
7373 const eventStreamCodec = new EventStreamCodec ( toUtf8 , fromUtf8 ) ;
7474
75- function toInt32 ( n : number ) : number [ ] {
76- const uint32 = new Uint8Array ( 4 ) ;
77- const dv = new DataView ( uint32 . buffer , 0 , 4 ) ;
78- dv . setUint32 ( 0 , n ) ;
79- return Array . from ( uint32 ) ;
80- }
81-
8275 const flintstone = new BedrockRuntime ( {
8376 credentials : {
8477 accessKeyId : "INTEG" ,
@@ -118,6 +111,41 @@ describe("middleware-websocket", () => {
118111 it ( "should transform user input asyncIterable to socket events" , async ( ) => {
119112 const server = new WS ( mockUrl ) ;
120113
114+ const body : Uint8Array = fromUtf8 (
115+ JSON . stringify ( {
116+ bytes : Buffer . from ( new Uint8Array ( [ 48 , 49 , 50 , 51 , 52 , 56 , 57 , 57 , 57 ] ) ) . toString ( "base64" ) ,
117+ } )
118+ ) ;
119+
120+ const event = {
121+ headers : {
122+ ":event-type" : {
123+ type : "string" ,
124+ value : "chunk" ,
125+ } ,
126+ ":content-type" : {
127+ type : "string" ,
128+ value : "application/json" ,
129+ } ,
130+ ":message-type" : {
131+ type : "string" ,
132+ value : "event" ,
133+ } ,
134+ } ,
135+ body,
136+ } as const ;
137+
138+ /**
139+ * Byte alignment:
140+ * 4 - message size
141+ * 4 - header size
142+ * 4 - prelude crc32
143+ * variable - headers
144+ * variable - body
145+ * 4 message crc32
146+ */
147+ const bytes = eventStreamCodec . encode ( event ) ;
148+
121149 let receiveCount = 0 ;
122150 const [ serverConfirmation , resolve , reject ] = ( ( ) => {
123151 let resolve : ( value ?: unknown ) => void ;
@@ -129,47 +157,15 @@ describe("middleware-websocket", () => {
129157 return [ p , resolve , reject ] ;
130158 } ) ( ) ;
131159
132- server . on ( "connection" , ( socket ) => {
133- socket . on ( "message" , async ( data ) => {
134- {
135- const body : Uint8Array = fromUtf8 (
136- JSON . stringify ( {
137- chunk : {
138- bytes : Buffer . from ( "012345678999" ) . toString ( "base64" ) ,
139- } ,
140- } )
141- ) ;
160+ server . on ( "connection" , async ( socket ) => {
161+ await server . connected ;
142162
143- const event = {
144- headers : {
145- ":event-type" : {
146- type : "string" ,
147- value : "chunk" ,
148- } ,
149- ":content-type" : {
150- type : "string" ,
151- value : "application/json" ,
152- } ,
153- ":message-type" : {
154- type : "string" ,
155- value : "event" ,
156- } ,
157- } ,
158- body,
159- } as const ;
163+ socket . send ( toBase64 ( bytes ) ) ;
164+ socket . send ( toBase64 ( bytes ) ) ;
165+ socket . send ( toBase64 ( bytes ) ) ;
160166
161- /**
162- * Byte alignment:
163- * 4 - message size
164- * 4 - header size
165- * 4 - prelude crc32
166- * variable - headers
167- * variable - body
168- * 4 message crc32
169- */
170- const bytes = eventStreamCodec . encode ( event ) ;
171- server . send ( toBase64 ( bytes ) ) ;
172- }
167+ socket . on ( "message" , async ( data ) => {
168+ socket . send ( toBase64 ( bytes ) ) ;
173169
174170 try {
175171 const decoded = eventStreamCodec . decode ( data as any ) ;
@@ -238,24 +234,33 @@ describe("middleware-websocket", () => {
238234 bytes : new Uint8Array ( [ 8 , 9 , 10 , 11 ] ) ,
239235 } ,
240236 } ;
237+
238+ // holds socket open for a bit after final input.
239+ // to receive server events.
240+ await new Promise ( ( r ) => setTimeout ( r , 2000 ) ) ;
241241 } ,
242242 } ,
243243 } ) ;
244244
245- await server . connected ;
245+ server . send ( toBase64 ( bytes ) ) ;
246246
247247 expect ( logSink ) . toHaveBeenCalledWith ( "@aws-sdk - ws connecting ws://localhost:6855/mock-websocket" ) ;
248248 await serverConfirmation ;
249249
250+ server . send ( toBase64 ( bytes ) ) ;
251+ server . send ( toBase64 ( bytes ) ) ;
252+
250253 const responseChunks = [ ] ;
251254 for await ( const event of websocketResponse . body ) {
252255 responseChunks . push ( event ) ;
256+ expect ( event ) . toEqual ( {
257+ chunk : {
258+ bytes : new Uint8Array ( [ 48 , 49 , 50 , 51 , 52 , 56 , 57 , 57 , 57 ] ) ,
259+ } ,
260+ } ) ;
253261 }
254262
255- expect ( responseChunks ) . toHaveLength ( 4 ) ;
256-
257- // TODO: fix mock WS server response format.
258- // expect(responseChunks).toEqual([{ bytes: new Uint8Array([]) }]);
263+ expect ( responseChunks . length ) . toBe ( 10 ) ;
259264 } ) ;
260265 } ) ;
261266} ) ;
0 commit comments