realm-object-server
Version:
152 lines • 7.85 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 chai_1 = require("chai");
const superagent = require("superagent");
const TestServer_1 = require("../TestServer");
const Token_1 = require("../shared/Token");
const StatsService_1 = require("./StatsService");
describe("StatsService", () => {
let server;
let adminToken;
afterEach(() => __awaiter(this, void 0, void 0, function* () {
if (server) {
yield server.shutdown();
server = null;
}
}));
function startServer(params = {}) {
return __awaiter(this, void 0, void 0, function* () {
server = new TestServer_1.TestServer();
yield server.start(params);
adminToken = new Token_1.RefreshToken({
isAdmin: true,
identity: "admin-identity",
appId: "io.realm.ros.tests",
}).sign(server.privateKey);
});
}
describe("getInstantValues", () => {
beforeEach(() => __awaiter(this, void 0, void 0, function* () {
yield startServer();
}));
it("fails when metric name is not specified", (done) => {
superagent.get(`${server.url}/stats/instant`)
.set("Authorization", adminToken)
.catch((err) => {
const { response } = err;
chai_1.expect(response).to.be.an("object");
chai_1.expect(response.status).to.equal(404);
done();
}).then(null, done);
});
it("responds when metric name is unknown", () => __awaiter(this, void 0, void 0, function* () {
const response = yield superagent
.get(`${server.url}/stats/instant/test-metric`)
.set("Authorization", adminToken);
chai_1.expect(response.status).to.equal(200);
chai_1.expect(response.body).to.be.an("object").with.all.keys("test-metric");
}));
describe("with metrics", () => __awaiter(this, void 0, void 0, function* () {
beforeEach(() => {
const statsSink = server.getStatsSink();
const counter = statsSink.counter({
name: "test-counter",
help: "Just testing ...",
labelNames: ["key1", "key2"],
});
counter.inc({ key1: "A", key2: "A" }, 7);
counter.inc({ key1: "A", key2: "B" }, 9);
counter.inc({ key1: "B", key2: "A" }, 13);
counter.inc({ key1: "B", key2: "B" }, 15);
const gauge = statsSink.gauge({
name: "test-guage",
help: "Just testing ...",
labelNames: ["key1", "key2"],
});
gauge.set({ key1: "A", key2: "A" }, 21);
gauge.inc({ key1: "A", key2: "A" }, 1);
gauge.set({ key1: "A" }, 3);
});
it("responds for single counter without labels filter", () => __awaiter(this, void 0, void 0, function* () {
const response = yield superagent
.get(`${server.url}/stats/instant/test-counter`)
.set("Authorization", adminToken);
chai_1.expect(response.status).to.equal(200);
chai_1.expect(response.body).to.be.an("object").with.all.keys("test-counter");
const counter = response.body["test-counter"];
chai_1.expect(counter).to.be.an("array").with.length(4);
const sum = counter[0].value + counter[1].value + counter[2].value + counter[3].value;
chai_1.expect(sum).to.equal(7 + 9 + 13 + 15);
}));
it("responds for two metrics with a labels filter", () => __awaiter(this, void 0, void 0, function* () {
const response = yield superagent
.get(`${server.url}/stats/instant/test-counter,test-guage?key1=A&key2=A`)
.set("Authorization", adminToken);
chai_1.expect(response.status).to.equal(200);
chai_1.expect(response.body).to.be.an("object").with.all.keys("test-counter", "test-guage");
const counter = response.body["test-counter"];
const guage = response.body["test-guage"];
chai_1.expect(counter).to.be.an("array").with.length(1);
chai_1.expect(counter[0].value).to.equal(7);
chai_1.expect(guage).to.be.an("array").with.length(1);
chai_1.expect(guage[0].value).to.equal(22);
}));
it("responds for two metrics with a sub-set labels filter", () => __awaiter(this, void 0, void 0, function* () {
const response = yield superagent
.get(`${server.url}/stats/instant/test-counter,test-guage?key1=A`)
.set("Authorization", adminToken);
chai_1.expect(response.status).to.equal(200);
chai_1.expect(response.body).to.be.an("object").with.all.keys("test-counter", "test-guage");
const counter = response.body["test-counter"];
const guage = response.body["test-guage"];
chai_1.expect(counter).to.be.an("array").with.length(2);
chai_1.expect(counter[0].value + counter[1].value).to.equal(7 + 9);
chai_1.expect(guage).to.be.an("array").with.length(2);
chai_1.expect(guage[0].value + guage[1].value).to.equal(22 + 3);
}));
}));
});
describe("extended with extra labels", () => {
before(() => __awaiter(this, void 0, void 0, function* () {
class ExtendedStatsService extends StatsService_1.StatsService {
getExtraLabels(req) {
chai_1.expect(req).to.be.an("object");
return { someName: "someValue" };
}
}
yield startServer({
services: [new ExtendedStatsService()],
disableTokenRevocation: true,
});
const statsSink = server.getStatsSink();
const counter = statsSink.counter({
name: "test-counter",
help: "Just testing ...",
labelNames: ["someName", "key"],
});
counter.inc({ someName: "someValue", key: "A" }, 7);
counter.inc({ someName: "someOtherValue", key: "B" }, 9);
}));
it("will respond filtered by the labels from the extension", () => __awaiter(this, void 0, void 0, function* () {
const response = yield superagent
.get(`${server.url}/stats/instant/test-counter`)
.set("Authorization", adminToken);
chai_1.expect(response.status).to.equal(200);
chai_1.expect(response.body).to.be.an("object").with.all.keys("test-counter");
const counter = response.body["test-counter"];
chai_1.expect(counter).to.deep.equal([{
labels: { someName: "someValue", key: "A" },
value: 7,
}]);
}));
});
});
//# sourceMappingURL=StatsService.spec.js.map