@aws-solutions-constructs/core
Version:
Core CDK Construct for patterns library
285 lines • 26.4 kB
JavaScript
"use strict";
/**
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License"). You may not use this file except in compliance
* with the License. A copy of the License is located at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* or in the 'license' file accompanying this file. This file is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES
* OR CONDITIONS OF ANY KIND, express or implied. See the License for the specific language governing permissions
* and limitations under the License.
*/
Object.defineProperty(exports, "__esModule", { value: true });
const process = require("process");
const override_warning_service_1 = require("../lib/override-warning-service");
const __1 = require("../");
// Mock setup
beforeEach(() => {
jest.resetModules();
jest.clearAllMocks();
delete process.env.overrideWarningsEnabled;
});
test('Test override detection: positive, not-nested', () => {
// Arrange
const a = {
keyA: 'valueA',
keyB: 'valueB',
keyC: 'valueC'
};
const b = {
keyA: 'new-valueA',
keyD: 'valueD'
};
// Act
const consoleLogSpy = jest.spyOn(console, 'log');
(0, override_warning_service_1.flagOverriddenDefaults)(a, b);
// Assert
expect(consoleLogSpy).toBeCalledTimes(1);
});
test('Test override detection: negative, not-nested', () => {
// Arrange
const a = {
keyA: 'valueA',
keyB: 'valueB',
keyC: 'valueC'
};
const b = {
keyD: 'valueD'
};
// Act
const consoleLogSpy = jest.spyOn(console, 'log');
(0, override_warning_service_1.flagOverriddenDefaults)(a, b);
// Assert
expect(consoleLogSpy).toBeCalledTimes(0);
});
test('Test override detection: positive, nested', () => {
// Arrange
const a = {
keyA: 'valueA',
keyB: 'valueB',
keyC: 'valueC',
keyD: {
keyDA: 'valueDA',
keyDB: 'valueDB'
}
};
const b = {
keyC: 'valueCAnew',
keyD: {
keyDA: 'valueDAnew'
}
};
// Act
const consoleLogSpy = jest.spyOn(console, 'log');
(0, override_warning_service_1.flagOverriddenDefaults)(a, b);
// Assert
expect(consoleLogSpy).toBeCalledTimes(2);
});
test('Test override detection: negative, nested', () => {
// Arrange
const a = {
keyA: 'valueA',
keyB: 'valueB',
keyC: 'valueC',
keyD: {
keyDA: 'valueDA',
keyDB: 'valueDB'
}
};
const b = {
keyD: {
keyDA: 'valueDA'
}
};
// Act
const consoleLogSpy = jest.spyOn(console, 'log');
(0, override_warning_service_1.flagOverriddenDefaults)(a, b);
// Assert
expect(consoleLogSpy).toBeCalledTimes(0);
});
test('Test override warning on/off: default on', () => {
// Arrange
const a = {
keyA: 'valueA',
keyB: 'valueB',
keyC: 'valueC'
};
const b = {
keyA: 'new-valueA',
keyD: 'valueD'
};
// Act
const consoleLogSpy = jest.spyOn(console, 'log');
(0, __1.overrideProps)(a, b);
// Assert
expect(consoleLogSpy).toBeCalledTimes(1);
});
test('Test override warning on/off: explicit on', () => {
// Arrange
const a = {
keyA: 'valueA',
keyB: 'valueB',
keyC: 'valueC'
};
const b = {
keyA: 'new-valueA',
keyD: 'valueD'
};
process.env.overrideWarningsEnabled = 'true';
// Act
const consoleLogSpy = jest.spyOn(console, 'log');
(0, __1.overrideProps)(a, b);
// Assert
expect(consoleLogSpy).toBeCalledTimes(1);
});
test('Test override warning on/off: explicit off', () => {
// Arrange
const a = {
keyA: 'valueA',
keyB: 'valueB',
keyC: 'valueC'
};
const b = {
keyA: 'new-valueA',
keyD: 'valueD'
};
// Act
const consoleLogSpy = jest.spyOn(console, 'log');
process.env.overrideWarningsEnabled = 'false';
const result = (0, __1.overrideProps)(a, b);
// Assert
expect(consoleLogSpy).toBeCalledTimes(0);
expect(result).toEqual({
keyA: 'new-valueA',
keyB: 'valueB',
keyC: 'valueC',
keyD: 'valueD'
});
});
test('Test override warning on/off: undefined on', () => {
// Arrange
const a = {
keyA: 'valueA',
keyB: 'valueB',
keyC: 'valueC'
};
const b = {
keyA: 'new-valueA',
keyD: 'valueD'
};
// Act
const consoleLogSpy = jest.spyOn(console, 'log');
process.env.overrideWarningsEnabled = undefined;
const result = (0, __1.overrideProps)(a, b);
// Assert
expect(consoleLogSpy).toBeCalledTimes(1);
expect(result).toEqual({
keyA: 'new-valueA',
keyB: 'valueB',
keyC: 'valueC',
keyD: 'valueD'
});
});
test('Test current prefilters', () => {
// Arrange
const a = {
destination: 'sampleDestinationValueA',
maxRecordAge: 'sampleMaxRecordAgeValueA',
expiration: 'sampleExpirationValueA',
transitionAfter: 'sampleTransitionValueA',
timeout: 'sampleTimeoutValueA',
period: 'samplePeriodValueA',
node: 'sampleNodeA'
};
const b = {
destination: 'sampleDestinationValueB',
maxRecordAge: 'sampleMaxRecordAgeValueB',
expiration: 'sampleExpirationValueB',
transitionAfter: 'sampleTransitionValueB',
timeout: 'sampleTimeoutValueB',
period: 'samplePeriodValueA',
node: 'sampleNodeA'
};
// Act
const consoleLogSpy = jest.spyOn(console, 'log');
process.env.overrideWarningsEnabled = undefined;
const result = (0, __1.overrideProps)(a, b);
// Assert
expect(consoleLogSpy).toBeCalledTimes(6);
expect(result).toEqual({
destination: 'sampleDestinationValueB',
maxRecordAge: 'sampleMaxRecordAgeValueB',
expiration: 'sampleExpirationValueB',
transitionAfter: 'sampleTransitionValueB',
timeout: 'sampleTimeoutValueB',
period: 'samplePeriodValueA',
node: 'sampleNodeA'
});
});
test('Test overrideProps with warnings disabled in argument', () => {
process.env.overrideWarningsEnabled = 'true';
const a = {
keyA: 'valueA',
keyB: 'valueB',
keyC: 'valueC'
};
const b = {
keyA: 'new-valueA',
keyD: 'valueD'
};
// Act
const consoleLogSpy = jest.spyOn(console, 'log');
(0, __1.overrideProps)(a, b, undefined, true);
// Assert
expect(consoleLogSpy).toBeCalledTimes(0);
});
test('Test overrideProps with deep arguments', () => {
const a = {
keyA: 'valueA',
keyB: 'valueB',
keyC: {
keyCA: 'valueCA',
keyCB: 'valueCB'
},
keyD: 'valueD'
};
const b = {
keyA: 'new-valueA',
keyB: 'valueB',
keyC: {
keyCA: 'valueCANew',
},
keyD: {
keyDA: 'valueDANew',
keyDB: 'valueDBNew'
}
};
// Act
const consoleLogSpy = jest.spyOn(console, 'log');
(0, __1.overrideProps)(a, b);
// Assert
expect(consoleLogSpy).toBeCalledTimes(3);
});
test('Confirm node stops circular reference traversal', () => {
// Arrange
const a = {
keyA: 'valueA',
keyB: 'valueB',
keyC: 'valueC'
};
const b = {
keyA: 'new-valueA',
keyD: 'valueD',
keyE: {
node: {}
}
};
b.keyE.node = b;
const consoleLogSpy = jest.spyOn(console, 'log');
(0, override_warning_service_1.flagOverriddenDefaults)(a, b);
// Assert
expect(consoleLogSpy).toBeCalledTimes(1);
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcnJpZGUtd2FybmluZy1zZXJ2aWNlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJvdmVycmlkZS13YXJuaW5nLXNlcnZpY2UudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7Ozs7Ozs7O0dBV0c7O0FBRUgsbUNBQW1DO0FBQ25DLDhFQUF5RTtBQUN6RSwyQkFBb0M7QUFFcEMsYUFBYTtBQUNiLFVBQVUsQ0FBQyxHQUFHLEVBQUU7SUFDZCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDcEIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3JCLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQztBQUM3QyxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQywrQ0FBK0MsRUFBRSxHQUFHLEVBQUU7SUFDekQsVUFBVTtJQUNWLE1BQU0sQ0FBQyxHQUFHO1FBQ1IsSUFBSSxFQUFFLFFBQVE7UUFDZCxJQUFJLEVBQUUsUUFBUTtRQUNkLElBQUksRUFBRSxRQUFRO0tBQ2YsQ0FBQztJQUNGLE1BQU0sQ0FBQyxHQUFHO1FBQ1IsSUFBSSxFQUFFLFlBQVk7UUFDbEIsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDO0lBQ0YsTUFBTTtJQUNOLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pELElBQUEsaURBQXNCLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdCLFNBQVM7SUFDVCxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQyxDQUFDO0FBRUgsSUFBSSxDQUFDLCtDQUErQyxFQUFFLEdBQUcsRUFBRTtJQUN6RCxVQUFVO0lBQ1YsTUFBTSxDQUFDLEdBQUc7UUFDUixJQUFJLEVBQUUsUUFBUTtRQUNkLElBQUksRUFBRSxRQUFRO1FBQ2QsSUFBSSxF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TSxDQUFDLEdBQUc7UUFDUixJQUFJLEVBQUUsUUFBUTtRQUNkLElBQUksRUFBRSxRQUFRO1FBQ2QsSUFBSSxFQUFFLFFBQVE7S0FDZixDQUFDO0lBQ0YsTUFBTSxDQUFDLEdBQUc7UUFDUixJQUFJLEVBQUUsWUFBWTtRQUNsQixJQUFJLEVBQUUsUUFBUTtRQUNkLElBQUksRUFBRTtZQUNKLElBQUksRUFBRSxFQUFFO1NBQ1Q7S0FDRixDQUFDO0lBQ0YsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0lBRWhCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2pELElBQUEsaURBQXNCLEVBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQzdCLFNBQVM7SUFDVCxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNDLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAgQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIikuIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2VcbiAqICB3aXRoIHRoZSBMaWNlbnNlLiBBIGNvcHkgb2YgdGhlIExpY2Vuc2UgaXMgbG9jYXRlZCBhdFxuICpcbiAqICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogIG9yIGluIHRoZSAnbGljZW5zZScgZmlsZSBhY2NvbXBhbnlpbmcgdGhpcyBmaWxlLiBUaGlzIGZpbGUgaXMgZGlzdHJpYnV0ZWQgb24gYW4gJ0FTIElTJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTXG4gKiAgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnNcbiAqICBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0ICogYXMgcHJvY2VzcyBmcm9tICdwcm9jZXNzJztcbmltcG9ydCB7IGZsYWdPdmVycmlkZGVuRGVmYXVsdHMgfSBmcm9tICcuLi9saWIvb3ZlcnJpZGUtd2FybmluZy1zZXJ2aWNlJztcbmltcG9ydCB7IG92ZXJyaWRlUHJvcHMgfSBmcm9tICcuLi8nO1xuXG4vLyBNb2NrIHNldHVwXG5iZWZvcmVFYWNoKCgpID0+IHtcbiAgamVzdC5yZXNldE1vZHVsZXMoKTtcbiAgamVzdC5jbGVhckFsbE1vY2tzKCk7XG4gIGRlbGV0ZSBwcm9jZXNzLmVudi5vdmVycmlkZVdhcm5pbmdzRW5hYmxlZDtcbn0pO1xuXG50ZXN0KCdUZXN0IG92ZXJyaWRlIGRldGVjdGlvbjogcG9zaXRpdmUsIG5vdC1uZXN0ZWQnLCAoKSA9PiB7XG4gIC8vIEFycmFuZ2VcbiAgY29uc3QgYSA9IHtcbiAgICBrZXlBOiAndmFsdWVBJyxcbiAgICBrZXlCOiAndmFsdWVCJyxcbiAgICBrZXlDOiAndmFsdWVDJ1xuICB9O1xuICBjb25zdCBiID0ge1xuICAgIGtleUE6ICduZXctdmFsdWVBJyxcbiAgICBrZXlEOiAndmFsdWVEJ1xuICB9O1xuICAvLyBBY3RcbiAgY29uc3QgY29uc29sZUxvZ1NweSA9IGplc3Quc3B5T24oY29uc29sZSwgJ2xvZycpO1xuICBmbGFnT3ZlcnJpZGRlbkRlZmF1bHRzKGEsIGIpO1xuICAvLyBBc3NlcnRcbiAgZXhwZWN0KGNvbnNvbGVMb2dTcHkpLnRvQmVDYWxsZWRUaW1lcygxKTtcbn0pO1xuXG50ZXN0KCdUZXN0IG92ZXJyaWRlIGRldGVjdGlvbjogbmVnYXRpdmUsIG5vdC1uZXN0ZWQnLCAoKSA9PiB7XG4gIC8vIEFycmFuZ2VcbiAgY29uc3QgYSA9IHtcbiAgICBrZXlBOiAndmFsdWVBJyxcbiAgICBrZXlCOiAndmFsdWVCJyxcbiAgICBrZXlDOiAndmFsdWVDJ1xuICB9O1xuICBjb25zdCBiID0ge1xuICAgIGtleUQ6ICd2YWx1ZUQnXG4gIH07XG4gIC8vIEFjdFxuICBjb25zdCBjb25zb2xlTG9nU3B5ID0gamVzdC5zcHlPbihjb25zb2xlLCAnbG9nJyk7XG4gIGZsYWdPdmVycmlkZGVuRGVmYXVsdHMoYSwgYik7XG4gIC8vIEFzc2VydFxuICBleHBlY3QoY29uc29sZUxvZ1NweSkudG9CZUNhbGxlZFRpbWVzKDApO1xufSk7XG5cbnRlc3QoJ1Rlc3Qgb3ZlcnJpZGUgZGV0ZWN0aW9uOiBwb3NpdGl2ZSwgbmVzdGVkJywgKCkgPT4ge1xuICAvLyBBcnJhbmdlXG4gIGNvbnN0IGEgPSB7XG4gICAga2V5QTogJ3ZhbHVlQScsXG4gICAga2V5QjogJ3ZhbHVlQicsXG4gICAga2V5QzogJ3ZhbHVlQycsXG4gICAga2V5RDoge1xuICAgICAga2V5REE6ICd2YWx1ZURBJyxcbiAgICAgIGtleURCOiAndmFsdWVEQidcbiAgICB9XG4gIH07XG4gIGNvbnN0IGIgPSB7XG4gICAga2V5QzogJ3ZhbHVlQ0FuZXcnLFxuICAgIGtleUQ6IHtcbiAgICAgIGtleURBOiAndmFsdWVEQW5ldydcbiAgICB9XG4gIH07XG4gIC8vIEFjdFxuICBjb25zdCBjb25zb2xlTG9nU3B5ID0gamVzdC5zcHlPbihjb25zb2xlLCAnbG9nJyk7XG4gIGZsYWdPdmVycmlkZGVuRGVmYXVsdHMoYSwgYik7XG4gIC8vIEFzc2VydFxuICBleHBlY3QoY29uc29sZUxvZ1NweSkudG9CZUNhbGxlZFRpbWVzKDIpO1xufSk7XG5cbnRlc3QoJ1Rlc3Qgb3ZlcnJpZGUgZGV0ZWN0aW9uOiBuZWdhdGl2ZSwgbmVzdGVkJywgKCkgPT4ge1xuICAvLyBBcnJhbmdlXG4gIGNvbnN0IGEgPSB7XG4gICAga2V5QTogJ3ZhbHVlQScsXG4gICAga2V5QjogJ3ZhbHVlQicsXG4gICAga2V5QzogJ3ZhbHVlQycsXG4gICAga2V5RDoge1xuICAgICAga2V5REE6ICd2YWx1ZURBJyxcbiAgICAgIGtleURCOiAndmFsdWVEQidcbiAgICB9XG4gIH07XG4gIGNvbnN0IGIgPSB7XG4gICAga2V5RDoge1xuICAgICAga2V5REE6ICd2YWx1ZURBJ1xuICAgIH1cbiAgfTtcbiAgLy8gQWN0XG4gIGNvbnN0IGNvbnNvbGVMb2dTcHkgPSBqZXN0LnNweU9uKGNvbnNvbGUsICdsb2cnKTtcbiAgZmxhZ092ZXJyaWRkZW5EZWZhdWx0cyhhLCBiKTtcbiAgLy8gQXNzZXJ0XG4gIGV4cGVjdChjb25zb2xlTG9nU3B5KS50b0JlQ2FsbGVkVGltZXMoMCk7XG59KTtcblxudGVzdCgnVGVzdCBvdmVycmlkZSB3YXJuaW5nIG9uL29mZjogZGVmYXVsdCBvbicsICgpID0+IHtcbiAgLy8gQXJyYW5nZVxuICBjb25zdCBhID0ge1xuICAgIGtleUE6ICd2YWx1ZUEnLFxuICAgIGtleUI6ICd2YWx1ZUInLFxuICAgIGtleUM6ICd2YWx1ZUMnXG4gIH07XG4gIGNvbnN0IGIgPSB7XG4gICAga2V5QTogJ25ldy12YWx1ZUEnLFxuICAgIGtleUQ6ICd2YWx1ZUQnXG4gIH07XG4gIC8vIEFjdFxuICBjb25zdCBjb25zb2xlTG9nU3B5ID0gamVzdC5zcHlPbihjb25zb2xlLCAnbG9nJyk7XG4gIG92ZXJyaWRlUHJvcHMoYSwgYik7XG4gIC8vIEFzc2VydFxuICBleHBlY3QoY29uc29sZUxvZ1NweSkudG9CZUNhbGxlZFRpbWVzKDEpO1xufSk7XG5cbnRlc3QoJ1Rlc3Qgb3ZlcnJpZGUgd2FybmluZyBvbi9vZmY6IGV4cGxpY2l0IG9uJywgKCkgPT4ge1xuICAvLyBBcnJhbmdlXG4gIGNvbnN0IGEgPSB7XG4gICAga2V5QTogJ3ZhbHVlQScsXG4gICAga2V5QjogJ3ZhbHVlQicsXG4gICAga2V5QzogJ3ZhbHVlQydcbiAgfTtcbiAgY29uc3QgYiA9IHtcbiAgICBrZXlBOiAnbmV3LXZhbHVlQScsXG4gICAga2V5RDogJ3ZhbHVlRCdcbiAgfTtcbiAgcHJvY2Vzcy5lbnYub3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQgPSAndHJ1ZSc7XG4gIC8vIEFjdFxuICBjb25zdCBjb25zb2xlTG9nU3B5ID0gamVzdC5zcHlPbihjb25zb2xlLCAnbG9nJyk7XG4gIG92ZXJyaWRlUHJvcHMoYSwgYik7XG4gIC8vIEFzc2VydFxuICBleHBlY3QoY29uc29sZUxvZ1NweSkudG9CZUNhbGxlZFRpbWVzKDEpO1xufSk7XG5cbnRlc3QoJ1Rlc3Qgb3ZlcnJpZGUgd2FybmluZyBvbi9vZmY6IGV4cGxpY2l0IG9mZicsICgpID0+IHtcbiAgLy8gQXJyYW5nZVxuICBjb25zdCBhID0ge1xuICAgIGtleUE6ICd2YWx1ZUEnLFxuICAgIGtleUI6ICd2YWx1ZUInLFxuICAgIGtleUM6ICd2YWx1ZUMnXG4gIH07XG4gIGNvbnN0IGIgPSB7XG4gICAga2V5QTogJ25ldy12YWx1ZUEnLFxuICAgIGtleUQ6ICd2YWx1ZUQnXG4gIH07XG4gIC8vIEFjdFxuICBjb25zdCBjb25zb2xlTG9nU3B5ID0gamVzdC5zcHlPbihjb25zb2xlLCAnbG9nJyk7XG4gIHByb2Nlc3MuZW52Lm92ZXJyaWRlV2FybmluZ3NFbmFibGVkID0gJ2ZhbHNlJztcbiAgY29uc3QgcmVzdWx0ID0gb3ZlcnJpZGVQcm9wcyhhLCBiKTtcbiAgLy8gQXNzZXJ0XG4gIGV4cGVjdChjb25zb2xlTG9nU3B5KS50b0JlQ2FsbGVkVGltZXMoMCk7XG5cbiAgZXhwZWN0KHJlc3VsdCkudG9FcXVhbCh7XG4gICAga2V5QTogJ25ldy12YWx1ZUEnLFxuICAgIGtleUI6ICd2YWx1ZUInLFxuICAgIGtleUM6ICd2YWx1ZUMnLFxuICAgIGtleUQ6ICd2YWx1ZUQnXG4gIH0pO1xuXG59KTtcblxudGVzdCgnVGVzdCBvdmVycmlkZSB3YXJuaW5nIG9uL29mZjogdW5kZWZpbmVkIG9uJywgKCkgPT4ge1xuICAvLyBBcnJhbmdlXG4gIGNvbnN0IGEgPSB7XG4gICAga2V5QTogJ3ZhbHVlQScsXG4gICAga2V5QjogJ3ZhbHVlQicsXG4gICAga2V5QzogJ3ZhbHVlQydcbiAgfTtcbiAgY29uc3QgYiA9IHtcbiAgICBrZXlBOiAnbmV3LXZhbHVlQScsXG4gICAga2V5RDogJ3ZhbHVlRCdcbiAgfTtcbiAgLy8gQWN0XG4gIGNvbnN0IGNvbnNvbGVMb2dTcHkgPSBqZXN0LnNweU9uKGNvbnNvbGUsICdsb2cnKTtcbiAgcHJvY2Vzcy5lbnYub3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQgPSB1bmRlZmluZWQ7XG4gIGNvbnN0IHJlc3VsdCA9IG92ZXJyaWRlUHJvcHMoYSwgYik7XG4gIC8vIEFzc2VydFxuICBleHBlY3QoY29uc29sZUxvZ1NweSkudG9CZUNhbGxlZFRpbWVzKDEpO1xuXG4gIGV4cGVjdChyZXN1bHQpLnRvRXF1YWwoe1xuICAgIGtleUE6ICduZXctdmFsdWVBJyxcbiAgICBrZXlCOiAndmFsdWVCJyxcbiAgICBrZXlDOiAndmFsdWVDJyxcbiAgICBrZXlEOiAndmFsdWVEJ1xuICB9KTtcblxufSk7XG5cbnRlc3QoJ1Rlc3QgY3VycmVudCBwcmVmaWx0ZXJzJywgKCkgPT4ge1xuICAvLyBBcnJhbmdlXG4gIGNvbnN0IGEgPSB7XG4gICAgZGVzdGluYXRpb246ICdzYW1wbGVEZXN0aW5hdGlvblZhbHVlQScsXG4gICAgbWF4UmVjb3JkQWdlOiAnc2FtcGxlTWF4UmVjb3JkQWdlVmFsdWVBJyxcbiAgICBleHBpcmF0aW9uOiAnc2FtcGxlRXhwaXJhdGlvblZhbHVlQScsXG4gICAgdHJhbnNpdGlvbkFmdGVyOiAnc2FtcGxlVHJhbnNpdGlvblZhbHVlQScsXG4gICAgdGltZW91dDogJ3NhbXBsZVRpbWVvdXRWYWx1ZUEnLFxuICAgIHBlcmlvZDogJ3NhbXBsZVBlcmlvZFZhbHVlQScsXG4gICAgbm9kZTogJ3NhbXBsZU5vZGVBJ1xuICB9O1xuICBjb25zdCBiID0ge1xuICAgIGRlc3RpbmF0aW9uOiAnc2FtcGxlRGVzdGluYXRpb25WYWx1ZUInLFxuICAgIG1heFJlY29yZEFnZTogJ3NhbXBsZU1heFJlY29yZEFnZVZhbHVlQicsXG4gICAgZXhwaXJhdGlvbjogJ3NhbXBsZUV4cGlyYXRpb25WYWx1ZUInLFxuICAgIHRyYW5zaXRpb25BZnRlcjogJ3NhbXBsZVRyYW5zaXRpb25WYWx1ZUInLFxuICAgIHRpbWVvdXQ6ICdzYW1wbGVUaW1lb3V0VmFsdWVCJyxcbiAgICBwZXJpb2Q6ICdzYW1wbGVQZXJpb2RWYWx1ZUEnLFxuICAgIG5vZGU6ICdzYW1wbGVOb2RlQSdcbiAgfTtcbiAgLy8gQWN0XG4gIGNvbnN0IGNvbnNvbGVMb2dTcHkgPSBqZXN0LnNweU9uKGNvbnNvbGUsICdsb2cnKTtcbiAgcHJvY2Vzcy5lbnYub3ZlcnJpZGVXYXJuaW5nc0VuYWJsZWQgPSB1bmRlZmluZWQ7XG4gIGNvbnN0IHJlc3VsdCA9IG92ZXJyaWRlUHJvcHMoYSwgYik7XG4gIC8vIEFzc2VydFxuICBleHBlY3QoY29uc29sZUxvZ1NweSkudG9CZUNhbGxlZFRpbWVzKDYpO1xuICBleHBlY3QocmVzdWx0KS50b0VxdWFsKHtcbiAgICBkZXN0aW5hdGlvbjogJ3NhbXBsZURlc3RpbmF0aW9uVmFsdWVCJyxcbiAgICBtYXhSZWNvcmRBZ2U6ICdzYW1wbGVNYXhSZWNvcmRBZ2VWYWx1ZUInLFxuICAgIGV4cGlyYXRpb246ICdzYW1wbGVFeHBpcmF0aW9uVmFsdWVCJyxcbiAgICB0cmFuc2l0aW9uQWZ0ZXI6ICdzYW1wbGVUcmFuc2l0aW9uVmFsdWVCJyxcbiAgICB0aW1lb3V0OiAnc2FtcGxlVGltZW91dFZhbHVlQicsXG4gICAgcGVyaW9kOiAnc2FtcGxlUGVyaW9kVmFsdWVBJyxcbiAgICBub2RlOiAnc2FtcGxlTm9kZUEnXG4gIH0pO1xufSk7XG5cbnRlc3QoJ1Rlc3Qgb3ZlcnJpZGVQcm9wcyB3aXRoIHdhcm5pbmdzIGRpc2FibGVkIGluIGFyZ3VtZW50JywgKCkgPT4ge1xuICBwcm9jZXNzLmVudi5vdmVycmlkZVdhcm5pbmdzRW5hYmxlZCA9ICd0cnVlJztcbiAgY29uc3QgYSA9IHtcbiAgICBrZXlBOiAndmFsdWVBJyxcbiAgICBrZXlCOiAndmFsdWVCJyxcbiAgICBrZXlDOiAndmFsdWVDJ1xuICB9O1xuICBjb25zdCBiID0ge1xuICAgIGtleUE6ICduZXctdmFsdWVBJyxcbiAgICBrZXlEOiAndmFsdWVEJ1xuICB9O1xuICAvLyBBY3RcbiAgY29uc3QgY29uc29sZUxvZ1NweSA9IGplc3Quc3B5T24oY29uc29sZSwgJ2xvZycpO1xuICBvdmVycmlkZVByb3BzKGEsIGIsIHVuZGVmaW5lZCwgdHJ1ZSk7XG4gIC8vIEFzc2VydFxuICBleHBlY3QoY29uc29sZUxvZ1NweSkudG9CZUNhbGxlZFRpbWVzKDApO1xuXG59KTtcblxudGVzdCgnVGVzdCBvdmVycmlkZVByb3BzIHdpdGggZGVlcCBhcmd1bWVudHMnLCAoKSA9PiB7XG4gIGNvbnN0IGEgPSB7XG4gICAga2V5QTogJ3ZhbHVlQScsXG4gICAga2V5QjogJ3ZhbHVlQicsXG4gICAga2V5Qzoge1xuICAgICAga2V5Q0E6ICd2YWx1ZUNBJyxcbiAgICAgIGtleUNCOiAndmFsdWVDQidcbiAgICB9LFxuICAgIGtleUQ6ICd2YWx1ZUQnXG4gIH07XG4gIGNvbnN0IGIgPSB7XG4gICAga2V5QTogJ25ldy12YWx1ZUEnLFxuICAgIGtleUI6ICd2YWx1ZUInLFxuICAgIGtleUM6IHtcbiAgICAgIGtleUNBOiAndmFsdWVDQU5ldycsXG4gICAgfSxcbiAgICBrZXlEOiB7XG4gICAgICBrZXlEQTogJ3ZhbHVlREFOZXcnLFxuICAgICAga2V5REI6ICd2YWx1ZURCTmV3J1xuICAgIH1cbiAgfTtcbiAgLy8gQWN0XG4gIGNvbnN0IGNvbnNvbGVMb2dTcHkgPSBqZXN0LnNweU9uKGNvbnNvbGUsICdsb2cnKTtcbiAgb3ZlcnJpZGVQcm9wcyhhLCBiKTtcbiAgLy8gQXNzZXJ0XG4gIGV4cGVjdChjb25zb2xlTG9nU3B5KS50b0JlQ2FsbGVkVGltZXMoMyk7XG59KTtcblxudGVzdCgnQ29uZmlybSBub2RlIHN0b3BzIGNpcmN1bGFyIHJlZmVyZW5jZSB0cmF2ZXJzYWwnLCAoKSA9PiB7XG4gIC8vIEFycmFuZ2VcbiAgY29uc3QgYSA9IHtcbiAgICBrZXlBOiAndmFsdWVBJyxcbiAgICBrZXlCOiAndmFsdWVCJyxcbiAgICBrZXlDOiAndmFsdWVDJ1xuICB9O1xuICBjb25zdCBiID0ge1xuICAgIGtleUE6ICduZXctdmFsdWVBJyxcbiAgICBrZXlEOiAndmFsdWVEJyxcbiAgICBrZXlFOiB7XG4gICAgICBub2RlOiB7fVxuICAgIH1cbiAgfTtcbiAgYi5rZXlFLm5vZGUgPSBiO1xuXG4gIGNvbnN0IGNvbnNvbGVMb2dTcHkgPSBqZXN0LnNweU9uKGNvbnNvbGUsICdsb2cnKTtcbiAgZmxhZ092ZXJyaWRkZW5EZWZhdWx0cyhhLCBiKTtcbiAgLy8gQXNzZXJ0XG4gIGV4cGVjdChjb25zb2xlTG9nU3B5KS50b0JlQ2FsbGVkVGltZXMoMSk7XG59KTtcbiJdfQ==