@webda/aws
Version:
Webda AWS Services implementation
102 lines • 4.38 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 { ChangeResourceRecordSetsCommand, ListResourceRecordSetsCommand, Route53 } from "@aws-sdk/client-route-53";
import { suite, test } from "@testdeck/mocha";
import { JSONUtils } from "@webda/core";
import * as assert from "assert";
import { mockClient } from "aws-sdk-client-mock";
import * as sinon from "sinon";
import { Route53Service } from "./route53.js";
let Route53Test = class Route53Test {
async exportImport() {
let logs;
const Console = {
log: (...args) => {
console.log(...args);
logs = args;
}
};
// Mock
var callSpy2 = sinon.stub().callsFake(async () => {
if (callSpy2.callCount == 1) {
return {
ResourceRecordSets: JSONUtils.loadFile("./test/zone-export.json").entries,
IsTruncated: true,
NextRecordIdentifier: "plop"
};
}
else {
return {
ResourceRecordSets: [
{
Name: "toremove",
Type: "TXT"
}
],
IsTruncated: false
};
}
});
var spyChanges = sinon.stub().resolves({});
const mock = mockClient(Route53)
.on(ListResourceRecordSetsCommand)
.callsFake(callSpy2)
.on(ChangeResourceRecordSetsCommand)
.callsFake(spyChanges);
try {
let stub = sinon.stub(Route53Service, "getZoneForDomainName").callsFake(() => {
return undefined;
});
await assert.rejects(() => Route53Service.createDNSEntry("test.com", "A", "1.1.1.1"), /Domain 'test.com.?' is not handled on AWS/);
await assert.rejects(() => Route53Service.getEntries("test.com"), /Domain 'test.com.?' is not handled on AWS/);
await assert.rejects(() => Route53Service.import({ file: "./test/zone-export.json" }, undefined), /Domain 'webda.io.?' is not handled on AWS/);
stub.callsFake(async () => {
return { Id: "myZone", Name: "webda.io.", CallerReference: "" };
});
await Route53Service.createDNSEntry("test.com", "A", "1.1.1.1");
await Route53Service.shell(undefined, {
_: ["export"],
domain: "webda.io",
file: "./myzone.json"
});
await Route53Service.shell(undefined, {
_: ["import"],
file: "./test/zone-export.json"
});
await Route53Service.shell(Console, {
_: ["sync"],
file: "./test/zone-export.json",
pretend: true
});
assert.deepStrictEqual(logs, ["INFO", "Deleting entry\n", '{\n "Name": "toremove",\n "Type": "TXT"\n}']);
await Route53Service.shell(Console, {
_: ["sync"],
file: "./test/zone-export.json"
});
assert.deepStrictEqual(logs, ["INFO", "Deleting 1 records"]);
spyChanges.callsFake(() => {
throw new Error("Cannot do this");
});
await Route53Service.import({ file: "./test/zone-export.json" }, {
log: (...args) => {
logs = args;
}
});
assert.deepStrictEqual([logs[0], logs[1].toString()], ["ERROR", "Error: Cannot do this"]);
}
finally {
mock.restore();
}
}
};
__decorate([
test
], Route53Test.prototype, "exportImport", null);
Route53Test = __decorate([
suite
], Route53Test);
//# sourceMappingURL=route53.spec.js.map