UNPKG

@automattic/yara

Version:

Automattic's fork of YARA support for Node.js with pre-built binaries

267 lines (222 loc) 6.08 kB
var assert = require("assert") var yara = require ("../") before(function(done) { yara.initialize(function(error) { assert.ifError(error) done() }) }) describe("index.js", function() { describe("Scanner.configure()", function() { it("call scan() before configure()", function(done) { var scanner = yara.createScanner() assert.throws(function() { scanner.scan({}, function() {}) }, /Please call configure\(\) before scan\(\)/) done() }) it("rules.string - missing is ignored", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {} ] }, done) }) it("rules.string - empty is ignored", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {string: ""} ] }, done) }) it("rules.string - errors", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {string: "rule bad {}"} ] }, function(error) { assert(error instanceof yara.CompileRulesError) assert(error.message == "Error compiling rules") var expErrors = [{ index: 0, line: 1, message: "syntax error" }] assert.deepEqual(error.errors, expErrors) done() }) }) it("rules.string - errors if more than one bad rule", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {string: "rule bad {}"}, {string: "rule bad {}"} ] }, function(error) { assert(error instanceof yara.CompileRulesError) assert(error.message == "Error compiling rules") var expErrors = [{ index: 0, line: 1, message: "syntax error" }] assert.deepEqual(error.errors, expErrors) done() }) }) it("rules.string - valid", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {string: "rule good {\ncondition:\ntrue\n}"} ] }, function(error) { assert.ifError(error) done() }) }) it("rules.string - warnings", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {string: "rule good {\ncondition:\n\"stephen\"\n}"} ] }, function(error, warnings) { assert.ifError(error) var expected = [ { index: 0, line: 4, message: 'using literal string "stephen" in a boolean operation.' } ] assert.deepEqual(warnings, expected) done() }) }) it("rules.filename - empty is ignored", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {filename: ""} ] }, done) }) it("rules.file - invalid path", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {filename: "test/data/unit_index.js_scanner.configure/invalid.yara"} ] }, function(error) { assert(error) assert.equal(error.message, "fopen(test/data/unit_index.js_scanner.configure/invalid.yara) failed: No such file or directory") done() }) }) it("rules.file - errors", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {filename: "test/data/unit_index.js_scanner.configure/bad.yara"} ] }, function(error) { assert(error instanceof yara.CompileRulesError) assert(error.message == "Error compiling rules") var expErrors = [{ index: 0, line: 4, message: "syntax error" }] assert.deepEqual(error.errors, expErrors) done() }) }) it("rules.filename - valid", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {filename: "test/data/unit_index.js_scanner.configure/good.yara"} ] }, function(error) { assert.ifError(error) done() }) }) it("variables.integer - valid", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {filename: "test/data/unit_index.js_scanner.configure/good.yara"} ], variables: [ {type: yara.VariableType.Integer, id: "skill_level", value: 34} ] }, function(error) { assert.ifError(error) done() }) }) it("variables.float - valid", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {filename: "test/data/unit_index.js_scanner.configure/good.yara"} ], variables: [ {type: yara.VariableType.Float, id: "percent", value: 0.45} ] }, function(error) { assert.ifError(error) done() }) }) it("variables.float - valid", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {filename: "test/data/unit_index.js_scanner.configure/good.yara"} ], variables: [ {type: yara.VariableType.Boolean, id: "isYara", value: true} ] }, function(error) { assert.ifError(error) done() }) }) it("variables.string - valid", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {filename: "test/data/unit_index.js_scanner.configure/good.yara"} ], variables: [ {type: yara.VariableType.String, id: "name", value: "stephen"} ] }, function(error) { assert.ifError(error) done() }) }) it("variables.notype - invalid", function(done) { var scanner = yara.createScanner() scanner.configure({ rules: [ {filename: "test/data/unit_index.js_scanner.configure/good.yara"} ], variables: [ {id: "skill_level", value: 34} ] }, function(error) { assert(error instanceof Error) assert.equal(error.message, "Unknown variable type: 0") done() }) }) }) })