UNPKG

@aws-cdk/integ-tests-alpha

Version:

CDK Integration Testing Constructs

145 lines 13.1 kB
"use strict"; /* eslint-disable @cdklabs/no-throw-default-error */ /* eslint-disable no-console */ Object.defineProperty(exports, "__esModule", { value: true }); exports.AssertionHandler = void 0; const helpers_internal_1 = require("aws-cdk-lib/assertions/lib/helpers-internal"); const base_1 = require("./base"); class AssertionHandler extends base_1.CustomResourceHandler { async processEvent(request) { let actual = decodeCall(request.actual); const expected = decodeCall(request.expected); let result; const matcher = new MatchCreator(expected).getMatcher(); console.log(`Testing equality between ${JSON.stringify(request.actual)} and ${JSON.stringify(request.expected)}`); const matchResult = matcher.test(actual); matchResult.finished(); if (matchResult.hasFailed()) { result = { failed: true, assertion: JSON.stringify({ status: 'fail', message: matchResult.renderMismatch(), }), }; if (request.failDeployment) { throw new Error(result.assertion); } } else { result = { assertion: JSON.stringify({ status: 'success', }), }; } return result; } } exports.AssertionHandler = AssertionHandler; class MatchCreator { parsedObj; constructor(obj) { this.parsedObj = { matcher: obj, }; } /** * Return a Matcher that can be tested against the actual results. * This will convert the encoded matchers into their corresponding * assertions matcher. * * For example: * * ExpectedResult.objectLike({ * Messages: [{ * Body: Match.objectLike({ * Elements: Match.arrayWith([{ Asdf: 3 }]), * Payload: Match.serializedJson({ key: 'value' }), * }), * }], * }); * * Will be encoded as: * { * $ObjectLike: { * Messages: [{ * Body: { * $ObjectLike: { * Elements: { * $ArrayWith: [{ Asdf: 3 }], * }, * Payload: { * $SerializedJson: { key: 'value' } * } * }, * }, * }], * }, * } * * Which can then be parsed by this function. For each key (recursively) * the parser will check if the value has one of the encoded matchers as a key * and if so, it will set the value as the Matcher. So, * * { * Body: { * $ObjectLike: { * Elements: { * $ArrayWith: [{ Asdf: 3 }], * }, * Payload: { * $SerializedJson: { key: 'value' } * } * }, * }, * } * * Will be converted to * { * Body: Match.objectLike({ * Elements: Match.arrayWith([{ Asdf: 3 }]), * Payload: Match.serializedJson({ key: 'value' }), * }), * } */ getMatcher() { try { const final = JSON.parse(JSON.stringify(this.parsedObj), function (_k, v) { const nested = Object.keys(v)[0]; switch (nested) { case '$ArrayWith': return helpers_internal_1.Match.arrayWith(v[nested]); case '$ObjectLike': return helpers_internal_1.Match.objectLike(v[nested]); case '$StringLike': return helpers_internal_1.Match.stringLikeRegexp(v[nested]); case '$SerializedJson': return helpers_internal_1.Match.serializedJson(v[nested]); default: return v; } }); if (helpers_internal_1.Matcher.isMatcher(final.matcher)) { return final.matcher; } return helpers_internal_1.Match.exact(final.matcher); } catch { return helpers_internal_1.Match.exact(this.parsedObj.matcher); } } } function decodeCall(call) { if (!call) { return undefined; } try { const parsed = JSON.parse(call); return parsed; } catch { return call; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXJ0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYXNzZXJ0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxvREFBb0Q7QUFDcEQsK0JBQStCOzs7QUFFL0Isa0ZBQTZFO0FBQzdFLGlDQUErQztBQUcvQyxNQUFhLGdCQUFpQixTQUFRLDRCQUF3RDtJQUNsRixLQUFLLENBQUMsWUFBWSxDQUFDLE9BQXlCO1FBQ3BELElBQUksTUFBTSxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDeEMsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLE1BQXVCLENBQUM7UUFDNUIsTUFBTSxPQUFPLEdBQUcsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDeEQsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLFFBQVEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRWxILE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsV0FBVyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3ZCLElBQUksV0FBVyxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUM7WUFDNUIsTUFBTSxHQUFHO2dCQUNQLE1BQU0sRUFBRSxJQUFJO2dCQUNaLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUN4QixNQUFNLEVBQUUsTUFBTTtvQkFDZCxPQUFPLEVBQUUsV0FBVyxDQUFDLGNBQWMsRUFBRTtpQkFDdEMsQ0FBQzthQUNILENBQUM7WUFDRixJQUFJLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDM0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDcEMsQ0FBQztRQUNILENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxHQUFHO2dCQUNQLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDO29CQUN4QixNQUFNLEVBQUUsU0FBUztpQkFDbEIsQ0FBQzthQUNILENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7S0FDZjtDQUNGO0FBL0JELDRDQStCQztBQUVELE1BQU0sWUFBWTtJQUNDLFNBQVMsQ0FBeUI7SUFDbkQsWUFBWSxHQUEyQjtRQUNyQyxJQUFJLENBQUMsU0FBUyxHQUFHO1lBQ2YsT0FBTyxFQUFFLEdBQUc7U0FDYixDQUFDO0tBQ0g7SUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQTBERztJQUNJLFVBQVU7UUFDZixJQUFJLENBQUM7WUFDSCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLFVBQVMsRUFBRSxFQUFFLENBQUM7Z0JBQ3JFLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2pDLFFBQVEsTUFBTSxFQUFFLENBQUM7b0JBQ2YsS0FBSyxZQUFZO3dCQUNmLE9BQU8sd0JBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQ3BDLEtBQUssYUFBYTt3QkFDaEIsT0FBTyx3QkFBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDckMsS0FBSyxhQUFhO3dCQUNoQixPQUFPLHdCQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQzNDLEtBQUssaUJBQWlCO3dCQUNwQixPQUFPLHdCQUFLLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO29CQUN6Qzt3QkFDRSxPQUFPLENBQUMsQ0FBQztnQkFDYixDQUFDO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFDSCxJQUFJLDBCQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUM7WUFDdkIsQ0FBQztZQUNELE9BQU8sd0JBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3BDLENBQUM7UUFBQyxNQUFNLENBQUM7WUFDUCxPQUFPLHdCQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsQ0FBQztLQUNGO0NBQ0Y7QUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFhO0lBQy9CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUFDLE9BQU8sU0FBUyxDQUFDO0lBQUMsQ0FBQztJQUNoQyxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hDLE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQGNka2xhYnMvbm8tdGhyb3ctZGVmYXVsdC1lcnJvciAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tY29uc29sZSAqL1xuXG5pbXBvcnQgeyBNYXRjaCwgTWF0Y2hlciB9IGZyb20gJ2F3cy1jZGstbGliL2Fzc2VydGlvbnMvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgQ3VzdG9tUmVzb3VyY2VIYW5kbGVyIH0gZnJvbSAnLi9iYXNlJztcbmltcG9ydCB0eXBlIHsgQXNzZXJ0aW9uUmVzdWx0LCBBc3NlcnRpb25SZXF1ZXN0IH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBBc3NlcnRpb25IYW5kbGVyIGV4dGVuZHMgQ3VzdG9tUmVzb3VyY2VIYW5kbGVyPEFzc2VydGlvblJlcXVlc3QsIEFzc2VydGlvblJlc3VsdD4ge1xuICBwcm90ZWN0ZWQgYXN5bmMgcHJvY2Vzc0V2ZW50KHJlcXVlc3Q6IEFzc2VydGlvblJlcXVlc3QpOiBQcm9taXNlPEFzc2VydGlvblJlc3VsdCB8IHVuZGVmaW5lZD4ge1xuICAgIGxldCBhY3R1YWwgPSBkZWNvZGVDYWxsKHJlcXVlc3QuYWN0dWFsKTtcbiAgICBjb25zdCBleHBlY3RlZCA9IGRlY29kZUNhbGwocmVxdWVzdC5leHBlY3RlZCk7XG4gICAgbGV0IHJlc3VsdDogQXNzZXJ0aW9uUmVzdWx0O1xuICAgIGNvbnN0IG1hdGNoZXIgPSBuZXcgTWF0Y2hDcmVhdG9yKGV4cGVjdGVkKS5nZXRNYXRjaGVyKCk7XG4gICAgY29uc29sZS5sb2coYFRlc3RpbmcgZXF1YWxpdHkgYmV0d2VlbiAke0pTT04uc3RyaW5naWZ5KHJlcXVlc3QuYWN0dWFsKX0gYW5kICR7SlNPTi5zdHJpbmdpZnkocmVxdWVzdC5leHBlY3RlZCl9YCk7XG5cbiAgICBjb25zdCBtYXRjaFJlc3VsdCA9IG1hdGNoZXIudGVzdChhY3R1YWwpO1xuICAgIG1hdGNoUmVzdWx0LmZpbmlzaGVkKCk7XG4gICAgaWYgKG1hdGNoUmVzdWx0Lmhhc0ZhaWxlZCgpKSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIGZhaWxlZDogdHJ1ZSxcbiAgICAgICAgYXNzZXJ0aW9uOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgc3RhdHVzOiAnZmFpbCcsXG4gICAgICAgICAgbWVzc2FnZTogbWF0Y2hSZXN1bHQucmVuZGVyTWlzbWF0Y2goKSxcbiAgICAgICAgfSksXG4gICAgICB9O1xuICAgICAgaWYgKHJlcXVlc3QuZmFpbERlcGxveW1lbnQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHJlc3VsdC5hc3NlcnRpb24pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSB7XG4gICAgICAgIGFzc2VydGlvbjogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICB9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jbGFzcyBNYXRjaENyZWF0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcnNlZE9iajogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgY29uc3RydWN0b3Iob2JqOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gICAgdGhpcy5wYXJzZWRPYmogPSB7XG4gICAgICBtYXRjaGVyOiBvYmosXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYSBNYXRjaGVyIHRoYXQgY2FuIGJlIHRlc3RlZCBhZ2FpbnN0IHRoZSBhY3R1YWwgcmVzdWx0cy5cbiAgICogVGhpcyB3aWxsIGNvbnZlcnQgdGhlIGVuY29kZWQgbWF0Y2hlcnMgaW50byB0aGVpciBjb3JyZXNwb25kaW5nXG4gICAqIGFzc2VydGlvbnMgbWF0Y2hlci5cbiAgICpcbiAgICogRm9yIGV4YW1wbGU6XG4gICAqXG4gICAqIEV4cGVjdGVkUmVzdWx0Lm9iamVjdExpa2Uoe1xuICAgKiAgIE1lc3NhZ2VzOiBbe1xuICAgKiAgICAgQm9keTogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAqICAgICAgIEVsZW1lbnRzOiBNYXRjaC5hcnJheVdpdGgoW3sgQXNkZjogMyB9XSksXG4gICAqICAgICAgIFBheWxvYWQ6IE1hdGNoLnNlcmlhbGl6ZWRKc29uKHsga2V5OiAndmFsdWUnIH0pLFxuICAgKiAgICAgfSksXG4gICAqICAgfV0sXG4gICAqIH0pO1xuICAgKlxuICAgKiBXaWxsIGJlIGVuY29kZWQgYXM6XG4gICAqIHtcbiAgICogICAkT2JqZWN0TGlrZToge1xuICAgKiAgICAgTWVzc2FnZXM6IFt7XG4gICAqICAgICAgIEJvZHk6IHtcbiAgICogICAgICAgICAkT2JqZWN0TGlrZToge1xuICAgKiAgICAgICAgICAgRWxlbWVudHM6IHtcbiAgICogICAgICAgICAgICAgJEFycmF5V2l0aDogW3sgQXNkZjogMyB9XSxcbiAgICogICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICBQYXlsb2FkOiB7XG4gICAqICAgICAgICAgICAgICRTZXJpYWxpemVkSnNvbjogeyBrZXk6ICd2YWx1ZScgfVxuICAgKiAgICAgICAgICAgfVxuICAgKiAgICAgICAgIH0sXG4gICAqICAgICAgIH0sXG4gICAqICAgICB9XSxcbiAgICogICB9LFxuICAgKiB9XG4gICAqXG4gICAqIFdoaWNoIGNhbiB0aGVuIGJlIHBhcnNlZCBieSB0aGlzIGZ1bmN0aW9uLiBGb3IgZWFjaCBrZXkgKHJlY3Vyc2l2ZWx5KVxuICAgKiB0aGUgcGFyc2VyIHdpbGwgY2hlY2sgaWYgdGhlIHZhbHVlIGhhcyBvbmUgb2YgdGhlIGVuY29kZWQgbWF0Y2hlcnMgYXMgYSBrZXlcbiAgICogYW5kIGlmIHNvLCBpdCB3aWxsIHNldCB0aGUgdmFsdWUgYXMgdGhlIE1hdGNoZXIuIFNvLFxuICAgKlxuICAgKiB7XG4gICAqICAgQm9keToge1xuICAgKiAgICAgJE9iamVjdExpa2U6IHtcbiAgICogICAgICAgRWxlbWVudHM6IHtcbiAgICogICAgICAgICAkQXJyYXlXaXRoOiBbeyBBc2RmOiAzIH1dLFxuICAgKiAgICAgICB9LFxuICAgKiAgICAgICBQYXlsb2FkOiB7XG4gICAqICAgICAgICAgJFNlcmlhbGl6ZWRKc29uOiB7IGtleTogJ3ZhbHVlJyB9XG4gICAqICAgICAgIH1cbiAgICogICAgIH0sXG4gICAqICAgfSxcbiAgICogfVxuICAgKlxuICAgKiBXaWxsIGJlIGNvbnZlcnRlZCB0b1xuICAgKiB7XG4gICAqICAgQm9keTogTWF0Y2gub2JqZWN0TGlrZSh7XG4gICAqICAgICBFbGVtZW50czogTWF0Y2guYXJyYXlXaXRoKFt7IEFzZGY6IDMgfV0pLFxuICAgKiAgICAgUGF5bG9hZDogTWF0Y2guc2VyaWFsaXplZEpzb24oeyBrZXk6ICd2YWx1ZScgfSksXG4gICAqICAgfSksXG4gICAqIH1cbiAgICovXG4gIHB1YmxpYyBnZXRNYXRjaGVyKCk6IE1hdGNoZXIge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBmaW5hbCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5wYXJzZWRPYmopLCBmdW5jdGlvbihfaywgdikge1xuICAgICAgICBjb25zdCBuZXN0ZWQgPSBPYmplY3Qua2V5cyh2KVswXTtcbiAgICAgICAgc3dpdGNoIChuZXN0ZWQpIHtcbiAgICAgICAgICBjYXNlICckQXJyYXlXaXRoJzpcbiAgICAgICAgICAgIHJldHVybiBNYXRjaC5hcnJheVdpdGgodltuZXN0ZWRdKTtcbiAgICAgICAgICBjYXNlICckT2JqZWN0TGlrZSc6XG4gICAgICAgICAgICByZXR1cm4gTWF0Y2gub2JqZWN0TGlrZSh2W25lc3RlZF0pO1xuICAgICAgICAgIGNhc2UgJyRTdHJpbmdMaWtlJzpcbiAgICAgICAgICAgIHJldHVybiBNYXRjaC5zdHJpbmdMaWtlUmVnZXhwKHZbbmVzdGVkXSk7XG4gICAgICAgICAgY2FzZSAnJFNlcmlhbGl6ZWRKc29uJzpcbiAgICAgICAgICAgIHJldHVybiBNYXRjaC5zZXJpYWxpemVkSnNvbih2W25lc3RlZF0pO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoTWF0Y2hlci5pc01hdGNoZXIoZmluYWwubWF0Y2hlcikpIHtcbiAgICAgICAgcmV0dXJuIGZpbmFsLm1hdGNoZXI7XG4gICAgICB9XG4gICAgICByZXR1cm4gTWF0Y2guZXhhY3QoZmluYWwubWF0Y2hlcik7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gTWF0Y2guZXhhY3QodGhpcy5wYXJzZWRPYmoubWF0Y2hlcik7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlY29kZUNhbGwoY2FsbD86IHN0cmluZykge1xuICBpZiAoIWNhbGwpIHsgcmV0dXJuIHVuZGVmaW5lZDsgfVxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoY2FsbCk7XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIGNhbGw7XG4gIH1cbn1cbiJdfQ==