|
1 | | -import { Annotations, Match, Template } from '../../../assertions'; |
| 1 | +import { Match, Template } from '../../../assertions'; |
2 | 2 | import { AutoScalingGroup } from '../../../aws-autoscaling'; |
3 | 3 | import { Certificate, CertificateValidation } from '../../../aws-certificatemanager'; |
4 | 4 | import * as ec2 from '../../../aws-ec2'; |
5 | 5 | import { MachineImage } from '../../../aws-ec2'; |
6 | 6 | import * as ecs from '../../../aws-ecs'; |
7 | 7 | import { AsgCapacityProvider } from '../../../aws-ecs'; |
8 | | -import { ApplicationLoadBalancer, ApplicationProtocol, ListenerAction, NetworkLoadBalancer, SslPolicy } from '../../../aws-elasticloadbalancingv2'; |
| 8 | +import { ApplicationLoadBalancer, ApplicationProtocol, NetworkLoadBalancer, SslPolicy } from '../../../aws-elasticloadbalancingv2'; |
9 | 9 | import * as iam from '../../../aws-iam'; |
10 | 10 | import * as route53 from '../../../aws-route53'; |
11 | 11 | import * as cloudmap from '../../../aws-servicediscovery'; |
@@ -1111,175 +1111,6 @@ describe('ApplicationLoadBalancedFargateService', () => { |
1111 | 1111 | }); |
1112 | 1112 | }); |
1113 | 1113 |
|
1114 | | - test('creates a separate redirect listener when listenerPort is not 80', () => { |
1115 | | - // GIVEN |
1116 | | - const stack = new cdk.Stack(); |
1117 | | - const vpc = new ec2.Vpc(stack, 'VPC'); |
1118 | | - const cluster = new ecs.Cluster(stack, 'Cluster', { vpc }); |
1119 | | - const zone = new route53.PublicHostedZone(stack, 'HostedZone', { zoneName: 'example.com' }); |
1120 | | - |
1121 | | - // WHEN |
1122 | | - const service = new ecsPatterns.ApplicationLoadBalancedFargateService(stack, 'Service', { |
1123 | | - cluster, |
1124 | | - taskImageOptions: { |
1125 | | - image: ecs.ContainerImage.fromRegistry('test'), |
1126 | | - }, |
1127 | | - domainName: 'api.example.com', |
1128 | | - domainZone: zone, |
1129 | | - protocol: ApplicationProtocol.HTTPS, |
1130 | | - redirectHTTP: true, |
1131 | | - listenerPort: 8443, |
1132 | | - }); |
1133 | | - |
1134 | | - // THEN |
1135 | | - // Verify that we have two listeners - one for HTTPS and one for HTTP redirect |
1136 | | - Template.fromStack(stack).resourceCountIs('AWS::ElasticLoadBalancingV2::Listener', 2); |
1137 | | - |
1138 | | - // Verify the HTTPS listener is on port 8443 |
1139 | | - Template.fromStack(stack).hasResourceProperties('AWS::ElasticLoadBalancingV2::Listener', { |
1140 | | - Port: 8443, |
1141 | | - Protocol: 'HTTPS', |
1142 | | - }); |
1143 | | - |
1144 | | - // Verify the HTTP redirect listener is on port 80 |
1145 | | - Template.fromStack(stack).hasResourceProperties('AWS::ElasticLoadBalancingV2::Listener', { |
1146 | | - Port: 80, |
1147 | | - Protocol: 'HTTP', |
1148 | | - DefaultActions: [ |
1149 | | - Match.objectLike({ |
1150 | | - Type: 'redirect', |
1151 | | - RedirectConfig: { |
1152 | | - Protocol: 'HTTPS', |
1153 | | - Port: '8443', |
1154 | | - StatusCode: 'HTTP_301', |
1155 | | - }, |
1156 | | - }), |
1157 | | - ], |
1158 | | - }); |
1159 | | - |
1160 | | - // Verify the dependency between listeners |
1161 | | - expect(service.redirectListener?.node.dependencies[0]).toBe(service.listener); |
1162 | | - }); |
1163 | | - |
1164 | | - test('throws error when trying to use redirectHTTP with listener on port 80', () => { |
1165 | | - // GIVEN |
1166 | | - const app = new cdk.App(); |
1167 | | - const stack = new cdk.Stack(app); |
1168 | | - const vpc = new ec2.Vpc(stack, 'VPC'); |
1169 | | - const cluster = new ecs.Cluster(stack, 'Cluster', { vpc }); |
1170 | | - const zone = new route53.PublicHostedZone(stack, 'HostedZone', { zoneName: 'example.com' }); |
1171 | | - |
1172 | | - new ecsPatterns.ApplicationLoadBalancedFargateService(stack, 'Service', { |
1173 | | - cluster, |
1174 | | - taskImageOptions: { |
1175 | | - image: ecs.ContainerImage.fromRegistry('test'), |
1176 | | - }, |
1177 | | - domainName: 'api.example.com', |
1178 | | - domainZone: zone, |
1179 | | - protocol: ApplicationProtocol.HTTPS, |
1180 | | - redirectHTTP: true, |
1181 | | - listenerPort: 80, |
1182 | | - }); |
1183 | | - |
1184 | | - // THEN |
1185 | | - expect(() => { |
1186 | | - app.synth(); |
1187 | | - }).toThrow('Validation failed with the following errors:\n [Default/Service/LB] Cannot automatically configure redirectHTTP: A listener already exists on port 80.'); |
1188 | | - }); |
1189 | | - |
1190 | | - test('adds validation for existing port 80 listeners not owned by the construct', () => { |
1191 | | - // GIVEN |
1192 | | - const app = new cdk.App(); |
1193 | | - const stack = new cdk.Stack(app); |
1194 | | - const vpc = new ec2.Vpc(stack, 'VPC'); |
1195 | | - const cluster = new ecs.Cluster(stack, 'Cluster', { vpc }); |
1196 | | - const zone = new route53.PublicHostedZone(stack, 'HostedZone', { zoneName: 'example.com' }); |
1197 | | - |
1198 | | - // Create a load balancer with an existing port 80 listener |
1199 | | - const lb = new ApplicationLoadBalancer(stack, 'ALB', { vpc, internetFacing: true }); |
1200 | | - lb.addListener('ExistingPort80Listener', { |
1201 | | - port: 80, |
1202 | | - protocol: ApplicationProtocol.HTTP, |
1203 | | - defaultAction: ListenerAction.redirect({ port: '1000' }), |
1204 | | - }); |
1205 | | - |
1206 | | - new ecsPatterns.ApplicationLoadBalancedFargateService(stack, 'Service', { |
1207 | | - cluster, |
1208 | | - taskImageOptions: { |
1209 | | - image: ecs.ContainerImage.fromRegistry('test'), |
1210 | | - }, |
1211 | | - domainName: 'api.example.com', |
1212 | | - domainZone: zone, |
1213 | | - protocol: ApplicationProtocol.HTTPS, |
1214 | | - redirectHTTP: true, |
1215 | | - loadBalancer: lb, |
1216 | | - }); |
1217 | | - // THEN |
1218 | | - expect(() => { |
1219 | | - app.synth(); |
1220 | | - }).toThrow('Validation failed with the following errors:\n [Default/ALB] Cannot automatically configure redirectHTTP: A listener already exists on port 80.'); |
1221 | | - }); |
1222 | | - |
1223 | | - test('adds warning for imported load balancers with redirectHTTP and creates the redirect listener', () => { |
1224 | | - // GIVEN |
1225 | | - const stack = new cdk.Stack(); |
1226 | | - const vpc = new ec2.Vpc(stack, 'VPC'); |
1227 | | - const cluster = new ecs.Cluster(stack, 'Cluster', { vpc }); |
1228 | | - const zone = new route53.PublicHostedZone(stack, 'HostedZone', { zoneName: 'example.com' }); |
1229 | | - |
1230 | | - // Create an imported load balancer |
1231 | | - const importedLb = ApplicationLoadBalancer.fromApplicationLoadBalancerAttributes(stack, 'ImportedALB', { |
1232 | | - loadBalancerArn: 'arn:aws:elasticloadbalancing:us-west-2:123456789012:loadbalancer/app/my-load-balancer/50dc6c495c0c9188', |
1233 | | - securityGroupId: 'sg-123456789', |
1234 | | - loadBalancerDnsName: 'my-load-balancer-1234567890.us-west-2.elb.amazonaws.com', |
1235 | | - loadBalancerCanonicalHostedZoneId: 'some-hosted-zone', |
1236 | | - vpc, |
1237 | | - }); |
1238 | | - |
1239 | | - // WHEN |
1240 | | - new ecsPatterns.ApplicationLoadBalancedFargateService(stack, 'Service', { |
1241 | | - cluster, |
1242 | | - taskImageOptions: { |
1243 | | - image: ecs.ContainerImage.fromRegistry('test'), |
1244 | | - }, |
1245 | | - domainName: 'api.example.com', |
1246 | | - domainZone: zone, |
1247 | | - protocol: ApplicationProtocol.HTTPS, |
1248 | | - redirectHTTP: true, |
1249 | | - loadBalancer: importedLb, |
1250 | | - }); |
1251 | | - |
1252 | | - // THEN |
1253 | | - // Verify that a warning is added |
1254 | | - const annotations = Annotations.fromStack(stack); |
1255 | | - annotations.hasWarning('/Default/Service', 'Cannot automatically configure port 80 HTTP redirect with redirectHTTP: The construct cannot reliably determine if a port 80 listener already exists. Please configure the redirect manually on the port 80 listener.'); |
1256 | | - |
1257 | | - // Verify that we have two listeners - one for HTTPS and one for HTTP redirect |
1258 | | - Template.fromStack(stack).resourceCountIs('AWS::ElasticLoadBalancingV2::Listener', 2); |
1259 | | - |
1260 | | - // Verify the HTTPS listener is on port 8443 |
1261 | | - Template.fromStack(stack).hasResourceProperties('AWS::ElasticLoadBalancingV2::Listener', { |
1262 | | - Port: 443, |
1263 | | - Protocol: 'HTTPS', |
1264 | | - }); |
1265 | | - |
1266 | | - // Verify the HTTP redirect listener is on port 80 |
1267 | | - Template.fromStack(stack).hasResourceProperties('AWS::ElasticLoadBalancingV2::Listener', { |
1268 | | - Port: 80, |
1269 | | - Protocol: 'HTTP', |
1270 | | - DefaultActions: [ |
1271 | | - Match.objectLike({ |
1272 | | - Type: 'redirect', |
1273 | | - RedirectConfig: { |
1274 | | - Protocol: 'HTTPS', |
1275 | | - Port: '443', |
1276 | | - StatusCode: 'HTTP_301', |
1277 | | - }, |
1278 | | - }), |
1279 | | - ], |
1280 | | - }); |
1281 | | - }); |
1282 | | - |
1283 | 1114 | test('errors when setting HTTPS protocol but not domain name', () => { |
1284 | 1115 | // GIVEN |
1285 | 1116 | const stack = new cdk.Stack(); |
|
0 commit comments