|
| 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