Skip to content

Commit

Permalink
test: add test of policy about parse error
Browse files Browse the repository at this point in the history
PR-URL: nodejs#26873
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: Rich Trott <rtrott@gmail.com>
  • Loading branch information
sasurau4 authored and Trott committed Apr 29, 2019
1 parent 723d5c0 commit a565853
Showing 1 changed file with 86 additions and 0 deletions.
86 changes: 86 additions & 0 deletions test/parallel/test-policy-parse-integrity.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
'use strict';

const common = require('../common');
if (!common.hasCrypto) common.skip('missing crypto');

const tmpdir = require('../common/tmpdir');
const assert = require('assert');
const { spawnSync } = require('child_process');
const crypto = require('crypto');
const fs = require('fs');
const path = require('path');
const { pathToFileURL } = require('url');

tmpdir.refresh();

function hash(algo, body) {
const h = crypto.createHash(algo);
h.update(body);
return h.digest('base64');
}

const policyFilepath = path.join(tmpdir.path, 'policy');

const parentFilepath = path.join(tmpdir.path, 'parent.js');
const parentBody = "require('./dep.js')";

const depFilepath = path.join(tmpdir.path, 'dep.js');
const depURL = pathToFileURL(depFilepath);
const depBody = '';

fs.writeFileSync(parentFilepath, parentBody);
fs.writeFileSync(depFilepath, depBody);

const tmpdirURL = pathToFileURL(tmpdir.path);
if (!tmpdirURL.pathname.endsWith('/')) {
tmpdirURL.pathname += '/';
}

function test({ shouldFail, integrity }) {
const resources = {
[depURL]: {
body: depBody,
integrity
}
};
const manifest = {
resources: {},
};
for (const [url, { body, integrity }] of Object.entries(resources)) {
manifest.resources[url] = {
integrity,
};
fs.writeFileSync(new URL(url, tmpdirURL.href), body);
}
fs.writeFileSync(policyFilepath, JSON.stringify(manifest, null, 2));
const { status } = spawnSync(process.execPath, [
'--experimental-policy',
policyFilepath,
depFilepath
]);
if (shouldFail) {
assert.notStrictEqual(status, 0);
} else {
assert.strictEqual(status, 0);
}
}

test({
shouldFail: false,
integrity: `sha256-${hash('sha256', depBody)}`,
});
test({
shouldFail: true,
integrity: `1sha256-${hash('sha256', depBody)}`,
});
test({
shouldFail: true,
integrity: 'hoge',
});
test({
shouldFail: true,
integrity: `sha256-${hash('sha256', depBody)}sha256-${hash(
'sha256',
depBody
)}`,
});

0 comments on commit a565853

Please sign in to comment.