@@ -55,13 +55,14 @@ 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() {
6060 if [[ ! -f .envrc ]] ; then
6161 write_e2e_env .envrc
6262 fi
6363 source .envrc
64- .github/scripts/run_tests_graalvm_native.sh
64+ export JAVA_HOME=$PWD /.tools/graalvm-ce-jdk-24/Contents/Home
65+ JOB_TYPE=integration .github/scripts/run_tests_graalvm_native.sh
6566}
6667
6768# # fix - Fixes java code format.
@@ -74,13 +75,151 @@ function lint() {
7475 mvn -P lint install -DskipTests=true
7576}
7677
78+ function download_and_expand() {
79+ url=$1
80+ tarFile=$2
81+ directory=$3
82+
83+ if [[ ! -f " $tarFile " ]] ; then
84+ curl -L -o " $tarFile " " $url "
85+ fi
86+ if [[ ! -d " $directory " ]] ; then
87+ mkdir -p " $directory "
88+ tar -xf " $tarFile " -C " $directory " --strip-components=1 || (rm " $tarFile " ; exit 1)
89+ fi
90+ }
91+
92+ function graalvm_tools() {
93+ mkdir -p .tools
94+
95+ # Download the GraalVM and unzip into .tools
96+ if [[ $( uname) == " Darwin" ]] ; then
97+ oracle_24_url=" https://download.oracle.com/graalvm/24/latest/graalvm-jdk-24_macos-aarch64_bin.tar.gz"
98+ 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"
99+ ce_21_url=" https://download.oracle.com/graalvm/21/latest/graalvm-jdk-21_macos-aarch64_bin.tar.gz"
100+ elif [[ $( uname) == " Linux" ]] ; then
101+ oracle_24_url=" hthttps://download.oracle.com/graalvm/24/latest/graalvm-jdk-24_linux-x64_bin.tar.gz"
102+ 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"
103+ ce_21_url=" https://download.oracle.com/graalvm/21/latest/graalvm-jdk-21_linux-x64_bin.tar.gz"
104+ fi
105+
106+ download_and_expand " $oracle_24_url " " .tools/graalvm_oracle_24.gz" " .tools/graalvm-jdk-24"
107+ download_and_expand " $ce_24_url " " .tools/graalvm_ce_24.gz" " .tools/graalvm-ce-jdk-24"
108+ download_and_expand " $ce_21_url " " .tools/graalvm_ce_21.gz" " .tools/graalvm-ce-jdk-21"
109+ download_and_expand " $ce_17_url " " .tools/graalvm_ce_17.gz" " .tools/graalvm-ce-jdk-17"
110+ }
111+
112+ # write_e2e_env - Loads secrets from the gcloud project and writes
113+ # them to target/e2e.env to run e2e tests.
114+ #
77115
78116# # deps - updates dependencies to the latest version
79117function deps() {
80118 mvn versions:use-latest-versions
81119 find . -name ' pom.xml.versionsBackup' -print0 | xargs -0 rm -f
82120}
83121
122+ function grant_iam_user_pg() {
123+ instance_name=$1
124+ root_user=$2
125+ root_pass=$3
126+ new_iam_user=$4
127+ echo
128+ echo " *"
129+ echo " * Grant access to the database to the current user by executing this sql statement: "
130+ echo " *"
131+ echo " * GRANT ALL ON SCHEMA $POSTGRES_DB TO '$new_iam_user ';"
132+ echo " *"
133+ echo " * database password: $root_pass "
134+ echo " *"
135+ echo
136+ gcloud alpha sql connect --project=" ${TEST_PROJECT} " --user=" $root_user " " $instance_name " --database " $POSTGRES_DB "
137+ }
138+
139+ function grant_iam_user_mysql() {
140+ instance_name=$1
141+ root_user=$2
142+ root_pass=$3
143+ new_iam_user=$4
144+
145+ echo
146+ echo " *"
147+ echo " * Grant access to the database to the current user by executing this sql statement: "
148+ echo " *"
149+ echo " * GRANT ALL ON proxy-testing TO $new_iam_user @'%'; FLUSH PRIVILEGES;"
150+ echo " *"
151+ echo " * database password: $root_pass "
152+ echo " *"
153+ gcloud alpha sql connect --project=" ${TEST_PROJECT} " --user=" $root_user " " $instance_name " --database " $MYSQL_DB "
154+ }
155+
156+ # # grant_local_iam_user - Logs into each test database and prints out instructions on how to grant
157+ # # the currently authenticated gcloud user access to the database schema.
158+ function grant_local_iam_user() {
159+ if [[ ! -f .envrc ]] ; then
160+ write_e2e_env .envrc
161+ fi
162+ source " $SCRIPT_DIR /.envrc"
163+
164+ local_user=$( gcloud auth list --format ' value(account)' | tr -d ' \n' )
165+ set -x
166+ grant_iam_user_mysql " ${MYSQL_MCP_CONNECTION_NAME##*: } " " $MYSQL_USER " " $MYSQL_MCP_PASS " " ${local_user%%@* } "
167+ grant_iam_user_mysql " ${MYSQL_CONNECTION_NAME##*: } " " $MYSQL_USER " " $MYSQL_PASS " " ${local_user%%@* } "
168+ grant_iam_user_pg " ${POSTGRES_CONNECTION_NAME##*: } " " $POSTGRES_USER " " $POSTGRES_PASS " " $local_user "
169+ grant_iam_user_pg " ${POSTGRES_CAS_CONNECTION_NAME##*: } " " $POSTGRES_CAS_USER " " $POSTGRES_PASS " " $local_user "
170+ grant_iam_user_pg " ${POSTGRES_MCP_CONNECTION_NAME##*: } " " $POSTGRES_MCP_USER " " $POSTGRES_PASS " " $local_user "
171+ }
172+
173+ # # add_local_iam_user - Adds the currently authenticated gcloud user to all IAM test databases
174+ function add_local_iam_user() {
175+ if [[ ! -f .envrc ]] ; then
176+ write_e2e_env .envrc
177+ fi
178+ source " $SCRIPT_DIR /.envrc"
179+
180+ local_user=$( gcloud auth list --format ' value(account)' | tr -d ' \n' )
181+
182+ mysql_instances=( " ${MYSQL_CONNECTION_NAME##*: } "
183+ " ${MYSQL_MCP_CONNECTION_NAME##*: } " )
184+
185+ pg_instances=(
186+ " ${POSTGRES_CAS_CONNECTION_NAME##*: } "
187+ " ${POSTGRES_CONNECTION_NAME##*: } "
188+ " ${POSTGRES_MCP_CONNECTION_NAME##*: } "
189+ )
190+
191+ for inst in " ${mysql_instances[@]} " ; do
192+ if gcloud sql users describe " ${local_user%%@* } " \
193+ --host=% \
194+ --instance=" $inst " \
195+ --project=" ${TEST_PROJECT} " > /dev/null 2>&1 ; then
196+ echo " user %local_user exists in $inst "
197+ else
198+ gcloud sql users create " $local_user " \
199+ --instance=" $inst " \
200+ --host=% \
201+ --type=cloud_iam_user \
202+ --project=" ${TEST_PROJECT} "
203+ fi
204+ done
205+
206+ for inst in " ${pg_instances[@]} " ; do
207+ if gcloud sql users describe " $local_user " \
208+ --host=% \
209+ --instance=" $inst " \
210+ --project=" ${TEST_PROJECT} " > /dev/null 2>&1 ; then
211+ echo " user %local_user exists in $inst "
212+ else
213+ gcloud sql users create " $local_user " \
214+ --instance=" $inst " \
215+ --host=% \
216+ --type=cloud_iam_user \
217+ --project=" ${TEST_PROJECT} "
218+ fi
219+ export PGPASSWORD=
220+ gcloud sql connect -u
221+ done
222+ }
84223
85224# write_e2e_env - Loads secrets from the gcloud project and writes
86225# them to target/e2e.env to run e2e tests.
@@ -90,23 +229,20 @@ function write_e2e_env(){
90229 secret_vars=(
91230 MYSQL_CONNECTION_NAME=MYSQL_CONNECTION_NAME
92231 MYSQL_USER=MYSQL_USER
93- MYSQL_USER_IAM=MYSQL_USER_IAM_JAVA
94232 MYSQL_PASS=MYSQL_PASS
95233 MYSQL_DB=MYSQL_DB
96234 MYSQL_MCP_CONNECTION_NAME=MYSQL_MCP_CONNECTION_NAME
97235 MYSQL_MCP_PASS=MYSQL_MCP_PASS
98236 POSTGRES_CONNECTION_NAME=POSTGRES_CONNECTION_NAME
99- POSTGRES_IAM_CONNECTION_NAME=POSTGRES_IAM_CONNECTION_NAME
100237 POSTGRES_USER=POSTGRES_USER
101- POSTGRES_USER_IAM=POSTGRES_USER_IAM_JAVA
102238 POSTGRES_PASS=POSTGRES_PASS
103239 POSTGRES_DB=POSTGRES_DB
104240 POSTGRES_CAS_CONNECTION_NAME=POSTGRES_CAS_CONNECTION_NAME
105241 POSTGRES_CAS_PASS=POSTGRES_CAS_PASS
106242 POSTGRES_CUSTOMER_CAS_CONNECTION_NAME=POSTGRES_CUSTOMER_CAS_CONNECTION_NAME
107243 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
244+ POSTGRES_CUSTOMER_CAS_VALID_DOMAIN_NAME=POSTGRES_CUSTOMER_CAS_PASS_VALID_DOMAIN_NAME
245+ POSTGRES_CUSTOMER_CAS_INVALID_DOMAIN_NAME=POSTGRES_CUSTOMER_CAS_PASS_INVALID_DOMAIN_NAME
110246 POSTGRES_MCP_CONNECTION_NAME=POSTGRES_MCP_CONNECTION_NAME
111247 POSTGRES_MCP_PASS=POSTGRES_MCP_PASS
112248 SQLSERVER_CONNECTION_NAME=SQLSERVER_CONNECTION_NAME
@@ -117,13 +253,16 @@ function write_e2e_env(){
117253 QUOTA_PROJECT=QUOTA_PROJECT
118254 )
119255
120- if [[ -z " $TEST_PROJECT " ]] ; then
256+ if [[ -z " ${ TEST_PROJECT:- } " ]] ; then
121257 echo " Set TEST_PROJECT environment variable to the project containing"
122258 echo " the e2e test suite secrets."
123259 exit 1
124260 fi
125261
126262 echo " Getting test secrets from $TEST_PROJECT into $outfile "
263+ local_user=$( gcloud auth list --format ' value(account)' | tr -d ' \n' )
264+
265+ echo " Getting test secrets from $TEST_PROJECT into $1 "
127266 {
128267 for env_name in " ${secret_vars[@]} " ; do
129268 env_var_name=" ${env_name%% =* } "
@@ -132,6 +271,9 @@ function write_e2e_env(){
132271 val=$( gcloud secrets versions access latest --project " $TEST_PROJECT " --secret=" $secret_name " )
133272 echo " export $env_var_name ='$val '"
134273 done
274+ # Set IAM User env vars to the local gcloud user
275+ echo " export MYSQL_IAM_USER='${local_user%%@* } '"
276+ echo " export POSTGRES_IAM_USER='$local_user '"
135277 } > " $outfile "
136278
137279}
0 commit comments