From 688e0a07d54b887e26b48fb2b92c90b4ca9720fe Mon Sep 17 00:00:00 2001 From: Mathieu Dumais-Savard Date: Tue, 9 Jun 2020 21:39:05 +0000 Subject: [PATCH 1/3] fix(apigateway): failing build on domain name with upercase Api Gateway doesn't accept domain name with upercase letters as per [its documentation](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-apigateway-domainname.html#aws-resource-apigateway-domainname-properties). This lead me to find out at CF deployment that my stack had an issue when this could have been discovered at build time. fixes #8428 --- .../@aws-cdk/aws-apigateway/lib/domain-name.ts | 7 ++++++- .../@aws-cdk/aws-apigateway/test/test.domains.ts | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-apigateway/lib/domain-name.ts b/packages/@aws-cdk/aws-apigateway/lib/domain-name.ts index c9893469c4f7f..f44ebf953dcac 100644 --- a/packages/@aws-cdk/aws-apigateway/lib/domain-name.ts +++ b/packages/@aws-cdk/aws-apigateway/lib/domain-name.ts @@ -1,5 +1,5 @@ import * as acm from '@aws-cdk/aws-certificatemanager'; -import { Construct, IResource, Resource } from '@aws-cdk/core'; +import { Construct, IResource, Resource, Token } from '@aws-cdk/core'; import { CfnDomainName } from './apigateway.generated'; import { BasePathMapping, BasePathMappingOptions } from './base-path-mapping'; import { EndpointType, IRestApi } from './restapi'; @@ -102,6 +102,11 @@ export class DomainName extends Resource implements IDomainName { const endpointType = props.endpointType || EndpointType.REGIONAL; const edge = endpointType === EndpointType.EDGE; + if (!Token.isUnresolved(props.domainName) && /[A-Z]/.test(props.domainName)) { + throw new Error('domainName does not support uppercase letters. ' + + `got: '${props.domainName}'`); + } + const resource = new CfnDomainName(this, 'Resource', { domainName: props.domainName, certificateArn: edge ? props.certificate.certificateArn : undefined, diff --git a/packages/@aws-cdk/aws-apigateway/test/test.domains.ts b/packages/@aws-cdk/aws-apigateway/test/test.domains.ts index b672565b94358..bc8265ff13bcf 100644 --- a/packages/@aws-cdk/aws-apigateway/test/test.domains.ts +++ b/packages/@aws-cdk/aws-apigateway/test/test.domains.ts @@ -267,6 +267,21 @@ export = { test.done(); }, + 'domain name cannot contain uppercase letters'(test: Test) { + // GIVEN + const stack = new Stack(); + const certificate = new acm.Certificate(stack, 'cert', { domainName: 'someDomainWithUpercase.domain.com' }); + + // WHEN + test.throws(() => { + new apigw.DomainName(stack, 'someDomain', {domainName: 'someDomainWithUpercase.domain.com', certificate}) + }) + + // THEN + + test.done(); + }, + 'multiple domain names can be added'(test: Test) { // GIVEN const domainName = 'my.domain.com'; From bdcace9f19fe3e14122114f3d513d8ac9aa6cb12 Mon Sep 17 00:00:00 2001 From: Mathieu Dumais-Savard Date: Wed, 10 Jun 2020 08:15:15 +0000 Subject: [PATCH 2/3] Fixup: linting --- packages/@aws-cdk/aws-apigateway/test/test.domains.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/@aws-cdk/aws-apigateway/test/test.domains.ts b/packages/@aws-cdk/aws-apigateway/test/test.domains.ts index bc8265ff13bcf..a01b765c0fd71 100644 --- a/packages/@aws-cdk/aws-apigateway/test/test.domains.ts +++ b/packages/@aws-cdk/aws-apigateway/test/test.domains.ts @@ -273,12 +273,11 @@ export = { const certificate = new acm.Certificate(stack, 'cert', { domainName: 'someDomainWithUpercase.domain.com' }); // WHEN - test.throws(() => { - new apigw.DomainName(stack, 'someDomain', {domainName: 'someDomainWithUpercase.domain.com', certificate}) - }) + test.throws(() => { + new apigw.DomainName(stack, 'someDomain', {domainName: 'someDomainWithUpercase.domain.com', certificate}); + }); // THEN - test.done(); }, From b71875a4f79ae8b11c04e677bcf17530d7a8aba8 Mon Sep 17 00:00:00 2001 From: Mathieu Dumais-Savard Date: Mon, 15 Jun 2020 13:02:19 +0200 Subject: [PATCH 3/3] Update packages/@aws-cdk/aws-apigateway/test/test.domains.ts Co-authored-by: Niranjan Jayakar --- packages/@aws-cdk/aws-apigateway/test/test.domains.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/@aws-cdk/aws-apigateway/test/test.domains.ts b/packages/@aws-cdk/aws-apigateway/test/test.domains.ts index a01b765c0fd71..197978922c5a1 100644 --- a/packages/@aws-cdk/aws-apigateway/test/test.domains.ts +++ b/packages/@aws-cdk/aws-apigateway/test/test.domains.ts @@ -275,7 +275,7 @@ export = { // WHEN test.throws(() => { new apigw.DomainName(stack, 'someDomain', {domainName: 'someDomainWithUpercase.domain.com', certificate}); - }); + }, /uppercase/); // THEN test.done();