File: cypress/e2e/request_backoff.cy.js

Recommend this page to a friend!
  Classes of Arturs Sosins   Countly Web SDK   ???   Download  
File: cypress/e2e/???
Role: Auxiliary script
Content type: text/plain
Description: Configuration script
Class: Countly Web SDK
Track site accesses and errors the Countly API
Author: By
Last change:
Date: 22 days ago
Size: 24,219 bytes
 

Contents

Class file image Download
/* eslint-disable require-jsdoc */ var Countly = require("../../lib/countly"); var hp = require("../support/helper.js"); /** 1. check 30 sec timeout works(request are not removed): (2) 2. check back off works(all conditions met): 1. D | | : backs off (3) 3. check back off not used(for each combination of conditions) 2. D | FQ | : - (4) 3. D | | OR : - (6) 4. D | FQ | OR : - (5) 5. | FQ | OR : - (7) 6. | FQ | : - (9) 7. | | OR : - (8) 4. check base server works normally 8. | | : - (1) */ function initMain(beat, time, test_mode, backoff, sc) { Countly.init({ app_key: "YOUR_APP_KEY", url: "http://localhost:9000", debug: true, queue_size: 10, beat_interval: beat, test_mode_time: time, test_mode: test_mode, disable_backoff_mechanism: backoff, behavior_settings: sc }); } describe("Request Back-off Mechanism Tests", () => { beforeEach(() => { cy.wait(1000); }); afterEach(() => { cy.task("stopServer"); }); it("1_Basic test checking server works", () => { hp.haltAndClearStorage(() => { cy.task("setResponseDelay", 0); cy.task("startServer"); initMain(); Countly.add_event({ key: "test_1" }); cy.wait(3000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); cy.task("stopServer"); }); }); }); }); it("2_Basic timeout test", () => { hp.haltAndClearStorage(() => { cy.task("setResponseDelay", 31000); cy.task("startServer"); initMain(); Countly.add_event({ key: "test_1" }); cy.wait(40000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(1); cy.task("stopServer"); }); }); }); }); it("3_Initial backoff test Delay", () => { hp.haltAndClearStorage(() => { cy.task("setResponseDelay", 11000); cy.task("startServer"); initMain(); Countly.add_event({ key: "test_1" }); cy.wait(15000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); Countly.add_event({ key: "test_2" }); cy.task("setResponseDelay", 0); Countly.get_available_feedback_widgets(); cy.wait(40000).then(() => { cy.task("getRequests").then((reqs) => { cy.log("Server Requests: " + JSON.stringify(reqs)); let found_test = 0; let found_sc = 0; let found_feedback = 0; let found_hc = 0; for (let i = 0; i < reqs.length; i++) { if (reqs[i].body.includes("test_1")) { found_test++; } if (reqs[i].body.includes("hc=")) { found_hc++; } if (reqs[i].body.includes("feedback")) { found_feedback++; } if (reqs[i].body.includes("method=sc")) { found_sc++; } } expect(found_test).to.equal(1); expect(found_hc).to.equal(1); expect(found_feedback).to.equal(1); expect(found_sc).to.equal(1); }); cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(1); cy.wait(21000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); Countly.add_event({ key: "test_3" }); cy.wait(2000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); cy.task("stopServer"); }); }); }); }); }); }); }); }); }); }); it("3_B_backoff turned off Delay", () => { hp.haltAndClearStorage(() => { cy.task("setResponseDelay", 11000); cy.task("startServer"); initMain(undefined, undefined, undefined, true); Countly.add_event({ key: "test_1" }); cy.wait(15000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); Countly.add_event({ key: "test_2" }); Countly.attempt_to_send_stored_requests(); cy.task("setResponseDelay", 0); cy.wait(5000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); cy.task("stopServer"); }); }); }); }); }); }); it("3_C_sc backoff turned off Delay", () => { hp.haltAndClearStorage(() => { cy.task("setResponseDelay", 11000); cy.task("startServer"); initMain(undefined, undefined, undefined, undefined, { c: { bom: false } }); Countly.add_event({ key: "test_1" }); cy.wait(15000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); Countly.add_event({ key: "test_2" }); Countly.attempt_to_send_stored_requests(); cy.task("setResponseDelay", 0); cy.wait(8000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); cy.task("stopServer"); }); }); }); }); }); }); it("3_D_sc timeout and duration Delay", () => { hp.haltAndClearStorage(() => { cy.task("setResponseDelay", 3500); cy.task("startServer"); initMain(undefined, undefined, undefined, undefined, { c: { bom_at: 3, bom_d: 15 } }); Countly.add_event({ key: "test_1" }); cy.wait(5000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); Countly.add_event({ key: "test_2" }); cy.task("setResponseDelay", 0); Countly.get_available_feedback_widgets(); cy.wait(5000).then(() => { cy.task("getRequests").then((reqs) => { cy.log("Server Requests: " + JSON.stringify(reqs)); expect(reqs.length).to.equal(4); let found_test_1 = 0; let found_sc = 0; let found_feedback = 0; let found_hc = 0; for (let i = 0; i < reqs.length; i++) { if (reqs[i].body.includes("test_1")) { found_test_1++; } if (reqs[i].body.includes("hc=")) { found_hc++; } if (reqs[i].body.includes("feedback")) { found_feedback++; } if (reqs[i].body.includes("method=sc")) { found_sc++; } } expect(found_test_1).to.equal(1); expect(found_hc).to.equal(1); expect(found_feedback).to.equal(1); expect(found_sc).to.equal(1); }); cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(1); cy.wait(9000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); Countly.add_event({ key: "test_3" }); cy.wait(2000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); cy.task("stopServer"); }); }); }); }); }); }); }); }); }); }); it("3_E_sc timeout, duration and age Delay", () => { hp.haltAndClearStorage(() => { cy.task("setResponseDelay", 3500); cy.task("startServer"); var oldTimestamp = Math.floor(Date.now() / 1000) - 2 * 60 * 60; // 2 hours ago initMain(undefined, oldTimestamp, undefined, undefined, { c: { bom_at: 3, bom_d: 15, bom_ra: 1 } }); Countly.add_event({ key: "test_1" }); cy.wait(5000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); Countly.add_event({ key: "test_2" }); cy.task("setResponseDelay", 0); Countly.get_available_feedback_widgets(); cy.wait(5000).then(() => { cy.task("getRequests").then((reqs) => { cy.log("Server Requests: " + JSON.stringify(reqs)); expect(reqs.length).to.equal(5); let found_test_1 = 0; let found_test_2 = 0; let found_sc = 0; let found_feedback = 0; let found_hc = 0; for (let i = 0; i < reqs.length; i++) { if (reqs[i].body.includes("test_1")) { found_test_1++; } if (reqs[i].body.includes("test_2")) { found_test_2++; } if (reqs[i].body.includes("hc=")) { found_hc++; } if (reqs[i].body.includes("feedback")) { found_feedback++; } if (reqs[i].body.includes("method=sc")) { found_sc++; } } expect(found_test_1).to.equal(1); expect(found_test_2).to.equal(1); expect(found_hc).to.equal(1); expect(found_feedback).to.equal(1); expect(found_sc).to.equal(1); cy.task("stopServer"); }); }); }); }); }); }); it("3_F_sc request queue percentage Delay", () => { hp.haltAndClearStorage(() => { cy.task("setResponseDelay", 3500); cy.task("startServer"); initMain(undefined, undefined, undefined, undefined, { c: { bom_at: 3, bom_d: 15, bom_rqp: 0.1 } }); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); cy.wait(12000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); cy.task("stopServer"); }); }); }); }); it("4_No backoff if queue is crowded Delay_FullQueue", () => { hp.haltAndClearStorage(() => { cy.task("setResponseDelay", 31000); cy.task("startServer"); initMain(); Countly.add_event({ key: "test_1" }); Countly.userData.set("key", "value"); Countly.userData.save(); Countly.add_event({ key: "test_1" }); Countly.userData.set("key", "value"); Countly.userData.save(); Countly.add_event({ key: "test_1" }); Countly.userData.set("key", "value"); Countly.userData.save(); Countly.add_event({ key: "test_1" }); Countly.userData.set("key", "value"); Countly.userData.save(); cy.wait(42000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(8); cy.task("setResponseDelay", 11000); cy.wait(90000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(5); cy.wait(21000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(4); cy.wait(30000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(4); cy.task("stopServer"); }); }); }); }); }); }); }); }); }); }); it("5_No backoff if queue is crowded Delay_FullQueue_OldRequest", () => { hp.haltAndClearStorage(() => { cy.task("setResponseDelay", 31000); cy.task("startServer"); var oldTimestamp = Math.floor(Date.now() / 1000) - 10 * 365 * 24 * 60 * 60; // 10 years old timestamp in ms initMain(undefined, oldTimestamp); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); cy.wait(42000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(8); cy.task("setResponseDelay", 11000); cy.wait(90000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(5); cy.wait(66000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); cy.task("stopServer"); }); }); }); }); }); }); }); }); it("6_No backoff if queue is crowded Delay_OldRequest", () => { hp.haltAndClearStorage(() => { cy.task("setResponseDelay", 11000); cy.task("startServer"); var oldTimestamp = Math.floor(Date.now() / 1000) - 25 * 60 * 60; // 25 hours old timestamp in ms initMain(undefined, oldTimestamp, true); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.test_mode_rq(false); cy.wait(45000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); cy.task("stopServer"); }); }); }); }); it("7_No backoff if queue is crowded FullQueue_OldRequest", () => { hp.haltAndClearStorage(() => { cy.task("setResponseDelay", 0); cy.task("startServer"); var oldTimestamp = Math.floor(Date.now() / 1000) - 25 * 60 * 60; // 25 hours old timestamp in ms initMain(undefined, oldTimestamp, true); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.test_mode_rq(false); cy.wait(10000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); cy.task("stopServer"); }); }); }); }); it("8_No backoff OldRequest", () => { hp.haltAndClearStorage(() => { cy.task("setResponseDelay", 0); cy.task("startServer"); var oldTimestamp = Math.floor(Date.now() / 1000) - 25 * 60 * 60; // 25 hours old timestamp in ms initMain(undefined, oldTimestamp, true); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.test_mode_rq(false); cy.wait(10000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); cy.task("stopServer"); }); }); }); }); it("9_No backoff FullQueue", () => { hp.haltAndClearStorage(() => { cy.task("setResponseDelay", 0); cy.task("startServer"); initMain(undefined, undefined, true); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.add_event({ key: "test_1" }); Countly.attempt_to_send_stored_requests(); Countly.test_mode_rq(false); cy.wait(10000).then(() => { cy.fetch_local_request_queue().then((rq) => { cy.log("Request Queue: " + JSON.stringify(rq)); expect(rq.length).to.equal(0); cy.task("stopServer"); }); }); }); }); });