@@ -5,6 +5,7 @@ const { test } = t
55
66const util = require ( '../../lib/fetch/util' )
77const { HeadersList } = require ( '../../lib/fetch/headers' )
8+ const { createHash } = require ( 'crypto' )
89
910test ( 'responseURL' , ( t ) => {
1011 t . plan ( 2 )
@@ -279,3 +280,78 @@ test('setRequestReferrerPolicyOnRedirect', nested => {
279280 t . equal ( request . referrerPolicy , initial )
280281 } )
281282} )
283+
284+ test ( 'parseMetadata' , t => {
285+ t . test ( 'should parse valid metadata with option' , t => {
286+ const body = 'Hello world!'
287+ const hash256 = createHash ( 'sha256' ) . update ( body ) . digest ( 'base64' )
288+ const hash384 = createHash ( 'sha384' ) . update ( body ) . digest ( 'base64' )
289+ const hash512 = createHash ( 'sha512' ) . update ( body ) . digest ( 'base64' )
290+
291+ const validMetadata = `sha256-${ hash256 } !@ sha384-${ hash384 } !@ sha512-${ hash512 } !@`
292+ const result = util . parseMetadata ( validMetadata )
293+
294+ t . same ( result , [
295+ { algo : 'sha256' , hash : hash256 } ,
296+ { algo : 'sha384' , hash : hash384 } ,
297+ { algo : 'sha512' , hash : hash512 }
298+ ] )
299+
300+ t . end ( )
301+ } )
302+
303+ t . test ( 'should parse valid metadata with non ASCII chars option' , t => {
304+ const body = 'Hello world!'
305+ const hash256 = createHash ( 'sha256' ) . update ( body ) . digest ( 'base64' )
306+ const hash384 = createHash ( 'sha384' ) . update ( body ) . digest ( 'base64' )
307+ const hash512 = createHash ( 'sha512' ) . update ( body ) . digest ( 'base64' )
308+
309+ const validMetadata = `sha256-${ hash256 } !© sha384-${ hash384 } !€ sha512-${ hash512 } !µ`
310+ const result = util . parseMetadata ( validMetadata )
311+
312+ t . same ( result , [
313+ { algo : 'sha256' , hash : hash256 } ,
314+ { algo : 'sha384' , hash : hash384 } ,
315+ { algo : 'sha512' , hash : hash512 }
316+ ] )
317+
318+ t . end ( )
319+ } )
320+
321+ t . test ( 'should parse valid metadata without option' , t => {
322+ const body = 'Hello world!'
323+ const hash256 = createHash ( 'sha256' ) . update ( body ) . digest ( 'base64' )
324+ const hash384 = createHash ( 'sha384' ) . update ( body ) . digest ( 'base64' )
325+ const hash512 = createHash ( 'sha512' ) . update ( body ) . digest ( 'base64' )
326+
327+ const validMetadata = `sha256-${ hash256 } sha384-${ hash384 } sha512-${ hash512 } `
328+ const result = util . parseMetadata ( validMetadata )
329+
330+ t . same ( result , [
331+ { algo : 'sha256' , hash : hash256 } ,
332+ { algo : 'sha384' , hash : hash384 } ,
333+ { algo : 'sha512' , hash : hash512 }
334+ ] )
335+
336+ t . end ( )
337+ } )
338+
339+ t . test ( 'should ignore invalid metadata with invalid base64 chars' , t => {
340+ const body = 'Hello world!'
341+ const hash256 = createHash ( 'sha256' ) . update ( body ) . digest ( 'base64' )
342+ const invalidHash384 = 'zifp5hE1Xl5LQQqQz[]Bq/iaq9Wb6jVb//T7EfTmbXD2aEP5c2ZdJr9YTDfcTE1ZH+'
343+ const hash512 = createHash ( 'sha512' ) . update ( body ) . digest ( 'base64' )
344+
345+ const validMetadata = `sha256-${ hash256 } sha384-${ invalidHash384 } sha512-${ hash512 } `
346+ const result = util . parseMetadata ( validMetadata )
347+
348+ t . same ( result , [
349+ { algo : 'sha256' , hash : hash256 } ,
350+ { algo : 'sha512' , hash : hash512 }
351+ ] )
352+
353+ t . end ( )
354+ } )
355+
356+ t . end ( )
357+ } )
0 commit comments