Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[aws-lambda-nodejs] failing frequently on PR builds #11222

Closed
nija-at opened this issue Oct 30, 2020 · 14 comments · Fixed by #11289
Closed

[aws-lambda-nodejs] failing frequently on PR builds #11222

nija-at opened this issue Oct 30, 2020 · 14 comments · Fixed by #11289
Assignees
Labels
@aws-cdk/aws-lambda-nodejs bug This issue is a bug. effort/small Small work item – less than a day of effort p1

Comments

@nija-at
Copy link
Contributor

nija-at commented Oct 30, 2020

@nija-at Not sure if you're sure of the cause, but the test for @aws-cdk/aws-lambda-nodejs frequently fails. Seen it couple times now, even though the code is unrelated. Always seems to resolve itself after merging master branch in again

Originally posted by @iRoachie in #11092 (comment)

@nija-at
Copy link
Contributor Author

nija-at commented Oct 30, 2020

I've noticed the same as well. @eladb - can you take a look?

@jogold
Copy link
Contributor

jogold commented Oct 30, 2020

What is the error message in this case? And is this also the cause for failed builds on master?

@iRoachie
Copy link
Contributor

@jogold Here's a recent build

@nija-at
Copy link
Contributor Author

nija-at commented Oct 30, 2020

Pasting the log snip directly here since logs are retained for only 30 days.

@aws-cdk/aws-lambda-nodejs: yarn run v1.22.5
@aws-cdk/aws-lambda-nodejs: $ npm run build && npm test
@aws-cdk/aws-lambda-nodejs: > @aws-cdk/aws-lambda-nodejs@0.0.0 build /codebuild/output/src818950319/src/github.com/aws/aws-cdk/packages/@aws-cdk/aws-lambda-nodejs
@aws-cdk/aws-lambda-nodejs: > cdk-build
@aws-cdk/aws-lambda-nodejs: Build times for @aws-cdk/aws-lambda-nodejs: Total time (17.7s) | /codebuild/output/src818950319/src/github.com/aws/aws-cdk/node_modules/jsii/bin/jsii (10.3s)
@aws-cdk/aws-lambda-nodejs: > @aws-cdk/aws-lambda-nodejs@0.0.0 test /codebuild/output/src818950319/src/github.com/aws/aws-cdk/packages/@aws-cdk/aws-lambda-nodejs
@aws-cdk/aws-lambda-nodejs: > cdk-test
@aws-cdk/aws-lambda-nodejs: PASS test/util.test.js
@aws-cdk/aws-lambda-nodejs: FAIL test/bundling.test.js
@aws-cdk/aws-lambda-nodejs:   ● Test suite failed to run
@aws-cdk/aws-lambda-nodejs:     SyntaxError: /codebuild/output/src818950319/src/github.com/aws/aws-cdk/packages/@aws-cdk/aws-lambda-nodejs/package.json: Error while parsing JSON - Unexpected end of JSON input
@aws-cdk/aws-lambda-nodejs:         at JSON.parse (<anonymous>)
@aws-cdk/aws-lambda-nodejs:       at readConfigPackage (../../../node_modules/@babel/core/lib/config/files/package.js:57:20)
@aws-cdk/aws-lambda-nodejs:       at ../../../node_modules/@babel/core/lib/config/files/utils.js:36:12
@aws-cdk/aws-lambda-nodejs:       at Function.<anonymous> (../../../node_modules/@babel/core/lib/gensync-utils/async.js:26:3)
@aws-cdk/aws-lambda-nodejs:       at evaluateSync (../../../node_modules/gensync/index.js:244:28)
@aws-cdk/aws-lambda-nodejs:       at Function.sync (../../../node_modules/gensync/index.js:84:14)
@aws-cdk/aws-lambda-nodejs:       at sync (../../../node_modules/@babel/core/lib/gensync-utils/async.js:66:25)
@aws-cdk/aws-lambda-nodejs:       at sync (../../../node_modules/gensync/index.js:177:19)
@aws-cdk/aws-lambda-nodejs: PASS test/function.test.js (8.395 s)
@aws-cdk/aws-lambda-nodejs: PASS test/docker.test.js (72.631 s)
@aws-cdk/aws-lambda-nodejs: =============================== Coverage summary ===============================
@aws-cdk/aws-lambda-nodejs: Statements   : 80% ( 76/95 )
@aws-cdk/aws-lambda-nodejs: Branches     : 53.75% ( 43/80 )
@aws-cdk/aws-lambda-nodejs: Functions    : 75% ( 9/12 )
@aws-cdk/aws-lambda-nodejs: Lines        : 79.79% ( 75/94 )
@aws-cdk/aws-lambda-nodejs: ================================================================================
@aws-cdk/aws-lambda-nodejs: Jest: "global" coverage threshold for branches (60%) not met: 53.75%
@aws-cdk/aws-lambda-nodejs: Test Suites: 1 failed, 3 passed, 4 total
@aws-cdk/aws-lambda-nodejs: Tests:       16 passed, 16 total
@aws-cdk/aws-lambda-nodejs: Snapshots:   0 total
@aws-cdk/aws-lambda-nodejs: Time:        73.338 s
@aws-cdk/aws-lambda-nodejs: Ran all test suites.
@aws-cdk/aws-lambda-nodejs: Error: /codebuild/output/src818950319/src/github.com/aws/aws-cdk/node_modules/jest/bin/jest.js exited with error code 1
@aws-cdk/aws-lambda-nodejs: Tests failed. Total time (1m14.3s) | /codebuild/output/src818950319/src/github.com/aws/aws-cdk/node_modules/jest/bin/jest.js (1m14.3s)
@aws-cdk/aws-lambda-nodejs: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@aws-cdk/aws-lambda-nodejs: npm ERR! Test failed.  See above for more details.
@aws-cdk/aws-lambda-nodejs: error Command failed with exit code 1.
@aws-cdk/aws-lambda-nodejs: info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

@jogold
Copy link
Contributor

jogold commented Oct 30, 2020

Thanks @nija-at, can you also check the failed builds on master like this one f5ab374 (build logs on master are not public)?

@nija-at
Copy link
Contributor Author

nija-at commented Oct 30, 2020

@jogold - I see the same error message on master albeit intermittently, every 10th or so build.

Could this be related to the new docker limits on image pulls? I believe the new limits are 100/6hours for unauthenticated users and 200/6hours for 'Free' users.

@SomayaB SomayaB added the bug This issue is a bug. label Nov 2, 2020
@nija-at
Copy link
Contributor Author

nija-at commented Nov 9, 2020

Coverage requirement is being dropped temporarily to reduce the chance of this error - #11370

@rix0rrr
Copy link
Contributor

rix0rrr commented Nov 9, 2020

Could this be related to the new docker limits on image pulls? I believe the new limits are 100/6hours for unauthenticated users and 200/6hours for 'Free' users.

Could totally be because that's a thing that changed, but how does that manifest itself as a "coverage" drop???

@jogold
Copy link
Contributor

jogold commented Nov 9, 2020

FYI this will most likely be fixed with #11289 since it seems related to the Parcel implementation (@babel/core in the error message + unparsable package.json, and we have to play with the package.json with Parcel, this is completely removed with esbuild)

I was not able to reproduce either but I think there's some kind of race condition when tests for multiple modules run in parallel.

The coverage drop comes from the failing test/bundling.test.js. Lowering the coverage requirement won't fix this I think.

@eladb eladb added p1 effort/small Small work item – less than a day of effort labels Nov 15, 2020
eladb pushed a commit that referenced this issue Nov 18, 2020
Replace Parcel with esbuild for bundling.

esbuild offers [impressive performances](https://esbuild.github.io/) compared to Parcel.
Moreover everything can be configured via the CLI. This means that
we don't  need to play with the user `package.json` file anymore.

Add full Windows support for local bundling.

Refactor and clean-up.

Closes #10286
Closes #9130
Closes #9312
Resolves #11222

BREAKING CHANGE: local bundling now requires `esbuild` to be installed.
* **lambda-nodejs**: `projectRoot` has been replaced by `depsLockFilePath`. It should point to your dependency lock file (`package-lock.json` or `yarn.lock`)
* **lambda-nodejs**: `parcelEnvironment` has been renamed to `bundlingEnvironment`
* **lambda-nodejs**: `sourceMaps` has been renamed to `sourceMap`
@github-actions
Copy link

⚠️COMMENT VISIBILITY WARNING⚠️

Comments on closed issues are hard for our team to see.
If you need more assistance, please either tag a team member or open a new issue that references this one.
If you wish to keep having a conversation with other community members under this issue feel free to do so.

@jogold
Copy link
Contributor

jogold commented Nov 18, 2020

Looks like the build is now (randomly?) failing in the tests for @aws-cdk/cloudformation-diff with again a Unexpected end of JSON input error... really strange.

@jogold
Copy link
Contributor

jogold commented Nov 18, 2020

Maybe linked to an issue when running parallel jest tests

@jogold
Copy link
Contributor

jogold commented Nov 18, 2020

See build log

@aws-cdk/cloudformation-diff: > @aws-cdk/cloudformation-diff@0.0.0 test /codebuild/output/src445371814/src/github.com/aws/aws-cdk/packages/@aws-cdk/cloudformation-diff
@aws-cdk/cloudformation-diff: > cdk-test
@aws-cdk/cloudformation-diff: PASS test/render-intrinsics.test.js
@aws-cdk/cloudformation-diff: PASS test/network/rule.test.js
@aws-cdk/cloudformation-diff: FAIL test/diff-template.test.js
@aws-cdk/cloudformation-diff:   â—� when there is no difference
@aws-cdk/cloudformation-diff:     SyntaxError: Unexpected end of JSON input
@aws-cdk/cloudformation-diff:         at JSON.parse (<anonymous>)
@aws-cdk/cloudformation-diff:        8 | export function specification(): schema.Specification {
@aws-cdk/cloudformation-diff:        9 |   // eslint-disable-next-line @typescript-eslint/no-require-imports
@aws-cdk/cloudformation-diff:     > 10 |   return require('../spec/specification.json');
@aws-cdk/cloudformation-diff:          |          ^
@aws-cdk/cloudformation-diff:       11 | }
@aws-cdk/cloudformation-diff:       12 | 
@aws-cdk/cloudformation-diff:       13 | /**
@aws-cdk/cloudformation-diff:       at Runtime._loadModule (../../../node_modules/jest-runtime/build/index.js:889:59)
@aws-cdk/cloudformation-diff:       at specification (../cfnspec/lib/index.ts:10:10)
@aws-cdk/cloudformation-diff:       at Object.scrutinizableResourceTypes (../cfnspec/lib/index.ts:137:61)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizableResourceChanges (lib/diff/types.ts:144:48)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:54:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:   â—� when a resource is created
@aws-cdk/cloudformation-diff:     TypeError: Cannot read property 'AWS::S3::Bucket' of undefined
@aws-cdk/cloudformation-diff:       116 |  */
@aws-cdk/cloudformation-diff:       117 | export function scrutinizablePropertyNames(resourceType: string, scrutinyTypes: schema.PropertyScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:     > 118 |   const impl = specification().ResourceTypes[resourceType];
@aws-cdk/cloudformation-diff:           |                ^
@aws-cdk/cloudformation-diff:       119 |   if (!impl) { return []; }
@aws-cdk/cloudformation-diff:       120 | 
@aws-cdk/cloudformation-diff:       121 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:37:23)
@aws-cdk/cloudformation-diff:   â—� when a resource is deleted (no DeletionPolicy)
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:61:23)
@aws-cdk/cloudformation-diff:   â—� when a resource is deleted (DeletionPolicy=Retain)
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:90:23)
@aws-cdk/cloudformation-diff:   â—� when a property changes
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:131:23)
@aws-cdk/cloudformation-diff:   â—� change in dependencies counts as a simple update
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:162:23)
@aws-cdk/cloudformation-diff:   â—� when a property is deleted
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:197:23)
@aws-cdk/cloudformation-diff:   â—� when a property is added
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:235:23)
@aws-cdk/cloudformation-diff:   â—� when a resource type changed
@aws-cdk/cloudformation-diff:     TypeError: Cannot read property 'AWS::S3::Bucket' of undefined
@aws-cdk/cloudformation-diff:       116 |  */
@aws-cdk/cloudformation-diff:       117 | export function scrutinizablePropertyNames(resourceType: string, scrutinyTypes: schema.PropertyScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:     > 118 |   const impl = specification().ResourceTypes[resourceType];
@aws-cdk/cloudformation-diff:           |                ^
@aws-cdk/cloudformation-diff:       119 |   if (!impl) { return []; }
@aws-cdk/cloudformation-diff:       120 | 
@aws-cdk/cloudformation-diff:       121 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:269:23)
@aws-cdk/cloudformation-diff:   â—� resource replacement is tracked through references
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:319:23)
@aws-cdk/cloudformation-diff:   â—� adding and removing quotes from a numeric property causes no changes
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.entries (<anonymous>)
@aws-cdk/cloudformation-diff:       135 | export function scrutinizableResourceTypes(scrutinyTypes: schema.ResourceScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:       136 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:     > 137 |   for (const [resourceType, resourceSpec] of Object.entries(specification().ResourceTypes)) {
@aws-cdk/cloudformation-diff:           |                                                     ^
@aws-cdk/cloudformation-diff:       138 |     if (scrutinyTypes.includes(resourceSpec.ScrutinyType || schema.ResourceScrutinyType.None)) {
@aws-cdk/cloudformation-diff:       139 |       ret.push(resourceType);
@aws-cdk/cloudformation-diff:       140 |     }
@aws-cdk/cloudformation-diff:       at Object.scrutinizableResourceTypes (../cfnspec/lib/index.ts:137:53)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizableResourceChanges (lib/diff/types.ts:144:48)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:54:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:371:21)
@aws-cdk/cloudformation-diff:   â—� single element arrays are equivalent to the single element in DependsOn expressions
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.entries (<anonymous>)
@aws-cdk/cloudformation-diff:       135 | export function scrutinizableResourceTypes(scrutinyTypes: schema.ResourceScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:       136 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:     > 137 |   for (const [resourceType, resourceSpec] of Object.entries(specification().ResourceTypes)) {
@aws-cdk/cloudformation-diff:           |                                                     ^
@aws-cdk/cloudformation-diff:       138 |     if (scrutinyTypes.includes(resourceSpec.ScrutinyType || schema.ResourceScrutinyType.None)) {
@aws-cdk/cloudformation-diff:       139 |       ret.push(resourceType);
@aws-cdk/cloudformation-diff:       140 |     }
@aws-cdk/cloudformation-diff:       at Object.scrutinizableResourceTypes (../cfnspec/lib/index.ts:137:53)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizableResourceChanges (lib/diff/types.ts:144:48)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:54:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:399:21)
@aws-cdk/cloudformation-diff:   â—� array equivalence is independent of element order in DependsOn expressions
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.entries (<anonymous>)
@aws-cdk/cloudformation-diff:       135 | export function scrutinizableResourceTypes(scrutinyTypes: schema.ResourceScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:       136 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:     > 137 |   for (const [resourceType, resourceSpec] of Object.entries(specification().ResourceTypes)) {
@aws-cdk/cloudformation-diff:           |                                                     ^
@aws-cdk/cloudformation-diff:       138 |     if (scrutinyTypes.includes(resourceSpec.ScrutinyType || schema.ResourceScrutinyType.None)) {
@aws-cdk/cloudformation-diff:       139 |       ret.push(resourceType);
@aws-cdk/cloudformation-diff:       140 |     }
@aws-cdk/cloudformation-diff:       at Object.scrutinizableResourceTypes (../cfnspec/lib/index.ts:137:53)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizableResourceChanges (lib/diff/types.ts:144:48)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:54:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:427:21)
@aws-cdk/cloudformation-diff:   â—� arrays of different length are considered unequal in DependsOn expressions
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:455:21)
@aws-cdk/cloudformation-diff:   â—� arrays that differ only in element order are considered unequal outside of DependsOn expressions
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:483:21)
@aws-cdk/cloudformation-diff:   â—� boolean properties are considered equal with their stringified counterparts
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.entries (<anonymous>)
@aws-cdk/cloudformation-diff:       135 | export function scrutinizableResourceTypes(scrutinyTypes: schema.ResourceScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:       136 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:     > 137 |   for (const [resourceType, resourceSpec] of Object.entries(specification().ResourceTypes)) {
@aws-cdk/cloudformation-diff:           |                                                     ^
@aws-cdk/cloudformation-diff:       138 |     if (scrutinyTypes.includes(resourceSpec.ScrutinyType || schema.ResourceScrutinyType.None)) {
@aws-cdk/cloudformation-diff:       139 |       ret.push(resourceType);
@aws-cdk/cloudformation-diff:       140 |     }
@aws-cdk/cloudformation-diff:       at Object.scrutinizableResourceTypes (../cfnspec/lib/index.ts:137:53)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizableResourceChanges (lib/diff/types.ts:144:48)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:54:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:518:23)
@aws-cdk/cloudformation-diff:   â—� when a property changes including equivalent DependsOn
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/diff-template.test.ts:550:21)
@aws-cdk/cloudformation-diff: PASS test/iam/statement.test.js
@aws-cdk/cloudformation-diff: FAIL test/network/detect-changes.test.js
@aws-cdk/cloudformation-diff:   â—� detect addition of all types of rules
@aws-cdk/cloudformation-diff:     SyntaxError: Unexpected end of JSON input
@aws-cdk/cloudformation-diff:         at JSON.parse (<anonymous>)
@aws-cdk/cloudformation-diff:        8 | export function specification(): schema.Specification {
@aws-cdk/cloudformation-diff:        9 |   // eslint-disable-next-line @typescript-eslint/no-require-imports
@aws-cdk/cloudformation-diff:     > 10 |   return require('../spec/specification.json');
@aws-cdk/cloudformation-diff:          |          ^
@aws-cdk/cloudformation-diff:       11 | }
@aws-cdk/cloudformation-diff:       12 | 
@aws-cdk/cloudformation-diff:       13 | /**
@aws-cdk/cloudformation-diff:       at Runtime._loadModule (../../../node_modules/jest-runtime/build/index.js:889:59)
@aws-cdk/cloudformation-diff:       at specification (../cfnspec/lib/index.ts:10:10)
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff: FAIL test/iam/broadening.test.js
@aws-cdk/cloudformation-diff:   � broadening is › adding of positive statements
@aws-cdk/cloudformation-diff:     SyntaxError: Unexpected end of JSON input
@aws-cdk/cloudformation-diff:         at JSON.parse (<anonymous>)
@aws-cdk/cloudformation-diff:        8 | export function specification(): schema.Specification {
@aws-cdk/cloudformation-diff:        9 |   // eslint-disable-next-line @typescript-eslint/no-require-imports
@aws-cdk/cloudformation-diff:     > 10 |   return require('../spec/specification.json');
@aws-cdk/cloudformation-diff:          |          ^
@aws-cdk/cloudformation-diff:       11 | }
@aws-cdk/cloudformation-diff:       12 | 
@aws-cdk/cloudformation-diff:       13 | /**
@aws-cdk/cloudformation-diff:       at Runtime._loadModule (../../../node_modules/jest-runtime/build/index.js:889:59)
@aws-cdk/cloudformation-diff:       at specification (../cfnspec/lib/index.ts:10:10)
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:   � broadening is › adding of positive statements to an existing policy
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.test (test/iam/broadening.test.ts:25:18)
@aws-cdk/cloudformation-diff:   � broadening is › removal of not-statements
@aws-cdk/cloudformation-diff:     TypeError: Cannot read property 'undefined' of undefined
@aws-cdk/cloudformation-diff:       116 |  */
@aws-cdk/cloudformation-diff:       117 | export function scrutinizablePropertyNames(resourceType: string, scrutinyTypes: schema.PropertyScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:     > 118 |   const impl = specification().ResourceTypes[resourceType];
@aws-cdk/cloudformation-diff:           |                ^
@aws-cdk/cloudformation-diff:       119 |   if (!impl) { return []; }
@aws-cdk/cloudformation-diff:       120 | 
@aws-cdk/cloudformation-diff:       121 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.test (test/iam/broadening.test.ts:63:18)
@aws-cdk/cloudformation-diff:   � broadening is › changing of resource target
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.test (test/iam/broadening.test.ts:81:18)
@aws-cdk/cloudformation-diff:   � broadening is › addition of ingress rules
@aws-cdk/cloudformation-diff:     TypeError: Cannot read property 'AWS::EC2::SecurityGroup' of undefined
@aws-cdk/cloudformation-diff:       116 |  */
@aws-cdk/cloudformation-diff:       117 | export function scrutinizablePropertyNames(resourceType: string, scrutinyTypes: schema.PropertyScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:     > 118 |   const impl = specification().ResourceTypes[resourceType];
@aws-cdk/cloudformation-diff:           |                ^
@aws-cdk/cloudformation-diff:       119 |   if (!impl) { return []; }
@aws-cdk/cloudformation-diff:       120 | 
@aws-cdk/cloudformation-diff:       121 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.test (test/iam/broadening.test.ts:113:18)
@aws-cdk/cloudformation-diff:   � broadening is › addition of egress rules
@aws-cdk/cloudformation-diff:     TypeError: Cannot read property 'AWS::EC2::SecurityGroup' of undefined
@aws-cdk/cloudformation-diff:       116 |  */
@aws-cdk/cloudformation-diff:       117 | export function scrutinizablePropertyNames(resourceType: string, scrutinyTypes: schema.PropertyScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:     > 118 |   const impl = specification().ResourceTypes[resourceType];
@aws-cdk/cloudformation-diff:           |                ^
@aws-cdk/cloudformation-diff:       119 |   if (!impl) { return []; }
@aws-cdk/cloudformation-diff:       120 | 
@aws-cdk/cloudformation-diff:       121 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.test (test/iam/broadening.test.ts:135:18)
@aws-cdk/cloudformation-diff:   � broadening is not › removal of positive statements from an existing policy
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.test (test/iam/broadening.test.ts:159:18)
@aws-cdk/cloudformation-diff: FAIL test/iam/detect-changes.test.js
@aws-cdk/cloudformation-diff:   â—� shows new AssumeRolePolicyDocument
@aws-cdk/cloudformation-diff:     SyntaxError: Unexpected end of JSON input
@aws-cdk/cloudformation-diff:         at JSON.parse (<anonymous>)
@aws-cdk/cloudformation-diff:        8 | export function specification(): schema.Specification {
@aws-cdk/cloudformation-diff:        9 |   // eslint-disable-next-line @typescript-eslint/no-require-imports
@aws-cdk/cloudformation-diff:     > 10 |   return require('../spec/specification.json');
@aws-cdk/cloudformation-diff:          |          ^
@aws-cdk/cloudformation-diff:       11 | }
@aws-cdk/cloudformation-diff:       12 | 
@aws-cdk/cloudformation-diff:       13 | /**
@aws-cdk/cloudformation-diff:       at Runtime._loadModule (../../../node_modules/jest-runtime/build/index.js:889:59)
@aws-cdk/cloudformation-diff:       at specification (../cfnspec/lib/index.ts:10:10)
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:   â—� implicitly knows principal of identity policy for all resource types
@aws-cdk/cloudformation-diff:     TypeError: Cannot read property 'AWS::IAM::Policy' of undefined
@aws-cdk/cloudformation-diff:       116 |  */
@aws-cdk/cloudformation-diff:       117 | export function scrutinizablePropertyNames(resourceType: string, scrutinyTypes: schema.PropertyScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:     > 118 |   const impl = specification().ResourceTypes[resourceType];
@aws-cdk/cloudformation-diff:           |                ^
@aws-cdk/cloudformation-diff:       119 |   if (!impl) { return []; }
@aws-cdk/cloudformation-diff:       120 | 
@aws-cdk/cloudformation-diff:       121 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/iam/detect-changes.test.ts:32:18)
@aws-cdk/cloudformation-diff:   â—� policies on an identity object
@aws-cdk/cloudformation-diff:     TypeError: Cannot read property 'AWS::IAM::Role' of undefined
@aws-cdk/cloudformation-diff:       116 |  */
@aws-cdk/cloudformation-diff:       117 | export function scrutinizablePropertyNames(resourceType: string, scrutinyTypes: schema.PropertyScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:     > 118 |   const impl = specification().ResourceTypes[resourceType];
@aws-cdk/cloudformation-diff:           |                ^
@aws-cdk/cloudformation-diff:       119 |   if (!impl) { return []; }
@aws-cdk/cloudformation-diff:       120 | 
@aws-cdk/cloudformation-diff:       121 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/iam/detect-changes.test.ts:60:18)
@aws-cdk/cloudformation-diff:   â—� if policy is attached to multiple roles all are shown
@aws-cdk/cloudformation-diff:     TypeError: Cannot read property 'AWS::IAM::Policy' of undefined
@aws-cdk/cloudformation-diff:       116 |  */
@aws-cdk/cloudformation-diff:       117 | export function scrutinizablePropertyNames(resourceType: string, scrutinyTypes: schema.PropertyScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:     > 118 |   const impl = specification().ResourceTypes[resourceType];
@aws-cdk/cloudformation-diff:           |                ^
@aws-cdk/cloudformation-diff:       119 |   if (!impl) { return []; }
@aws-cdk/cloudformation-diff:       120 | 
@aws-cdk/cloudformation-diff:       121 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/iam/detect-changes.test.ts:91:16)
@aws-cdk/cloudformation-diff:   â—� correctly parses Lambda permissions
@aws-cdk/cloudformation-diff:     TypeError: Cannot read property 'AWS::Lambda::Permission' of undefined
@aws-cdk/cloudformation-diff:       116 |  */
@aws-cdk/cloudformation-diff:       117 | export function scrutinizablePropertyNames(resourceType: string, scrutinyTypes: schema.PropertyScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:     > 118 |   const impl = specification().ResourceTypes[resourceType];
@aws-cdk/cloudformation-diff:           |                ^
@aws-cdk/cloudformation-diff:       119 |   if (!impl) { return []; }
@aws-cdk/cloudformation-diff:       120 | 
@aws-cdk/cloudformation-diff:       121 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/iam/detect-changes.test.ts:123:16)
@aws-cdk/cloudformation-diff:   â—� implicitly knows resource of (queue) resource policy even if * given
@aws-cdk/cloudformation-diff:     TypeError: Cannot read property 'AWS::SQS::QueuePolicy' of undefined
@aws-cdk/cloudformation-diff:       116 |  */
@aws-cdk/cloudformation-diff:       117 | export function scrutinizablePropertyNames(resourceType: string, scrutinyTypes: schema.PropertyScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:     > 118 |   const impl = specification().ResourceTypes[resourceType];
@aws-cdk/cloudformation-diff:           |                ^
@aws-cdk/cloudformation-diff:       119 |   if (!impl) { return []; }
@aws-cdk/cloudformation-diff:       120 | 
@aws-cdk/cloudformation-diff:       121 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/iam/detect-changes.test.ts:152:16)
@aws-cdk/cloudformation-diff:   â—� finds sole statement removals
@aws-cdk/cloudformation-diff:     TypeError: Cannot read property 'undefined' of undefined
@aws-cdk/cloudformation-diff:       116 |  */
@aws-cdk/cloudformation-diff:       117 | export function scrutinizablePropertyNames(resourceType: string, scrutinyTypes: schema.PropertyScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:     > 118 |   const impl = specification().ResourceTypes[resourceType];
@aws-cdk/cloudformation-diff:           |                ^
@aws-cdk/cloudformation-diff:       119 |   if (!impl) { return []; }
@aws-cdk/cloudformation-diff:       120 | 
@aws-cdk/cloudformation-diff:       121 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/iam/detect-changes.test.ts:179:16)
@aws-cdk/cloudformation-diff:   â—� finds one of many statement removals
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/iam/detect-changes.test.ts:206:16)
@aws-cdk/cloudformation-diff:   â—� finds policy attachments
@aws-cdk/cloudformation-diff:     TypeError: Cannot read property 'AWS::IAM::Role' of undefined
@aws-cdk/cloudformation-diff:       116 |  */
@aws-cdk/cloudformation-diff:       117 | export function scrutinizablePropertyNames(resourceType: string, scrutinyTypes: schema.PropertyScrutinyType[]): string[] {
@aws-cdk/cloudformation-diff:     > 118 |   const impl = specification().ResourceTypes[resourceType];
@aws-cdk/cloudformation-diff:           |                ^
@aws-cdk/cloudformation-diff:       119 |   if (!impl) { return []; }
@aws-cdk/cloudformation-diff:       120 | 
@aws-cdk/cloudformation-diff:       121 |   const ret = new Array<string>();
@aws-cdk/cloudformation-diff:       at Object.scrutinizablePropertyNames (../cfnspec/lib/index.ts:118:16)
@aws-cdk/cloudformation-diff:       at TemplateDiff.scrutinizablePropertyChanges (lib/diff/types.ts:119:29)
@aws-cdk/cloudformation-diff:       at new TemplateDiff (lib/diff/types.ts:53:29)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:110:10)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/iam/detect-changes.test.ts:250:16)
@aws-cdk/cloudformation-diff:   â—� finds policy removals
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/iam/detect-changes.test.ts:269:16)
@aws-cdk/cloudformation-diff:   â—� queuepolicy queue change counts as removal+addition
@aws-cdk/cloudformation-diff:     TypeError: Cannot convert undefined or null to object
@aws-cdk/cloudformation-diff:         at Function.keys (<anonymous>)
@aws-cdk/cloudformation-diff:       53 |  */
@aws-cdk/cloudformation-diff:       54 | export function resourceTypes() {
@aws-cdk/cloudformation-diff:     > 55 |   return Object.keys(specification().ResourceTypes);
@aws-cdk/cloudformation-diff:          |                 ^
@aws-cdk/cloudformation-diff:       56 | }
@aws-cdk/cloudformation-diff:       57 | 
@aws-cdk/cloudformation-diff:       58 | /**
@aws-cdk/cloudformation-diff:       at resourceTypes (../cfnspec/lib/index.ts:55:17)
@aws-cdk/cloudformation-diff:       at Object.filteredSpecification (../cfnspec/lib/index.ts:81:22)
@aws-cdk/cloudformation-diff:       at diffResource (lib/diff/index.ts:39:30)
@aws-cdk/cloudformation-diff:       at Object.diffKeyedEntities (lib/diff/util.ts:115:25)
@aws-cdk/cloudformation-diff:       at Resources (lib/diff-template.ts:26:53)
@aws-cdk/cloudformation-diff:       at calculateTemplateDiff (lib/diff-template.ts:105:5)
@aws-cdk/cloudformation-diff:       at Object.diffTemplate (lib/diff-template.ts:43:19)
@aws-cdk/cloudformation-diff:       at Object.<anonymous>.test (test/iam/detect-changes.test.ts:294:16)
@aws-cdk/cloudformation-diff: =============================== Coverage summary ===============================
@aws-cdk/cloudformation-diff: Statements   : 31.98% ( 322/1007 )
@aws-cdk/cloudformation-diff: Branches     : 31.62% ( 191/604 )
@aws-cdk/cloudformation-diff: Functions    : 20.83% ( 50/240 )
@aws-cdk/cloudformation-diff: Lines        : 33% ( 295/894 )
@aws-cdk/cloudformation-diff: ================================================================================
@aws-cdk/cloudformation-diff: Jest: "global" coverage threshold for statements (60%) not met: 31.98%
@aws-cdk/cloudformation-diff: Jest: "global" coverage threshold for branches (55%) not met: 31.62%
@aws-cdk/cloudformation-diff: Test Suites: 4 failed, 3 passed, 7 total
@aws-cdk/cloudformation-diff: Tests:       36 failed, 25 passed, 61 total
@aws-cdk/cloudformation-diff: Snapshots:   0 total
@aws-cdk/cloudformation-diff: Time:        3.551 s
@aws-cdk/cloudformation-diff: Ran all test suites.
@aws-cdk/cloudformation-diff: Error: /codebuild/output/src445371814/src/github.com/aws/aws-cdk/node_modules/jest/bin/jest.js exited with error code 1
@aws-cdk/cloudformation-diff: Tests failed. Total time (4.3s) | /codebuild/output/src445371814/src/github.com/aws/aws-cdk/node_modules/jest/bin/jest.js (4.3s)
@aws-cdk/cloudformation-diff: !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@aws-cdk/cloudformation-diff: npm ERR! Test failed.  See above for more details.
@aws-cdk/cloudformation-diff: error Command failed with exit code 1.
@aws-cdk/cloudformation-diff: info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
lerna ERR! yarn run build+test exited 1 in '@aws-cdk/cloudformation-diff'
lerna WARN complete Waiting for 1 child process to exit. CTRL-C to exit immediately.

real	3m26.214s
user	7m17.623s
sys	0m27.636s
�  Last command failed. Scroll up to see errors in log (search for '!!!!!!!!').

@jogold
Copy link
Contributor

jogold commented Nov 18, 2020

#11557

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
@aws-cdk/aws-lambda-nodejs bug This issue is a bug. effort/small Small work item – less than a day of effort p1
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants