From 50c916216ce9785ff8792b31eb60254b62a48132 Mon Sep 17 00:00:00 2001 From: d98762625 Date: Tue, 14 Aug 2018 12:03:10 +0100 Subject: [PATCH] adding more tests --- src/node/api.mjs | 4 + src/node/config/excludedOperations.mjs | 3 + src/node/index.mjs | 15 --- test/tests/nodeApi/ops.mjs | 155 +++++++++++++++++++++++++ 4 files changed, 162 insertions(+), 15 deletions(-) diff --git a/src/node/api.mjs b/src/node/api.mjs index cb36ffa0..4b44daee 100644 --- a/src/node/api.mjs +++ b/src/node/api.mjs @@ -81,6 +81,10 @@ function transformArgs(originalArgs, newArgs) { * @param input */ const ensureIsDish = function ensureIsDish(input) { + if (!input) { + return new SyncDish(); + } + let dish; if (input instanceof SyncDish) { dish = input; diff --git a/src/node/config/excludedOperations.mjs b/src/node/config/excludedOperations.mjs index 441a36d9..47e03018 100644 --- a/src/node/config/excludedOperations.mjs +++ b/src/node/config/excludedOperations.mjs @@ -22,4 +22,7 @@ export default [ // Also uses files "DetectFileType", "ExtractEXIF", + + // Relies on state of recipe. + // "Magic", ]; diff --git a/src/node/index.mjs b/src/node/index.mjs index 46022548..69929eaf 100644 --- a/src/node/index.mjs +++ b/src/node/index.mjs @@ -57,7 +57,6 @@ import { DecodeText as core_DecodeText, DeriveEVPKey as core_DeriveEVPKey, DerivePBKDF2Key as core_DerivePBKDF2Key, - DetectFileType as core_DetectFileType, Diff as core_Diff, DisassembleX86 as core_DisassembleX86, Divide as core_Divide, @@ -70,7 +69,6 @@ import { ExpandAlphabetRange as core_ExpandAlphabetRange, ExtractDates as core_ExtractDates, ExtractDomains as core_ExtractDomains, - ExtractEXIF as core_ExtractEXIF, ExtractEmailAddresses as core_ExtractEmailAddresses, ExtractFilePaths as core_ExtractFilePaths, ExtractIPAddresses as core_ExtractIPAddresses, @@ -129,7 +127,6 @@ import { MD4 as core_MD4, MD5 as core_MD5, MD6 as core_MD6, - Magic as core_Magic, Mean as core_Mean, Median as core_Median, MicrosoftScriptDecoder as core_MicrosoftScriptDecoder, @@ -320,7 +317,6 @@ function generateChef() { "decodeText": wrap(core_DecodeText), "deriveEVPKey": wrap(core_DeriveEVPKey), "derivePBKDF2Key": wrap(core_DerivePBKDF2Key), - "detectFileType": wrap(core_DetectFileType), "diff": wrap(core_Diff), "disassembleX86": wrap(core_DisassembleX86), "divide": wrap(core_Divide), @@ -333,7 +329,6 @@ function generateChef() { "expandAlphabetRange": wrap(core_ExpandAlphabetRange), "extractDates": wrap(core_ExtractDates), "extractDomains": wrap(core_ExtractDomains), - "extractEXIF": wrap(core_ExtractEXIF), "extractEmailAddresses": wrap(core_ExtractEmailAddresses), "extractFilePaths": wrap(core_ExtractFilePaths), "extractIPAddresses": wrap(core_ExtractIPAddresses), @@ -392,7 +387,6 @@ function generateChef() { "MD4": wrap(core_MD4), "MD5": wrap(core_MD5), "MD6": wrap(core_MD6), - "magic": wrap(core_Magic), "mean": wrap(core_Mean), "median": wrap(core_Median), "microsoftScriptDecoder": wrap(core_MicrosoftScriptDecoder), @@ -567,7 +561,6 @@ const decodeNetBIOSName = chef.decodeNetBIOSName; const decodeText = chef.decodeText; const deriveEVPKey = chef.deriveEVPKey; const derivePBKDF2Key = chef.derivePBKDF2Key; -const detectFileType = chef.detectFileType; const diff = chef.diff; const disassembleX86 = chef.disassembleX86; const divide = chef.divide; @@ -580,7 +573,6 @@ const escapeUnicodeCharacters = chef.escapeUnicodeCharacters; const expandAlphabetRange = chef.expandAlphabetRange; const extractDates = chef.extractDates; const extractDomains = chef.extractDomains; -const extractEXIF = chef.extractEXIF; const extractEmailAddresses = chef.extractEmailAddresses; const extractFilePaths = chef.extractFilePaths; const extractIPAddresses = chef.extractIPAddresses; @@ -639,7 +631,6 @@ const MD2 = chef.MD2; const MD4 = chef.MD4; const MD5 = chef.MD5; const MD6 = chef.MD6; -const magic = chef.magic; const mean = chef.mean; const median = chef.median; const microsoftScriptDecoder = chef.microsoftScriptDecoder; @@ -812,7 +803,6 @@ const operations = [ decodeText, deriveEVPKey, derivePBKDF2Key, - detectFileType, diff, disassembleX86, divide, @@ -825,7 +815,6 @@ const operations = [ expandAlphabetRange, extractDates, extractDomains, - extractEXIF, extractEmailAddresses, extractFilePaths, extractIPAddresses, @@ -884,7 +873,6 @@ const operations = [ MD4, MD5, MD6, - magic, mean, median, microsoftScriptDecoder, @@ -1060,7 +1048,6 @@ export { decodeText, deriveEVPKey, derivePBKDF2Key, - detectFileType, diff, disassembleX86, divide, @@ -1073,7 +1060,6 @@ export { expandAlphabetRange, extractDates, extractDomains, - extractEXIF, extractEmailAddresses, extractFilePaths, extractIPAddresses, @@ -1132,7 +1118,6 @@ export { MD4, MD5, MD6, - magic, mean, median, microsoftScriptDecoder, diff --git a/test/tests/nodeApi/ops.mjs b/test/tests/nodeApi/ops.mjs index 7054ddc2..2526ff2e 100644 --- a/test/tests/nodeApi/ops.mjs +++ b/test/tests/nodeApi/ops.mjs @@ -8,6 +8,9 @@ * Aim of these tests is to ensure each arg type is * handled correctly by the wrapper. * + * Generally just checking operations that use external dependencies to ensure + * it behaves as expected in Node. + * * @author d98762625 [d98762625@gmail.com] * @copyright Crown Copyright 2018 * @license Apache-2.0 @@ -553,6 +556,158 @@ Top Drawer`, { assert.strictEqual(chef.fromUNIXTimestamp("978346800").toString(), "Mon 1 January 2001 11:00:00 UTC"); }), + it("Generate HOTP", () => { + const result = chef.generateHOTP("Cut The Mustard", { + name: "colonel", + }); + const expected = `URI: otpauth://hotp/colonel?secret=IN2XIICUNBSSATLVON2GC4TE + +Password: 034148`; + assert.strictEqual(result.toString(), expected); + }), + + it("Generate PGP Key Pair", () => { + const result = chef.generatePGPKeyPair("Back To the Drawing Board", { + keyType: "ECC-256", + }); + const expected = `-----BEGIN PGP PRIVATE KEY BLOCK----- +Version: Keybase OpenPGP v2.0.77 +Comment: https://keybase.io/crypto + +xYgEW3KciQEBAK96Lx9G0WZiw1yhC35IogdumoxEJXsLdAVIjmskXeAfABEBAAEA +AP4wK+OZu3AqojwtRoyIK1pHKU93OAuam1iaLCOGCwCckQCA5PjU0aLNZqy/eKyX +T3rpKQCAxDDT5hHGAUfFPUu73KWABwB/WKpeUp7KwurMSbYVhgr1TijszQDCVAQT +AQoAHgUCW3KciQIbLwMLCQcDFQoIAh4BAheAAxYCAQIZAQAKCRD0VeyUMgmpz3OE +AP9qsnhhoK85Tnu6VKwKm1iMiJAssDQnFztDaMmmVdrN/MeIBFtynIkBAQDDhjIw +fxOprqVMYLk6aC45JyPAA2POzu0Zb/rx0tKeBwARAQABAAD/XAr66oiP9ZORHiT0 +XZH4m7vwZt7AHuq4pYtVlMQXk60AgPw2Mno/wStvE/SBa9R7AtsAgMZ2BkJjvNPZ +9YA6cl4lW0UAgI1+kJVLZ5VR9fPENfJR80EtncKDBBgBCgAPBQJbcpyJBQkPCZwA +AhsuAEgJEPRV7JQyCanPPSAEGQEKAAYFAltynIkACgkQrewgWMQZ/b2blwD/dbwh +/3F9xv+YGAwq8i1mzzswg4qBct6LoSIjGglULT9RIQD/cYd31YfKrEnbSBWD5PLi +zcSsxtBGKphwXiPAlQJ1Q5DHiARbcpyJAQEAs8V418lf1T74PpAwdBTiViEUX9jB +e+ZrAEVaq5nu1C8AEQEAAQAA/iPWhS23hnRTllealR4/H5OofZRwxvIQrxAJp6z1 +ICRxAIDayRpCAbK5EC3DzRU2z4VpAIDSWYSs9inI1VTfamJPMWHXAIC3aaukzCP4 +GEGeFobX/thnKhnCgwQYAQoADwUCW3KciQUJA8JnAAIbLgBICRD0VeyUMgmpzz0g +BBkBCgAGBQJbcpyJAAoJEB4jzL1hmQIXamUA/0c1M6BSqVtxNowPcOAXKYIxMca1 +VFcRWolHnZqdZQ7k/J8A/3HvNLRS3p1HvjQEfXl/qKoRRn843Py09ptDHh+xpGKh +=d+Vp +-----END PGP PRIVATE KEY BLOCK----- + +-----BEGIN PGP PUBLIC KEY BLOCK----- +Version: Keybase OpenPGP v2.0.77 +Comment: https://keybase.io/crypto + +xi0EW3KciQEBAK96Lx9G0WZiw1yhC35IogdumoxEJXsLdAVIjmskXeAfABEBAAHN +AMJUBBMBCgAeBQJbcpyJAhsvAwsJBwMVCggCHgECF4ADFgIBAhkBAAoJEPRV7JQy +CanPc4QA/2qyeGGgrzlOe7pUrAqbWIyIkCywNCcXO0NoyaZV2s38zi0EW3KciQEB +AMOGMjB/E6mupUxguTpoLjknI8ADY87O7Rlv+vHS0p4HABEBAAHCgwQYAQoADwUC +W3KciQUJDwmcAAIbLgBICRD0VeyUMgmpzz0gBBkBCgAGBQJbcpyJAAoJEK3sIFjE +Gf29m5cA/3W8If9xfcb/mBgMKvItZs87MIOKgXLei6EiIxoJVC0/USEA/3GHd9WH +yqxJ20gVg+Ty4s3ErMbQRiqYcF4jwJUCdUOQzi0EW3KciQEBALPFeNfJX9U++D6Q +MHQU4lYhFF/YwXvmawBFWquZ7tQvABEBAAHCgwQYAQoADwUCW3KciQUJA8JnAAIb +LgBICRD0VeyUMgmpzz0gBBkBCgAGBQJbcpyJAAoJEB4jzL1hmQIXamUA/0c1M6BS +qVtxNowPcOAXKYIxMca1VFcRWolHnZqdZQ7k/J8A/3HvNLRS3p1HvjQEfXl/qKoR +Rn843Py09ptDHh+xpGKh +=ySwG +-----END PGP PUBLIC KEY BLOCK-----`; + assert.strictEqual(result.toString(), expected); + }), + + it("Generate UUID", () => { + const result = chef.generateUUID(); + assert.ok(result.toString()); + assert.strictEqual(result.toString().length, 36); + }), + + it("Gzip, Gunzip", () => { + assert.strictEqual(chef.gunzip(chef.gzip("Down To The Wire")).toString(), "Down To The Wire"); + }), + + it("Hex to Object Identifier", () => { + assert.strictEqual( + chef.hexToObjectIdentifier(chef.toHex("You Can't Teach an Old Dog New Tricks")).toString(), + "2.9.111.117.32.67.97.110.39.116.32.84.101.97.99.104.32.97.110.32.79.108.100.32.68.111.103.32.78.101.119.32.84.114.105.99.107.115"); + }), + + it("Hex to PEM", () => { + const result = chef.hexToPEM(chef.toHex("Yada Yada")); + const expected = `-----BEGIN CERTIFICATE-----\r +WWFkYSBZYWRh\r +-----END CERTIFICATE-----\r\n`; + assert.strictEqual(result.toString(), expected); + }), + + it("HMAC", () => { + assert.strictEqual(chef.HMAC("On Cloud Nine", {key: "idea"}).toString(), "b128b48ec0d6b0f1a27220c396d0f3e5"); + }), + + it("Javascript beautify", () => { + const result = chef.javaScriptBeautify("const b = 2, g = 7;const fun = (a) => {return a*a};"); + const expected = `const b = 2, g = 7; +const fun = a => { + return a * a;' +};`; + assert.strictEqual(result.toString(), expected); + }), + + it("JavaScript Minify", () => { + const result = chef.javaScriptMinify(`const b = 2, g = 7; +const fun = a => { + return a * a; +};`); + const expected = "const b = 2, g = 7;const fun = (a) => {return a*a};"; + assert.strictEqual(result.toString(), expected); + }), + + it("JavaScript Parse", () => { + const result = chef.javaScriptParser("const b = 2;"); + const expected = `{ +"type": "Program", +"body": [ + { + "type": "VariableDeclaration", + "declarations": [ + { + "type": "VariableDeclarator", + "id": { + "type": "Identifier", + "name": "b" + }, + "init": { + "type": "Literal", + "value": 2, + "raw": "2" + } + } + ], + "kind": "const" + } +], +"sourceType": "script" +}`; + assert.strictEqual(result.toString(), expected); + }), + + it("JPathExpression", () => { + assert.strictEqual(chef.JPathExpression("{\"key\" : \"value\"}", {query: "$.key"}).toString(), "\"value\""); + }), + + it("JSON Beautify", () => { + assert.strictEqual( + chef.JSONBeautify("{\"key\" : \"value\"}").toString(), + `{ +\\t"key": "value" +}`); + }), + + it("Keccak", () => { + assert.strictEqual(chef.keccak("Flea Market").toString(), "c2a06880b19e453ee5440e8bd4c2024bedc15a6630096aa3f609acfd2b8f15f27cd293e1cc73933e81432269129ce954a6138889ce87831179d55dcff1cc7587"); + }), + + it("MD6", () => { + assert.strictEqual(chef.MD6("Head Over Heels", {key: "arty"}).toString(), "d8f7fe4931fbaa37316f76283d5f615f50ddd54afdc794b61da522556aee99ad"); + }), + it("toBase64: editableOption", () => { const result = toBase64("some input", { alphabet: {