From a5139779f97ed0f4230093d56c2cfaef5d38e4cb Mon Sep 17 00:00:00 2001 From: sanex3339 Date: Wed, 19 Feb 2020 10:12:39 +0300 Subject: [PATCH] Changed evaluationWorker helper --- ...ebugProtectionFunctionCallTemplate.spec.ts | 144 +++++++----------- .../templates/SelfDefendingTemplate.spec.ts | 96 +++++------- test/helpers/evaluateInWorker.ts | 44 +++--- .../JavaScriptObfuscatorRuntime.spec.ts | 33 ++-- 4 files changed, 127 insertions(+), 190 deletions(-) diff --git a/test/functional-tests/custom-code-helpers/debug-protection/templates/DebugProtectionFunctionCallTemplate.spec.ts b/test/functional-tests/custom-code-helpers/debug-protection/templates/DebugProtectionFunctionCallTemplate.spec.ts index 1636a5cf..8b8ece05 100644 --- a/test/functional-tests/custom-code-helpers/debug-protection/templates/DebugProtectionFunctionCallTemplate.spec.ts +++ b/test/functional-tests/custom-code-helpers/debug-protection/templates/DebugProtectionFunctionCallTemplate.spec.ts @@ -22,7 +22,7 @@ describe('DebugProtectionFunctionCallTemplate', function () { let obfuscatedCode: string, evaluationResult: number = 0; - beforeEach((done) => { + beforeEach(() => { const code: string = readFileAsString(__dirname + '/fixtures/input.js'); obfuscatedCode = JavaScriptObfuscator.obfuscate( @@ -34,20 +34,14 @@ describe('DebugProtectionFunctionCallTemplate', function () { } ).getObfuscatedCode(); - evaluateInWorker( - obfuscatedCode, - (response: number) => { - evaluationResult = response; - done(); - }, - () => { - done(); - }, - () => { - done(); - }, - evaluationTimeout - ); + return evaluateInWorker(obfuscatedCode, evaluationTimeout) + .then((result: string | null) => { + if (!result) { + return; + } + + evaluationResult = parseInt(result, 10); + }); }); it('should correctly evaluate code with enabled debug protection', () => { @@ -61,7 +55,7 @@ describe('DebugProtectionFunctionCallTemplate', function () { let obfuscatedCode: string, evaluationResult: number = 0; - beforeEach((done) => { + beforeEach(() => { const code: string = readFileAsString(__dirname + '/fixtures/input.js'); obfuscatedCode = JavaScriptObfuscator.obfuscate( @@ -73,20 +67,14 @@ describe('DebugProtectionFunctionCallTemplate', function () { } ).getObfuscatedCode(); - evaluateInWorker( - obfuscatedCode, - (response: number) => { - evaluationResult = response; - done(); - }, - () => { - done(); - }, - () => { - done(); - }, - evaluationTimeout - ); + return evaluateInWorker(obfuscatedCode, evaluationTimeout) + .then((result: string | null) => { + if (!result) { + return; + } + + evaluationResult = parseInt(result, 10); + }); }); it('should correctly evaluate code with enabled debug protection', () => { @@ -100,7 +88,7 @@ describe('DebugProtectionFunctionCallTemplate', function () { let obfuscatedCode: string, evaluationResult: number = 0; - beforeEach((done) => { + beforeEach(() => { const code: string = readFileAsString(__dirname + '/fixtures/input.js'); obfuscatedCode = JavaScriptObfuscator.obfuscate( @@ -113,20 +101,14 @@ describe('DebugProtectionFunctionCallTemplate', function () { } ).getObfuscatedCode(); - evaluateInWorker( - obfuscatedCode, - (response: number) => { - evaluationResult = response; - done(); - }, - () => { - done(); - }, - () => { - done(); - }, - evaluationTimeout - ); + return evaluateInWorker(obfuscatedCode, evaluationTimeout) + .then((result: string | null) => { + if (!result) { + return; + } + + evaluationResult = parseInt(result, 10); + }); }); it('should correctly evaluate code with enabled debug protection', () => { @@ -140,7 +122,7 @@ describe('DebugProtectionFunctionCallTemplate', function () { let obfuscatedCode: string, evaluationResult: number = 0; - beforeEach((done) => { + beforeEach(() => { const code: string = readFileAsString(__dirname + '/fixtures/input.js'); obfuscatedCode = JavaScriptObfuscator.obfuscate( @@ -152,20 +134,14 @@ describe('DebugProtectionFunctionCallTemplate', function () { } ).getObfuscatedCode(); - evaluateInWorker( - obfuscatedCode, - (response: number) => { - evaluationResult = response; - done(); - }, - () => { - done(); - }, - () => { - done(); - }, - evaluationTimeout - ); + return evaluateInWorker(obfuscatedCode, evaluationTimeout) + .then((result: string | null) => { + if (!result) { + return; + } + + evaluationResult = parseInt(result, 10); + }); }); it('should correctly evaluate code with enabled debug protection', () => { @@ -179,7 +155,7 @@ describe('DebugProtectionFunctionCallTemplate', function () { let obfuscatedCode: string, evaluationResult: number = 0; - beforeEach((done) => { + beforeEach(() => { const code: string = readFileAsString(__dirname + '/fixtures/input.js'); obfuscatedCode = JavaScriptObfuscator.obfuscate( @@ -191,20 +167,14 @@ describe('DebugProtectionFunctionCallTemplate', function () { ).getObfuscatedCode(); obfuscatedCode = obfuscatedCode.replace(/\+\+ *_0x([a-f0-9]){4,6}/, ''); - evaluateInWorker( - obfuscatedCode, - (response: number) => { - evaluationResult = response; - done(); - }, - () => { - done(); - }, - () => { - done(); - }, - evaluationTimeout - ); + return evaluateInWorker(obfuscatedCode, evaluationTimeout) + .then((result: string | null) => { + if (!result) { + return; + } + + evaluationResult = parseInt(result, 10); + }); }); it('should enter code in infinity loop', () => { @@ -218,7 +188,7 @@ describe('DebugProtectionFunctionCallTemplate', function () { let obfuscatedCode: string, evaluationResult: number = 0; - beforeEach((done) => { + beforeEach(() => { const code: string = readFileAsString(__dirname + '/fixtures/single-call.js'); obfuscatedCode = JavaScriptObfuscator.obfuscate( @@ -229,20 +199,14 @@ describe('DebugProtectionFunctionCallTemplate', function () { } ).getObfuscatedCode(); - evaluateInWorker( - obfuscatedCode, - (response: number) => { - evaluationResult = response; - done(); - }, - () => { - done(); - }, - () => { - done(); - }, - evaluationTimeout - ); + return evaluateInWorker(obfuscatedCode, evaluationTimeout) + .then((result: string | null) => { + if (!result) { + return; + } + + evaluationResult = parseInt(result, 10); + }); }); it('should correctly evaluate code with enabled debug protection', () => { diff --git a/test/functional-tests/custom-code-helpers/self-defending/templates/SelfDefendingTemplate.spec.ts b/test/functional-tests/custom-code-helpers/self-defending/templates/SelfDefendingTemplate.spec.ts index da8df3a4..f1ea77d9 100644 --- a/test/functional-tests/custom-code-helpers/self-defending/templates/SelfDefendingTemplate.spec.ts +++ b/test/functional-tests/custom-code-helpers/self-defending/templates/SelfDefendingTemplate.spec.ts @@ -21,7 +21,7 @@ describe('SelfDefendingTemplate', function () { let obfuscatedCode: string, evaluationResult: number = 0; - before((done) => { + before(() => { const code: string = readFileAsString(__dirname + '/fixtures/input.js'); obfuscatedCode = JavaScriptObfuscator.obfuscate( @@ -33,20 +33,14 @@ describe('SelfDefendingTemplate', function () { } ).getObfuscatedCode(); - evaluateInWorker( - obfuscatedCode, - (response: number) => { - evaluationResult = response; - done(); - }, - () => { - done(); - }, - () => { - done(); - }, - evaluationTimeout - ); + return evaluateInWorker(obfuscatedCode, evaluationTimeout) + .then((result: string | null) => { + if (!result) { + return; + } + + evaluationResult = parseInt(result, 10); + }); }); it('should correctly evaluate code with enabled self defending', () => { @@ -60,7 +54,7 @@ describe('SelfDefendingTemplate', function () { let obfuscatedCode: string, evaluationResult: number = 0; - before((done) => { + before(() => { const code: string = readFileAsString(__dirname + '/fixtures/input.js'); obfuscatedCode = JavaScriptObfuscator.obfuscate( @@ -72,20 +66,14 @@ describe('SelfDefendingTemplate', function () { } ).getObfuscatedCode(); - evaluateInWorker( - obfuscatedCode, - (response: number) => { - evaluationResult = response; - done(); - }, - () => { - done(); - }, - () => { - done(); - }, - evaluationTimeout - ); + return evaluateInWorker(obfuscatedCode, evaluationTimeout) + .then((result: string | null) => { + if (!result) { + return; + } + + evaluationResult = parseInt(result, 10); + }); }); it('should correctly evaluate code with enabled self defending', () => { @@ -99,7 +87,7 @@ describe('SelfDefendingTemplate', function () { let obfuscatedCode: string, evaluationResult: number = 0; - before((done) => { + before(() => { const code: string = readFileAsString(__dirname + '/fixtures/input.js'); obfuscatedCode = JavaScriptObfuscator.obfuscate( @@ -112,20 +100,14 @@ describe('SelfDefendingTemplate', function () { } ).getObfuscatedCode(); - evaluateInWorker( - obfuscatedCode, - (response: number) => { - evaluationResult = response; - done(); - }, - () => { - done(); - }, - () => { - done(); - }, - evaluationTimeout - ); + return evaluateInWorker(obfuscatedCode, evaluationTimeout) + .then((result: string | null) => { + if (!result) { + return; + } + + evaluationResult = parseInt(result, 10); + }); }); it('should correctly evaluate code with enabled self defending', () => { @@ -139,7 +121,7 @@ describe('SelfDefendingTemplate', function () { let obfuscatedCode: string, evaluationResult: number = 0; - before((done) => { + before(() => { const code: string = readFileAsString(__dirname + '/fixtures/input.js'); obfuscatedCode = JavaScriptObfuscator.obfuscate( @@ -155,20 +137,14 @@ describe('SelfDefendingTemplate', function () { .replace(/,/g, ', ') .replace(/;/g, '; '); - evaluateInWorker( - obfuscatedCode, - (response: number) => { - evaluationResult = response; - done(); - }, - () => { - done(); - }, - () => { - done(); - }, - evaluationTimeout - ); + return evaluateInWorker(obfuscatedCode, evaluationTimeout) + .then((result: string | null) => { + if (!result) { + return; + } + + evaluationResult = parseInt(result, 10); + }); }); it('should enter code in infinity loop', () => { diff --git a/test/helpers/evaluateInWorker.ts b/test/helpers/evaluateInWorker.ts index cccbbb4c..857a6973 100644 --- a/test/helpers/evaluateInWorker.ts +++ b/test/helpers/evaluateInWorker.ts @@ -2,34 +2,32 @@ import { spawn, Thread, Worker } from 'threads/dist'; /** * @param {string} code - * @param {(result: any, code: string) => void} resultCallback - * @param {(error: Error, code: string) => void} errorCallback - * @param {() => void} timeoutCallback - * @param {number} waitTimeout * @returns {Promise} */ -export async function evaluateInWorker( +export function evaluateInWorker( code: string, - resultCallback: (result: any, code: string) => void, - errorCallback: (error: Error, code: string) => void, - timeoutCallback: () => void, waitTimeout: number -): Promise { - const evaluationWorker = await spawn(new Worker('./workers/evaluation-worker')); +): Promise { + return new Promise(async (resolve, reject) => { + const evaluationWorker = await spawn(new Worker('./workers/evaluation-worker')); - const timeout = setTimeout(async () => { - await Thread.terminate(evaluationWorker); - timeoutCallback(); - }, waitTimeout); + const timeout = setTimeout(async () => { + await Thread.terminate(evaluationWorker); + resolve(null); + }, waitTimeout); - try { - const result: string = await evaluationWorker.evaluate(code); + try { + const result: string = await evaluationWorker.evaluate(code); - resultCallback(result, code); - } catch (error) { - errorCallback(error, code); - } finally { - clearTimeout(timeout); - await Thread.terminate(evaluationWorker); - } + clearTimeout(timeout); + await Thread.terminate(evaluationWorker); + + resolve(result); + } catch (error) { + clearTimeout(timeout); + await Thread.terminate(evaluationWorker); + + reject(error); + } + }); } \ No newline at end of file diff --git a/test/runtime-tests/JavaScriptObfuscatorRuntime.spec.ts b/test/runtime-tests/JavaScriptObfuscatorRuntime.spec.ts index b739203a..4bfced36 100644 --- a/test/runtime-tests/JavaScriptObfuscatorRuntime.spec.ts +++ b/test/runtime-tests/JavaScriptObfuscatorRuntime.spec.ts @@ -185,25 +185,24 @@ describe('JavaScriptObfuscator runtime eval', function () { } ).getObfuscatedCode(); - evaluateInWorker( + return evaluateInWorker( ` - ${getEnvironmentCode()} - ${obfuscatedCode} - module.exports.obfuscate('var foo = 1;').getObfuscatedCode(); - `, - (response: string) => { - evaluationResult = response; - done(); - }, - (error: Error) => { - evaluationResult = error.message; - done(); - }, - () => { - done(); - }, + ${getEnvironmentCode()} + ${obfuscatedCode} + module.exports.obfuscate('var foo = 1;').getObfuscatedCode(); + `, evaluationTimeout - ); + ) + .then((result: string | null) => { + if (!result) { + return; + } + + evaluationResult = result; + }) + .catch((error) => { + evaluationResult = error.message; + }); }); it('should obfuscate code without any runtime errors after obfuscation: Variant #3 obfuscator', () => {