1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00
metamask-extension/test/e2e/tests/lockdown.spec.js
Erik Marks 5f0fd9d1c2
Add lockdown e2e test (#12562)
This PR adds an e2e test to ensure that the background and UI environments are locked down. It reuses the logic from the `protect-intrinsics.test.js`, and runs in both Chrome and Firefox.
2021-11-02 17:01:01 -07:00

90 lines
2.3 KiB
JavaScript

const { strict: assert } = require('assert');
const { Browser } = require('selenium-webdriver');
const {
getGlobalProperties,
testIntrinsic,
} = require('../../helpers/protect-intrinsics-helpers');
const { withFixtures } = require('../helpers');
const { PAGES } = require('../webdriver/driver');
const isFirefox = process.env.SELENIUM_BROWSER === Browser.FIREFOX;
/**
* This script iterates over all named intrinsics and tests that they are locked
* down per ses/lockdown.
*
* We set globalThis to window in Firefox because the test fails otherwise.
* We believe this is due to some Selenium-related shenanigans. In the browser,
* this behavior is not a problem.
*/
const lockdownTestScript = `
${isFirefox ? 'globalThis = window;' : ''}
const assert = {
equal: (value, comparison, message) => {
if (value !== comparison) {
throw new Error(message || 'not equal');
}
},
ok: (value, message) => {
if (!value) {
throw new Error(message || 'not ok');
}
},
};
${getGlobalProperties.toString()}
${testIntrinsic.toString()}
try {
getGlobalProperties().forEach((propertyName) => {
console.log('Testing intrinsic:', propertyName);
testIntrinsic(propertyName);
})
console.log('Lockdown test successful!');
return true;
} catch (error) {
console.log('Lockdown test failed.', error);
return false;
}
`;
describe('lockdown', function () {
const ganacheOptions = {
accounts: [
{
secretKey:
'0x7C9529A67102755B7E6102D6D950AC5D5863C98713805CEC576B945B15B71EAC',
balance: 25000000000000000000,
},
],
};
it('the UI and background environments are locked down', async function () {
await withFixtures(
{
// The fixtures used here is arbitrary. Any fixture would do.
fixtures: 'imported-account',
ganacheOptions,
title: this.test.title,
},
async ({ driver }) => {
await driver.navigate(PAGES.HOME);
assert.equal(
await driver.executeScript(lockdownTestScript),
true,
'The UI environment should be locked down.',
);
await driver.navigate(PAGES.BACKGROUND);
assert.equal(
await driver.executeScript(lockdownTestScript),
true,
'The background environment should be locked down.',
);
},
);
});
});