1212is_numeric () {
1313 case $1 in
1414 ' ' |* [!0-9]* ) return 1;; # returns 1 if not numeric
15- * ) return 0;; # returns 0 if numeric
15+ * ) return 0;; # returns 0 if numeric
1616 esac
1717}
18+ # Promt color vars.
19+ C_RED=" \033[31m"
20+ C_BLUE=" \033[34m"
21+ NO_FORMAT=" \033[0m"
1822
1923HOST=localhost
2024PORT=" "
@@ -28,83 +32,162 @@ if [ -n "${WP_CLI_TEST_DBHOST}" ]; then
2832 if [ -n " ${PORT} " ]; then
2933 # If the port is not numeric, then we assume it is a socket path.
3034 if is_numeric " ${PORT} " ; then
35+ echo " Connecting to custom host: ${C_BLUE}${HOST}${NO_FORMAT} on port ${C_BLUE}${PORT}${NO_FORMAT} "
3136 HOST_STRING=" ${HOST_STRING} --port=${PORT} --protocol=tcp"
3237 else
38+ echo " Connecting to custom host: ${C_BLUE}${HOST}${NO_FORMAT} on socket ${C_BLUE}${PORT}${NO_FORMAT} "
3339 HOST_STRING=" ${HOST_STRING} --socket=${PORT} --protocol=socket"
3440 fi
41+ else
42+ echo " Connecting to custom host: ${C_BLUE}${HOST}${NO_FORMAT} "
3543 fi
44+ else
45+ echo " Connecting to default host: ${C_BLUE}${HOST}${NO_FORMAT} "
3646fi
3747
3848USER=root
3949if [ -n " ${WP_CLI_TEST_DBROOTUSER} " ]; then
40- USER=" ${WP_CLI_TEST_DBROOTUSER} "
50+ echo " Connecting with custom root user: ${C_BLUE}${WP_CLI_TEST_DBROOTUSER}${NO_FORMAT} "
51+ USER=" ${WP_CLI_TEST_DBROOTUSER} "
52+ else
53+ echo " Connecting with default root user: ${C_BLUE}${USER}${NO_FORMAT} "
4154fi
4255
4356PASSWORD_STRING=" "
4457if [ -n " ${WP_CLI_TEST_DBROOTPASS} " ]; then
45- PASSWORD_STRING=" -p${WP_CLI_TEST_DBROOTPASS} "
58+ echo " Connecting with custom root password: ${C_BLUE}${WP_CLI_TEST_DBROOTPASS}${NO_FORMAT} "
59+ PASSWORD_STRING=" -p${WP_CLI_TEST_DBROOTPASS} "
60+ else
61+ echo " Connecting with default root password: ${C_BLUE} empty${NO_FORMAT} "
4662fi
4763
4864TEST_DB=wp_cli_test
4965if [ -n " ${WP_CLI_TEST_DBNAME} " ]; then
50- TEST_DB=" ${WP_CLI_TEST_DBNAME} "
66+ echo " Using custom test database: ${C_BLUE}${WP_CLI_TEST_DBNAME}${NO_FORMAT} "
67+ TEST_DB=" ${WP_CLI_TEST_DBNAME} "
68+ else
69+ echo " Using default test database: ${C_BLUE}${TEST_DB}${NO_FORMAT} "
5170fi
5271
5372TEST_USER=wp_cli_test
5473if [ -n " ${WP_CLI_TEST_DBUSER} " ]; then
55- TEST_USER=" ${WP_CLI_TEST_DBUSER} "
74+ echo " Using custom test user: ${C_BLUE}${WP_CLI_TEST_DBUSER}${NO_FORMAT} "
75+ TEST_USER=" ${WP_CLI_TEST_DBUSER} "
76+ else
77+ echo " Using default test user: ${C_BLUE}${TEST_USER}${NO_FORMAT} "
5678fi
5779
5880TEST_PASSWORD=password1
5981if [ -n " ${WP_CLI_TEST_DBPASS} " ]; then
60- TEST_PASSWORD=" ${WP_CLI_TEST_DBPASS} "
82+ echo " Using custom test password: ${C_BLUE}${WP_CLI_TEST_DBPASS}${NO_FORMAT} "
83+ TEST_PASSWORD=" ${WP_CLI_TEST_DBPASS} "
84+ else
85+ echo " Using default test password: ${C_BLUE}${TEST_PASSWORD}${NO_FORMAT} "
6186fi
6287
63- echo ' Checking if MySQL is ready...'
64- while ! mysql ${HOST_STRING} --user=" ${USER} " " ${PASSWORD_STRING} " --execute=" SHOW DATABASES;" | grep ' information_schema' > /dev/null;
65- do
66- echo ' Waiting for MySQL...'
67- sleep 5
68- i=$(( i+ 1 ))
69- if [ $i -gt 36 ]; then
70- echo ' MySQL failed to start. Aborting.'
71- exit 1
72- fi
73- done
88+ echo " Detecting database version..."
89+
90+ TYPE=" MySQL"
91+ CLIENT_VERSION=$( mysql --version 2> /dev/null)
92+
93+ case " ${CLIENT_VERSION} " in
94+ * " MariaDB" * )
95+ TYPE=" MariaDB"
96+ ;;
97+ esac
98+
99+ if [ -z " $PS1 " ]; then
100+ # These vars are because github actions gave problems in the past.
101+ MYSQL_TRIES=36
102+ MYSQL_WAIT=5
103+ else
104+ MYSQL_TRIES=1
105+ MYSQL_WAIT=0
106+ fi
107+
108+ if [ " ${TYPE} " = " MySQL" ]; then
109+ SERVER_VERSION=$( mysql -e " SELECT VERSION()" --skip-column-names ${HOST_STRING} -u" ${USER} " " ${PASSWORD_STRING} " )
110+ else
111+ SERVER_VERSION=$( mariadb -e " SELECT VERSION()" --skip-column-names ${HOST_STRING} -u" ${USER} " " ${PASSWORD_STRING} " )
112+ fi
113+
114+ VERSION=$( echo " ${SERVER_VERSION} " | grep -o ' ^[^-]*' )
115+ MAJOR=$( echo " ${VERSION} " | cut -d. -f1)
116+ MINOR=$( echo " ${VERSION} " | cut -d. -f2)
117+
118+ echo " Detected ${TYPE} at version ${MAJOR} .${MINOR} "
119+
120+ echo ' Checking if database is ready...'
121+
122+ if [ " ${TYPE} " = " MySQL" ]; then
123+ while ! mysql ${HOST_STRING} --user=" ${USER} " " ${PASSWORD_STRING} " --execute=" SHOW DATABASES;" | grep ' information_schema' > /dev/null;
124+ do
125+ i=$(( i+ 1 ))
126+ if [ " ${MYSQL_TRIES} " -gt 1 ]; then
127+ echo " Waiting for MySQL(${i} /${MYSQL_TRIES} )..."
128+ sleep ${MYSQL_WAIT}
129+ fi
130+
131+ if [ $i -ge $MYSQL_TRIES ]; then
132+ echo " ${C_RED} MySQL failed to start. Aborting.${NO_FORMAT} "
133+ echo " Cannot connect to MySQL server. For all available variables, check the documentation at:"
134+ echo " ${C_BLUE} https://github.com/wp-cli/wp-cli-tests?tab=readme-ov-file#the-database-credentials${NO_FORMAT} "
135+ exit 1
136+ fi
137+ done
138+ else
139+ while ! mariadb ${HOST_STRING} --user=" ${USER} " " ${PASSWORD_STRING} " --execute=" SHOW DATABASES;" | grep ' information_schema' > /dev/null;
140+ do
141+ i=$(( i+ 1 ))
142+ if [ " ${MYSQL_TRIES} " -gt 1 ]; then
143+ echo " Waiting for MariaDB(${i} /${MYSQL_TRIES} )..."
144+ sleep ${MYSQL_WAIT}
145+ fi
146+
147+ if [ $i -ge $MYSQL_TRIES ]; then
148+ echo " ${C_RED} MariaDB failed to start. Aborting.${NO_FORMAT} "
149+ echo " Cannot connect to MariaDB server. For all available variables, check the documentation at:"
150+ echo " ${C_BLUE} https://github.com/wp-cli/wp-cli-tests?tab=readme-ov-file#the-database-credentials${NO_FORMAT} "
151+ exit 1
152+ fi
153+ done
154+ fi
74155
75156# Prepare the database for running the tests with a MySQL version 8.0 or higher.
76157install_mysql_db_8_0_plus () {
77- set -ex
158+ set -ex # print all the commands.
78159 mysql -e " CREATE DATABASE IF NOT EXISTS \` ${TEST_DB} \` ;" ${HOST_STRING} -u" ${USER} " " ${PASSWORD_STRING} "
79160 mysql -e " CREATE USER IF NOT EXISTS \` ${TEST_USER} \` @'%' IDENTIFIED WITH caching_sha2_password BY '${TEST_PASSWORD} '" ${HOST_STRING} -u" ${USER} " " ${PASSWORD_STRING} "
80161 mysql -e " GRANT ALL PRIVILEGES ON \` ${TEST_DB} \` .* TO '${TEST_USER} '@'%'" ${HOST_STRING} -u" ${USER} " " ${PASSWORD_STRING} "
81162 mysql -e " GRANT ALL PRIVILEGES ON \` ${TEST_DB} _scaffold\` .* TO '${TEST_USER} '@'%'" ${HOST_STRING} -u" ${USER} " " ${PASSWORD_STRING} "
163+ { set +ex; } 2> /dev/null # stop printing the commands
82164}
83165
84166# Prepare the database for running the tests with a MySQL version lower than 8.0.
85167install_mysql_db_lower_than_8_0 () {
86- set -ex
168+ set -ex # print all the commands.
87169 mysql -e " CREATE DATABASE IF NOT EXISTS \` ${TEST_DB} \` ;" ${HOST_STRING} -u" ${USER} " " ${PASSWORD_STRING} "
88170 mysql -e " GRANT ALL ON \` ${TEST_DB} \` .* TO '${TEST_USER} '@'%' IDENTIFIED BY '${TEST_PASSWORD} '" ${HOST_STRING} -u" ${USER} " " ${PASSWORD_STRING} "
89171 mysql -e " GRANT ALL ON \` ${TEST_DB} _scaffold\` .* TO '${TEST_USER} '@'%' IDENTIFIED BY '${TEST_PASSWORD} '" ${HOST_STRING} -u" ${USER} " " ${PASSWORD_STRING} "
172+ { set +ex; } 2> /dev/null # stop printing the commands
90173}
91174
92- VERSION_STRING=$( mysql -e " SELECT VERSION()" --skip-column-names ${HOST_STRING} -u" ${USER} " " ${PASSWORD_STRING} " )
93- VERSION=$( echo " ${VERSION_STRING} " | grep -o ' ^[^-]*' )
94- MAJOR=$( echo " ${VERSION} " | cut -d. -f1)
95- MINOR=$( echo " ${VERSION} " | cut -d. -f2)
96- TYPE=" MySQL"
97- case " ${VERSION_STRING} " in
98- * " MariaDB" * )
99- TYPE=" MariaDB"
100- ;;
101- esac
102-
103- echo " Detected ${TYPE} at version ${MAJOR} .${MINOR} "
104-
175+ # Prepare the database for running the tests with MariaDB
176+ install_mariadb () {
177+ set -ex
178+ mariadb -e " CREATE DATABASE IF NOT EXISTS \` ${TEST_DB} \` ;" ${HOST_STRING} -u" ${USER} " " ${PASSWORD_STRING} "
179+ mariadb -e " CREATE USER IF NOT EXISTS \` ${TEST_USER} \` @'%' IDENTIFIED BY '${TEST_PASSWORD} '" ${HOST_STRING} -u" ${USER} " " ${PASSWORD_STRING} "
180+ mariadb -e " GRANT ALL PRIVILEGES ON \` ${TEST_DB} \` .* TO '${TEST_USER} '@'%'" ${HOST_STRING} -u" ${USER} " " ${PASSWORD_STRING} "
181+ mariadb -e " GRANT ALL PRIVILEGES ON \` ${TEST_DB} _scaffold\` .* TO '${TEST_USER} '@'%'" ${HOST_STRING} -u" ${USER} " " ${PASSWORD_STRING} "
182+ }
105183
106- if [ " ${TYPE} " != " MariaDB" ] && [ " ${MAJOR} " -ge 8 ]; then
184+ if [ " ${TYPE} " = " MariaDB" ]; then
185+ install_mariadb
186+ elif [ " ${MAJOR} " -ge 8 ]; then
107187 install_mysql_db_8_0_plus
108188else
109189 install_mysql_db_lower_than_8_0
110190fi
191+
192+ echo " Succesfully prepared the database for running tests."
193+ echo " This command does not have to be run again."
0 commit comments