Skip to content

Commit 8932256

Browse files
authored
test: add pg-tests for MCP instance (#437)
1 parent 95fadda commit 8932256

File tree

5 files changed

+165
-41
lines changed

5 files changed

+165
-41
lines changed

.ci/cloudbuild.yaml

+69-41
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,31 @@ steps:
1818
entrypoint: bash
1919
env:
2020
- "IP_TYPE=${_IP_TYPE}"
21-
secretEnv: ['MYSQL_CONNECTION_NAME', 'MYSQL_USER', 'MYSQL_IAM_USER', 'MYSQL_PASS', 'MYSQL_DB', 'POSTGRES_CONNECTION_NAME', 'POSTGRES_USER', 'POSTGRES_IAM_USER', 'POSTGRES_PASS', 'POSTGRES_DB', 'POSTGRES_CAS_CONNECTION_NAME', 'POSTGRES_CAS_PASS', 'POSTGRES_CUSTOMER_CAS_CONNECTION_NAME', 'POSTGRES_CUSTOMER_CAS_PASS', 'POSTGRES_CUSTOMER_CAS_DOMAIN_NAME', 'POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME', 'SQLSERVER_CONNECTION_NAME', 'SQLSERVER_USER', 'SQLSERVER_PASS', 'SQLSERVER_DB']
21+
secretEnv:
22+
[
23+
"MYSQL_CONNECTION_NAME",
24+
"MYSQL_USER",
25+
"MYSQL_IAM_USER",
26+
"MYSQL_PASS",
27+
"MYSQL_DB",
28+
"POSTGRES_CONNECTION_NAME",
29+
"POSTGRES_USER",
30+
"POSTGRES_IAM_USER",
31+
"POSTGRES_PASS",
32+
"POSTGRES_DB",
33+
"POSTGRES_CAS_CONNECTION_NAME",
34+
"POSTGRES_CAS_PASS",
35+
"POSTGRES_CUSTOMER_CAS_CONNECTION_NAME",
36+
"POSTGRES_CUSTOMER_CAS_PASS",
37+
"POSTGRES_CUSTOMER_CAS_DOMAIN_NAME",
38+
"POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME",
39+
"POSTGRES_MCP_CONNECTION_NAME",
40+
"POSTGRES_MCP_PASS",
41+
"SQLSERVER_CONNECTION_NAME",
42+
"SQLSERVER_USER",
43+
"SQLSERVER_PASS",
44+
"SQLSERVER_DB",
45+
]
2246
args:
2347
- "-c"
2448
- |
@@ -28,46 +52,50 @@ steps:
2852
timeout: 300s
2953
availableSecrets:
3054
secretManager:
31-
- versionName: 'projects/$PROJECT_ID/secrets/MYSQL_CONNECTION_NAME/versions/latest'
32-
env: 'MYSQL_CONNECTION_NAME'
33-
- versionName: 'projects/$PROJECT_ID/secrets/MYSQL_USER/versions/latest'
34-
env: 'MYSQL_USER'
35-
- versionName: 'projects/$PROJECT_ID/secrets/CLOUD_BUILD_MYSQL_IAM_USER/versions/latest'
36-
env: 'MYSQL_IAM_USER'
37-
- versionName: 'projects/$PROJECT_ID/secrets/MYSQL_PASS/versions/latest'
38-
env: 'MYSQL_PASS'
39-
- versionName: 'projects/$PROJECT_ID/secrets/MYSQL_DB/versions/latest'
40-
env: 'MYSQL_DB'
41-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_CONNECTION_NAME/versions/latest'
42-
env: 'POSTGRES_CONNECTION_NAME'
43-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_USER/versions/latest'
44-
env: 'POSTGRES_USER'
45-
- versionName: 'projects/$PROJECT_ID/secrets/CLOUD_BUILD_POSTGRES_IAM_USER/versions/latest'
46-
env: 'POSTGRES_IAM_USER'
47-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_PASS/versions/latest'
48-
env: 'POSTGRES_PASS'
49-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_DB/versions/latest'
50-
env: 'POSTGRES_DB'
51-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_CAS_CONNECTION_NAME/versions/latest'
52-
env: 'POSTGRES_CAS_CONNECTION_NAME'
53-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_CAS_PASS/versions/latest'
54-
env: 'POSTGRES_CAS_PASS'
55-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_CONNECTION_NAME/versions/latest'
56-
env: 'POSTGRES_CUSTOMER_CAS_CONNECTION_NAME'
57-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_PASS/versions/latest'
58-
env: 'POSTGRES_CUSTOMER_CAS_PASS'
59-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_DOMAIN_NAME/versions/latest'
60-
env: 'POSTGRES_CUSTOMER_CAS_DOMAIN_NAME'
61-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME/versions/latest'
62-
env: 'POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME'
63-
- versionName: 'projects/$PROJECT_ID/secrets/SQLSERVER_CONNECTION_NAME/versions/latest'
64-
env: 'SQLSERVER_CONNECTION_NAME'
65-
- versionName: 'projects/$PROJECT_ID/secrets/SQLSERVER_USER/versions/latest'
66-
env: 'SQLSERVER_USER'
67-
- versionName: 'projects/$PROJECT_ID/secrets/SQLSERVER_PASS/versions/latest'
68-
env: 'SQLSERVER_PASS'
69-
- versionName: 'projects/$PROJECT_ID/secrets/SQLSERVER_DB/versions/latest'
70-
env: 'SQLSERVER_DB'
55+
- versionName: "projects/$PROJECT_ID/secrets/MYSQL_CONNECTION_NAME/versions/latest"
56+
env: "MYSQL_CONNECTION_NAME"
57+
- versionName: "projects/$PROJECT_ID/secrets/MYSQL_USER/versions/latest"
58+
env: "MYSQL_USER"
59+
- versionName: "projects/$PROJECT_ID/secrets/CLOUD_BUILD_MYSQL_IAM_USER/versions/latest"
60+
env: "MYSQL_IAM_USER"
61+
- versionName: "projects/$PROJECT_ID/secrets/MYSQL_PASS/versions/latest"
62+
env: "MYSQL_PASS"
63+
- versionName: "projects/$PROJECT_ID/secrets/MYSQL_DB/versions/latest"
64+
env: "MYSQL_DB"
65+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CONNECTION_NAME/versions/latest"
66+
env: "POSTGRES_CONNECTION_NAME"
67+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_USER/versions/latest"
68+
env: "POSTGRES_USER"
69+
- versionName: "projects/$PROJECT_ID/secrets/CLOUD_BUILD_POSTGRES_IAM_USER/versions/latest"
70+
env: "POSTGRES_IAM_USER"
71+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_PASS/versions/latest"
72+
env: "POSTGRES_PASS"
73+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_DB/versions/latest"
74+
env: "POSTGRES_DB"
75+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CAS_CONNECTION_NAME/versions/latest"
76+
env: "POSTGRES_CAS_CONNECTION_NAME"
77+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CAS_PASS/versions/latest"
78+
env: "POSTGRES_CAS_PASS"
79+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_CONNECTION_NAME/versions/latest"
80+
env: "POSTGRES_CUSTOMER_CAS_CONNECTION_NAME"
81+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_PASS/versions/latest"
82+
env: "POSTGRES_CUSTOMER_CAS_PASS"
83+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_DOMAIN_NAME/versions/latest"
84+
env: "POSTGRES_CUSTOMER_CAS_DOMAIN_NAME"
85+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME/versions/latest"
86+
env: "POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME"
87+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_MCP_CONNECTION_NAME/versions/latest"
88+
env: "POSTGRES_MCP_CONNECTION_NAME"
89+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_MCP_PASS/versions/latest"
90+
env: "POSTGRES_MCP_PASS"
91+
- versionName: "projects/$PROJECT_ID/secrets/SQLSERVER_CONNECTION_NAME/versions/latest"
92+
env: "SQLSERVER_CONNECTION_NAME"
93+
- versionName: "projects/$PROJECT_ID/secrets/SQLSERVER_USER/versions/latest"
94+
env: "SQLSERVER_USER"
95+
- versionName: "projects/$PROJECT_ID/secrets/SQLSERVER_PASS/versions/latest"
96+
env: "SQLSERVER_PASS"
97+
- versionName: "projects/$PROJECT_ID/secrets/SQLSERVER_DB/versions/latest"
98+
env: "SQLSERVER_DB"
7199
substitutions:
72100
_VERSION: ${_VERSION}
73101
_IP_TYPE: ${_IP_TYPE}

.github/workflows/tests.yml

+4
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,8 @@ jobs:
163163
POSTGRES_CUSTOMER_CAS_PASS:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CUSTOMER_CAS_PASS
164164
POSTGRES_CUSTOMER_CAS_DOMAIN_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CUSTOMER_CAS_DOMAIN_NAME
165165
POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME
166+
POSTGRES_MCP_CONNECTION_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_MCP_CONNECTION_NAME
167+
POSTGRES_MCP_PASS:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_MCP_PASS
166168
SQLSERVER_CONNECTION_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/SQLSERVER_CONNECTION_NAME
167169
SQLSERVER_USER:${{ vars.GOOGLE_CLOUD_PROJECT }}/SQLSERVER_USER
168170
SQLSERVER_PASS:${{ vars.GOOGLE_CLOUD_PROJECT }}/SQLSERVER_PASS
@@ -192,6 +194,8 @@ jobs:
192194
POSTGRES_CUSTOMER_CAS_PASS: "${{ steps.secrets.outputs.POSTGRES_CUSTOMER_CAS_PASS }}"
193195
POSTGRES_CUSTOMER_CAS_DOMAIN_NAME: "${{ steps.secrets.outputs.POSTGRES_CUSTOMER_CAS_DOMAIN_NAME }}"
194196
POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME: "${{ steps.secrets.outputs.POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME }}"
197+
POSTGRES_MCP_CONNECTION_NAME: "${{ steps.secrets.outputs.POSTGRES_MCP_CONNECTION_NAME }}"
198+
POSTGRES_MCP_PASS: "${{ steps.secrets.outputs.POSTGRES_MCP_PASS }}"
195199
SQLSERVER_CONNECTION_NAME: "${{ steps.secrets.outputs.SQLSERVER_CONNECTION_NAME }}"
196200
SQLSERVER_USER: "${{ steps.secrets.outputs.SQLSERVER_USER }}"
197201
SQLSERVER_PASS: "${{ steps.secrets.outputs.SQLSERVER_PASS }}"

system-test/pg-connect.cjs

+28
Original file line numberDiff line numberDiff line change
@@ -204,3 +204,31 @@ t.test(
204204
}
205205
);
206206

207+
t.test('open connection to MCP instance retrieves standard pg tables', async t => {
208+
const connector = new Connector();
209+
const clientOpts = await connector.getOptions({
210+
instanceConnectionName: process.env.POSTGRES_MCP_CONNECTION_NAME,
211+
ipType: process.env.IP_TYPE || 'PUBLIC',
212+
});
213+
const client = new Client({
214+
...clientOpts,
215+
user: process.env.POSTGRES_USER,
216+
password: process.env.POSTGRES_MCP_PASS,
217+
database: process.env.POSTGRES_DB,
218+
});
219+
t.after(async () => {
220+
try {
221+
await client.end();
222+
} finally {
223+
connector.close();
224+
}
225+
});
226+
227+
await client.connect();
228+
229+
const {
230+
rows: [result],
231+
} = await client.query('SELECT NOW();');
232+
const returnedDate = result['now'];
233+
t.ok(returnedDate.getTime(), 'should have valid returned date object');
234+
});

system-test/pg-connect.mjs

+32
Original file line numberDiff line numberDiff line change
@@ -204,3 +204,35 @@ t.test(
204204
}
205205
}
206206
);
207+
208+
t.test(
209+
'open connection to MCP instance retrieves standard pg tables',
210+
async t => {
211+
const connector = new Connector();
212+
const clientOpts = await connector.getOptions({
213+
instanceConnectionName: String(process.env.POSTGRES_MCP_CONNECTION_NAME),
214+
ipType: process.env.IP_TYPE || 'PUBLIC',
215+
});
216+
const client = new Client({
217+
...clientOpts,
218+
user: String(process.env.POSTGRES_USER),
219+
password: String(process.env.POSTGRES_MCP_PASS),
220+
database: String(process.env.POSTGRES_DB),
221+
});
222+
t.after(async () => {
223+
try {
224+
await client.end();
225+
} finally {
226+
connector.close();
227+
}
228+
});
229+
230+
await client.connect();
231+
232+
const {
233+
rows: [result],
234+
} = await client.query('SELECT NOW();');
235+
const returnedDate = result['now'];
236+
t.ok(returnedDate.getTime(), 'should have valid returned date object');
237+
}
238+
);

system-test/pg-connect.ts

+32
Original file line numberDiff line numberDiff line change
@@ -207,3 +207,35 @@ t.test(
207207
}
208208
}
209209
);
210+
211+
t.test(
212+
'open connection to MCP instance retrieves standard pg tables',
213+
async t => {
214+
const connector = new Connector();
215+
const clientOpts = await connector.getOptions({
216+
instanceConnectionName: String(process.env.POSTGRES_MCP_CONNECTION_NAME),
217+
ipType: process.env.IP_TYPE || IpAddressTypes.PUBLIC,
218+
});
219+
const client = new Client({
220+
...clientOpts,
221+
user: String(process.env.POSTGRES_USER),
222+
password: String(process.env.POSTGRES_MCP_PASS),
223+
database: String(process.env.POSTGRES_DB),
224+
});
225+
t.after(async () => {
226+
try {
227+
await client.end();
228+
} finally {
229+
connector.close();
230+
}
231+
});
232+
233+
await client.connect();
234+
235+
const {
236+
rows: [result],
237+
} = await client.query('SELECT NOW();');
238+
const returnedDate = result['now'];
239+
t.ok(returnedDate.getTime(), 'should have valid returned date object');
240+
}
241+
);

0 commit comments

Comments
 (0)