From d242cf649f8e86881ca7071ef8d8fb37997d5820 Mon Sep 17 00:00:00 2001 From: Eduardo Speroni Date: Fri, 4 Mar 2022 19:35:52 -0300 Subject: [PATCH 1/4] test: add native worker android tests --- Workers/NativeWorkWorker.js | 11 +++++ Workers/index.js | 98 ++++++++++++++++++++++++++++--------- 2 files changed, 85 insertions(+), 24 deletions(-) create mode 100644 Workers/NativeWorkWorker.js diff --git a/Workers/NativeWorkWorker.js b/Workers/NativeWorkWorker.js new file mode 100644 index 0000000..d88947b --- /dev/null +++ b/Workers/NativeWorkWorker.js @@ -0,0 +1,11 @@ +onmessage = function (msg) { + try { + const myUrl = new java.net.URL("http://google.com"); + postMessage("success"); + } catch (e) { + console.log(e); + postMessage("failed"); + } + + +} \ No newline at end of file diff --git a/Workers/index.js b/Workers/index.js index 97ac8f1..2c9163c 100644 --- a/Workers/index.js +++ b/Workers/index.js @@ -3,7 +3,7 @@ describe("TNS Workers", () => { var originalTimeout; var DEFAULT_TIMEOUT_BEFORE_ASSERT = 500; - if(global.NSObject) { // if platform is iOS + if (global.NSObject) { // if platform is iOS DEFAULT_TIMEOUT_BEFORE_ASSERT = 1000; } else { // if Android // necessary in order to accommodate slower and older android emulators @@ -136,7 +136,7 @@ describe("TNS Workers", () => { value: { str: "A message from main", number: 42, - obj: { prop: "value", innerObj: { innnerProp: 67 } }, + obj: { prop: "value", innerObj: { innnerProp: 67 } }, bool: true, nullValue: null }, @@ -251,7 +251,7 @@ describe("TNS Workers", () => { var messagesCount = 100; var allWorkersResponseCounter = 0; - for(let id = 0; id < workersCount; id++) { + for (let id = 0; id < workersCount; id++) { let worker = new Worker("./EvalWorker"); let responseCounter = 0; worker.onmessage = (msg) => { @@ -277,7 +277,7 @@ describe("TNS Workers", () => { worker.postMessage({ eval: - "onclose = () => {\ + "onclose = () => {\ postMessage('closed');\ close();\ };\ @@ -301,7 +301,7 @@ describe("TNS Workers", () => { worker.postMessage({ eval: - "onerror = () => {\ + "onerror = () => {\ postMessage('onerror called');\ throw new Error('error');\ };\ @@ -326,12 +326,61 @@ describe("TNS Workers", () => { }, DEFAULT_TIMEOUT_BEFORE_ASSERT); }); + it("Should not throw errors when accessing native objects and terminating", (done) => { + if (global.NSObject) { + done(); + return; + } + var onerrorCounter = 0; + let message = ""; + const delay = (ms) => { + new Promise((resolve) => setTimeout(resolve, ms)); + }; + const run = async () => { + const newWorker = () => { + return new Promise((resolve) => { + const worker = new Worker("./NativeWorkWorker.js"); + worker.onerror = (err) => { + onerrorCounter++; + resolve(worker); + }; + worker.onmessage = (result) => { + try { + if (result.data !== "success") { + onerrorCounter++; + } + if (onerrorCounter === 0) { + worker.terminate(); + } + } catch (e) { + console.log(e); + } + resolve(worker); + }; + worker.postMessage('go!'); + }); + }; + + for (let i = 0; i < 5; i++) { + const worker = await newWorker(); + await delay(50); + // worker.terminate(); + // await delay(90); + // worker.terminate(); + } + }; + run().then(() => { + expect(onerrorCounter).toBe(0); + done(); + }); + }); + it("If error is thrown in close() should call onerror but should not execute any other tasks ", (done) => { var worker = new Worker("./EvalWorker.js"); worker.postMessage({ eval: - "onmessage = (msg) => { postMessage(msg.data + ' pong'); };\ + "onmessage = (msg) => { postMessage(msg.data + ' pong'); };\ onerror = (err) => { postMessage('pong'); return false; };\ onclose = () => { throw new Error('error thrown from close()'); };\ close();" @@ -438,7 +487,7 @@ describe("TNS Workers", () => { worker.postMessage({ eval: - "onerror = function(err) { \ + "onerror = function(err) { \ return false; \ }; \ throw 42;" @@ -454,7 +503,7 @@ describe("TNS Workers", () => { worker.postMessage({ eval: - "onerror = function(err) { \ + "onerror = function(err) { \ postMessage(err); \ return true; \ }; \ @@ -480,11 +529,11 @@ describe("TNS Workers", () => { }, DEFAULT_TIMEOUT_BEFORE_ASSERT); }); - if(global.NSObject) { // platform is iOS + if (global.NSObject) { // platform is iOS it("no crash during or after runtime teardown on iOS", (done) => { // reduce number of workers on older (32-bit devices) to avoid sporadic failures due to timeout const numWorkers = (interop.sizeof(interop.types.id) == 4) ? 4 : 10; - const timeout = DEFAULT_TIMEOUT_BEFORE_ASSERT*3.5; + const timeout = DEFAULT_TIMEOUT_BEFORE_ASSERT * 3.5; let messageProducerTimeout = true; let iteration = 0; @@ -500,17 +549,18 @@ describe("TNS Workers", () => { let onCloseEvents = 0; let onStartEvents = 0; - for (let i = 0; i < numWorkers; i++) {; - const worker = new Worker("./TeardownCrashWorker.js"); - worker.onmessage = (msg) => { - if (msg.data === "closing") { - onCloseEvents++; - } - else if (msg.data === "starting") { - onStartEvents++; - worker.postMessage(i); - } - } + for (let i = 0; i < numWorkers; i++) { + ; + const worker = new Worker("./TeardownCrashWorker.js"); + worker.onmessage = (msg) => { + if (msg.data === "closing") { + onCloseEvents++; + } + else if (msg.data === "starting") { + onStartEvents++; + worker.postMessage(i); + } + } } setTimeout(() => { @@ -523,15 +573,15 @@ describe("TNS Workers", () => { done(); }, timeout); }); - - it("Check for leaked runtimes", function(done) { + + it("Check for leaked runtimes", function (done) { setTimeout(() => { const runtimesCount = TNSRuntime.runtimes().count; expect(runtimesCount).toBe(expectedAliveRuntimes, `Found ${runtimesCount} runtimes alive. Expected ${expectedAliveRuntimes}.`); done(); }, 1000); }); - + } // platform is iOS function generateRandomString(strLen) { From 6a8b2cbe9fd5333d098a4f19d26cd57f98dfe5ad Mon Sep 17 00:00:00 2001 From: Igor Randjelovic Date: Sat, 5 Mar 2022 20:00:26 +0100 Subject: [PATCH 2/4] Update NativeWorkWorker.js --- Workers/NativeWorkWorker.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Workers/NativeWorkWorker.js b/Workers/NativeWorkWorker.js index d88947b..b1ab31f 100644 --- a/Workers/NativeWorkWorker.js +++ b/Workers/NativeWorkWorker.js @@ -6,6 +6,4 @@ onmessage = function (msg) { console.log(e); postMessage("failed"); } - - -} \ No newline at end of file +} From 33d674c159e7616b88e22a121874a19c6aff7bd1 Mon Sep 17 00:00:00 2001 From: Igor Randjelovic Date: Sat, 5 Mar 2022 20:04:14 +0100 Subject: [PATCH 3/4] chore: cleanup --- Workers/index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/Workers/index.js b/Workers/index.js index 2c9163c..ec9e7ea 100644 --- a/Workers/index.js +++ b/Workers/index.js @@ -550,7 +550,6 @@ describe("TNS Workers", () => { let onCloseEvents = 0; let onStartEvents = 0; for (let i = 0; i < numWorkers; i++) { - ; const worker = new Worker("./TeardownCrashWorker.js"); worker.onmessage = (msg) => { if (msg.data === "closing") { From 2af9f8c2936c1e95072de298b852003e65d17078 Mon Sep 17 00:00:00 2001 From: Igor Randjelovic Date: Sat, 5 Mar 2022 20:05:44 +0100 Subject: [PATCH 4/4] chore: cleanup --- Workers/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Workers/index.js b/Workers/index.js index ec9e7ea..8d6cf4c 100644 --- a/Workers/index.js +++ b/Workers/index.js @@ -331,8 +331,7 @@ describe("TNS Workers", () => { done(); return; } - var onerrorCounter = 0; - let message = ""; + let onerrorCounter = 0; const delay = (ms) => { new Promise((resolve) => setTimeout(resolve, ms)); };