Bladeren bron

Changed evaluationWorker helper

sanex3339 5 jaren geleden
bovenliggende
commit
a5139779f9

+ 54 - 90
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', () => {

+ 36 - 60
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', () => {

+ 21 - 23
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<void>}
  */
-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<void> {
-    const evaluationWorker = await spawn(new Worker('./workers/evaluation-worker'));
+): Promise<string | null> {
+    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);
+        }
+    });
 }

+ 16 - 17
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', () => {