Skip to content

Commit 8f021ca

Browse files
jackwotherspoonkgala2
authored andcommitted
test: add MySQL MCP tests (#1267)
Add integration tests for MySQL for Cloud SQL's Managed Connection Pooling (MCP)
1 parent b3b40fd commit 8f021ca

File tree

4 files changed

+105
-44
lines changed

4 files changed

+105
-44
lines changed

.ci/cloudbuild.yaml

+68-41
Original file line numberDiff line numberDiff line change
@@ -16,58 +16,85 @@ steps:
1616
- id: run integration tests
1717
name: python:${_VERSION}
1818
entrypoint: bash
19-
env:
19+
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_PASS_VALID_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+
"MYSQL_MCP_CONNECTION_NAME",
29+
"MYSQL_MCP_PASS",
30+
"POSTGRES_CONNECTION_NAME",
31+
"POSTGRES_USER",
32+
"POSTGRES_IAM_USER",
33+
"POSTGRES_PASS",
34+
"POSTGRES_DB",
35+
"POSTGRES_CAS_CONNECTION_NAME",
36+
"POSTGRES_CAS_PASS",
37+
"POSTGRES_CUSTOMER_CAS_CONNECTION_NAME",
38+
"POSTGRES_CUSTOMER_CAS_PASS",
39+
"POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME",
40+
"SQLSERVER_CONNECTION_NAME",
41+
"SQLSERVER_USER",
42+
"SQLSERVER_PASS",
43+
"SQLSERVER_DB",
44+
]
2245
args:
2346
- "-c"
2447
- |
2548
pip install nox
2649
nox -s system-${_VERSION}
2750
availableSecrets:
2851
secretManager:
29-
- versionName: 'projects/$PROJECT_ID/secrets/MYSQL_CONNECTION_NAME/versions/latest'
30-
env: 'MYSQL_CONNECTION_NAME'
31-
- versionName: 'projects/$PROJECT_ID/secrets/MYSQL_USER/versions/latest'
32-
env: 'MYSQL_USER'
33-
- versionName: 'projects/$PROJECT_ID/secrets/CLOUD_BUILD_MYSQL_IAM_USER/versions/latest'
34-
env: 'MYSQL_IAM_USER'
35-
- versionName: 'projects/$PROJECT_ID/secrets/MYSQL_PASS/versions/latest'
36-
env: 'MYSQL_PASS'
37-
- versionName: 'projects/$PROJECT_ID/secrets/MYSQL_DB/versions/latest'
38-
env: 'MYSQL_DB'
39-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_CONNECTION_NAME/versions/latest'
40-
env: 'POSTGRES_CONNECTION_NAME'
41-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_USER/versions/latest'
42-
env: 'POSTGRES_USER'
43-
- versionName: 'projects/$PROJECT_ID/secrets/CLOUD_BUILD_POSTGRES_IAM_USER/versions/latest'
44-
env: 'POSTGRES_IAM_USER'
45-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_PASS/versions/latest'
46-
env: 'POSTGRES_PASS'
47-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_DB/versions/latest'
48-
env: 'POSTGRES_DB'
49-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_CAS_CONNECTION_NAME/versions/latest'
50-
env: 'POSTGRES_CAS_CONNECTION_NAME'
51-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_CAS_PASS/versions/latest'
52-
env: 'POSTGRES_CAS_PASS'
53-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_CONNECTION_NAME/versions/latest'
54-
env: 'POSTGRES_CUSTOMER_CAS_CONNECTION_NAME'
55-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_PASS/versions/latest'
56-
env: 'POSTGRES_CUSTOMER_CAS_PASS'
57-
- versionName: 'projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME/versions/latest'
58-
env: 'POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME'
59-
- versionName: 'projects/$PROJECT_ID/secrets/SQLSERVER_CONNECTION_NAME/versions/latest'
60-
env: 'SQLSERVER_CONNECTION_NAME'
61-
- versionName: 'projects/$PROJECT_ID/secrets/SQLSERVER_USER/versions/latest'
62-
env: 'SQLSERVER_USER'
63-
- versionName: 'projects/$PROJECT_ID/secrets/SQLSERVER_PASS/versions/latest'
64-
env: 'SQLSERVER_PASS'
65-
- versionName: 'projects/$PROJECT_ID/secrets/SQLSERVER_DB/versions/latest'
66-
env: 'SQLSERVER_DB'
52+
- versionName: "projects/$PROJECT_ID/secrets/MYSQL_CONNECTION_NAME/versions/latest"
53+
env: "MYSQL_CONNECTION_NAME"
54+
- versionName: "projects/$PROJECT_ID/secrets/MYSQL_USER/versions/latest"
55+
env: "MYSQL_USER"
56+
- versionName: "projects/$PROJECT_ID/secrets/CLOUD_BUILD_MYSQL_IAM_USER/versions/latest"
57+
env: "MYSQL_IAM_USER"
58+
- versionName: "projects/$PROJECT_ID/secrets/MYSQL_PASS/versions/latest"
59+
env: "MYSQL_PASS"
60+
- versionName: "projects/$PROJECT_ID/secrets/MYSQL_DB/versions/latest"
61+
env: "MYSQL_DB"
62+
- versionName: "projects/$PROJECT_ID/secrets/MYSQL_MCP_CONNECTION_NAME/versions/latest"
63+
env: "MYSQL_MCP_CONNECTION_NAME"
64+
- versionName: "projects/$PROJECT_ID/secrets/MYSQL_MCP_PASS/versions/latest"
65+
env: "MYSQL_MCP_PASS"
66+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CONNECTION_NAME/versions/latest"
67+
env: "POSTGRES_CONNECTION_NAME"
68+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_USER/versions/latest"
69+
env: "POSTGRES_USER"
70+
- versionName: "projects/$PROJECT_ID/secrets/CLOUD_BUILD_POSTGRES_IAM_USER/versions/latest"
71+
env: "POSTGRES_IAM_USER"
72+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_PASS/versions/latest"
73+
env: "POSTGRES_PASS"
74+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_DB/versions/latest"
75+
env: "POSTGRES_DB"
76+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CAS_CONNECTION_NAME/versions/latest"
77+
env: "POSTGRES_CAS_CONNECTION_NAME"
78+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CAS_PASS/versions/latest"
79+
env: "POSTGRES_CAS_PASS"
80+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_CONNECTION_NAME/versions/latest"
81+
env: "POSTGRES_CUSTOMER_CAS_CONNECTION_NAME"
82+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_PASS/versions/latest"
83+
env: "POSTGRES_CUSTOMER_CAS_PASS"
84+
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME/versions/latest"
85+
env: "POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME"
86+
- versionName: "projects/$PROJECT_ID/secrets/SQLSERVER_CONNECTION_NAME/versions/latest"
87+
env: "SQLSERVER_CONNECTION_NAME"
88+
- versionName: "projects/$PROJECT_ID/secrets/SQLSERVER_USER/versions/latest"
89+
env: "SQLSERVER_USER"
90+
- versionName: "projects/$PROJECT_ID/secrets/SQLSERVER_PASS/versions/latest"
91+
env: "SQLSERVER_PASS"
92+
- versionName: "projects/$PROJECT_ID/secrets/SQLSERVER_DB/versions/latest"
93+
env: "SQLSERVER_DB"
6794
substitutions:
6895
_VERSION: ${_VERSION}
6996
_IP_TYPE: ${_IP_TYPE}
70-
97+
7198
options:
7299
dynamicSubstitutions: true
73100
pool:

.github/workflows/tests.yml

+4
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ jobs:
7272
MYSQL_IAM_USER:${{ vars.GOOGLE_CLOUD_PROJECT }}/MYSQL_USER_IAM_PYTHON
7373
MYSQL_PASS:${{ vars.GOOGLE_CLOUD_PROJECT }}/MYSQL_PASS
7474
MYSQL_DB:${{ vars.GOOGLE_CLOUD_PROJECT }}/MYSQL_DB
75+
MYSQL_MCP_CONNECTION_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/MYSQL_MCP_CONNECTION_NAME
76+
MYSQL_MCP_PASS:${{ vars.GOOGLE_CLOUD_PROJECT }}/MYSQL_MCP_PASS
7577
POSTGRES_CONNECTION_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CONNECTION_NAME
7678
POSTGRES_USER:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_USER
7779
POSTGRES_IAM_USER:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_USER_IAM_PYTHON
@@ -94,6 +96,8 @@ jobs:
9496
MYSQL_IAM_USER: "${{ steps.secrets.outputs.MYSQL_IAM_USER }}"
9597
MYSQL_PASS: "${{ steps.secrets.outputs.MYSQL_PASS }}"
9698
MYSQL_DB: "${{ steps.secrets.outputs.MYSQL_DB }}"
99+
MYSQL_MCP_CONNECTION_NAME: "${{ steps.secrets.outputs.MYSQL_MCP_CONNECTION_NAME }}"
100+
MYSQL_MCP_PASS: "${{ steps.secrets.outputs.MYSQL_MCP_PASS }}"
97101
POSTGRES_CONNECTION_NAME: "${{ steps.secrets.outputs.POSTGRES_CONNECTION_NAME }}"
98102
POSTGRES_USER: "${{ steps.secrets.outputs.POSTGRES_USER }}"
99103
POSTGRES_IAM_USER: "${{ steps.secrets.outputs.POSTGRES_IAM_USER }}"

tests/system/test_pymysql_connection.py

+17-3
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,20 @@ def test_lazy_pymysql_connection() -> None:
126126
connector.close()
127127

128128

129-
def test_broken_test_reports() -> None:
130-
'''Expected to be failing but that's okay (testing schedule reporter)'''
131-
assert 1 == 2
129+
def test_MCP_pymysql_connection() -> None:
130+
"""Basic test to get time from database using MCP enabled instance."""
131+
inst_conn_name = os.environ["MYSQL_MCP_CONNECTION_NAME"]
132+
user = os.environ["MYSQL_USER"]
133+
password = os.environ["MYSQL_MCP_PASS"]
134+
db = os.environ["MYSQL_DB"]
135+
ip_type = os.environ.get("IP_TYPE", "public")
136+
137+
engine, connector = create_sqlalchemy_engine(
138+
inst_conn_name, user, password, db, ip_type
139+
)
140+
with engine.connect() as conn:
141+
time = conn.execute(sqlalchemy.text("SELECT NOW()")).fetchone()
142+
conn.commit()
143+
curr_time = time[0]
144+
assert type(curr_time) is datetime
145+
connector.close()

tests/system/test_pymysql_iam_auth.py

+16
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,19 @@ def test_lazy_pymysql_iam_authn_connection() -> None:
113113
curr_time = time[0]
114114
assert type(curr_time) is datetime
115115
connector.close()
116+
117+
118+
def test_MCP_pymysql_iam_authn_connection() -> None:
119+
"""Basic test to get time from database using MCP enabled instance."""
120+
inst_conn_name = os.environ["MYSQL_MCP_CONNECTION_NAME"]
121+
user = os.environ["MYSQL_IAM_USER"]
122+
db = os.environ["MYSQL_DB"]
123+
ip_type = os.environ.get("IP_TYPE", "public")
124+
125+
engine, connector = create_sqlalchemy_engine(inst_conn_name, user, db, ip_type)
126+
with engine.connect() as conn:
127+
time = conn.execute(sqlalchemy.text("SELECT NOW()")).fetchone()
128+
conn.commit()
129+
curr_time = time[0]
130+
assert type(curr_time) is datetime
131+
connector.close()

0 commit comments

Comments
 (0)