From 890b9c9d4b3198cad2f24dab192ba6568928739b Mon Sep 17 00:00:00 2001 From: kgala2 Date: Sun, 4 May 2025 23:44:49 -0700 Subject: [PATCH 1/2] test: Add MCP Postgres tests --- .ci/cloudbuild.yaml | 4 ++++ .github/workflows/tests.yaml | 4 ++++ tests/postgres_test.go | 24 ++++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/.ci/cloudbuild.yaml b/.ci/cloudbuild.yaml index 3ddb0156c..1fb6f1456 100644 --- a/.ci/cloudbuild.yaml +++ b/.ci/cloudbuild.yaml @@ -40,6 +40,8 @@ steps: "POSTGRES_CUSTOMER_CAS_CONNECTION_NAME", "POSTGRES_CUSTOMER_CAS_PASS", "POSTGRES_CUSTOMER_CAS_DOMAIN_NAME", + "POSTGRES_MCP_CONNECTION_NAME", + "POSTGRES_MCP_PASS", "SQLSERVER_CONNECTION_NAME", "SQLSERVER_USER", "SQLSERVER_PASS", @@ -90,6 +92,8 @@ availableSecrets: env: "POSTGRES_CUSTOMER_CAS_PASS" - versionName: "projects/$PROJECT_ID/secrets/POSTGRES_CUSTOMER_CAS_DOMAIN_NAME/versions/latest" env: "POSTGRES_CUSTOMER_CAS_DOMAIN_NAME" + - versionName: "projects/$PROJECT_ID/secrets/POSTGRES_MCP_CONNECTION_NAME/versions/latest" + env: "POSTGRES_MCP_CONNECTION_NAME" - versionName: "projects/$PROJECT_ID/secrets/SQLSERVER_CONNECTION_NAME/versions/latest" env: "SQLSERVER_CONNECTION_NAME" - versionName: "projects/$PROJECT_ID/secrets/SQLSERVER_USER/versions/latest" diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 38f414cbe..5673d5192 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -99,6 +99,8 @@ jobs: POSTGRES_CUSTOMER_CAS_CONNECTION_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CUSTOMER_CAS_CONNECTION_NAME POSTGRES_CUSTOMER_CAS_PASS:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CUSTOMER_CAS_PASS POSTGRES_CUSTOMER_CAS_DOMAIN_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_CUSTOMER_CAS_DOMAIN_NAME + POSTGRES_MCP_CONNECTION_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_MCP_CONNECTION_NAME + POSTGRES_MCP_PASS:${{ vars.GOOGLE_CLOUD_PROJECT }}/POSTGRES_MCP_PASS SQLSERVER_CONNECTION_NAME:${{ vars.GOOGLE_CLOUD_PROJECT }}/SQLSERVER_CONNECTION_NAME SQLSERVER_USER:${{ vars.GOOGLE_CLOUD_PROJECT }}/SQLSERVER_USER SQLSERVER_PASS:${{ vars.GOOGLE_CLOUD_PROJECT }}/SQLSERVER_PASS @@ -129,6 +131,8 @@ jobs: POSTGRES_CUSTOMER_CAS_CONNECTION_NAME: "${{ steps.secrets.outputs.POSTGRES_CUSTOMER_CAS_CONNECTION_NAME }}" POSTGRES_CUSTOMER_CAS_PASS: "${{ steps.secrets.outputs.POSTGRES_CUSTOMER_CAS_PASS }}" POSTGRES_CUSTOMER_CAS_DOMAIN_NAME: "${{ steps.secrets.outputs.POSTGRES_CUSTOMER_CAS_DOMAIN_NAME }}" + POSTGRES_MCP_CONNECTION_NAME: "${{ steps.secrets.outputs.POSTGRES_MCP_CONNECTION_NAME }}" + POSTGRES_MCP_PASS: "${{ steps.secrets.outputs.POSTGRES_MCP_PASS }}" SQLSERVER_CONNECTION_NAME: "${{ steps.secrets.outputs.SQLSERVER_CONNECTION_NAME }}" SQLSERVER_USER: "${{ steps.secrets.outputs.SQLSERVER_USER }}" SQLSERVER_PASS: "${{ steps.secrets.outputs.SQLSERVER_PASS }}" diff --git a/tests/postgres_test.go b/tests/postgres_test.go index 2d4c1a6a4..58afa4b75 100644 --- a/tests/postgres_test.go +++ b/tests/postgres_test.go @@ -32,6 +32,8 @@ var ( postgresPass = flag.String("postgres_pass", os.Getenv("POSTGRES_PASS"), "Password for the database user; be careful when entering a password on the command line (it may go into your terminal's history).") postgresDB = flag.String("postgres_db", os.Getenv("POSTGRES_DB"), "Name of the database to connect to.") postgresIAMUser = flag.String("postgres_user_iam", os.Getenv("POSTGRES_USER_IAM"), "Name of database user configured with IAM DB Authentication.") + postgresMCPConnName = flag.String("postgres_mcp_conn_name", os.Getenv("POSTGRES_MCP_CONNECTION_NAME"), "Cloud SQL Postgres instance connection name for a managed instance, in the form of 'project:region:instance'.") + postgresMCPPass = flag.String("postgres_mcp_pass", os.Getenv("POSTGRES_MCP_PASS"), "Password for the managed instance database user; be careful when entering a password on the command line (it may go into your terminal's history).") postgresCustomerCASConnName = flag.String("postgres_customer_cas_conn_name", os.Getenv("POSTGRES_CUSTOMER_CAS_CONNECTION_NAME"), "Cloud SQL Postgres instance connection name for a customer CAS enabled instance, in the form of 'project:region:instance'.") postgresCustomerCASPass = flag.String("postgres_customer_cas_pass", os.Getenv("POSTGRES_CUSTOMER_CAS_PASS"), "Password for the customer CAS instance database user; be careful when entering a password on the command line (it may go into your terminal's history).") postgresCustomerCASDomain = flag.String("postgres_customer_cas_domain", os.Getenv("POSTGRES_CUSTOMER_CAS_DOMAIN_NAME"), "Valid DNS domain name for the customer CAS instance.") @@ -90,6 +92,28 @@ func TestPostgresUnix(t *testing.T) { proxyConnTest(t, args, "pgx", dsn) } +func TestPostgresMCPUnix(t *testing.T) { + if testing.Short() { + t.Skip("skipping Postgres integration tests") + } + requirePostgresVars(t) + tmpDir, cleanup := createTempDir(t) + defer cleanup() + + dsn := fmt.Sprintf("host=%s user=%s password=%s database=%s sslmode=disable", + // re-use utility function to determine the Unix address in a + // Windows-friendly way. + proxy.UnixAddress(tmpDir, *postgresMCPConnName), + *postgresUser, *postgresMCPPass, *postgresDB) + + // Prepare the initial arguments + args := []string{"--unix-socket", tmpDir, *postgresMCPConnName} + // Add the IP type flag using the helper + args = AddIPTypeFlag(args) + // Run the test + proxyConnTest(t, args, "pgx", dsn) +} + func createTempDir(t *testing.T) (string, func()) { testDir, err := os.MkdirTemp("", "*") if err != nil { From 5a080bfdd548643c177ca1baec675bed2df30290 Mon Sep 17 00:00:00 2001 From: kgala2 Date: Sun, 4 May 2025 23:47:20 -0700 Subject: [PATCH 2/2] chore: update cloudbuild file to add references --- .ci/cloudbuild.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.ci/cloudbuild.yaml b/.ci/cloudbuild.yaml index 1fb6f1456..2d94f7213 100644 --- a/.ci/cloudbuild.yaml +++ b/.ci/cloudbuild.yaml @@ -94,6 +94,8 @@ availableSecrets: env: "POSTGRES_CUSTOMER_CAS_DOMAIN_NAME" - versionName: "projects/$PROJECT_ID/secrets/POSTGRES_MCP_CONNECTION_NAME/versions/latest" env: "POSTGRES_MCP_CONNECTION_NAME" + - versionName: "projects/$PROJECT_ID/secrets/POSTGRES_MCP_PASS/versions/latest" + env: "POSTGRES_MCP_PASS" - versionName: "projects/$PROJECT_ID/secrets/SQLSERVER_CONNECTION_NAME/versions/latest" env: "SQLSERVER_CONNECTION_NAME" - versionName: "projects/$PROJECT_ID/secrets/SQLSERVER_USER/versions/latest"