From 09bfb129ea8c77acaec6eea50e98322a2ea273ea Mon Sep 17 00:00:00 2001 From: d98762625 Date: Fri, 21 Feb 2020 11:03:54 +0000 Subject: [PATCH] Edit node magic tests to be less fragile --- tests/node/tests/operations.mjs | 330 +++++--------------------------- 1 file changed, 46 insertions(+), 284 deletions(-) diff --git a/tests/node/tests/operations.mjs b/tests/node/tests/operations.mjs index 2ec26735..33100401 100644 --- a/tests/node/tests/operations.mjs +++ b/tests/node/tests/operations.mjs @@ -1078,292 +1078,54 @@ ExifImageHeight: 57`); it("performs MAGIC", async () => { const input = "WUagwsiae6mP8gNtCCLUFpCpCB26RmBDoDD8PacdAmzAzBVjkK2QstFXaKhpC6iUS7RHqXrJtFisoRSgoJ4whjm1arm864qaNq4RcfUmLHrcsAaZc5TXCYifNdgS83gDeejGX46gaiMyuBV6EskHt1scgJ88x2tNSotQDwbGY1mmCob2ARGFvCKYNqiN9ipMq1ZU1mgkdbNuGcb76aRtYWhCGUc8g93UJudhb8htsheZnwTpgqhx83SVJSZXMXUjJT2zmpC7uXWtumqokbdSi88YtkWDAc1Toouh2oH4D4ddmNKJWUDpMwmngUmK14xwmomccPQE9hM172APnSqwxdKQ172RkcAsysnmj5gGtRmVNNh2s359wr6mS2QRP"; - const output = [ - { - recipe: [ - { op: "From Base58", args: ["123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz", false] }, - { op: "Zlib Inflate", args: [0, 0, "Adaptive", false, false] }, - { op: "From Hex", args: ["Space"] } - ], - data: "The last ever dolphin message was misinterpreted as a surprisingly sophisticated attempt to do a dou", - languageScores: [ - { lang: "en", score: 125.2242215463834, probability: 0.9999999999995666 }, - { lang: "de", score: 139.07214598442948, probability: 0.9999999996948968 }, - { lang: "da", score: 163.5912872923829, probability: 0.9999982307179437 }, - { lang: "nn", score: 184.87781010323778, probability: 0.9996824311001093 }, - { lang: "nl", score: 186.65400017962355, probability: 0.9995478923448857 }, - { lang: "id", score: 195.10783158286532, probability: 0.9979061805092018 }, - { lang: "no", score: 195.9426356809362, probability: 0.9975948291599267 }, - { lang: "cs", score: 198.6413087683924, probability: 0.9962906782769531 }, - { lang: "ro", score: 210.86139006654741, probability: 0.979830327546602 }, - { lang: "pl", score: 239.0004171307482, probability: 0.7562182144228224 }, - { lang: "tr", score: 242.98185937693376, probability: 0.6953741146251353 }, - { lang: "sv", score: 255.14597866546873, probability: 0.4856581623250311 }, - { lang: "et", score: 263.34457729011217, probability: 0.34642367921615513 }, - { lang: "fr", score: 296.13887840675034, probability: 0.03910697796810625 }, - { lang: "sk", score: 328.80097683234993, probability: 0.00123907684578628 }, - { lang: "hu", score: 343.0914264767343, probability: 0.0001900103812403353 }, - { lang: "it", score: 363.228683918485, probability: 0.00000962963279593776 }, - { lang: "pt", score: 371.9006025110216, probability: 0.00000237778274370104 }, - { lang: "ca", score: 371.95107438550946, probability: 0.0000023580510432053003 }, - { lang: "hr", score: 399.73398118377037, probability: 1.744982047746646e-8 }, - { lang: "es", score: 400.84646089553183, probability: 1.4156720240521281e-8 }, - { lang: "vi", score: 402.10107920399264, probability: 1.1169764224661094e-8 }, - { lang: "sl", score: 405.5457655647606, probability: 5.792252788516805e-9 }, - { lang: "lt", score: 596.5783206516687, probability: 0 }, - { lang: "lv", score: 655.561080051702, probability: 0 }, - { lang: "fi", score: 1680.5988867104547, probability: 0 }, - { lang: "sr", score: 3852.241870759605, probability: 0 }, - { lang: "zh", score: 5599.531932355281, probability: 0 }, - { lang: "el", score: 6315.400534582482, probability: 0 }, - { lang: "ko", score: 7277.2489575276995, probability: 0 }, - { lang: "bg", score: 9247.807749861991, probability: 0 }, - { lang: "th", score: 9491.8009000258, probability: 0 }, - { lang: "ja", score: 10449.51313154949, probability: 0 }, - { lang: "he", score: 11347.28346104089, probability: 0 }, - { lang: "ru", score: 11814.689579434824, probability: 0 }, - { lang: "uk", score: 12174.95110880415, probability: 0 }, - { lang: "fa", score: 13260.658274652691, probability: 0 }, - { lang: "ar", score: 14716.3920118038, probability: 0 }, - { lang: "hi", score: 15391.252264306175, probability: 0 } - ], - fileType: null, - isUTF8: true, - entropy: 4.359286179828585, - matchingOps: [], - useful: false, - matchesCrib: null - }, - { - recipe: [{ op: "From Base58", args: ["123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz", false] }], - data: "xœ’ÑqÃ0\fCWá\b‰cKò8mâì?B\u001eAŠUûÕ»œOb@\u0010€xìֆµÃ¶›µ§µ»õ‡õ]×ÃzÓwÓ\u0015äÛ13-§µKõ—0t=¼½õdë\u001c˘S\u0000uÁ\u001f´Pñõ³*ŒppuÝÅ\u0003", - languageScores: [ - { lang: "zh", score: 215110.97112616687, probability: 0 }, - { lang: "tr", score: 220681.60597877944, probability: 0 }, - { lang: "vi", score: 222456.65881904965, probability: 0 }, - { lang: "id", score: 224044.62863298706, probability: 0 }, - { lang: "ko", score: 224251.7770504099, probability: 0 }, - { lang: "ca", score: 226341.0410197607, probability: 0 }, - { lang: "et", score: 228065.41105887358, probability: 0 }, - { lang: "pt", score: 229721.1668924617, probability: 0 }, - { lang: "hr", score: 231653.8278878275, probability: 0 }, - { lang: "nn", score: 232634.26616193476, probability: 0 }, - { lang: "ro", score: 237315.86995651436, probability: 0 }, - { lang: "uk", score: 238647.09334894008, probability: 0 }, - { lang: "ja", score: 240068.05259944845, probability: 0 }, - { lang: "no", score: 241300.63523473177, probability: 0 }, - { lang: "hu", score: 242303.62403450147, probability: 0 }, - { lang: "pl", score: 242419.22474038566, probability: 0 }, - { lang: "lt", score: 242433.7049552153, probability: 0 }, - { lang: "bg", score: 242693.77923288214, probability: 0 }, - { lang: "cs", score: 243439.71687130767, probability: 0 }, - { lang: "sl", score: 244783.8516143228, probability: 0 }, - { lang: "sr", score: 245641.447561803, probability: 0 }, - { lang: "el", score: 245869.9941369833, probability: 0 }, - { lang: "th", score: 245932.33916414433, probability: 0 }, - { lang: "ru", score: 246782.7072075852, probability: 0 }, - { lang: "ar", score: 247312.3407109036, probability: 0 }, - { lang: "fr", score: 253209.2034747157, probability: 0 }, - { lang: "en", score: 253317.63072843806, probability: 0 }, - { lang: "da", score: 253653.71939518297, probability: 0 }, - { lang: "es", score: 253945.01214035793, probability: 0 }, - { lang: "nl", score: 254511.98408778434, probability: 0 }, - { lang: "sv", score: 256230.51131455088, probability: 0 }, - { lang: "fa", score: 256413.26329932833, probability: 0 }, - { lang: "sk", score: 259674.11030614204, probability: 0 }, - { lang: "lv", score: 262504.9549152398, probability: 0 }, - { lang: "he", score: 264875.43235331005, probability: 0 }, - { lang: "it", score: 274601.6513992457, probability: 0 }, - { lang: "de", score: 277043.4679615947, probability: 0 }, - { lang: "fi", score: 281253.27398870926, probability: 0 }, - { lang: "hi", score: 288881.45337660616, probability: 0 } - ], - fileType: { - name: "Zlib Deflate", - ext: "zlib", - mime: "application/x-deflate", - desc: "" - }, - isUTF8: false, - entropy: 7.195097600311693, - matchingOps: [ - { - op: "Zlib Inflate", - match: "^\\x78(\\x01|\\x9c|\\xda|\\x5e)", - flags: "", - args: [0, 0, "Adaptive", false, false], - useful: false - } - ], - useful: false, - matchesCrib: null - }, - { - recipe: [ - { op: "From Base58", args: ["123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz", false] }, - { op: "Zlib Inflate", args: [0, 0, "Adaptive", false, false] } - ], - data: "54 68 65 20 6c 61 73 74 20 65 76 65 72 20 64 6f 6c 70 68 69 6e 20 6d 65 73 73 61 67 65 20 77 61 73 2", - languageScores: [ - { lang: "lt", score: 4020.942783100774, probability: 0 }, - { lang: "et", score: 4037.782493918477, probability: 0 }, - { lang: "pl", score: 4071.733116138693, probability: 0 }, - { lang: "ca", score: 4239.945529560806, probability: 0 }, - { lang: "da", score: 4275.663552658962, probability: 0 }, - { lang: "nn", score: 4307.015160080877, probability: 0 }, - { lang: "no", score: 4379.829861046261, probability: 0 }, - { lang: "sk", score: 4633.456180672558, probability: 0 }, - { lang: "de", score: 4719.603246008054, probability: 0 }, - { lang: "sl", score: 4726.246618156058, probability: 0 }, - { lang: "fi", score: 4794.237435613583, probability: 0 }, - { lang: "lv", score: 4806.998921950214, probability: 0 }, - { lang: "cs", score: 4868.721721210801, probability: 0 }, - { lang: "en", score: 4950.0684965334995, probability: 0 }, - { lang: "hu", score: 4995.323898913292, probability: 0 }, - { lang: "nl", score: 4999.432835113283, probability: 0 }, - { lang: "ro", score: 5162.242153914779, probability: 0 }, - { lang: "tr", score: 5265.836504599617, probability: 0 }, - { lang: "pt", score: 5312.023757903025, probability: 0 }, - { lang: "hr", score: 5345.380617593091, probability: 0 }, - { lang: "ko", score: 5381.6478783926905, probability: 0 }, - { lang: "vi", score: 5718.828322653147, probability: 0 }, - { lang: "it", score: 5875.9231271621875, probability: 0 }, - { lang: "es", score: 5983.873285673707, probability: 0 }, - { lang: "fr", score: 6262.080912550161, probability: 0 }, - { lang: "id", score: 6601.300797911038, probability: 0 }, - { lang: "sr", score: 6654.144639340762, probability: 0 }, - { lang: "uk", score: 7782.677033025678, probability: 0 }, - { lang: "ru", score: 8053.479010942278, probability: 0 }, - { lang: "sv", score: 8090.580294809194, probability: 0 }, - { lang: "zh", score: 8177.896267663754, probability: 0 }, - { lang: "bg", score: 8236.236191303162, probability: 0 }, - { lang: "he", score: 9635.83876515383, probability: 0 }, - { lang: "ar", score: 9828.272236809067, probability: 0 }, - { lang: "ja", score: 9872.065475623614, probability: 0 }, - { lang: "el", score: 10153.124281359962, probability: 0 }, - { lang: "th", score: 16395.75614813131, probability: 0 }, - { lang: "hi", score: 27382.573660336377, probability: 0 }, - { lang: "fa", score: 170691.27147588678, probability: 0 } - ], - fileType: null, - isUTF8: true, - entropy: 3.1498667149804396, - matchingOps: [ - { op: "From Hex", - match: "^[\\dA-F]{2}(?: [\\dA-F]{2})*$", - flags: "i", - args: ["Space"], - useful: false - }, - { op: "From Hexdump", - match: "^(?:(?:[\\dA-F]{4,16}h?:?)?[ \\t]*((?:[\\dA-F]{2} ){1,8}(?:[ \\t]|[\\dA-F]{2}-)(?:[\\dA-F]{2} ){1,8}|(?:[\\dA-F]{4} )*[\\dA-F]{4}|(?:[\\dA-F]{2} )*[\\dA-F]{2})[^\\n]*\\n?){2,}$", - flags: "i", - args: [], - useful: false - } - ], - useful: false, - matchesCrib: null - }, - { - recipe: [], - data: "WUagwsiae6mP8gNtCCLUFpCpCB26RmBDoDD8PacdAmzAzBVjkK2QstFXaKhpC6iUS7RHqXrJtFisoRSgoJ4whjm1arm864qaNq4R", - languageScores: [ - { lang: "en", score: 1322.88712942794, probability: 0 }, - { lang: "pt", score: 1328.9071778467946, probability: 0 }, - { lang: "es", score: 1499.8082245346486, probability: 0 }, - { lang: "ca", score: 1563.0091696371378, probability: 0 }, - { lang: "it", score: 1570.1642147427024, probability: 0 }, - { lang: "vi", score: 1618.2318632861754, probability: 0 }, - { lang: "fr", score: 1749.7489968143416, probability: 0 }, - { lang: "de", score: 1770.6756390171297, probability: 0 }, - { lang: "id", score: 1784.9300193685633, probability: 0 }, - { lang: "sv", score: 2099.0743314846904, probability: 0 }, - { lang: "nl", score: 2144.1470604048636, probability: 0 }, - { lang: "pl", score: 2194.198150325025, probability: 0 }, - { lang: "nn", score: 2268.3275668395354, probability: 0 }, - { lang: "ro", score: 2276.237691757556, probability: 0 }, - { lang: "no", score: 2293.9213133644007, probability: 0 }, - { lang: "hr", score: 2565.2302900308428, probability: 0 }, - { lang: "da", score: 2617.902713714368, probability: 0 }, - { lang: "tr", score: 2723.61992089351, probability: 0 }, - { lang: "fi", score: 2758.0636034887684, probability: 0 }, - { lang: "sk", score: 2850.6382152940587, probability: 0 }, - { lang: "sl", score: 2884.394383865182, probability: 0 }, - { lang: "cs", score: 3012.2448524304577, probability: 0 }, - { lang: "et", score: 3109.3957721509546, probability: 0 }, - { lang: "hu", score: 3116.6065874254855, probability: 0 }, - { lang: "lt", score: 4030.1831236307294, probability: 0 }, - { lang: "lv", score: 4891.534029615823, probability: 0 }, - { lang: "zh", score: 10308.630736378773, probability: 0 }, - { lang: "ja", score: 14512.600885650681, probability: 0 }, - { lang: "ko", score: 14746.71957673977, probability: 0 }, - { lang: "el", score: 17825.432781080377, probability: 0 }, - { lang: "sr", score: 18718.151933023175, probability: 0 }, - { lang: "bg", score: 25514.40356919307, probability: 0 }, - { lang: "ru", score: 27069.357131947643, probability: 0 }, - { lang: "he", score: 27192.837699276748, probability: 0 }, - { lang: "uk", score: 27436.685419942954, probability: 0 }, - { lang: "th", score: 28783.84766499238, probability: 0 }, - { lang: "ar", score: 36435.92420598504, probability: 0 }, - { lang: "fa", score: 42141.35472527937, probability: 0 }, - { lang: "hi", score: 58009.58379895255, probability: 0 } - ], - fileType: null, - isUTF8: true, - entropy: 5.6887987925007035, - matchingOps: [ - { - op: "From Base58", - match: "^[1-9A-HJ-NP-Za-km-z]{20,}$", - flags: "", - args: ["123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz", false], - useful: false - }, - { - op: "From Base58", - match: "^[1-9A-HJ-NP-Za-km-z]{20,}$", - flags: "", - args: ["rpshnaf39wBUDNEGHJKLM4PQRST7VWXYZ2bcdeCg65jkm8oFqi1tuvAxyz", false], - useful: false - }, - { - op: "From Base64", - match: "^\\s*[A-Z\\d\\-_]{20,}\\s*$", - flags: "i", - args: ["A-Za-z0-9-_", true], - useful: false - }, - { - op: "From Base64", - match: "^\\s*[A-Z\\d_.]{20,}\\s*$", - flags: "i", - args: ["A-Za-z0-9_.", true], - useful: false - }, - { - op: "From Base64", - match: "^\\s*[A-Z\\d+\\-]{20,}\\s*$", - flags: "i", - args: ["+\\-0-9A-Za-z", true], - useful: false - }, - { - op: "From Base64", - match: "^\\s*[A-Z\\d./]{20,}\\s*$", - flags: "i", - args: ["./0-9A-Za-z", true], - useful: false - } - ], - useful: false, - matchesCrib: null - } - ]; + const depth = 3; - const res = await chef.magic(input); + const res = await chef.magic(input, { + depth: 3 + }); + + // assert against the structure of the output, rather than the values. + assert.strictEqual(res.value.length, depth + 1); + res.value.forEach(row => { + assert.ok(row.recipe); + assert.ok(row.data); + assert.ok(row.languageScores); + assert.ok(Object.prototype.hasOwnProperty.call(row, "fileType")); // Can be null, so cannot just use ok + assert.ok(row.entropy); + assert.ok(row.matchingOps); + assert.ok(Object.prototype.hasOwnProperty.call(row, "useful")); + assert.ok(Object.prototype.hasOwnProperty.call(row, "matchesCrib")); + + row.recipe.forEach(item => { + assert.ok(Object.prototype.hasOwnProperty.call(item, "op")); + assert.strictEqual(typeof item.op, "string"); + assert.ok(Object.prototype.hasOwnProperty.call(item, "args")); + assert.ok(Array.isArray(item.args)); + }); + + row.languageScores.forEach(score => { + assert.ok(Object.prototype.hasOwnProperty.call(score, "lang")); + assert.strictEqual(typeof score.lang, "string"); + assert.ok(Object.prototype.hasOwnProperty.call(score, "score")); + assert.strictEqual(typeof score.score, "number"); + assert.ok(Object.prototype.hasOwnProperty.call(score, "probability")); + assert.strictEqual(typeof score.probability, "number"); + }); + + row.matchingOps.forEach(op => { + assert.ok(Object.prototype.hasOwnProperty.call(op, "op")); + assert.strictEqual(typeof op.op, "string"); + assert.ok(Object.prototype.hasOwnProperty.call(op, "match")); + assert.strictEqual(typeof op.match, "string"); + assert.ok(Object.prototype.hasOwnProperty.call(op, "flags")); + assert.strictEqual(typeof op.flags, "string"); + assert.ok(Object.prototype.hasOwnProperty.call(op, "args")); + assert.ok(Array.isArray(op.args)); + assert.ok(Object.prototype.hasOwnProperty.call(op, "useful")); + assert.strictEqual(typeof op.useful, "boolean"); + }); + }); - assert.deepStrictEqual(output, res.value); }),