@@ -5,7 +5,7 @@ const { describe, it } = require('mocha')
5
5
6
6
const { Buffer } = require ( 'node:buffer' )
7
7
8
- const { generatePointerHash, encodeValue, extractPrimaryKeys } = require ( '../src/util' )
8
+ const { generatePointerHash, encodeValue, extractPrimaryKeys, extractQueueMetadata } = require ( '../src/util' )
9
9
10
10
describe ( 'generatePointerHash' , ( ) => {
11
11
describe ( 'should generate a valid hash for S3 object with' , ( ) => {
@@ -218,3 +218,136 @@ describe('extractPrimaryKeys', () => {
218
218
} )
219
219
} )
220
220
} )
221
+
222
+ describe ( 'extractQueueMetadata' , ( ) => {
223
+ describe ( 'standard AWS SQS URLs' , ( ) => {
224
+ it ( 'handles standard AWS SQS URL' , ( ) => {
225
+ const result = extractQueueMetadata ( 'https://sqs.eu-west-1.amazonaws.com/987654321098/test-queue' )
226
+ expect ( result ) . to . deep . equal ( {
227
+ queueName : 'test-queue' ,
228
+ arn : 'arn:aws:sqs:eu-west-1:987654321098:test-queue'
229
+ } )
230
+ } )
231
+
232
+ it ( 'handles AWS China region' , ( ) => {
233
+ const result = extractQueueMetadata ( 'https://sqs.cn-north-1.amazonaws.com.cn/123456789012/china-queue' )
234
+ expect ( result ) . to . deep . equal ( {
235
+ queueName : 'china-queue' ,
236
+ arn : 'arn:aws-cn:sqs:cn-north-1:123456789012:china-queue'
237
+ } )
238
+ } )
239
+
240
+ it ( 'handles AWS GovCloud region' , ( ) => {
241
+ const result = extractQueueMetadata ( 'https://sqs.us-gov-west-1.amazonaws.com/123456789012/gov-queue' )
242
+ expect ( result ) . to . deep . equal ( {
243
+ queueName : 'gov-queue' ,
244
+ arn : 'arn:aws-us-gov:sqs:us-gov-west-1:123456789012:gov-queue'
245
+ } )
246
+ } )
247
+
248
+ it ( 'handles queue name with special characters' , ( ) => {
249
+ const result = extractQueueMetadata ( 'https://sqs.us-west-2.amazonaws.com/123456789012/my-queue-test_123' )
250
+ expect ( result ) . to . deep . equal ( {
251
+ queueName : 'my-queue-test_123' ,
252
+ arn : 'arn:aws:sqs:us-west-2:123456789012:my-queue-test_123'
253
+ } )
254
+ } )
255
+ } )
256
+
257
+ describe ( 'LocalStack URLs' , ( ) => {
258
+ it ( 'handles LocalStack URL with default port' , ( ) => {
259
+ const result = extractQueueMetadata ( 'http://localhost:4566/000000000000/local-queue' )
260
+ expect ( result ) . to . deep . equal ( {
261
+ queueName : 'local-queue' ,
262
+ arn : 'arn:aws:sqs:us-east-1:000000000000:local-queue'
263
+ } )
264
+ } )
265
+
266
+ it ( 'handles LocalStack URL with custom port' , ( ) => {
267
+ const result = extractQueueMetadata ( 'http://127.0.0.1:9324/123456789012/dev-queue' )
268
+ expect ( result ) . to . deep . equal ( {
269
+ queueName : 'dev-queue' ,
270
+ arn : 'arn:aws:sqs:us-east-1:123456789012:dev-queue'
271
+ } )
272
+ } )
273
+ } )
274
+
275
+ describe ( 'legacy AWS SQS URLs' , ( ) => {
276
+ it ( 'handles regional legacy format' , ( ) => {
277
+ const result = extractQueueMetadata ( 'https://us-west-2.queue.amazonaws.com/123456789012/legacy-queue' )
278
+ expect ( result ) . to . deep . equal ( {
279
+ queueName : 'legacy-queue' ,
280
+ arn : 'arn:aws:sqs:us-west-2:123456789012:legacy-queue'
281
+ } )
282
+ } )
283
+
284
+ it ( 'handles global legacy format' , ( ) => {
285
+ const result = extractQueueMetadata ( 'https://queue.amazonaws.com/123456789012/global-legacy-queue' )
286
+ expect ( result ) . to . deep . equal ( {
287
+ queueName : 'global-legacy-queue' ,
288
+ arn : 'arn:aws:sqs:us-east-1:123456789012:global-legacy-queue'
289
+ } )
290
+ } )
291
+
292
+ it ( 'handles legacy format without scheme' , ( ) => {
293
+ const result = extractQueueMetadata ( 'eu-central-1.queue.amazonaws.com/987654321098/no-scheme-legacy' )
294
+ expect ( result ) . to . deep . equal ( {
295
+ queueName : 'no-scheme-legacy' ,
296
+ arn : 'arn:aws:sqs:eu-central-1:987654321098:no-scheme-legacy'
297
+ } )
298
+ } )
299
+ } )
300
+
301
+ describe ( 'URLs without schemes' , ( ) => {
302
+ it ( 'handles modern format without scheme' , ( ) => {
303
+ const result = extractQueueMetadata ( 'sqs.eu-west-1.amazonaws.com/123456789012/no-scheme-queue' )
304
+ expect ( result ) . to . deep . equal ( {
305
+ queueName : 'no-scheme-queue' ,
306
+ arn : 'arn:aws:sqs:eu-west-1:123456789012:no-scheme-queue'
307
+ } )
308
+ } )
309
+
310
+ it ( 'handles localstack without scheme' , ( ) => {
311
+ const result = extractQueueMetadata ( 'localhost:4566/000000000000/local-no-scheme' )
312
+ expect ( result ) . to . deep . equal ( {
313
+ queueName : 'local-no-scheme' ,
314
+ arn : 'arn:aws:sqs:us-east-1:000000000000:local-no-scheme'
315
+ } )
316
+ } )
317
+ } )
318
+
319
+ describe ( 'edge cases' , ( ) => {
320
+ it ( 'returns null for invalid URL with insufficient parts' , ( ) => {
321
+ const result = extractQueueMetadata ( 'https://sqs.us-east-1.amazonaws.com/incomplete' )
322
+ expect ( result ) . to . be . null
323
+ } )
324
+
325
+ it ( 'returns null for completely malformed URL' , ( ) => {
326
+ const result = extractQueueMetadata ( 'not-a-valid-url' )
327
+ expect ( result ) . to . be . null
328
+ } )
329
+
330
+ it ( 'returns null for empty string' , ( ) => {
331
+ const result = extractQueueMetadata ( '' )
332
+ expect ( result ) . to . be . null
333
+ } )
334
+
335
+ it ( 'returns null for null input' , ( ) => {
336
+ const result = extractQueueMetadata ( null )
337
+ expect ( result ) . to . be . null
338
+ } )
339
+
340
+ it ( 'returns null for undefined input' , ( ) => {
341
+ const result = extractQueueMetadata ( undefined )
342
+ expect ( result ) . to . be . null
343
+ } )
344
+
345
+ it ( 'handles URL with trailing slash' , ( ) => {
346
+ const result = extractQueueMetadata ( 'https://sqs.us-west-2.amazonaws.com/123456789012/my-queue/' )
347
+ expect ( result ) . to . deep . equal ( {
348
+ queueName : 'my-queue' ,
349
+ arn : 'arn:aws:sqs:us-west-2:123456789012:my-queue'
350
+ } )
351
+ } )
352
+ } )
353
+ } )
0 commit comments