@@ -55,13 +55,16 @@ function e2e() {
5555}
5656
5757
58- # # e2e - Runs end-to-end integration tests.
58+ # # e2e_graalvm - Runs end-to-end integration tests using graalvm
5959function e2e_graalvm() {
60+ graalvm_tools
61+
6062 if [[ ! -f .envrc ]] ; then
6163 write_e2e_env .envrc
6264 fi
6365 source .envrc
64- .github/scripts/run_tests_graalvm_native.sh
66+ export JAVA_HOME=$PWD /.tools/graalvm-ce-jdk-24/Contents/Home
67+ JOB_TYPE=integration .github/scripts/run_tests_graalvm_native.sh
6568}
6669
6770# # fix - Fixes java code format.
@@ -74,13 +77,150 @@ function lint() {
7477 mvn -P lint install -DskipTests=true
7578}
7679
80+ function download_and_expand() {
81+ url=$1
82+ tarFile=$2
83+ directory=$3
84+
85+ if [[ ! -f " $tarFile " ]] ; then
86+ curl -L -o " $tarFile " " $url "
87+ fi
88+ if [[ ! -d " $directory " ]] ; then
89+ mkdir -p " $directory "
90+ tar -xf " $tarFile " -C " $directory " --strip-components=1 || (rm " $tarFile " ; exit 1)
91+ fi
92+ }
93+
94+ function graalvm_tools() {
95+ mkdir -p .tools
96+
97+ # Download the GraalVM and unzip into .tools
98+ if [[ $( uname) == " Darwin" ]] ; then
99+ oracle_24_url=" https://download.oracle.com/graalvm/24/latest/graalvm-jdk-24_macos-aarch64_bin.tar.gz"
100+ ce_24_url=" https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-24.0.2/graalvm-community-jdk-24.0.2_macos-aarch64_bin.tar.gz"
101+ ce_21_url=" https://download.oracle.com/graalvm/21/latest/graalvm-jdk-21_macos-aarch64_bin.tar.gz"
102+ elif [[ $( uname) == " Linux" ]] ; then
103+ oracle_24_url=" https://download.oracle.com/graalvm/24/latest/graalvm-jdk-24_linux-x64_bin.tar.gz"
104+ ce_24_url=" https://github.com/graalvm/graalvm-ce-builds/releases/download/jdk-24.0.2/graalvm-community-jdk-24.0.2_linux-x64_bin.tar.gz"
105+ ce_21_url=" https://download.oracle.com/graalvm/21/latest/graalvm-jdk-21_linux-x64_bin.tar.gz"
106+ fi
107+
108+ download_and_expand " $oracle_24_url " " .tools/graalvm_oracle_24.gz" " .tools/graalvm-jdk-24"
109+ download_and_expand " $ce_24_url " " .tools/graalvm_ce_24.gz" " .tools/graalvm-ce-jdk-24"
110+ download_and_expand " $ce_21_url " " .tools/graalvm_ce_21.gz" " .tools/graalvm-ce-jdk-21"
111+ }
112+
113+ # write_e2e_env - Loads secrets from the gcloud project and writes
114+ # them to target/e2e.env to run e2e tests.
115+ #
77116
78117# # deps - updates dependencies to the latest version
79118function deps() {
80119 mvn versions:use-latest-versions
81120 find . -name ' pom.xml.versionsBackup' -print0 | xargs -0 rm -f
82121}
83122
123+ function grant_iam_user_pg() {
124+ instance_name=$1
125+ root_user=$2
126+ root_pass=$3
127+ new_iam_user=$4
128+ echo
129+ echo " *"
130+ echo " * Grant access to the database to the current user by executing this sql statement: "
131+ echo " *"
132+ echo " * GRANT ALL ON SCHEMA $POSTGRES_DB TO '$new_iam_user ';"
133+ echo " *"
134+ echo " * database password: $root_pass "
135+ echo " *"
136+ echo
137+ gcloud alpha sql connect --project=" ${TEST_PROJECT} " --user=" $root_user " " $instance_name " --database " $POSTGRES_DB "
138+ }
139+
140+ function grant_iam_user_mysql() {
141+ instance_name=$1
142+ root_user=$2
143+ root_pass=$3
144+ new_iam_user=$4
145+
146+ echo
147+ echo " *"
148+ echo " * Grant access to the database to the current user by executing this sql statement: "
149+ echo " *"
150+ echo " * GRANT ALL ON proxy-testing TO $new_iam_user @'%'; FLUSH PRIVILEGES;"
151+ echo " *"
152+ echo " * database password: $root_pass "
153+ echo " *"
154+ gcloud alpha sql connect --project=" ${TEST_PROJECT} " --user=" $root_user " " $instance_name " --database " $MYSQL_DB "
155+ }
156+
157+ # # grant_local_iam_user - Logs into each test database and prints out instructions on how to grant
158+ # # the currently authenticated gcloud user access to the database schema.
159+ function grant_local_iam_user() {
160+ if [[ ! -f .envrc ]] ; then
161+ write_e2e_env .envrc
162+ fi
163+ source " $SCRIPT_DIR /.envrc"
164+
165+ local_user=$( gcloud auth list --format ' value(account)' | tr -d ' \n' )
166+ set -x
167+ grant_iam_user_mysql " ${MYSQL_MCP_CONNECTION_NAME##*: } " " $MYSQL_USER " " $MYSQL_MCP_PASS " " ${local_user%%@* } "
168+ grant_iam_user_mysql " ${MYSQL_CONNECTION_NAME##*: } " " $MYSQL_USER " " $MYSQL_PASS " " ${local_user%%@* } "
169+ grant_iam_user_pg " ${POSTGRES_CONNECTION_NAME##*: } " " $POSTGRES_USER " " $POSTGRES_PASS " " $local_user "
170+ grant_iam_user_pg " ${POSTGRES_CAS_CONNECTION_NAME##*: } " " $POSTGRES_CAS_USER " " $POSTGRES_PASS " " $local_user "
171+ grant_iam_user_pg " ${POSTGRES_MCP_CONNECTION_NAME##*: } " " $POSTGRES_MCP_USER " " $POSTGRES_PASS " " $local_user "
172+ }
173+
174+ # # add_local_iam_user - Adds the currently authenticated gcloud user to all IAM test databases
175+ function add_local_iam_user() {
176+ if [[ ! -f .envrc ]] ; then
177+ write_e2e_env .envrc
178+ fi
179+ source " $SCRIPT_DIR /.envrc"
180+
181+ local_user=$( gcloud auth list --format ' value(account)' | tr -d ' \n' )
182+
183+ mysql_instances=( " ${MYSQL_CONNECTION_NAME##*: } "
184+ " ${MYSQL_MCP_CONNECTION_NAME##*: } " )
185+
186+ pg_instances=(
187+ " ${POSTGRES_CAS_CONNECTION_NAME##*: } "
188+ " ${POSTGRES_CONNECTION_NAME##*: } "
189+ " ${POSTGRES_MCP_CONNECTION_NAME##*: } "
190+ )
191+
192+ for inst in " ${mysql_instances[@]} " ; do
193+ if gcloud sql users describe " ${local_user%%@* } " \
194+ --host=% \
195+ --instance=" $inst " \
196+ --project=" ${TEST_PROJECT} " > /dev/null 2>&1 ; then
197+ echo " user %local_user exists in $inst "
198+ else
199+ gcloud sql users create " $local_user " \
200+ --instance=" $inst " \
201+ --host=% \
202+ --type=cloud_iam_user \
203+ --project=" ${TEST_PROJECT} "
204+ fi
205+ done
206+
207+ for inst in " ${pg_instances[@]} " ; do
208+ if gcloud sql users describe " $local_user " \
209+ --host=% \
210+ --instance=" $inst " \
211+ --project=" ${TEST_PROJECT} " > /dev/null 2>&1 ; then
212+ echo " user %local_user exists in $inst "
213+ else
214+ gcloud sql users create " $local_user " \
215+ --instance=" $inst " \
216+ --host=% \
217+ --type=cloud_iam_user \
218+ --project=" ${TEST_PROJECT} "
219+ fi
220+ export PGPASSWORD=
221+ gcloud sql connect -u
222+ done
223+ }
84224
85225# write_e2e_env - Loads secrets from the gcloud project and writes
86226# them to target/e2e.env to run e2e tests.
@@ -90,23 +230,20 @@ function write_e2e_env(){
90230 secret_vars=(
91231 MYSQL_CONNECTION_NAME=MYSQL_CONNECTION_NAME
92232 MYSQL_USER=MYSQL_USER
93- MYSQL_USER_IAM=MYSQL_USER_IAM_JAVA
94233 MYSQL_PASS=MYSQL_PASS
95234 MYSQL_DB=MYSQL_DB
96235 MYSQL_MCP_CONNECTION_NAME=MYSQL_MCP_CONNECTION_NAME
97236 MYSQL_MCP_PASS=MYSQL_MCP_PASS
98237 POSTGRES_CONNECTION_NAME=POSTGRES_CONNECTION_NAME
99- POSTGRES_IAM_CONNECTION_NAME=POSTGRES_IAM_CONNECTION_NAME
100238 POSTGRES_USER=POSTGRES_USER
101- POSTGRES_USER_IAM=POSTGRES_USER_IAM_JAVA
102239 POSTGRES_PASS=POSTGRES_PASS
103240 POSTGRES_DB=POSTGRES_DB
104241 POSTGRES_CAS_CONNECTION_NAME=POSTGRES_CAS_CONNECTION_NAME
105242 POSTGRES_CAS_PASS=POSTGRES_CAS_PASS
106243 POSTGRES_CUSTOMER_CAS_CONNECTION_NAME=POSTGRES_CUSTOMER_CAS_CONNECTION_NAME
107244 POSTGRES_CUSTOMER_CAS_PASS=POSTGRES_CUSTOMER_CAS_PASS
108- POSTGRES_CUSTOMER_CAS_DOMAIN_NAME=POSTGRES_CUSTOMER_CAS_DOMAIN_NAME
109- POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME=POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME
245+ POSTGRES_CUSTOMER_CAS_VALID_DOMAIN_NAME=POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME
246+ POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME=POSTGRES_CUSTOMER_CAS_PASS_INVALID_DOMAIN_NAME
110247 POSTGRES_MCP_CONNECTION_NAME=POSTGRES_MCP_CONNECTION_NAME
111248 POSTGRES_MCP_PASS=POSTGRES_MCP_PASS
112249 SQLSERVER_CONNECTION_NAME=SQLSERVER_CONNECTION_NAME
@@ -117,13 +254,16 @@ function write_e2e_env(){
117254 QUOTA_PROJECT=QUOTA_PROJECT
118255 )
119256
120- if [[ -z " $TEST_PROJECT " ]] ; then
257+ if [[ -z " ${ TEST_PROJECT:- } " ]] ; then
121258 echo " Set TEST_PROJECT environment variable to the project containing"
122259 echo " the e2e test suite secrets."
123260 exit 1
124261 fi
125262
126263 echo " Getting test secrets from $TEST_PROJECT into $outfile "
264+ local_user=$( gcloud auth list --format ' value(account)' | tr -d ' \n' )
265+
266+ echo " Getting test secrets from $TEST_PROJECT into $1 "
127267 {
128268 for env_name in " ${secret_vars[@]} " ; do
129269 env_var_name=" ${env_name%% =* } "
@@ -132,6 +272,9 @@ function write_e2e_env(){
132272 val=$( gcloud secrets versions access latest --project " $TEST_PROJECT " --secret=" $secret_name " )
133273 echo " export $env_var_name ='$val '"
134274 done
275+ # Set IAM User env vars to the local gcloud user
276+ echo " export MYSQL_IAM_USER='${local_user%%@* } '"
277+ echo " export POSTGRES_IAM_USER='$local_user '"
135278 } > " $outfile "
136279
137280}
0 commit comments