@webda/core
Version:
Expose API with Lambda
147 lines • 6.79 kB
JavaScript
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
import { suite, test } from "@testdeck/mocha";
import * as assert from "assert";
import { mkdirSync, unlinkSync } from "fs";
import pkg from "fs-extra";
import * as path from "path";
import { stub } from "sinon";
import { KubernetesConfigurationService } from "...js";
import { WebdaTest } from "../test.js";
import { getCommonJS } from "../utils/esm.js";
const { emptyDirSync, ensureSymlinkSync, outputFileSync } = pkg;
const { __dirname } = getCommonJS(import.meta.url);
class AbstractKubernetesConfigurationServiceTest extends WebdaTest {
constructor() {
super(...arguments);
this.folder = __dirname + "/../../test/kube";
this.content = {
"webda.json": JSON.stringify({
services: {
Authentication: {
providers: {
email: {
text: "Plop1"
}
}
},
"Authentication.providers.email.text2": "Plop6"
}
}, undefined, 2)
};
}
getTestConfiguration() {
return __dirname + "/../../test/config-kube-reload.json";
}
async before(create = false) {
emptyDirSync(this.folder);
// Empty the kube directory
if (create) {
this.createConfigMap();
}
await super.before();
}
createConfigMap() {
this.dataFolder = `..${Date.now()}`;
mkdirSync(path.join(this.folder, this.dataFolder));
ensureSymlinkSync(path.join(this.folder, this.dataFolder), path.join(this.folder, "..data"));
Object.keys(this.content).forEach(f => {
outputFileSync(path.join(this.folder, this.dataFolder, f), this.content[f]);
ensureSymlinkSync(path.join(this.folder, "..data", f), path.join(this.folder, f));
});
}
updateConfigMap(content) {
this.dataFolder = `..${Date.now()}`;
this.content = content;
mkdirSync(path.join(this.folder, this.dataFolder));
Object.keys(this.content).forEach(f => {
outputFileSync(path.join(this.folder, this.dataFolder, f), this.content[f]);
});
unlinkSync(path.join(this.folder, "..data"));
ensureSymlinkSync(path.join(this.folder, this.dataFolder), path.join(this.folder, "..data"));
}
}
let KubernetesConfigurationServiceTest = class KubernetesConfigurationServiceTest extends AbstractKubernetesConfigurationServiceTest {
async before() {
await super.before(true);
}
async cov() {
let serv = new KubernetesConfigurationService(this.webda, "t", {});
serv.getParameters().source = undefined;
assert.rejects(() => serv.init(), /Need a source for KubernetesConfigurationService/);
serv.getParameters().source = "/notexisting";
assert.rejects(() => serv.init(), /Need a source for KubernetesConfigurationService/);
let mock = stub(serv, "loadAndStoreConfiguration").resolves();
await serv.initConfiguration();
assert.strictEqual(mock.callCount, 1);
}
async updatedConfigMap() {
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.text, "Plop1");
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.text2, "Plop6");
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.mailer, "DefinedMailer");
await new Promise(resolve => {
this.webda.getService("KubernetesConfigurationService").on("Configuration.Applied", resolve);
this.updateConfigMap({
...this.content,
"webda.json": JSON.stringify({
services: {
Authentication: {
providers: {
email: {
text: "Plop2"
}
}
}
}
})
});
});
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.text, "Plop2");
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.mailer, "DefinedMailer");
await new Promise(resolve => {
this.webda.getService("KubernetesConfigurationService").on("Configuration.Applied", resolve);
this.updateConfigMap({
...this.content,
"webda.json": JSON.stringify({
services: {
Authentication: {
providers: {
email: {
text: "Plop3"
}
}
}
}
})
});
});
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.text, "Plop3");
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.mailer, "DefinedMailer");
}
};
__decorate([
test
], KubernetesConfigurationServiceTest.prototype, "cov", null);
__decorate([
test
], KubernetesConfigurationServiceTest.prototype, "updatedConfigMap", null);
KubernetesConfigurationServiceTest = __decorate([
suite
], KubernetesConfigurationServiceTest);
let EmptyKubernetesConfigurationServiceTest = class EmptyKubernetesConfigurationServiceTest extends AbstractKubernetesConfigurationServiceTest {
async unmountedConfigMap() {
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.text, "Plop0");
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.mailer, "DefinedMailer");
}
};
__decorate([
test
], EmptyKubernetesConfigurationServiceTest.prototype, "unmountedConfigMap", null);
EmptyKubernetesConfigurationServiceTest = __decorate([
suite
], EmptyKubernetesConfigurationServiceTest);
//# sourceMappingURL=kubernetesconfiguration.spec.js.map