diff --git a/test/middleware-mockserver.cjs b/test/middleware-mockserver.cjs index 55d8b814d..2a0fe19ed 100644 --- a/test/middleware-mockserver.cjs +++ b/test/middleware-mockserver.cjs @@ -6,6 +6,19 @@ const getRawBody = require( "raw-body" ); let cspLog = ""; +/** + * Like `readFileSync`, but on error returns "ERROR" + * without crashing. + * @param path + */ +function readFileSync( path ) { + try { + return fs.readFileSync( path ); + } catch ( _ ) { + return "ERROR"; + } +} + /** * Keep in sync with /test/mock.php */ @@ -142,7 +155,7 @@ const mocks = { }, xmlOverJsonp: function( req, resp ) { const callback = req.query.callback; - const body = fs.readFileSync( `${ __dirname }/data/with_fries.xml` ).toString(); + const body = readFileSync( `${ __dirname }/data/with_fries.xml` ).toString(); resp.writeHead( 200 ); resp.end( `${ cleanCallback( callback ) }(${ JSON.stringify( body ) })\n` ); }, @@ -224,8 +237,9 @@ const mocks = { }, testHTML: function( req, resp ) { resp.writeHead( 200, { "Content-Type": "text/html" } ); - const body = fs - .readFileSync( `${ __dirname }/data/test.include.html` ) + const body = readFileSync( + `${ __dirname }/data/test.include.html` + ) .toString() .replace( /{{baseURL}}/g, req.query.baseURL ); resp.end( body ); @@ -236,17 +250,19 @@ const mocks = { "Content-Security-Policy": "default-src 'self'; " + "report-uri /test/data/mock.php?action=cspLog" } ); - const body = fs.readFileSync( `${ __dirname }/data/csp.include.html` ).toString(); + const body = readFileSync( `${ __dirname }/data/csp.include.html` ).toString(); resp.end( body ); }, cspNonce: function( req, resp ) { - const testParam = req.query.test ? `-${ req.query.test }` : ""; + const testParam = req.query.test ? + `-${ req.query.test.replace( /[^a-z0-9]/gi, "" ) }` : + ""; resp.writeHead( 200, { "Content-Type": "text/html", "Content-Security-Policy": "script-src 'nonce-jquery+hardcoded+nonce'; " + "report-uri /test/data/mock.php?action=cspLog" } ); - const body = fs.readFileSync( + const body = readFileSync( `${ __dirname }/data/csp-nonce${ testParam }.html` ).toString(); resp.end( body ); },