UNPKG

queryda

Version:

watch/report/alert tool for elasticsearch

196 lines (180 loc) 6.29 kB
// Generated by CoffeeScript 1.10.0 (function() { var Worker, assert, httpMock, httpResponseMock, loglevelMock, mockery, validatorMock, worker; mockery = require("mockery"); assert = require("chai").assert; worker = [][0]; loglevelMock = { debug: function(str) { return this.strDebug = str; }, error: function(str) { return this.strError = str; } }; httpResponseMock = { statusCode: 200, responseData: JSON.stringify({ foo: "bar" }), on: function(name, callback) { if (name === "data") { return callback(httpResponseMock.responseData); } else if (name === "end") { return callback(); } } }; httpMock = { request: function(options, callback) { this.requestOptions = options; return { on: function() {}, end: function() { return callback(httpResponseMock); }, write: (function(_this) { return function(data) { return httpMock.writeData = data; }; })(this) }; } }; validatorMock = { validate: function(data) { return true; }, getMessage: function() { return "testmessage"; } }; mockery.enable({ useCleanCache: true }); mockery.registerMock("loglevel", loglevelMock); mockery.registerMock("http", httpMock); mockery.registerMock("./validator", validatorMock); mockery.registerAllowables(["../src/worker", "events"]); Worker = require("../src/worker"); describe("Worker", function() { describe("constructor", function() { it("should have the assigned id", function() { return assert.equal(new Worker("testworker", "host", 9200, "/_all", {}, validatorMock).id, "testworker", "id property should equal the constructor's first argument"); }); return it("should break if any argument of [id,host,port,path,query] is missing", function() { assert["throw"]((function() { return new Worker(null, "host", 9200, "/_all", {}, validatorMock); }), Error, "invalid number of options"); assert["throw"]((function() { return new Worker("testworker", null, 9200, "/_all", {}, validatorMock); }), Error, "invalid number of options"); assert["throw"]((function() { return new Worker("testworker", "host", null, "/_all", {}, validatorMock); }), Error, "invalid number of options"); assert["throw"]((function() { return new Worker("testworker", "host", 9200, null, {}, validatorMock); }), Error, "invalid number of options"); assert["throw"]((function() { return new Worker("testworker", "host", 9200, "/_all", null, validatorMock); }), Error, "invalid number of options"); return assert["throw"]((function() { return new Worker("testworker", "host", 9200, "/_all", {}, null); }), Error, "invalid number of options"); }); }); describe("start", function() { it("should establish an http connection using the supplied options", function() { new Worker("testworker", "testhost", 9200, "/_all", { foo: "bar" }, validatorMock).start(); assert.equal(httpMock.requestOptions.host, "testhost"); assert.equal(httpMock.requestOptions.port, 9200); return assert.equal(httpMock.requestOptions.path, "/_all/_search"); }); return it("should send the stringified query through http", function() { var queryMock; queryMock = { foo: "bar" }; new Worker("testworker", "testhost", 9200, "/_all", queryMock, validatorMock).start(); return assert.equal(httpMock.writeData, JSON.stringify({ query: queryMock })); }); }); describe("onResponse", function() { worker = [][0]; beforeEach(function() { return worker = new Worker("testworker", "testhost", 9200, "/_all", { foo: "bar" }, validatorMock); }); return it("should emit an 'alarm' event when response status isnt 200", function(done) { httpResponseMock.statusCode = 400; worker.on("alarm", function(msg) { assert.include(msg, Worker.ResultCodes.NotFound.label); done(); return worker.off("alarm"); }); return worker.start(); }); }); return describe("handleResponseData", function() { var ref, resultStub; ref = [], worker = ref[0], resultStub = ref[1]; beforeEach(function() { worker = new Worker("testworker", "testhost", 9200, "/_all", { foo: "bar" }, validatorMock); return resultStub = { hits: { total: 1, hits: [ { _source: { prop: 1 } } ] } }; }); it("should emit an 'alarm' event when data validation fails due to invalid data", function(done) { worker.on("alarm", function(msg) { assert.include(msg, Worker.ResultCodes.InvalidResponse.label); return done(); }); return worker.handleResponseData({}); }); it("should emit an 'alarm' event when handleResponseData didn't receive any results", function(done) { worker.on("alarm", function(msg) { assert.include(msg, Worker.ResultCodes.NoResults.label); return done(); }); return worker.handleResponseData({ hits: { total: 0, hits: [] } }); }); it("should emit an 'alarm' event when data validation fails", function(done) { validatorMock.validate = (function() { return false; }); worker.on("alarm", function(msg) { assert.include(msg, Worker.ResultCodes.ValidationFailed.label); return done(); }); return worker.handleResponseData(resultStub); }); return it("should simply return true if data validation succeeds", function() { validatorMock.validate = (function() { return true; }); return assert.isTrue(worker.handleResponseData(resultStub)); }); }); }); }).call(this);