UNPKG

realm-object-server

Version:

Realm Object Server

119 lines 5.34 kB
"use strict"; 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 chai_1 = require("chai"); const events_1 = require("events"); const realmUtil_1 = require("../shared/realmUtil"); const uuid_1 = require("uuid"); const path = require("path"); const os_1 = require("os"); const realms_1 = require("../realms"); const shared_1 = require("../shared"); const _1 = require("."); const TestServer_1 = require("../TestServer"); const RealmFactory_1 = require("../RealmFactory"); describe("StatsdToMetricsRealm", () => { RealmFactory_1.RealmFactory["sessionStopPolicy"] = "immediately"; const logger = new shared_1.ConsoleLogger("off"); let fakeReceiver; let realm; beforeEach(() => __awaiter(this, void 0, void 0, function* () { fakeReceiver = new events_1.EventEmitter(); realm = new realmUtil_1.Realm({ path: path.resolve(os_1.tmpdir(), uuid_1.v4() + ".realm"), schema: realms_1.MetricsRealm.schema, }); })); afterEach(() => __awaiter(this, void 0, void 0, function* () { if (fakeReceiver) { fakeReceiver.removeAllListeners(); fakeReceiver = null; } if (realm) { realm.close(); realmUtil_1.Realm.deleteFile({ path: realm.path }); yield TestServer_1.clearTestState(); } })); it("can be started and stopped", () => __awaiter(this, void 0, void 0, function* () { const statsdToMetricsRealm = new _1.StatsdToMetricsRealm({ logger, openRealm: () => new Promise(resolve => resolve(realm)), }, fakeReceiver); chai_1.expect(() => { statsdToMetricsRealm.listenTo({}); }).to.throw("Already listening to another receiver"); statsdToMetricsRealm.stop(); chai_1.expect(() => { statsdToMetricsRealm.stop(); }).to.throw("Not listening to a receiver"); })); it("writes metrics when they're emitted", () => __awaiter(this, void 0, void 0, function* () { const WAIT = 100; const statsdToMetricsRealm = new _1.StatsdToMetricsRealm({ logger, openRealm: () => new Promise(resolve => resolve(realm)), saveWait: WAIT, }, fakeReceiver); function createMetric(value) { return { name: "realm.localhost.realm.state.size", labels: { path: "%2Fsomewhere" }, stats: [ { type: _1.MetricType.Counter, value }, ], }; } const fileSizes = realm.objects("RealmStateSize"); const beforeEmission = new Date(); yield new Promise(resolve => { fileSizes.addListener((collection) => { if (collection.length === 1) { const savedMetric = collection[0]; chai_1.expect(savedMetric.path).to.equal("/somewhere"); chai_1.expect(savedMetric.value).to.equal(1337); const savingDelay = Date.now() - beforeEmission.getTime(); chai_1.expect(savingDelay).to.be.lessThan(WAIT); fileSizes.removeAllListeners(); resolve(); } }); fakeReceiver.emit("metric", createMetric("1337")); }); fakeReceiver.emit("metric", createMetric("1234")); fakeReceiver.emit("metric", createMetric("4321")); const DELAY = Math.floor(WAIT / 2); yield shared_1.delay(DELAY); yield new Promise(resolve => { let updates = 0; fileSizes.addListener((collection) => { updates++; chai_1.expect(collection.length).to.equal(1); const savedMetric = collection[0]; chai_1.expect(savedMetric.value).to.not.equal(1234); if (savedMetric.value === 1337) { chai_1.expect(updates).to.equal(1); } else if (savedMetric.value === 4321) { chai_1.expect(updates).to.equal(2); chai_1.expect(savedMetric.path).to.equal("/somewhere"); const emittedDelay = savedMetric.emitted.getTime() - beforeEmission.getTime(); chai_1.expect(emittedDelay).to.be.lessThan(DELAY); const savingDelay = Date.now() - beforeEmission.getTime(); chai_1.expect(savingDelay).to.be.at.least(WAIT); fileSizes.removeAllListeners(); resolve(); } }); }); statsdToMetricsRealm.stop(); })); }); //# sourceMappingURL=StatsdToMetricsRealm.spec.js.map