You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.7 KiB
104 lines
2.7 KiB
import { strict as assert } from 'assert';
|
|
import browser from 'webextension-polyfill';
|
|
import sinon from 'sinon';
|
|
import {
|
|
PLATFORM_CHROME,
|
|
PLATFORM_EDGE,
|
|
METAMASK_BETA_CHROME_ID,
|
|
METAMASK_PROD_CHROME_ID,
|
|
METAMASK_FLASK_CHROME_ID,
|
|
} from '../../shared/constants/app';
|
|
import {
|
|
checkForMultipleVersionsRunning,
|
|
onMessageReceived,
|
|
} from './detect-multiple-instances';
|
|
import * as util from './lib/util';
|
|
|
|
describe('multiple instances running detector', function () {
|
|
const PING_MESSAGE = 'isRunning';
|
|
|
|
let sendMessageStub = sinon.stub();
|
|
|
|
beforeEach(async function () {
|
|
sinon.replace(browser, 'runtime', {
|
|
sendMessage: sendMessageStub,
|
|
id: METAMASK_BETA_CHROME_ID,
|
|
});
|
|
|
|
sinon.stub(util, 'getPlatform').callsFake((_) => {
|
|
return PLATFORM_CHROME;
|
|
});
|
|
});
|
|
|
|
afterEach(function () {
|
|
sinon.restore();
|
|
});
|
|
|
|
describe('checkForMultipleVersionsRunning', function () {
|
|
it('should send ping message to multiple instances', async function () {
|
|
await checkForMultipleVersionsRunning();
|
|
|
|
assert(sendMessageStub.calledTwice);
|
|
assert(
|
|
sendMessageStub
|
|
.getCall(0)
|
|
.calledWithExactly(METAMASK_PROD_CHROME_ID, PING_MESSAGE),
|
|
);
|
|
assert(
|
|
sendMessageStub
|
|
.getCall(1)
|
|
.calledWithExactly(METAMASK_FLASK_CHROME_ID, PING_MESSAGE),
|
|
);
|
|
});
|
|
|
|
it('should not send ping message if platform is not Chrome or Firefox', async function () {
|
|
util.getPlatform.restore();
|
|
sendMessageStub = sinon.stub();
|
|
|
|
sinon.stub(util, 'getPlatform').callsFake((_) => {
|
|
return PLATFORM_EDGE;
|
|
});
|
|
|
|
await checkForMultipleVersionsRunning();
|
|
|
|
assert(sendMessageStub.notCalled);
|
|
});
|
|
|
|
it('should not expose an error outside if sendMessage throws', async function () {
|
|
sinon.restore();
|
|
|
|
sinon.replace(browser, 'runtime', {
|
|
sendMessage: sinon.stub().throws(),
|
|
id: METAMASK_BETA_CHROME_ID,
|
|
});
|
|
|
|
const spy = sinon.spy(checkForMultipleVersionsRunning);
|
|
|
|
await checkForMultipleVersionsRunning();
|
|
|
|
assert(!spy.threw());
|
|
});
|
|
});
|
|
|
|
describe('onMessageReceived', function () {
|
|
beforeEach(function () {
|
|
sinon.spy(console, 'warn');
|
|
});
|
|
|
|
it('should print warning message to on ping message received', async function () {
|
|
onMessageReceived(PING_MESSAGE);
|
|
|
|
assert(
|
|
console.warn.calledWithExactly(
|
|
'Warning! You have multiple instances of MetaMask running!',
|
|
),
|
|
);
|
|
});
|
|
|
|
it('should not print warning message if wrong message received', async function () {
|
|
onMessageReceived(PING_MESSAGE.concat('wrong'));
|
|
|
|
assert(console.warn.notCalled);
|
|
});
|
|
});
|
|
});
|
|
|