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

feat(apigateway): throw ValidationError instead of untyped errors #33075

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

HBobertz
Copy link
Contributor

@HBobertz HBobertz commented Jan 22, 2025

Issue

aws-apigateway for #32569

Description of changes

ValidationErrors everywhere

Describe any new or updated permissions being added

n/a

Description of how you validated changes

Existing tests. Exemptions granted as this is basically a refactor of existing code.

Checklist


By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license

@aws-cdk-automation aws-cdk-automation requested a review from a team January 22, 2025 21:27
@github-actions github-actions bot added the p2 label Jan 22, 2025
@mergify mergify bot added the contribution/core This is a PR that came from AWS. label Jan 22, 2025
Copy link
Collaborator

@aws-cdk-automation aws-cdk-automation left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The pull request linter fails with the following errors:

❌ Features must contain a change to a README file.
❌ Features must contain a change to a test file.
❌ Features must contain a change to an integration test file and the resulting snapshot.

If you believe this pull request should receive an exemption, please comment and provide a justification. A comment requesting an exemption should contain the text Exemption Request. Additionally, if clarification is needed, add Clarification Request to a comment.

Copy link

codecov bot commented Jan 22, 2025

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 81.52%. Comparing base (d6e3c61) to head (0e88d95).
Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main   #33075   +/-   ##
=======================================
  Coverage   81.52%   81.52%           
=======================================
  Files         224      224           
  Lines       13762    13762           
  Branches     2414     2414           
=======================================
  Hits        11220    11220           
  Misses       2270     2270           
  Partials      272      272           
Flag Coverage Δ
suite.unit 81.52% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.

Components Coverage Δ
packages/aws-cdk 80.93% <ø> (ø)
packages/aws-cdk-lib/core 82.15% <ø> (ø)

@aws-cdk-automation
Copy link
Collaborator

AWS CodeBuild CI Report

  • CodeBuild project: AutoBuildv2Project1C6BFA3F-wQm2hXv2jqQv
  • Commit ID: 0e88d95
  • Result: SUCCEEDED
  • Build Logs (available for 30 days)

Powered by github-codebuild-logs, available on the AWS Serverless Application Repository

@HBobertz HBobertz marked this pull request as ready for review January 23, 2025 01:44
Copy link
Contributor

@kaizencc kaizencc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i think the idea is for us to use UnscopedValidationError sparingly, and there are a few places where I'm not sure if you exhausted options for adding scope before defaulting to Unscoped. Some of these could be wrong, but it's worrisome that there's so many UnscopedValidationErrors in this PR

@@ -168,7 +169,7 @@ class LatestDeploymentResource extends CfnDeployment {
// if the construct is locked, it means we are already synthesizing and then
// we can't modify the hash because we might have already calculated it.
if (this.node.locked) {
throw new Error('Cannot modify the logical ID when the construct is locked');
throw new UnscopedValidationError('Cannot modify the logical ID when the construct is locked');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why can't this be scoped to this?

@@ -235,12 +236,12 @@ export class Integration {
if (vpcLink instanceof VpcLink) {
const targets = vpcLink._targetDnsNames;
if (targets.length > 1) {
throw new Error("'uri' is required when there are more than one NLBs in the VPC Link");
throw new UnscopedValidationError("'uri' is required when there are more than one NLBs in the VPC Link");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should be scoped to method, does that not work for some reason?

} else {
return `http://${targets[0]}`;
}
} else {
throw new Error("'uri' is required when the 'connectionType' is VPC_LINK");
throw new UnscopedValidationError("'uri' is required when the 'connectionType' is VPC_LINK");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

feels like here too

@@ -150,7 +151,7 @@ class StepFunctionsExecutionIntegration extends AwsIntegration {
if (this.stateMachine instanceof sfn.StateMachine) {
const stateMachineType = (this.stateMachine as sfn.StateMachine).stateMachineType;
if (stateMachineType !== sfn.StateMachineType.EXPRESS) {
throw new Error('State Machine must be of type "EXPRESS". Please use StateMachineType.EXPRESS as the stateMachineType');
throw new UnscopedValidationError('State Machine must be of type "EXPRESS". Please use StateMachineType.EXPRESS as the stateMachineType');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this.stateMachine?

@@ -86,13 +87,13 @@ export class LambdaRestApi extends RestApi {
}

function addResourceThrows(): Resource {
throw new Error('Cannot call \'addResource\' on a proxying LambdaRestApi; set \'proxy\' to false');
throw new UnscopedValidationError('Cannot call \'addResource\' on a proxying LambdaRestApi; set \'proxy\' to false');
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these 3 methods are not public so we can change them. i think we should just add scope: Construct to the function parameters so these don't have to be unscoped

@@ -471,7 +472,7 @@ export class Stage extends StageBase {
if (self.enableCacheCluster === undefined) {
self.enableCacheCluster = true;
} else if (self.enableCacheCluster === false) {
throw new Error(`Cannot enable caching for method ${path} since cache cluster is disabled on stage`);
throw new UnscopedValidationError(`Cannot enable caching for method ${path} since cache cluster is disabled on stage`);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we can probably add scope to this method also. are you trying to do this before defaulting to Unscoped?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
contribution/core This is a PR that came from AWS. p2
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants