@webda/aws 1.6.0-beta.3 → 2.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/lib/deployers/cloudformation.d.ts +8 -7
  2. package/lib/deployers/cloudformation.js +85 -75
  3. package/lib/deployers/cloudformation.js.map +1 -1
  4. package/lib/deployers/cloudformation.spec.d.ts +1 -0
  5. package/lib/deployers/cloudformation.spec.js +547 -0
  6. package/lib/deployers/cloudformation.spec.js.map +1 -0
  7. package/lib/deployers/index.d.ts +8 -7
  8. package/lib/deployers/index.js +99 -94
  9. package/lib/deployers/index.js.map +1 -1
  10. package/lib/deployers/index.spec.d.ts +8 -0
  11. package/lib/deployers/index.spec.js +628 -0
  12. package/lib/deployers/index.spec.js.map +1 -0
  13. package/lib/deployers/lambdapackager.d.ts +1 -0
  14. package/lib/deployers/lambdapackager.js +25 -1
  15. package/lib/deployers/lambdapackager.js.map +1 -1
  16. package/lib/deployers/lambdapackager.spec.d.ts +1 -0
  17. package/lib/deployers/lambdapackager.spec.js +76 -0
  18. package/lib/deployers/lambdapackager.spec.js.map +1 -0
  19. package/lib/index.js +5 -1
  20. package/lib/index.js.map +1 -1
  21. package/lib/index.spec.d.ts +10 -0
  22. package/lib/index.spec.js +86 -0
  23. package/lib/index.spec.js.map +1 -0
  24. package/lib/services/aws-mixin.d.ts +22 -1
  25. package/lib/services/aws-mixin.js +18 -20
  26. package/lib/services/aws-mixin.js.map +1 -1
  27. package/lib/services/cloudwatchlogger.d.ts +19 -8
  28. package/lib/services/cloudwatchlogger.js +39 -29
  29. package/lib/services/cloudwatchlogger.js.map +1 -1
  30. package/lib/services/cloudwatchlogger.spec.d.ts +1 -0
  31. package/lib/services/cloudwatchlogger.spec.js +147 -0
  32. package/lib/services/cloudwatchlogger.spec.js.map +1 -0
  33. package/lib/services/dynamodb.d.ts +49 -17
  34. package/lib/services/dynamodb.js +221 -80
  35. package/lib/services/dynamodb.js.map +1 -1
  36. package/lib/services/dynamodb.spec.d.ts +23 -0
  37. package/lib/services/dynamodb.spec.js +410 -0
  38. package/lib/services/dynamodb.spec.js.map +1 -0
  39. package/lib/services/index.d.ts +1 -1
  40. package/lib/services/index.js +6 -2
  41. package/lib/services/index.js.map +1 -1
  42. package/lib/services/lambdacaller.d.ts +26 -10
  43. package/lib/services/lambdacaller.js +10 -18
  44. package/lib/services/lambdacaller.js.map +1 -1
  45. package/lib/services/lambdacaller.spec.d.ts +1 -0
  46. package/lib/services/lambdacaller.spec.js +104 -0
  47. package/lib/services/lambdacaller.spec.js.map +1 -0
  48. package/lib/services/lambdaserver.d.ts +11 -4
  49. package/lib/services/lambdaserver.js +52 -46
  50. package/lib/services/lambdaserver.js.map +1 -1
  51. package/lib/services/lambdaserver.spec.d.ts +1 -0
  52. package/lib/services/lambdaserver.spec.js +449 -0
  53. package/lib/services/lambdaserver.spec.js.map +1 -0
  54. package/lib/services/route53.d.ts +4 -4
  55. package/lib/services/route53.js +34 -44
  56. package/lib/services/route53.js.map +1 -1
  57. package/lib/services/route53.spec.d.ts +1 -0
  58. package/lib/services/route53.spec.js +109 -0
  59. package/lib/services/route53.spec.js.map +1 -0
  60. package/lib/services/s3binary.d.ts +33 -53
  61. package/lib/services/s3binary.js +115 -242
  62. package/lib/services/s3binary.js.map +1 -1
  63. package/lib/services/s3binary.spec.d.ts +1 -0
  64. package/lib/services/s3binary.spec.js +336 -0
  65. package/lib/services/s3binary.spec.js.map +1 -0
  66. package/lib/services/secretsmanager.d.ts +23 -10
  67. package/lib/services/secretsmanager.js +13 -27
  68. package/lib/services/secretsmanager.js.map +1 -1
  69. package/lib/services/secretsmanager.spec.d.ts +1 -0
  70. package/lib/services/secretsmanager.spec.js +109 -0
  71. package/lib/services/secretsmanager.spec.js.map +1 -0
  72. package/lib/services/sqsqueue.d.ts +22 -7
  73. package/lib/services/sqsqueue.js +23 -36
  74. package/lib/services/sqsqueue.js.map +1 -1
  75. package/lib/services/sqsqueue.spec.d.ts +1 -0
  76. package/lib/services/sqsqueue.spec.js +206 -0
  77. package/lib/services/sqsqueue.spec.js.map +1 -0
  78. package/lib/shell.d.ts +1 -1
  79. package/lib/shell.js +4 -1
  80. package/lib/shell.js.map +1 -1
  81. package/package.json +27 -14
  82. package/webda.module.json +285 -12
@@ -0,0 +1,628 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21
+ 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;
22
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
23
+ };
24
+ var __importStar = (this && this.__importStar) || function (mod) {
25
+ if (mod && mod.__esModule) return mod;
26
+ var result = {};
27
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
28
+ __setModuleDefault(result, mod);
29
+ return result;
30
+ };
31
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
32
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
33
+ return new (P || (P = Promise))(function (resolve, reject) {
34
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
35
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
36
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
37
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
38
+ });
39
+ };
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.MockAWSDeployerMethods = void 0;
42
+ const client_acm_1 = require("@aws-sdk/client-acm");
43
+ const client_ec2_1 = require("@aws-sdk/client-ec2");
44
+ const client_route_53_1 = require("@aws-sdk/client-route-53");
45
+ const client_s3_1 = require("@aws-sdk/client-s3");
46
+ const client_sts_1 = require("@aws-sdk/client-sts");
47
+ const mocha_1 = require("@testdeck/mocha");
48
+ const core_1 = require("@webda/core");
49
+ const deployertest_1 = require("@webda/shell/lib/deployers/deployertest");
50
+ const assert = __importStar(require("assert"));
51
+ const aws_sdk_client_mock_1 = require("aws-sdk-client-mock");
52
+ const sinon = __importStar(require("sinon"));
53
+ const _1 = require(".");
54
+ class TestAWSDeployer extends _1.AWSDeployer {
55
+ deploy() {
56
+ return __awaiter(this, void 0, void 0, function* () { });
57
+ }
58
+ restrictedCall(method, ...args) {
59
+ return __awaiter(this, void 0, void 0, function* () {
60
+ return this[method](...args);
61
+ });
62
+ }
63
+ }
64
+ function MockAWSDeployerMethods(service, test) {
65
+ test.mocks["putFilesOnBucket"] = sinon.stub(service, "putFilesOnBucket").resolves();
66
+ test.mocks["createBucket"] = sinon.stub(service, "createBucket").resolves();
67
+ test.mocks["doCreateCertificate"] = sinon.stub(service, "doCreateCertificate").resolves({});
68
+ test.mocks["getCertificate"] = sinon.stub(service, "getCertificate").resolves("arn:myfakecertif");
69
+ test.mocks["createDNSEntry"] = sinon.stub(service, "createDNSEntry").resolves();
70
+ test.mocks["getZoneForDomainName"] = sinon
71
+ .stub(service, "getZoneForDomainName")
72
+ .resolves({ Id: "MyZoneId", Name: "", CallerReference: "" });
73
+ test.mocks["getAWSIdentity"] = sinon.stub(service, "getAWSIdentity").resolves({
74
+ Account: "666111333",
75
+ UserId: "AR1232432433",
76
+ Arn: "arn:aws:sts::666111333:assumed-role"
77
+ });
78
+ test.mocks["getDefaultVpc"] = sinon.stub(service, "getDefaultVpc").resolves({
79
+ Id: "vpc-666",
80
+ Subnets: [{ SubnetId: "subnet-1" }, { SubnetId: "subnet-2" }, { SubnetId: "subnet-2" }]
81
+ });
82
+ test.mocks["getPolicyDocument"] = sinon.stub(service, "getPolicyDocument").resolves({
83
+ Version: "2012-10-17",
84
+ Statement: []
85
+ });
86
+ }
87
+ exports.MockAWSDeployerMethods = MockAWSDeployerMethods;
88
+ let AWSDeployerTest = class AWSDeployerTest extends deployertest_1.DeployerTest {
89
+ getDeployer(manager) {
90
+ return __awaiter(this, void 0, void 0, function* () {
91
+ return new TestAWSDeployer(manager, {});
92
+ });
93
+ }
94
+ mapToArrayTags() {
95
+ let deployer = new TestAWSDeployer(this.manager, { Tags: { Test: "Plop" } });
96
+ assert.deepStrictEqual(deployer.resources.Tags, [{ Key: "Test", Value: "Plop" }]);
97
+ assert.deepStrictEqual(deployer.transformMapTagsToArray([{ Key: "Test", Value: "Plop" }]), [
98
+ { Key: "Test", Value: "Plop" }
99
+ ]);
100
+ }
101
+ putFilesOnBucket() {
102
+ return __awaiter(this, void 0, void 0, function* () {
103
+ yield this.deployer.putFilesOnBucket("plop", []);
104
+ yield assert.rejects(
105
+ // @ts-ignore
106
+ () => this.deployer.putFilesOnBucket("plop", [{ key: "/test" }]), /Should have src and key defined/);
107
+ let Contents = [{ Key: "awsevents.js", Size: 587, ETag: '"312d05552187d3fdfdda3860fbeef48f"' }];
108
+ let stub = sinon.stub().resolves({ Contents });
109
+ // Fake any uploads
110
+ let uploads = [];
111
+ (0, aws_sdk_client_mock_1.mockClient)(client_s3_1.S3)
112
+ .on(client_s3_1.ListObjectsV2Command)
113
+ .callsFake(stub)
114
+ .on(client_s3_1.PutObjectCommand)
115
+ .callsFake(arg => {
116
+ uploads.push(arg);
117
+ return {};
118
+ });
119
+ sinon.stub(this.deployer, "createBucket").resolves();
120
+ yield this.deployer.putFolderOnBucket("plop", "./test/moddas");
121
+ assert.strictEqual(uploads.length, 0);
122
+ Contents[0].ETag = "plop";
123
+ yield this.deployer.putFolderOnBucket("plop", "./test/moddas");
124
+ assert.strictEqual(uploads.length, 1);
125
+ uploads = [];
126
+ Contents[0].ETag = '"312d05552187d3fdfdda3860fbeef48f"';
127
+ Contents[0].Size = 123;
128
+ yield this.deployer.putFolderOnBucket("plop", "./test/moddas");
129
+ assert.strictEqual(uploads.length, 1);
130
+ });
131
+ }
132
+ testGetPolicyDocument() {
133
+ return __awaiter(this, void 0, void 0, function* () {
134
+ const mock = (0, aws_sdk_client_mock_1.mockClient)(client_sts_1.STS).on(client_sts_1.GetCallerIdentityCommand).resolves({
135
+ Account: "test"
136
+ });
137
+ try {
138
+ // @ts-ignore
139
+ this.manager.getWebda().getServices()["customservice"].getARNPolicy = () => {
140
+ return [
141
+ { Sid: "", Effect: "Allow", Action: [], Resource: "*" },
142
+ { Sid: "", Effect: "Allow", Action: [], Resource: "*" }
143
+ ];
144
+ };
145
+ let result = yield this.deployer.getPolicyDocument();
146
+ assert.strictEqual(result.Statement.length, 4);
147
+ }
148
+ finally {
149
+ mock.restore();
150
+ }
151
+ });
152
+ }
153
+ testGetDefaultVpc() {
154
+ return __awaiter(this, void 0, void 0, function* () {
155
+ var vpcsSpy = sinon.stub().callsFake(() => __awaiter(this, void 0, void 0, function* () {
156
+ if (vpcsSpy.callCount === 1) {
157
+ return {
158
+ Vpcs: []
159
+ };
160
+ }
161
+ return {
162
+ Vpcs: [
163
+ {
164
+ VpcId: "vpc-667",
165
+ IsDefault: false
166
+ },
167
+ {
168
+ VpcId: "vpc-666",
169
+ IsDefault: true
170
+ }
171
+ ]
172
+ };
173
+ }));
174
+ var subnetsSpy = sinon.stub().callsFake(() => __awaiter(this, void 0, void 0, function* () {
175
+ return {
176
+ Subnets: [
177
+ {
178
+ SubnetId: "subnet-1"
179
+ },
180
+ {
181
+ SubnetId: "subnet-2"
182
+ }
183
+ ]
184
+ };
185
+ }));
186
+ const mock = (0, aws_sdk_client_mock_1.mockClient)(client_ec2_1.EC2)
187
+ .on(client_ec2_1.DescribeVpcsCommand)
188
+ .callsFake(vpcsSpy)
189
+ .on(client_ec2_1.DescribeSubnetsCommand)
190
+ .callsFake(subnetsSpy);
191
+ try {
192
+ let result = yield this.deployer.getDefaultVpc();
193
+ assert.strictEqual(vpcsSpy.calledOnce, true);
194
+ assert.strictEqual(subnetsSpy.notCalled, true);
195
+ assert.strictEqual(result, undefined);
196
+ core_1.CacheService.clearAllCache();
197
+ result = yield this.deployer.getDefaultVpc();
198
+ assert.deepStrictEqual(result, {
199
+ Id: "vpc-666",
200
+ Subnets: [{ SubnetId: "subnet-1" }, { SubnetId: "subnet-2" }]
201
+ });
202
+ assert.strictEqual(subnetsSpy.calledWith({
203
+ Filters: [
204
+ {
205
+ Name: "vpc-id",
206
+ Values: ["vpc-666"]
207
+ }
208
+ ]
209
+ }), true);
210
+ }
211
+ finally {
212
+ mock.restore();
213
+ }
214
+ });
215
+ }
216
+ testCommonPrefix() {
217
+ return __awaiter(this, void 0, void 0, function* () {
218
+ assert.strictEqual(this.deployer.commonPrefix("/test/bouzf", "/test/reffff"), "/test/");
219
+ assert.strictEqual(this.deployer.commonPrefix("test/bouzf", "/test/reffff"), "");
220
+ assert.strictEqual(this.deployer.commonPrefix("/tes", "/test/reffff"), "/tes");
221
+ assert.strictEqual(this.deployer.commonPrefix("test/bouzf", "test/bouzf212"), "test/bouzf");
222
+ });
223
+ }
224
+ testCreateBucket() {
225
+ return __awaiter(this, void 0, void 0, function* () {
226
+ this.deployer.resources.Tags = this.deployer.transformMapTagsToArray({ test: "mytag" });
227
+ var headSpy = sinon.stub();
228
+ headSpy.callsFake(() => __awaiter(this, void 0, void 0, function* () {
229
+ let res = {};
230
+ switch (headSpy.callCount) {
231
+ case 2:
232
+ throw {
233
+ name: "Forbidden"
234
+ };
235
+ case 3:
236
+ throw new client_s3_1.NotFound({
237
+ $metadata: {}
238
+ });
239
+ }
240
+ return res;
241
+ }));
242
+ var createSpy = sinon.stub().resolves();
243
+ var tagSpy = sinon.stub().resolves();
244
+ const mock = (0, aws_sdk_client_mock_1.mockClient)(client_s3_1.S3)
245
+ .on(client_s3_1.HeadBucketCommand)
246
+ .callsFake(headSpy)
247
+ .on(client_s3_1.CreateBucketCommand)
248
+ .callsFake(createSpy)
249
+ .on(client_s3_1.PutBucketTaggingCommand)
250
+ .callsFake(tagSpy);
251
+ try {
252
+ yield this.deployer.createBucket("plop");
253
+ // Bucket exists
254
+ assert.strictEqual(headSpy.callCount, 1);
255
+ assert.strictEqual(headSpy.calledWith({ Bucket: "plop" }), true);
256
+ assert.strictEqual(createSpy.notCalled, true);
257
+ assert.strictEqual(tagSpy.notCalled, true);
258
+ // Bucket exists in another account or we do not have rights
259
+ yield this.deployer.createBucket("plop");
260
+ assert.strictEqual(headSpy.callCount, 2);
261
+ assert.strictEqual(createSpy.notCalled, true);
262
+ yield this.deployer.createBucket("plop");
263
+ assert.strictEqual(headSpy.callCount, 3);
264
+ assert.strictEqual(createSpy.calledOnce, true);
265
+ assert.strictEqual(createSpy.calledWith({ Bucket: "plop" }), true);
266
+ assert.strictEqual(tagSpy.calledOnce, true);
267
+ assert.strictEqual(tagSpy.calledWith({ Bucket: "plop", Tagging: { TagSet: [{ Key: "test", Value: "mytag" }] } }), true);
268
+ }
269
+ finally {
270
+ mock.restore();
271
+ }
272
+ });
273
+ }
274
+ testPutBucket() {
275
+ return __awaiter(this, void 0, void 0, function* () {
276
+ var putSpy = sinon.stub();
277
+ var listSpy = sinon.stub();
278
+ var createBucket = sinon.stub(this.deployer, "createBucket");
279
+ createBucket.resolves();
280
+ putSpy.resolves();
281
+ listSpy.resolves({ Contents: [] });
282
+ const mock = (0, aws_sdk_client_mock_1.mockClient)(client_s3_1.S3).on(client_s3_1.PutObjectCommand).callsFake(putSpy).on(client_s3_1.ListObjectsV2Command).callsFake(listSpy);
283
+ try {
284
+ // @ts-ignore shortcut to test both in one
285
+ yield this.deployer.putFilesOnBucket("plop", [
286
+ { src: __filename },
287
+ { src: __dirname + "/index.ts", key: "plop.ts" },
288
+ { key: "buffer.out", src: Buffer.from("bouzouf"), mimetype: "text/plain" }
289
+ ]);
290
+ assert.strictEqual(putSpy.callCount, 3);
291
+ // checks call
292
+ assert.strictEqual(putSpy.firstCall.firstArg.Body.constructor.name, "ReadStream");
293
+ assert.strictEqual(putSpy.secondCall.firstArg.Body.constructor.name, "ReadStream");
294
+ assert.deepStrictEqual(putSpy.thirdCall.firstArg.Body.constructor.name, "Buffer");
295
+ assert.deepStrictEqual(putSpy.thirdCall.firstArg.Body.toString(), "bouzouf");
296
+ assert.strictEqual(createBucket.calledOnce, true);
297
+ // TODO Check upload optimization
298
+ }
299
+ finally {
300
+ mock.restore();
301
+ }
302
+ });
303
+ }
304
+ testGetCertificate() {
305
+ return __awaiter(this, void 0, void 0, function* () {
306
+ var putSpy = sinon.stub();
307
+ var getZoneForDomainName = sinon.stub(this.deployer, "getZoneForDomainName");
308
+ var doCreateCertificate = sinon.stub(this.deployer, "doCreateCertificate");
309
+ getZoneForDomainName.callsFake(() => __awaiter(this, void 0, void 0, function* () {
310
+ if (getZoneForDomainName.callCount === 1) {
311
+ return undefined;
312
+ }
313
+ return { Id: "1234", HostedZone: "", Name: "", CallerReference: "" };
314
+ }));
315
+ doCreateCertificate.resolves({ DomainName: "newlyCreated" });
316
+ putSpy.callsFake(() => __awaiter(this, void 0, void 0, function* () {
317
+ switch (putSpy.callCount) {
318
+ case 1:
319
+ return {
320
+ CertificateSummaryList: [
321
+ {
322
+ DomainName: "none.com"
323
+ }
324
+ ],
325
+ NextToken: "page2"
326
+ };
327
+ case 2:
328
+ return {
329
+ CertificateSummaryList: [
330
+ {
331
+ DomainName: "test.webda.io"
332
+ }
333
+ ]
334
+ };
335
+ default:
336
+ return { CertificateSummaryList: [] };
337
+ }
338
+ }));
339
+ const mock = (0, aws_sdk_client_mock_1.mockClient)(client_acm_1.ACM).on(client_acm_1.ListCertificatesCommand).callsFake(putSpy);
340
+ try {
341
+ let certificate = yield this.deployer.getCertificate("test.webda.io.");
342
+ assert.strictEqual(putSpy.calledTwice, true);
343
+ assert.strictEqual(doCreateCertificate.notCalled, true);
344
+ assert.strictEqual(getZoneForDomainName.notCalled, true);
345
+ assert.deepStrictEqual(certificate, { DomainName: "test.webda.io" });
346
+ yield assert.rejects(() => __awaiter(this, void 0, void 0, function* () { return yield this.deployer.getCertificate("test.webda.io"); }), /Cannot create certificate as Route53 Zone was not found/g);
347
+ assert.strictEqual(getZoneForDomainName.calledWith("test.webda.io"), true);
348
+ assert.strictEqual(doCreateCertificate.notCalled, true);
349
+ yield this.deployer.getCertificate("test.webda.io", "us-east-1");
350
+ assert.strictEqual(doCreateCertificate.calledWith("test.webda.io", {
351
+ Id: "1234",
352
+ HostedZone: "",
353
+ Name: "",
354
+ CallerReference: ""
355
+ }), true);
356
+ }
357
+ finally {
358
+ mock.restore();
359
+ }
360
+ });
361
+ }
362
+ testGetZoneForDomainName() {
363
+ return __awaiter(this, void 0, void 0, function* () {
364
+ var callSpy = sinon.stub();
365
+ callSpy.callsFake(() => __awaiter(this, void 0, void 0, function* () {
366
+ switch (callSpy.callCount) {
367
+ case 1:
368
+ return { HostedZones: [], NextMarker: "plop" };
369
+ default:
370
+ return {
371
+ HostedZones: [
372
+ { Name: "webda.io." },
373
+ { Name: "bouzouf.io." },
374
+ { Name: "test2.test.webda.io." },
375
+ { Name: "test.webda.io." }
376
+ ]
377
+ };
378
+ }
379
+ }));
380
+ const mock = (0, aws_sdk_client_mock_1.mockClient)(client_route_53_1.Route53).on(client_route_53_1.ListHostedZonesCommand).callsFake(callSpy);
381
+ try {
382
+ let result = yield this.deployer.getZoneForDomainName("subdomain.test2.test.webda.io.");
383
+ assert.deepStrictEqual(result, {
384
+ Name: "test2.test.webda.io."
385
+ });
386
+ assert.strictEqual(callSpy.calledTwice, true);
387
+ result = yield this.deployer.getZoneForDomainName("subdomain.webda.io");
388
+ assert.deepStrictEqual(result, {
389
+ Name: "webda.io."
390
+ });
391
+ result = yield this.deployer.getZoneForDomainName("loopingz.com.");
392
+ assert.strictEqual(result, undefined);
393
+ }
394
+ finally {
395
+ mock.restore();
396
+ }
397
+ });
398
+ }
399
+ testDoCreateCertificate() {
400
+ return __awaiter(this, void 0, void 0, function* () {
401
+ var requestCertificate = sinon.stub();
402
+ var describeCertificate = sinon.stub();
403
+ var createDNSEntry = sinon.stub(this.deployer, "createDNSEntry");
404
+ var waitFor = sinon.stub(this.deployer, "waitFor");
405
+ createDNSEntry.callsFake(() => __awaiter(this, void 0, void 0, function* () { }));
406
+ describeCertificate.resolves({});
407
+ const mock = (0, aws_sdk_client_mock_1.mockClient)(client_acm_1.ACM)
408
+ .on(client_acm_1.RequestCertificateCommand)
409
+ .callsFake(requestCertificate)
410
+ .on(client_acm_1.DescribeCertificateCommand)
411
+ .callsFake(describeCertificate);
412
+ try {
413
+ waitFor.callsFake((callback) => __awaiter(this, void 0, void 0, function* () {
414
+ switch (waitFor.callCount) {
415
+ case 1:
416
+ yield callback();
417
+ case 2:
418
+ return new Promise(resolve => callback(resolve));
419
+ }
420
+ }));
421
+ describeCertificate.callsFake(() => __awaiter(this, void 0, void 0, function* () {
422
+ if (describeCertificate.callCount === 1) {
423
+ return {
424
+ Certificate: {
425
+ DomainValidationOptions: [{}]
426
+ }
427
+ };
428
+ }
429
+ else {
430
+ return {
431
+ Certificate: {
432
+ Status: "FAILED",
433
+ DomainValidationOptions: [{ ResourceRecord: "bouzouf" }]
434
+ }
435
+ };
436
+ }
437
+ }));
438
+ requestCertificate.callsFake(() => __awaiter(this, void 0, void 0, function* () {
439
+ return { CertificateArn: "plop" };
440
+ }));
441
+ yield assert.rejects(() => __awaiter(this, void 0, void 0, function* () { return yield this.deployer.doCreateCertificate("test.webda.io.", { Id: "1234" }); }), /Certificate validation has failed/g);
442
+ waitFor.callsFake(() => undefined);
443
+ yield assert.rejects(() => __awaiter(this, void 0, void 0, function* () { return yield this.deployer.doCreateCertificate("test.webda.io.", { Id: "1234" }); }), /Certificate validation has failed/g);
444
+ waitFor.resetHistory();
445
+ describeCertificate.resetHistory();
446
+ assert.strictEqual(createDNSEntry.notCalled, true);
447
+ // @ts-ignore
448
+ waitFor.callsFake(c => {
449
+ switch (waitFor.callCount) {
450
+ case 1:
451
+ return {
452
+ Status: "PENDING_VALIDATION",
453
+ DomainValidationOptions: [{ ResourceRecord: { Value: "plop.com.", Name: "bouzouf.com" } }],
454
+ CertificateArn: "arn:plop"
455
+ };
456
+ default:
457
+ return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () {
458
+ for (let i = 0; i < 5; i++) {
459
+ if (yield c(resolve, reject)) {
460
+ return;
461
+ }
462
+ }
463
+ reject("max");
464
+ }));
465
+ }
466
+ });
467
+ describeCertificate.callsFake(() => __awaiter(this, void 0, void 0, function* () {
468
+ if (describeCertificate.callCount < 3) {
469
+ return {
470
+ Certificate: {
471
+ Status: "PENDING_VALIDATION"
472
+ }
473
+ };
474
+ }
475
+ else {
476
+ return {
477
+ Certificate: {
478
+ Status: "ISSUED"
479
+ }
480
+ };
481
+ }
482
+ }));
483
+ yield this.deployer.doCreateCertificate("test.webda.io.", { Id: "1234", Name: "", CallerReference: "" });
484
+ assert.strictEqual(createDNSEntry.calledWith("bouzouf.com", "CNAME", "plop.com.", { Id: "1234", Name: "", CallerReference: "" }), true);
485
+ assert.strictEqual(describeCertificate.callCount, 3);
486
+ waitFor.resetHistory();
487
+ describeCertificate.resolves({ Certificate: { Status: "ERROR" } });
488
+ let exception = false;
489
+ try {
490
+ // Should be able to use assert.rejects
491
+ yield this.deployer.doCreateCertificate("test.webda.io.", { Id: "1234" });
492
+ }
493
+ catch (err) {
494
+ assert.deepStrictEqual(err, { Status: "ERROR" });
495
+ exception = true;
496
+ }
497
+ assert.strictEqual(exception, true);
498
+ }
499
+ finally {
500
+ mock.restore();
501
+ }
502
+ });
503
+ }
504
+ testCreateDNSEntry() {
505
+ return __awaiter(this, void 0, void 0, function* () {
506
+ var callSpy = sinon.stub();
507
+ var getZoneForDomainName = sinon.stub(this.deployer, "getZoneForDomainName");
508
+ getZoneForDomainName.callsFake(() => __awaiter(this, void 0, void 0, function* () {
509
+ if (getZoneForDomainName.callCount === 1) {
510
+ return undefined;
511
+ }
512
+ return { Id: "1234", CallerReference: "", Name: "" };
513
+ }));
514
+ callSpy.resolves();
515
+ const mock = (0, aws_sdk_client_mock_1.mockClient)(client_route_53_1.Route53).on(client_route_53_1.ChangeResourceRecordSetsCommand).callsFake(callSpy);
516
+ try {
517
+ yield assert.rejects(() => __awaiter(this, void 0, void 0, function* () { return yield this.deployer.restrictedCall("createDNSEntry", "webda.io", "CNAME", "loopingz.com"); }), /Domain is not handled on AWS/g);
518
+ assert.strictEqual(callSpy.notCalled, true);
519
+ yield this.deployer.restrictedCall("createDNSEntry", "webda.io.", "CNAME", "loopingz.com");
520
+ assert.strictEqual(callSpy.calledOnce, true);
521
+ assert.deepStrictEqual(callSpy.firstCall.firstArg, {
522
+ HostedZoneId: "1234",
523
+ ChangeBatch: {
524
+ Changes: [
525
+ {
526
+ Action: "UPSERT",
527
+ ResourceRecordSet: {
528
+ Name: "webda.io.",
529
+ ResourceRecords: [
530
+ {
531
+ Value: "loopingz.com"
532
+ }
533
+ ],
534
+ TTL: 360,
535
+ Type: "CNAME"
536
+ }
537
+ }
538
+ ],
539
+ Comment: "webda-automated-deploiement"
540
+ }
541
+ });
542
+ }
543
+ finally {
544
+ mock.restore();
545
+ }
546
+ });
547
+ }
548
+ testHash() {
549
+ return __awaiter(this, void 0, void 0, function* () {
550
+ assert.strictEqual(yield this.deployer.restrictedCall("md5", "bouzouf"), "fc45f69f910da129848cd265448a5d00");
551
+ assert.strictEqual(yield this.deployer.restrictedCall("hash", "bouzouf"), "fc45f69f910da129848cd265448a5d00");
552
+ assert.strictEqual(yield this.deployer.restrictedCall("hash", "bouzouf", "md5", "base64"), "/EX2n5ENoSmEjNJlRIpdAA==");
553
+ assert.strictEqual(yield this.deployer.restrictedCall("hash", "bouzouf", "sha256", "hex"), "af6773b1075007089c46a6d0b8e9ac03abfdb526de0683bfeb723f2448ea3f66");
554
+ });
555
+ }
556
+ cov() {
557
+ return __awaiter(this, void 0, void 0, function* () {
558
+ assert.strictEqual(this.deployer.getRegion(), "us-east-1");
559
+ this.deployer.waitFor((resolve) => __awaiter(this, void 0, void 0, function* () {
560
+ resolve();
561
+ return true;
562
+ }), 1, "test", 1);
563
+ this.deployer.resources.Tags = [{ Key: "plop", Value: "test" }];
564
+ // @ts-ignore
565
+ this.deployer.resources.Plop = { Tags: { plop2: "oké yep" } };
566
+ assert.strictEqual(this.deployer.getDefaultTagsAsS3Tagging("Plop"), "plop2=ok%C3%A9%20yep&plop=test");
567
+ });
568
+ }
569
+ replaceForAWS() {
570
+ assert.strictEqual(this.deployer._replaceForAWS("my/id"), "my_id");
571
+ assert.strictEqual(this.deployer._replaceForAWS("myid"), "myid");
572
+ }
573
+ transformArrayTagsToMap() {
574
+ assert.deepStrictEqual(this.deployer.transformArrayTagsToMap([{ Key: "Test", Value: "plop" }]), { Test: "plop" });
575
+ assert.deepStrictEqual(this.deployer.transformArrayTagsToMap({ Test: "plop" }), { Test: "plop" });
576
+ assert.deepStrictEqual(this.deployer.getDefaultTagsAsMap(), {});
577
+ assert.deepStrictEqual(this.deployer.getDefaultTags("me"), []);
578
+ }
579
+ };
580
+ __decorate([
581
+ mocha_1.test
582
+ ], AWSDeployerTest.prototype, "mapToArrayTags", null);
583
+ __decorate([
584
+ mocha_1.test
585
+ ], AWSDeployerTest.prototype, "putFilesOnBucket", null);
586
+ __decorate([
587
+ mocha_1.test
588
+ ], AWSDeployerTest.prototype, "testGetPolicyDocument", null);
589
+ __decorate([
590
+ mocha_1.test
591
+ ], AWSDeployerTest.prototype, "testGetDefaultVpc", null);
592
+ __decorate([
593
+ mocha_1.test
594
+ ], AWSDeployerTest.prototype, "testCommonPrefix", null);
595
+ __decorate([
596
+ mocha_1.test
597
+ ], AWSDeployerTest.prototype, "testCreateBucket", null);
598
+ __decorate([
599
+ mocha_1.test
600
+ ], AWSDeployerTest.prototype, "testPutBucket", null);
601
+ __decorate([
602
+ mocha_1.test
603
+ ], AWSDeployerTest.prototype, "testGetCertificate", null);
604
+ __decorate([
605
+ mocha_1.test
606
+ ], AWSDeployerTest.prototype, "testGetZoneForDomainName", null);
607
+ __decorate([
608
+ mocha_1.test
609
+ ], AWSDeployerTest.prototype, "testDoCreateCertificate", null);
610
+ __decorate([
611
+ mocha_1.test
612
+ ], AWSDeployerTest.prototype, "testCreateDNSEntry", null);
613
+ __decorate([
614
+ mocha_1.test
615
+ ], AWSDeployerTest.prototype, "testHash", null);
616
+ __decorate([
617
+ mocha_1.test
618
+ ], AWSDeployerTest.prototype, "cov", null);
619
+ __decorate([
620
+ mocha_1.test
621
+ ], AWSDeployerTest.prototype, "replaceForAWS", null);
622
+ __decorate([
623
+ mocha_1.test
624
+ ], AWSDeployerTest.prototype, "transformArrayTagsToMap", null);
625
+ AWSDeployerTest = __decorate([
626
+ mocha_1.suite
627
+ ], AWSDeployerTest);
628
+ //# sourceMappingURL=index.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.spec.js","sourceRoot":"","sources":["../../src/deployers/index.spec.ts"],"names":[],"mappings":"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"}