Skip to content

Commit

Permalink
Update tests with new auth payloads and notification types
Browse files Browse the repository at this point in the history
  • Loading branch information
EmilianoSanchez committed Sep 3, 2024
1 parent 3fbbfa6 commit 087e772
Show file tree
Hide file tree
Showing 26 changed files with 112 additions and 111 deletions.
18 changes: 9 additions & 9 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@splitsoftware/splitio",
"version": "10.27.1-rc.3",
"version": "10.27.1-rc.4",
"description": "Split SDK",
"files": [
"README.md",
Expand Down Expand Up @@ -40,7 +40,7 @@
"node": ">=6"
},
"dependencies": {
"@splitsoftware/splitio-commons": "1.16.1-rc.11",
"@splitsoftware/splitio-commons": "1.16.1-rc.12",
"@types/google.analytics": "0.0.40",
"@types/ioredis": "^4.28.0",
"bloom-filters": "^3.0.0",
Expand Down
24 changes: 12 additions & 12 deletions src/__tests__/browserSuites/push-fallback.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import streamingPausedControlPriMessage2 from '../mocks/message.CONTROL.STREAMIN
import streamingDisabledControlPriMessage from '../mocks/message.CONTROL.STREAMING_DISABLED.control_pri.1586987434950.json';

import splitUpdateMessage from '../mocks/message.SPLIT_UPDATE.1457552649999.json';
import mySegmentsUpdateMessage from '../mocks/message.MEMBERSHIP_MS_UPDATE.UNBOUNDED.1457552640000.json';
import mySegmentsUpdateMessage from '../mocks/message.MEMBERSHIPS_MS_UPDATE.UNBOUNDED.1457552640000.json';

import authPushEnabledNicolas from '../mocks/auth.pushEnabled.nicolas@split.io.json';
import authPushEnabledNicolasAndMarcio from '../mocks/auth.pushEnabled.nicolas@split.io.marcio@split.io.json';
Expand Down Expand Up @@ -66,11 +66,11 @@ const MILLIS_CREATE_CLIENT_DURING_PUSH = MILLIS_STREAMING_UP_OCCUPANCY + 50;
const MILLIS_SPLIT_UPDATE_EVENT_DURING_PUSH = MILLIS_STREAMING_UP_OCCUPANCY + 100;

const MILLIS_STREAMING_PAUSED_CONTROL = MILLIS_SPLIT_UPDATE_EVENT_DURING_PUSH + 100;
const MILLIS_MEMBERSHIP_MS_UPDATE_EVENT_DURING_POLLING = MILLIS_STREAMING_PAUSED_CONTROL + 100;
const MILLIS_MEMBERSHIPS_MS_UPDATE_EVENT_DURING_POLLING = MILLIS_STREAMING_PAUSED_CONTROL + 100;
const MILLIS_STREAMING_RESUMED_CONTROL = MILLIS_STREAMING_PAUSED_CONTROL + settings.scheduler.featuresRefreshRate + 100;
const MILLIS_MEMBERSHIP_MS_UPDATE_EVENT_DURING_PUSH = MILLIS_STREAMING_RESUMED_CONTROL + 100;
const MILLIS_MEMBERSHIPS_MS_UPDATE_EVENT_DURING_PUSH = MILLIS_STREAMING_RESUMED_CONTROL + 100;

const MILLIS_STREAMING_PAUSED_CONTROL_2 = MILLIS_MEMBERSHIP_MS_UPDATE_EVENT_DURING_PUSH + 100;
const MILLIS_STREAMING_PAUSED_CONTROL_2 = MILLIS_MEMBERSHIPS_MS_UPDATE_EVENT_DURING_PUSH + 100;
const MILLIS_STREAMING_RESET_WHILE_PUSH_DOWN = MILLIS_STREAMING_PAUSED_CONTROL_2 + 100;
const MILLIS_STREAMING_RESET_WHILE_PUSH_UP = MILLIS_STREAMING_RESET_WHILE_PUSH_DOWN + settings.scheduler.featuresRefreshRate;
const MILLIS_STREAMING_DISABLED_CONTROL = MILLIS_STREAMING_RESET_WHILE_PUSH_UP + 100;
Expand All @@ -88,11 +88,11 @@ const MILLIS_DESTROY = MILLIS_STREAMING_DISABLED_CONTROL + settings.scheduler.fe
* 0.55 secs: create a new client while streaming -> initial fetch (/memberships/marcio), auth, SSE connection and syncAll (/splitChanges, /memberships/nicolas, /memberships/marcio)
* 0.6 secs: SPLIT_UPDATE event -> /splitChanges
* 0.7 secs: Streaming down (CONTROL event) -> fetch due to fallback to polling (/splitChanges, /memberships/nicolas, /memberships/marcio)
* 0.8 secs: MEMBERSHIP_MS_UPDATE event ignored
* 0.8 secs: MEMBERSHIPS_MS_UPDATE event ignored
* 0.9 secs: periodic fetch due to polling (/splitChanges)
* 0.95 secs: periodic fetch due to polling (/memberships/nicolas, /memberships/marcio)
* 1.0 secs: Streaming up (CONTROL event) -> syncAll (/splitChanges, /memberships/nicolas, /memberships/marcio)
* 1.1 secs: Unbounded MEMBERSHIP_MS_UPDATE event -> /memberships/nicolas, /memberships/marcio
* 1.1 secs: Unbounded MEMBERSHIPS_MS_UPDATE event -> /memberships/nicolas, /memberships/marcio
* 1.2 secs: Streaming down (CONTROL event) -> fetch due to fallback to polling (/splitChanges, /memberships/nicolas, /memberships/marcio)
* 1.3 secs: STREAMING_RESET control event -> auth, SSE connection, syncAll and stop polling
* 1.5 secs: STREAMING_RESET control event -> auth, SSE connection, syncAll
Expand All @@ -110,7 +110,7 @@ export function testFallback(fetchMock, assert) {
// mock SSE open and message events
setMockListener((eventSourceInstance) => {

const expectedSSEurl = `${url(settings, '/sse')}?channels=NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_NTcwOTc3MDQx_mySegments,NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_splits,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_pri,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_sec&accessToken=${authPushEnabledNicolas.token}&v=1.1&heartbeats=true&SplitSDKVersion=${settings.version}&SplitSDKClientKey=h-1>`;
const expectedSSEurl = `${url(settings, '/sse')}?channels=NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_control,NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_flags,NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_memberships,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_pri,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_sec&accessToken=${authPushEnabledNicolas.token}&v=1.1&heartbeats=true&SplitSDKVersion=${settings.version}&SplitSDKClientKey=h-1>`;
assert.equals(eventSourceInstance.url, expectedSSEurl, 'EventSource URL is the expected');

setTimeout(() => {
Expand All @@ -136,7 +136,7 @@ export function testFallback(fetchMock, assert) {
secondClient = splitio.client(secondUserKey);

setMockListener((eventSourceInstance) => {
const expectedSSEurl = `${url(settings, '/sse')}?channels=NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_MjE0MTkxOTU2Mg%3D%3D_mySegments,NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_NTcwOTc3MDQx_mySegments,NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_splits,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_pri,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_sec&accessToken=${authPushEnabledNicolasAndMarcio.token}&v=1.1&heartbeats=true&SplitSDKVersion=${settings.version}&SplitSDKClientKey=h-1>`;
const expectedSSEurl = `${url(settings, '/sse')}?channels=NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_control,NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_flags,NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_memberships,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_pri,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_sec&accessToken=${authPushEnabledNicolasAndMarcio.token}&v=1.1&heartbeats=true&SplitSDKVersion=${settings.version}&SplitSDKClientKey=h-1>`;
assert.equals(eventSourceInstance.url, expectedSSEurl, 'new EventSource URL is the expected');
eventSourceInstance.emitOpen();

Expand All @@ -155,7 +155,7 @@ export function testFallback(fetchMock, assert) {
setTimeout(() => {
assert.equal(eventSourceInstance.readyState, EventSourceMock.OPEN, 'EventSource connection keeps opened after PUSH_SUBSYSTEM_DOWN (STREAMING_PAUSED event)');
eventSourceInstance.emitMessage(mySegmentsUpdateMessage);
}, MILLIS_MEMBERSHIP_MS_UPDATE_EVENT_DURING_POLLING - MILLIS_CREATE_CLIENT_DURING_PUSH); // send a MEMBERSHIP_MS_UPDATE event while polling, to check that we are ignoring it
}, MILLIS_MEMBERSHIPS_MS_UPDATE_EVENT_DURING_POLLING - MILLIS_CREATE_CLIENT_DURING_PUSH); // send a MEMBERSHIPS_MS_UPDATE event while polling, to check that we are ignoring it

setTimeout(() => {
eventSourceInstance.emitMessage(streamingResumedControlPriMessage);
Expand All @@ -167,7 +167,7 @@ export function testFallback(fetchMock, assert) {
assert.equal(client.getTreatment('real_split'), 'on', 'evaluation with updated segment');
});
eventSourceInstance.emitMessage(mySegmentsUpdateMessage);
}, MILLIS_MEMBERSHIP_MS_UPDATE_EVENT_DURING_PUSH - MILLIS_CREATE_CLIENT_DURING_PUSH); // send a MEMBERSHIP_MS_UPDATE event
}, MILLIS_MEMBERSHIPS_MS_UPDATE_EVENT_DURING_PUSH - MILLIS_CREATE_CLIENT_DURING_PUSH); // send a MEMBERSHIPS_MS_UPDATE event

setTimeout(() => {
eventSourceInstance.emitMessage(streamingPausedControlPriMessage2);
Expand Down Expand Up @@ -271,10 +271,10 @@ export function testFallback(fetchMock, assert) {
fetchMock.getOnce(url(settings, '/memberships/nicolas%40split.io'), { status: 200, body: membershipsNicolasMock1 });
fetchMock.getOnce(url(settings, '/memberships/marcio%40split.io'), { status: 200, body: membershipsMarcio });

// fetch due to MEMBERSHIP_MS_UPDATE event
// fetch due to MEMBERSHIPS_MS_UPDATE event
fetchMock.getOnce(url(settings, '/memberships/nicolas%40split.io'), function () {
const lapse = Date.now() - start;
assert.true(nearlyEqual(lapse, MILLIS_MEMBERSHIP_MS_UPDATE_EVENT_DURING_PUSH), 'sync due to MEMBERSHIP_MS_UPDATE event');
assert.true(nearlyEqual(lapse, MILLIS_MEMBERSHIPS_MS_UPDATE_EVENT_DURING_PUSH), 'sync due to MEMBERSHIPS_MS_UPDATE event');
return { status: 200, body: membershipsNicolasMock2 };
});
fetchMock.getOnce(url(settings, '/memberships/marcio%40split.io'), { status: 200, body: membershipsMarcio });
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ export function testPushRetriesDueToSseErrors(fetchMock, assert) {
let start, splitio, client, ready = false;
const expectedTimeToSSEsuccess = (settings.scheduler.pushRetryBackoffBase * Math.pow(2, 0) + settings.scheduler.pushRetryBackoffBase * Math.pow(2, 1));

const expectedSSEurl = `${url(settings, '/sse')}?channels=NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_NTcwOTc3MDQx_mySegments,NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_splits,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_pri,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_sec&accessToken=${authPushEnabledNicolas.token}&v=1.1&heartbeats=true&SplitSDKVersion=${settings.version}&SplitSDKClientKey=h-1>`;
const expectedSSEurl = `${url(settings, '/sse')}?channels=NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_control,NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_flags,NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_memberships,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_pri,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_sec&accessToken=${authPushEnabledNicolas.token}&v=1.1&heartbeats=true&SplitSDKVersion=${settings.version}&SplitSDKClientKey=h-1>`;
let sseattempts = 0;
setMockListener(function (eventSourceInstance) {
assert.equal(eventSourceInstance.url, expectedSSEurl, 'SSE url is correct');
Expand Down
30 changes: 15 additions & 15 deletions src/__tests__/browserSuites/push-synchronization-retries.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import membershipsMarcio from '../mocks/memberships.marcio@split.io.json';

import splitUpdateMessage from '../mocks/message.SPLIT_UPDATE.1457552649999.json';
import oldSplitUpdateMessage from '../mocks/message.SPLIT_UPDATE.1457552620999.json';
import mySegmentsUpdateMessage from '../mocks/message.MEMBERSHIP_MS_UPDATE.UNBOUNDED.1457552640000.json';
import mySegmentsUpdateMessage from '../mocks/message.MEMBERSHIPS_MS_UPDATE.UNBOUNDED.1457552640000.json';
import splitKillMessage from '../mocks/message.SPLIT_KILL.1457552650000.json';

import authPushEnabledNicolas from '../mocks/auth.pushEnabled.nicolas@split.io.json';
Expand Down Expand Up @@ -48,8 +48,8 @@ const MILLIS_RETRY_FOR_FIRST_SPLIT_UPDATE_EVENT = 300;

const MILLIS_SECOND_SPLIT_UPDATE_EVENT = 400;

const MILLIS_MYSEGMENTS_UPDATE_V3_EVENT = 500;
const MILLIS_THIRD_RETRY_FOR_MYSEGMENT_UPDATE_EVENT = 1200;
const MILLIS_MEMBERSHIPS_MS_UPDATE = 500;
const MILLIS_THIRD_RETRY_FOR_MEMBERSHIPS_MS_UPDATE = 1200;

const MILLIS_SPLIT_KILL_EVENT = 1300;
const MILLIS_THIRD_RETRY_FOR_SPLIT_KILL_EVENT = 2000;
Expand All @@ -64,10 +64,10 @@ const MILLIS_THIRD_RETRY_FOR_SPLIT_KILL_EVENT = 2000;
*
* 0.4 secs: SPLIT_UPDATE event with old changeNumber -> SDK_UPDATE not triggered
*
* 0.5 secs: Unbounded MEMBERSHIP_MS_UPDATE event -> /memberships/marcio@split.io OK, /memberships/nicolas@split.io: network error
* 0.6 secs: Unbounded MEMBERSHIP_MS_UPDATE event -> /memberships/nicolas@split.io retry: invalid JSON response
* 0.8 secs: Unbounded MEMBERSHIP_MS_UPDATE event -> /memberships/nicolas@split.io: server error
* 1.2 secs: Unbounded MEMBERSHIP_MS_UPDATE event -> /memberships/nicolas@split.io retry: success -> SDK_UPDATE triggered
* 0.5 secs: Unbounded MEMBERSHIPS_MS_UPDATE event -> /memberships/marcio@split.io OK, /memberships/nicolas@split.io: network error
* 0.6 secs: Unbounded MEMBERSHIPS_MS_UPDATE event -> /memberships/nicolas@split.io retry: invalid JSON response
* 0.8 secs: Unbounded MEMBERSHIPS_MS_UPDATE event -> /memberships/nicolas@split.io: server error
* 1.2 secs: Unbounded MEMBERSHIPS_MS_UPDATE event -> /memberships/nicolas@split.io retry: success -> SDK_UPDATE triggered
*
* 1.3 secs: SPLIT_KILL event -> /splitChanges: outdated response -> SDK_UPDATE triggered although fetches fail
* 1.4 secs: SPLIT_KILL event -> /splitChanges retry: network error
Expand All @@ -88,7 +88,7 @@ export function testSynchronizationRetries(fetchMock, assert) {
setMockListener(function (eventSourceInstance) {
start = Date.now();

const expectedSSEurl = `${url(settings, '/sse')}?channels=NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_NTcwOTc3MDQx_mySegments,NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_splits,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_pri,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_sec&accessToken=${authPushEnabledNicolas.token}&v=1.1&heartbeats=true&SplitSDKVersion=${settings.version}&SplitSDKClientKey=h-1>`;
const expectedSSEurl = `${url(settings, '/sse')}?channels=NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_control,NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_flags,NzM2MDI5Mzc0_NDEzMjQ1MzA0Nw%3D%3D_memberships,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_pri,%5B%3Foccupancy%3Dmetrics.publishers%5Dcontrol_sec&accessToken=${authPushEnabledNicolas.token}&v=1.1&heartbeats=true&SplitSDKVersion=${settings.version}&SplitSDKClientKey=h-1>`;
assert.equals(eventSourceInstance.url, expectedSSEurl, 'EventSource URL is the expected');

/* events on first SSE connection */
Expand All @@ -114,11 +114,11 @@ export function testSynchronizationRetries(fetchMock, assert) {
assert.equal(client.getTreatment('splitters'), 'off', 'evaluation with initial MySegments list');
client.once(client.Event.SDK_UPDATE, () => {
const lapse = Date.now() - start;
assert.true(nearlyEqual(lapse, MILLIS_THIRD_RETRY_FOR_MYSEGMENT_UPDATE_EVENT), 'SDK_UPDATE due to MEMBERSHIP_MS_UPDATE event');
assert.true(nearlyEqual(lapse, MILLIS_THIRD_RETRY_FOR_MEMBERSHIPS_MS_UPDATE), 'SDK_UPDATE due to MEMBERSHIPS_MS_UPDATE event');
assert.equal(client.getTreatment('splitters'), 'on', 'evaluation with updated MySegments list');
});
eventSourceInstance.emitMessage(mySegmentsUpdateMessage);
}, MILLIS_MYSEGMENTS_UPDATE_V3_EVENT); // send a MEMBERSHIP_MS_UPDATE event with a new changeNumber after 0.4 seconds
}, MILLIS_MEMBERSHIPS_MS_UPDATE); // send a MEMBERSHIPS_MS_UPDATE event with a new changeNumber after 0.4 seconds

setTimeout(() => {
client.once(client.Event.SDK_UPDATE, () => {
Expand Down Expand Up @@ -163,16 +163,16 @@ export function testSynchronizationRetries(fetchMock, assert) {
return { status: 200, body: splitChangesMock3 };
});

// fetch due to first MEMBERSHIP_MS_UPDATE event
// fetch due to first MEMBERSHIPS_MS_UPDATE event
fetchMock.getOnce(url(settings, '/memberships/nicolas%40split.io'), { throws: new TypeError('Network error') });
// fetch retry for MEMBERSHIP_MS_UPDATE event, due to previous fail
// fetch retry for MEMBERSHIPS_MS_UPDATE event, due to previous fail
fetchMock.getOnce(url(settings, '/memberships/nicolas%40split.io'), { status: 200, body: '{ "since": 1457552620999, "til' }); // invalid JSON response
// fetch retry for MEMBERSHIP_MS_UPDATE event, due to previous fail
// fetch retry for MEMBERSHIPS_MS_UPDATE event, due to previous fail
fetchMock.getOnce(url(settings, '/memberships/nicolas%40split.io'), { status: 500, body: 'server error' });
// second fetch retry for MEMBERSHIP_MS_UPDATE event, due to previous fail
// second fetch retry for MEMBERSHIPS_MS_UPDATE event, due to previous fail
fetchMock.getOnce(url(settings, '/memberships/nicolas%40split.io'), function () {
const lapse = Date.now() - start;
assert.true(nearlyEqual(lapse, MILLIS_THIRD_RETRY_FOR_MYSEGMENT_UPDATE_EVENT), 'sync second retry for MEMBERSHIP_MS_UPDATE event');
assert.true(nearlyEqual(lapse, MILLIS_THIRD_RETRY_FOR_MEMBERSHIPS_MS_UPDATE), 'sync second retry for MEMBERSHIPS_MS_UPDATE event');
return { status: 200, body: membershipsNicolasMock2 };
});

Expand Down
Loading

0 comments on commit 087e772

Please sign in to comment.