Skip to content

Commit 6d03c74

Browse files
committed
test: add MySQL MCP tests (#2443)
1 parent 1d40e13 commit 6d03c74

File tree

3 files changed

+47
-5
lines changed

3 files changed

+47
-5
lines changed

.ci/cloudbuild.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ steps:
2828
"MYSQL_USER",
2929
"MYSQL_PASS",
3030
"MYSQL_DB",
31+
"MYSQL_MCP_CONNECTION_NAME",
32+
"MYSQL_MCP_PASS",
3133
"POSTGRES_CONNECTION_NAME",
3234
"POSTGRES_USER",
3335
"POSTGRES_USER_IAM",
@@ -66,6 +68,10 @@ availableSecrets:
6668
env: "MYSQL_PASS"
6769
- versionName: "projects/$PROJECT_ID/secrets/MYSQL_DB/versions/latest"
6870
env: "MYSQL_DB"
71+
- versionName: "projects/$PROJECT_ID/secrets/MYSQL_MCP_CONNECTION_NAME/versions/latest"
72+
env: "MYSQL_MCP_CONNECTION_NAME"
73+
- versionName: "projects/$PROJECT_ID/secrets/MYSQL_MCP_PASS/versions/latest"
74+
env: "MYSQL_MCP_PASS"
6975
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CONNECTION_NAME/versions/latest"
7076
env: "POSTGRES_CONNECTION_NAME"
7177
- versionName: "projects/$PROJECT_ID/secrets/POSTGRES_USER/versions/latest"

.github/workflows/tests.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ jobs:
8787
MYSQL_USER:${{ vars.GOOGLE_CLOUD_PROJECT }}/MYSQL_USER
8888
MYSQL_PASS:${{ vars.GOOGLE_CLOUD_PROJECT }}/MYSQL_PASS
8989
MYSQL_DB:${{ vars.GOOGLE_CLOUD_PROJECT }}/MYSQL_DB
90+
MYSQL_MCP_CONNECTION_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/MYSQL_MCP_CONNECTION_NAME
91+
MYSQL_MCP_PASS:${{ vars.GOOGLE_CLOUD_PROJECT }}/MYSQL_MCP_PASS
9092
POSTGRES_CONNECTION_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CONNECTION_NAME
9193
POSTGRES_USER:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_USER
9294
POSTGRES_USER_IAM:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_USER_IAM
@@ -117,6 +119,8 @@ jobs:
117119
MYSQL_USER: "${{ steps.secrets.outputs.MYSQL_USER }}"
118120
MYSQL_PASS: "${{ steps.secrets.outputs.MYSQL_PASS }}"
119121
MYSQL_DB: "${{ steps.secrets.outputs.MYSQL_DB }}"
122+
MYSQL_MCP_CONNECTION_NAME: "${{ steps.secrets.outputs.MYSQL_MCP_CONNECTION_NAME }}"
123+
MYSQL_MCP_PASS: "${{ steps.secrets.outputs.MYSQL_MCP_PASS }}"
120124
POSTGRES_CONNECTION_NAME: "${{ steps.secrets.outputs.POSTGRES_CONNECTION_NAME }}"
121125
POSTGRES_USER: "${{ steps.secrets.outputs.POSTGRES_USER }}"
122126
POSTGRES_USER_IAM: "${{ steps.secrets.outputs.POSTGRES_USER_IAM }}"

tests/mysql_test.go

Lines changed: 37 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@ import (
2525
)
2626

2727
var (
28-
mysqlConnName = flag.String("mysql_conn_name", os.Getenv("MYSQL_CONNECTION_NAME"), "Cloud SQL MYSQL instance connection name, in the form of 'project:region:instance'.")
29-
mysqlUser = flag.String("mysql_user", os.Getenv("MYSQL_USER"), "Name of database user.")
30-
mysqlPass = flag.String("mysql_pass", os.Getenv("MYSQL_PASS"), "Password for the database user; be careful when entering a password on the command line (it may go into your terminal's history).")
31-
mysqlDB = flag.String("mysql_db", os.Getenv("MYSQL_DB"), "Name of the database to connect to.")
32-
ipType = flag.String("ip_type", func() string {
28+
mysqlConnName = flag.String("mysql_conn_name", os.Getenv("MYSQL_CONNECTION_NAME"), "Cloud SQL MYSQL instance connection name, in the form of 'project:region:instance'.")
29+
mysqlUser = flag.String("mysql_user", os.Getenv("MYSQL_USER"), "Name of database user.")
30+
mysqlPass = flag.String("mysql_pass", os.Getenv("MYSQL_PASS"), "Password for the database user; be careful when entering a password on the command line (it may go into your terminal's history).")
31+
mysqlDB = flag.String("mysql_db", os.Getenv("MYSQL_DB"), "Name of the database to connect to.")
32+
mysqlMCPConnName = flag.String("mysql_mcp_conn_name", os.Getenv("MYSQL_MCP_CONNECTION_NAME"), "Cloud SQL MCP MYSQL instance connection name, in the form of 'project:region:instance'.")
33+
mysqlMCPPass = flag.String("mysql_mcp_pass", os.Getenv("MYSQL_MCP_PASS"), "Password for the database user; be careful when entering a password on the command line (it may go into your terminal's history).")
34+
ipType = flag.String("ip_type", func() string {
3335
if v := os.Getenv("IP_TYPE"); v != "" {
3436
return v
3537
}
@@ -47,6 +49,10 @@ func requireMySQLVars(t *testing.T) {
4749
t.Fatal("'mysql_pass' not set")
4850
case *mysqlDB:
4951
t.Fatal("'mysql_db' not set")
52+
case *mysqlMCPConnName:
53+
t.Fatal("'mysql_mcp_conn_name' not set")
54+
case *mysqlMCPPass:
55+
t.Fatal("'mysql_mcp_pass' not set")
5056
}
5157
}
5258

@@ -113,6 +119,32 @@ func TestMySQLUnix(t *testing.T) {
113119
proxyConnTest(t, args, "mysql", cfg.FormatDSN())
114120
}
115121

122+
func TestMySQLMCPUnix(t *testing.T) {
123+
if testing.Short() {
124+
t.Skip("skipping MySQL integration tests")
125+
}
126+
requireMySQLVars(t)
127+
tmpDir, cleanup := createTempDir(t)
128+
defer cleanup()
129+
130+
cfg := mysql.Config{
131+
User: *mysqlUser,
132+
Passwd: *mysqlMCPPass,
133+
DBName: *mysqlDB,
134+
AllowNativePasswords: true,
135+
// re-use utility function to determine the Unix address in a
136+
// Windows-friendly way.
137+
Addr: proxy.UnixAddress(tmpDir, *mysqlMCPConnName),
138+
Net: "unix",
139+
}
140+
// Prepare the initial arguments
141+
args := []string{"--unix-socket", tmpDir, *mysqlMCPConnName}
142+
// Add the IP type flag using the helper
143+
args = AddIPTypeFlag(args)
144+
// Run the test
145+
proxyConnTest(t, args, "mysql", cfg.FormatDSN())
146+
}
147+
116148
func TestMySQLImpersonation(t *testing.T) {
117149
if testing.Short() {
118150
t.Skip("skipping MySQL integration tests")

0 commit comments

Comments
 (0)