Skip to content

Commit 6cc08c1

Browse files
Streaming tests
1 parent e1192c9 commit 6cc08c1

7 files changed

+102
-9
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"type": "message",
3+
"data": "{\"id\":\"1111\",\"clientId\":\"pri:ODc1NjQyNzY1\",\"timestamp\":1588254699236,\"encoding\":\"json\",\"channel\":\"xxxx_xxxx_flags\",\"data\": \"{\\\"type\\\":\\\"RB_SEGMENT_UPDATE\\\",\\\"changeNumber\\\":1457552649999}\"}"
4+
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
22
"type": "message",
3-
"data": "{\"id\":\"1111\",\"clientId\":\"pri:ODc1NjQyNzY1\",\"timestamp\":1588254699236,\"encoding\":\"json\",\"channel\":\"xxxx_xxxx_flags\",\"data\":\"{\\\"type\\\":\\\"RB_SEGMENT_UPDATE\\\",\\\"changeNumber\\\":1684265694505,\\\"pcn\\\":111,\\\"c\\\":0,\\\"d\\\":\\\"eyJuYW1lIjoicmJzX3Rlc3QiLCJzdGF0dXMiOiJBQ1RJVkUiLCJ0cmFmZmljVHlwZU5hbWUiOiJ1c2VyIiwiZXhjbHVkZWQiOnsia2V5cyI6W10sInNlZ21lbnRzIjpbXX0sImNvbmRpdGlvbnMiOlt7Im1hdGNoZXJHcm91cCI6eyJjb21iaW5lciI6IkFORCIsIm1hdGNoZXJzIjpbeyJrZXlTZWxlY3RvciI6eyJ0cmFmZmljVHlwZSI6InVzZXIifSwibWF0Y2hlclR5cGUiOiJBTExfS0VZUyIsIm5lZ2F0ZSI6ZmFsc2V9XX19XX0=\\\"}\"}"
3+
"data": "{\"id\":\"1111\",\"clientId\":\"pri:ODc1NjQyNzY1\",\"timestamp\":1588254699236,\"encoding\":\"json\",\"channel\":\"xxxx_xxxx_flags\",\"data\":\"{\\\"type\\\":\\\"RB_SEGMENT_UPDATE\\\",\\\"changeNumber\\\":1684265694505,\\\"pcn\\\":1457552649999,\\\"c\\\":0,\\\"d\\\":\\\"eyJuYW1lIjoicmJzX3Rlc3QiLCJzdGF0dXMiOiJBQ1RJVkUiLCJ0cmFmZmljVHlwZU5hbWUiOiJ1c2VyIiwiZXhjbHVkZWQiOnsia2V5cyI6W10sInNlZ21lbnRzIjpbXX0sImNvbmRpdGlvbnMiOlt7Im1hdGNoZXJHcm91cCI6eyJjb21iaW5lciI6IkFORCIsIm1hdGNoZXJzIjpbeyJrZXlTZWxlY3RvciI6eyJ0cmFmZmljVHlwZSI6InVzZXIifSwibWF0Y2hlclR5cGUiOiJBTExfS0VZUyIsIm5lZ2F0ZSI6ZmFsc2V9XX19XX0=\\\"}\"}"
44
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
22
"type": "message",
3-
"data": "{\"id\":\"1111\",\"clientId\":\"pri:ODc1NjQyNzY1\",\"timestamp\":1588254699236,\"encoding\":\"json\",\"channel\":\"xxxx_xxxx_flags\",\"data\":\"{\\\"type\\\":\\\"RB_SEGMENT_UPDATE\\\",\\\"changeNumber\\\":1684265694505,\\\"pcn\\\":111,\\\"c\\\":1,\\\"d\\\":\\\"H4sIAAAAAAAA/3SSQYucQBCF/0udPeTsbYhLCJl4cQiEsCxl+3SabbuluppFFv976HGiE3Bu3b73PnxV/Unmyn5AncYWQuWXglS47625zBNqHkElpQihgvx6kza+KaLSZj05FwyrDf4RsH9tgO6mxO2grClSSaevl++/Xqigd+tcFnt2EQV16Dk5vQhYR3ilkqggdkO45U3wnc3oSOWfz/2af3q1jqzmCvkmIU1UZsvYWp8r0qmudsMKeMfcwMFokGx+GMFen1XFtklBpU/OLRvibjudz28/Xn43eVIYOPvuZTKgQm89ugZDrvNzTVasvNIK+rhahbPxSEueZa7TCLHmQG6hH4B/rjQq1g8HeocJvoM381E4BAc+wsZnvIemZ5YBz+our0tBE4v+W+Iad9zC5f0tr7cd93ZIwv9ZInQ723ESxJjlykZu9we0/A0AAP//PlHpp9gCAAA=\\\"}\"}"
3+
"data": "{\"id\":\"1111\",\"clientId\":\"pri:ODc1NjQyNzY1\",\"timestamp\":1588254699236,\"encoding\":\"json\",\"channel\":\"xxxx_xxxx_flags\",\"data\":\"{\\\"type\\\":\\\"RB_SEGMENT_UPDATE\\\",\\\"changeNumber\\\":1684265694506,\\\"pcn\\\":1684265694505,\\\"c\\\":1,\\\"d\\\":\\\"H4sIAAAAAAAA/0zOwWrDMBAE0H+Zs75At9CGUhpySSiUYoIij1MTSwraFdQY/XtRU5ccd3jDzoLoAmGRz3JSisJA1GkRWGyejq/vWxhodsMw+uN84/7OizDDgN9+Kj172AVXzgL72RkIL4FRf69q4FPsRx1TbMGC4NR/Mb/kVG6t51M4j5G5Pdw/w6zgrq+cD5zoNeWGH5asK+p/4y/d7Hant+3HAQaRF6eEHdwkrF2tXf0JAAD//9JucZnyAAAA\\\"}\"}"
44
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
{
22
"type": "message",
3-
"data": "{\"id\":\"1111\",\"clientId\":\"pri:ODc1NjQyNzY1\",\"timestamp\":1588254699236,\"encoding\":\"json\",\"channel\":\"xxxx_xxxx_flags\",\"data\":\"{\\\"type\\\":\\\"RB_SEGMENT_UPDATE\\\",\\\"changeNumber\\\":1684265694505,\\\"pcn\\\":111,\\\"c\\\":2,\\\"d\\\":\\\"eJx0kkGLnEAQhf9LnT3k7G2ISwiZeHEIhLAsZft0mm27pbqaRRb/e+hxohNwbt2+9z58Vf1J5sp+QJ3GFkLll4JUuO+tucwTah5BJaUIoYL8epM2vimi0mY9ORcMqw3+EbB/bYDupsTtoKwpUkmnr5fvv16ooHfrXBZ7dhEFdeg5Ob0IWEd4pZKoIHZDuOVN8J3N6Ejln8/9mn96tY6s5gr5JiFNVGbL2FqfK9KprnbDCnjH3MDBaJBsfhjBXp9VxbZJQaVPzi0b4m47nc9vP15+N3lSGDj77mUyoEJvPboGQ67zc01WrLzSCvq4WoWz8UhLnmWu0wix5kBuoR+Af640KtYPB3qHCb6DN/NROAQHPsLGZ7yHpmeWAc/qLq9LQROL/lviGnfcwuX9La+3Hfd2SML/WSJ0O9txEsSY5cpGbvcHtPwNAAD//9u9Atc=\\\"}\"}"
3+
"data": "{\"id\":\"1111\",\"clientId\":\"pri:ODc1NjQyNzY1\",\"timestamp\":1588254699236,\"encoding\":\"json\",\"channel\":\"xxxx_xxxx_flags\",\"data\":\"{\\\"type\\\":\\\"RB_SEGMENT_UPDATE\\\",\\\"changeNumber\\\":1684265694507,\\\"pcn\\\":1684265694506,\\\"c\\\":2,\\\"d\\\":\\\"eJxMzsFqwzAQBNB/mbO+QLfQhlIackkolGKCIo9TE0sK2hXUGP17UVOXHHd4w86C6AJhkc9yUorCQNRpEVhsno6v71sYaHbDMPrjfOP+zosww4Dffio9e9gFV84C+9kZCC+BUX+vauBT7EcdU2zBguDUfzG/5FRuredTOI+RuT3cP8Os4K6vnA+c6DXlhh+WrCvqf+Mv3ex2p7ftxwEGkRenhB3cJKxdrV39CQAA//8FrVMM\\\"}\"}"
44
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
{
2+
"rbs": {
3+
"s": 100,
4+
"t": 1457552649999,
5+
"d": [
6+
{
7+
"changeNumber": 1457552649999,
8+
"name": "test_rule_based_segment",
9+
"status": "ACTIVE",
10+
"trafficTypeName": "user",
11+
"excluded": {
12+
"keys": [ "mauro@split.io" ],
13+
"segments": [ "segment_excluded_by_rbs" ]
14+
},
15+
"conditions": [
16+
{
17+
"matcherGroup": {
18+
"combiner": "AND",
19+
"matchers": [
20+
{
21+
"keySelector": {
22+
"trafficType": "user"
23+
},
24+
"matcherType": "ENDS_WITH",
25+
"negate": false,
26+
"whitelistMatcherData": {
27+
"whitelist": [
28+
"@split.io"
29+
]
30+
}
31+
}
32+
]
33+
}
34+
}
35+
]
36+
}
37+
]
38+
}
39+
}

src/__tests__/nodeSuites/push-synchronization-retries.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ export function testSynchronizationRetries(fetchMock, assert) {
208208
return { status: 408, body: 'request timeout' };
209209
});
210210

211-
mockSegmentChanges(fetchMock, new RegExp(`${url(settings, '/segmentChanges')}/(employees|developers)`), [key]);
211+
mockSegmentChanges(fetchMock, new RegExp(`${url(settings, '/segmentChanges')}/(employees|developers|segment_excluded_by_rbs)`), [key]);
212212

213213
fetchMock.get(new RegExp('.*'), function (url) {
214214
assert.fail('unexpected GET request with url: ' + url);

src/__tests__/nodeSuites/push-synchronization.spec.js

Lines changed: 55 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import splitChangesMock6 from '../mocks/splitchanges.since.1684265694505.till.16
77
import splitChangesMock7 from '../mocks/splitchanges.since.1684265694506.till.1684265694526.SPLIT_UPDATE.json';
88
import splitChangesMock8 from '../mocks/splitchanges.since.1684265694526.till.1684265694546.SPLIT_UPDATE.json';
99
import splitChangesMock9 from '../mocks/splitchanges.since.1684265694546.till.1684265694556.SPLIT_UPDATE.json';
10+
import splitChangesMock10 from '../mocks/splitchanges.since.100.till.1457552649999.RB_SEGMENT_UPDATE.json';
1011

1112
import splitUpdateMessage from '../mocks/message.SPLIT_UPDATE.1457552649999.json';
1213
import oldSplitUpdateMessage from '../mocks/message.SPLIT_UPDATE.1457552620999.json';
@@ -19,6 +20,11 @@ import iffuSplitUpdateMessageZeroPCN from '../mocks/message.SPLIT_UPDATE.IFFU.16
1920
import iffuSplitUpdateMessageMissingPCN from '../mocks/message.SPLIT_UPDATE.IFFU.1684265694545.json';
2021
import iffuSplitUpdateMessageArchivedFF from '../mocks/message.SPLIT_UPDATE.IFFU.1684265694555.json';
2122

23+
import rbsUpdateMessage from '../mocks/message.RB_SEGMENT_UPDATE.1457552649999.json';
24+
import iffuRbsUpdateNoCompressionMessage from '../mocks/message.RB_SEGMENT_UPDATE.C0.json';
25+
import iffuRbsUpdateGZipMessage from '../mocks/message.RB_SEGMENT_UPDATE.C1.json';
26+
import iffuRbsUpdateZLibMessage from '../mocks/message.RB_SEGMENT_UPDATE.C2.json';
27+
2228
import authPushEnabled from '../mocks/auth.pushEnabled.node.json';
2329

2430
import { nearlyEqual, mockSegmentChanges, url, hasNoCacheHeader } from '../testUtils';
@@ -59,7 +65,11 @@ const MILLIS_IFFU_UPDATE_EVENT_WITH_OLD_CHANGENUMBER = 900;
5965
const MILLIS_IFFU_UPDATE_EVENT_WITH_ZERO_PCN = 1000;
6066
const MILLIS_IFFU_UPDATE_EVENT_WITH_MISSING_PCN = 1100;
6167
const MILLIS_IFFU_UPDATE_EVENT_WITH_ARCHIVED = 1200;
62-
const MILLIS_DESTROY = 1300;
68+
const MILLIS_FIRST_RB_SEGMENT_UPDATE_EVENT = 1300;
69+
const MILLIS_IFFU_RB_SEGMENT_UPDATE_C0_EVENT = 1400;
70+
const MILLIS_IFFU_RB_SEGMENT_UPDATE_C1_EVENT = 1500;
71+
const MILLIS_IFFU_RB_SEGMENT_UPDATE_C2_EVENT = 1600;
72+
const MILLIS_DESTROY = 1700;
6373

6474
/**
6575
* Sequence of calls:
@@ -76,9 +86,13 @@ const MILLIS_DESTROY = 1300;
7686
* 1.0 secs: SPLIT_UPDATE IFFU event with pcn = 0 -> /splitChanges
7787
* 1.1 secs: SPLIT_UPDATE IFFU event with previous change number !== current change number -> /splitChanges
7888
* 1.2 secs: SPLIT_UPDATE IFFU event with ARCHIVED feature flag in notification and Base64 encoded + zLib (c==2) -> /splitChanges
89+
* 1.3 secs: RB_SEGMENT_UPDATE event -> /splitChanges
90+
* 1.4 secs: RB_SEGMENT_UPDATE IFFU event with no compression
91+
* 1.5 secs: RB_SEGMENT_UPDATE IFFU event with Gzip compression
92+
* 1.6 secs: RB_SEGMENT_UPDATE IFFU event with ZLib compression
7993
*/
8094
export function testSynchronization(fetchMock, assert) {
81-
assert.plan(49);
95+
assert.plan(53);
8296
fetchMock.reset();
8397
__setEventSource(EventSourceMock);
8498

@@ -204,14 +218,46 @@ export function testSynchronization(fetchMock, assert) {
204218
eventSourceInstance.emitMessage(iffuSplitUpdateMessageArchivedFF);
205219
}, MILLIS_IFFU_UPDATE_EVENT_WITH_ARCHIVED); // send a SPLIT_UPDATE event with pcn = 0 after 1.1 seconds
206220

221+
setTimeout(() => {
222+
client.once(client.Event.SDK_UPDATE, () => {
223+
const lapse = Date.now() - start;
224+
assert.true(nearlyEqual(lapse, MILLIS_FIRST_RB_SEGMENT_UPDATE_EVENT), 'SDK_UPDATE due to RB_SEGMENT_UPDATE event');
225+
});
226+
eventSourceInstance.emitMessage(rbsUpdateMessage);
227+
}, MILLIS_FIRST_RB_SEGMENT_UPDATE_EVENT); // send a RB_SEGMENT_UPDATE event with a new changeNumber
228+
229+
setTimeout(() => {
230+
client.once(client.Event.SDK_UPDATE, () => {
231+
const lapse = Date.now() - start;
232+
assert.true(nearlyEqual(lapse, MILLIS_IFFU_RB_SEGMENT_UPDATE_C0_EVENT), 'SDK_UPDATE due to RB_SEGMENT_UPDATE IFFU event with no compression');
233+
});
234+
eventSourceInstance.emitMessage(iffuRbsUpdateNoCompressionMessage);
235+
}, MILLIS_IFFU_RB_SEGMENT_UPDATE_C0_EVENT); // send a IFFU RB_SEGMENT_UPDATE event
236+
237+
setTimeout(() => {
238+
client.once(client.Event.SDK_UPDATE, () => {
239+
const lapse = Date.now() - start;
240+
assert.true(nearlyEqual(lapse, MILLIS_IFFU_RB_SEGMENT_UPDATE_C1_EVENT), 'SDK_UPDATE due to RB_SEGMENT_UPDATE IFFU event with GZip compression');
241+
});
242+
eventSourceInstance.emitMessage(iffuRbsUpdateGZipMessage);
243+
}, MILLIS_IFFU_RB_SEGMENT_UPDATE_C1_EVENT); // send a IFFU RB_SEGMENT_UPDATE event
244+
245+
setTimeout(() => {
246+
client.once(client.Event.SDK_UPDATE, () => {
247+
const lapse = Date.now() - start;
248+
assert.true(nearlyEqual(lapse, MILLIS_IFFU_RB_SEGMENT_UPDATE_C2_EVENT), 'SDK_UPDATE due to RB_SEGMENT_UPDATE IFFU event with ZLib compression');
249+
});
250+
eventSourceInstance.emitMessage(iffuRbsUpdateZLibMessage);
251+
}, MILLIS_IFFU_RB_SEGMENT_UPDATE_C2_EVENT); // send a IFFU RB_SEGMENT_UPDATE event
252+
207253
setTimeout(() => {
208254
client.destroy().then(() => {
209255
assert.equal(client.getTreatment(key, 'whitelist'), 'control', 'evaluation returns control if client is destroyed');
210-
// @TODO SDK_UPDATE should be emitted 9 times, but currently it is being emitted twice on SPLIT_KILL
211-
assert.equal(sdkUpdateCount, 10, 'SDK_UPDATE should be emitted 10 times');
256+
// @TODO SDK_UPDATE should be emitted 13 times, but currently it is being emitted twice on SPLIT_KILL
257+
assert.equal(sdkUpdateCount, 14, 'SDK_UPDATE should be emitted 14 times');
212258
assert.end();
213259
});
214-
}, MILLIS_DESTROY); // destroy client after 1.3 second
260+
}, MILLIS_DESTROY); // destroy client
215261
});
216262

217263
// initial auth
@@ -309,7 +355,11 @@ export function testSynchronization(fetchMock, assert) {
309355
return { status: 200, body: splitChangesMock9 };
310356
});
311357

358+
// fetch due to RB_SEGMENTS_UPDATE event
359+
fetchMock.getOnce(url(settings, '/splitChanges?s=1.3&since=1684265694556&rbSince=100'), { status: 200, body: splitChangesMock10 });
360+
312361
mockSegmentChanges(fetchMock, new RegExp(`${url(settings, '/segmentChanges')}/employees`), [key]);
362+
mockSegmentChanges(fetchMock, new RegExp(`${url(settings, '/segmentChanges')}/segment_excluded_by_rbs`), []);
313363
// Special case: empty segment with -1 till
314364
mockSegmentChanges(fetchMock, new RegExp(`${url(settings, '/segmentChanges')}/developers`), [], -1);
315365
mockSegmentChanges(fetchMock, { url: new RegExp(`${url(settings, '/segmentChanges')}/new_segment`), repeat: 2 }, [otherUserKey]);

0 commit comments

Comments
 (0)