realm-object-server
Version:
103 lines • 5.14 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const dgram = require("dgram");
const chai_1 = require("chai");
const shared_1 = require("../shared");
const StatsdReceiver_1 = require("./StatsdReceiver");
const Statsd_1 = require("./Statsd");
describe("StatsdReceiver", () => {
let socket;
const logger = new shared_1.ConsoleLogger("warn");
const send = (message) => {
return new Promise((resolve, reject) => {
const client = dgram.createSocket("udp4");
const address = socket.address();
if (typeof address !== "object") {
throw new Error("Expected socket addresses to be objects");
}
client.send(message, address.port, address.address, (err) => {
client.close();
if (err) {
reject(err);
}
else {
resolve();
}
});
});
};
const sendAndCheck = (receiver, message, check) => {
return new Promise((resolve, reject) => {
receiver.once("metric", (metric) => {
try {
check(metric);
}
catch (err) {
reject(err);
}
resolve();
});
send(message).catch(reject);
});
};
afterEach(() => {
if (socket) {
socket.close();
socket = undefined;
}
});
it("can start", () => __awaiter(this, void 0, void 0, function* () {
const receiver = new StatsdReceiver_1.StatsdReceiver({ logger });
socket = yield receiver.start();
}));
it("can receive a simple counter metric", () => __awaiter(this, void 0, void 0, function* () {
const receiver = new StatsdReceiver_1.StatsdReceiver({ logger });
socket = yield receiver.start();
yield sendAndCheck(receiver, "a.simple.metric:10|c", (metric) => {
chai_1.expect(metric).to.have.all.keys("name", "labels", "stats");
chai_1.expect(metric.name).to.equal("a.simple.metric");
chai_1.expect(metric.labels).to.be.an("object").empty;
chai_1.expect(metric.stats).to.be.an("array").with.length(1);
chai_1.expect(metric.stats[0]).to.be.an("object").with.all.keys("type", "value");
chai_1.expect(metric.stats[0].type).to.equal(Statsd_1.MetricType.Counter);
chai_1.expect(metric.stats[0].value).to.equal("10");
});
}));
it("can receive a counter metric with multiple stats", () => __awaiter(this, void 0, void 0, function* () {
const receiver = new StatsdReceiver_1.StatsdReceiver({ logger });
socket = yield receiver.start();
yield sendAndCheck(receiver, "a.metric.with.multiple.stats:10|c:+13|g:1337|ms", (metric) => {
chai_1.expect(metric.name).to.equal("a.metric.with.multiple.stats");
chai_1.expect(metric.stats).to.be.an("array").with.length(3);
chai_1.expect(metric.labels).to.be.an("object").empty;
chai_1.expect(metric.stats[0].type).to.equal(Statsd_1.MetricType.Counter);
chai_1.expect(metric.stats[0].value).to.equal("10");
chai_1.expect(metric.stats[1].type).to.equal(Statsd_1.MetricType.Gauge);
chai_1.expect(metric.stats[1].value).to.equal("+13");
chai_1.expect(metric.stats[2].type).to.equal(Statsd_1.MetricType.Histogram);
chai_1.expect(metric.stats[2].value).to.equal("1337");
});
}));
it("can receive a metric with multiple labels", () => __awaiter(this, void 0, void 0, function* () {
const receiver = new StatsdReceiver_1.StatsdReceiver({ logger });
socket = yield receiver.start();
yield sendAndCheck(receiver, "my.wonderful.metric.name,label1=testing,label2=labels:10|c", (metric) => {
chai_1.expect(metric.name).to.equal("my.wonderful.metric.name");
chai_1.expect(metric.labels).to.be.an("object").with.all.keys("label1", "label2");
chai_1.expect(metric.labels.label1).to.equal("testing");
chai_1.expect(metric.labels.label2).to.equal("labels");
chai_1.expect(metric.stats).to.be.an("array").with.length(1);
chai_1.expect(metric.stats[0].type).to.equal(Statsd_1.MetricType.Counter);
chai_1.expect(metric.stats[0].value).to.equal("10");
});
}));
});
//# sourceMappingURL=StatsdReceiver.spec.js.map