|
| 1 | +import { Match, Template } from '../../assertions'; |
| 2 | +import * as ec2 from '../../aws-ec2'; |
1 | 3 | import * as cxschema from '../../cloud-assembly-schema'; |
2 | 4 | import { ContextProvider, Stack } from '../../core'; |
3 | 5 | import * as rds from '../lib'; |
@@ -66,71 +68,71 @@ describe('DatabaseInstanceBase from lookup', () => { |
66 | 68 | }); |
67 | 69 | }); |
68 | 70 |
|
69 | | -describe("DatabaseInstanceBase from lookup with DBSG", () => { |
70 | | - test("return correct instance info", () => { |
| 71 | +describe('DatabaseInstanceBase from lookup with DBSG', () => { |
| 72 | + test('return correct instance info', () => { |
71 | 73 | // GIVEN |
72 | 74 | const resultObjs = [ |
73 | 75 | { |
74 | | - DBInstanceArn: "arn:aws:rds:us-east-1:123456789012:db:instance-1", |
75 | | - "Endpoint.Address": "instance-1.testserver.us-east-1.rds.amazonaws.com", |
76 | | - "Endpoint.Port": "5432", |
77 | | - DbiResourceId: "db-ABCDEFGHI", |
78 | | - DBSecurityGroups: ["dbsg-1", "dbsg-2"], |
79 | | - VPCSecurityGroups: [], |
80 | | - Identifier: "instance-1", |
| 76 | + 'DBInstanceArn': 'arn:aws:rds:us-east-1:123456789012:db:instance-1', |
| 77 | + 'Endpoint.Address': 'instance-1.testserver.us-east-1.rds.amazonaws.com', |
| 78 | + 'Endpoint.Port': '5432', |
| 79 | + 'DbiResourceId': 'db-ABCDEFGHI', |
| 80 | + 'DBSecurityGroups': ['dbsg-1', 'dbsg-2'], |
| 81 | + 'VPCSecurityGroups': [], |
| 82 | + 'Identifier': 'instance-1', |
81 | 83 | }, |
82 | 84 | ]; |
83 | 85 | const value = { |
84 | 86 | value: resultObjs, |
85 | 87 | }; |
86 | | - const mock = jest.spyOn(ContextProvider, "getValue").mockReturnValue(value); |
| 88 | + const mock = jest.spyOn(ContextProvider, 'getValue').mockReturnValue(value); |
87 | 89 |
|
88 | 90 | // WHEN |
89 | 91 | const stack = new Stack(undefined, undefined, { |
90 | | - env: { region: "us-east-1", account: "123456789012" }, |
| 92 | + env: { region: 'us-east-1', account: '123456789012' }, |
91 | 93 | }); |
92 | | - const instance = rds.DatabaseInstance.fromLookup(stack, "MyInstance", { |
93 | | - instanceIdentifier: "instance-1", |
| 94 | + const instance = rds.DatabaseInstance.fromLookup(stack, 'MyInstance', { |
| 95 | + instanceIdentifier: 'instance-1', |
94 | 96 | }); |
95 | 97 |
|
96 | 98 | // THEN |
97 | | - expect(instance.instanceIdentifier).toEqual("instance-1"); |
| 99 | + expect(instance.instanceIdentifier).toEqual('instance-1'); |
98 | 100 | expect(instance.dbInstanceEndpointAddress).toEqual( |
99 | | - "instance-1.testserver.us-east-1.rds.amazonaws.com" |
| 101 | + 'instance-1.testserver.us-east-1.rds.amazonaws.com' |
100 | 102 | ); |
101 | | - expect(instance.dbInstanceEndpointPort).toEqual("5432"); |
102 | | - expect(instance.instanceResourceId).toEqual("db-ABCDEFGHI"); |
| 103 | + expect(instance.dbInstanceEndpointPort).toEqual('5432'); |
| 104 | + expect(instance.instanceResourceId).toEqual('db-ABCDEFGHI'); |
103 | 105 | expect(instance.connections.securityGroups.length).toEqual(2); |
104 | 106 | expect(instance.connections.securityGroups[0].securityGroupId).toEqual( |
105 | | - "dbsg-1" |
| 107 | + 'dbsg-1' |
106 | 108 | ); |
107 | 109 | expect(instance.connections.securityGroups[1].securityGroupId).toEqual( |
108 | | - "dbsg-2" |
| 110 | + 'dbsg-2' |
109 | 111 | ); |
110 | 112 |
|
111 | 113 | expect(mock).toHaveBeenCalledWith(stack, { |
112 | 114 | provider: cxschema.ContextProvider.CC_API_PROVIDER, |
113 | 115 | props: { |
114 | | - typeName: "AWS::RDS::DBInstance", |
115 | | - exactIdentifier: "instance-1", |
| 116 | + typeName: 'AWS::RDS::DBInstance', |
| 117 | + exactIdentifier: 'instance-1', |
116 | 118 | propertiesToReturn: [ |
117 | | - "DBInstanceArn", |
118 | | - "Endpoint.Address", |
119 | | - "Endpoint.Port", |
120 | | - "DbiResourceId", |
121 | | - "DBSecurityGroups", |
122 | | - "VPCSecurityGroups", |
| 119 | + 'DBInstanceArn', |
| 120 | + 'Endpoint.Address', |
| 121 | + 'Endpoint.Port', |
| 122 | + 'DbiResourceId', |
| 123 | + 'DBSecurityGroups', |
| 124 | + 'VPCSecurityGroups', |
123 | 125 | ], |
124 | 126 | } as cxschema.CcApiContextQuery, |
125 | 127 | dummyValue: [ |
126 | 128 | { |
127 | | - Identifier: "TEST", |
128 | | - DBInstanceArn: "TESTARN", |
129 | | - "Endpoint.Address": "TESTADDRESS", |
130 | | - "Endpoint.Port": "5432", |
131 | | - DbiResourceId: "TESTID", |
132 | | - DBSecurityGroups: [], |
133 | | - VPCSecurityGroups: [], |
| 129 | + 'Identifier': 'TEST', |
| 130 | + 'DBInstanceArn': 'TESTARN', |
| 131 | + 'Endpoint.Address': 'TESTADDRESS', |
| 132 | + 'Endpoint.Port': '5432', |
| 133 | + 'DbiResourceId': 'TESTID', |
| 134 | + 'DBSecurityGroups': [], |
| 135 | + 'VPCSecurityGroups': [], |
134 | 136 | }, |
135 | 137 | ], |
136 | 138 | }); |
@@ -203,4 +205,55 @@ describe('DatabaseInstanceBase from lookup with VPCSecurityGroups', () => { |
203 | 205 | mock.mockRestore(); |
204 | 206 | }); |
205 | 207 | }); |
| 208 | + |
| 209 | +describe('DatabaseInstanceBase connections', () => { |
| 210 | + test('allows adding security group ingress rules', () => { |
| 211 | + // GIVEN |
| 212 | + const resultObjs = [ |
| 213 | + { |
| 214 | + 'DBInstanceArn': 'arn:aws:rds:us-east-1:123456789012:db:instance-1', |
| 215 | + 'Endpoint.Address': 'instance-1.testserver.us-east-1.rds.amazonaws.com', |
| 216 | + 'Endpoint.Port': '5432', |
| 217 | + 'DbiResourceId': 'db-ABCDEFGHI', |
| 218 | + 'DBSecurityGroups': [], |
| 219 | + 'VPCSecurityGroups': ['sg-1', 'sg-2'], |
| 220 | + 'Identifier': 'instance-1', |
| 221 | + }, |
| 222 | + ]; |
| 223 | + const value = { value: resultObjs }; |
| 224 | + const mock = jest.spyOn(ContextProvider, 'getValue').mockReturnValue(value); |
| 225 | + |
| 226 | + // WHEN |
| 227 | + const stack = new Stack(undefined, undefined, { env: { region: 'us-east-1', account: '123456789012' } }); |
| 228 | + |
| 229 | + const securityGroup = ec2.SecurityGroup.fromSecurityGroupId(stack, 'TestSG', 'sg-test'); |
| 230 | + |
| 231 | + const instance = rds.DatabaseInstance.fromLookup(stack, 'MyInstance', { |
| 232 | + instanceIdentifier: 'instance-1', |
| 233 | + }); |
| 234 | + |
| 235 | + instance.connections.allowDefaultPortFrom(securityGroup, 'Allow from test SG'); |
| 236 | + |
| 237 | + // THEN |
| 238 | + Template.fromStack(stack).hasResourceProperties('AWS::EC2::SecurityGroupIngress', { |
| 239 | + IpProtocol: 'tcp', |
| 240 | + FromPort: 5432, |
| 241 | + ToPort: 5432, |
| 242 | + Description: 'Allow from test SG', |
| 243 | + SourceSecurityGroupId: 'sg-test', |
| 244 | + GroupId: 'sg-1' |
| 245 | + }); |
| 246 | + |
| 247 | + Template.fromStack(stack).hasResourceProperties('AWS::EC2::SecurityGroupIngress', { |
| 248 | + IpProtocol: 'tcp', |
| 249 | + FromPort: 5432, |
| 250 | + ToPort: 5432, |
| 251 | + Description: 'Allow from test SG', |
| 252 | + SourceSecurityGroupId: 'sg-test', |
| 253 | + GroupId: 'sg-2' |
| 254 | + }); |
| 255 | + |
| 256 | + mock.mockRestore(); |
| 257 | + }); |
| 258 | +}); |
206 | 259 | /* eslint-enable */ |
0 commit comments