Skip to content

Commit 894f53e

Browse files
Backport to branch(3.10) : Update CI to fix issues of SQL Server integration test (#1601)
Co-authored-by: kota2and3kan <[email protected]>
1 parent f5637ca commit 894f53e

File tree

2 files changed

+64
-5
lines changed

2 files changed

+64
-5
lines changed

.github/workflows/ci.yaml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,8 @@ jobs:
621621
distribution: 'temurin'
622622

623623
- name: Create no superuser
624-
run: ./ci/no-superuser/create-no-superuser-sqlserver.sh sqlserver17 SqlServer17
624+
run: ./ci/no-superuser/create-no-superuser-sqlserver.sh sqlserver17 SqlServer17 10 3
625+
timeout-minutes: 1
625626

626627
- name: Setup and execute Gradle 'integrationTestJdbc' task
627628
uses: gradle/gradle-build-action@v2
@@ -660,7 +661,8 @@ jobs:
660661
distribution: 'temurin'
661662

662663
- name: Create no superuser
663-
run: ./ci/no-superuser/create-no-superuser-sqlserver.sh sqlserver19 SqlServer19
664+
run: ./ci/no-superuser/create-no-superuser-sqlserver.sh sqlserver19 SqlServer19 10 3
665+
timeout-minutes: 1
664666

665667
- name: Setup and execute Gradle 'integrationTestJdbc' task
666668
uses: gradle/gradle-build-action@v2
@@ -699,7 +701,8 @@ jobs:
699701
distribution: 'temurin'
700702

701703
- name: Create no superuser
702-
run: ./ci/no-superuser/create-no-superuser-sqlserver.sh sqlserver22 SqlServer22
704+
run: ./ci/no-superuser/create-no-superuser-sqlserver.sh sqlserver22 SqlServer22 10 3
705+
timeout-minutes: 1
703706

704707
- name: Setup and execute Gradle 'integrationTestJdbc' task
705708
uses: gradle/gradle-build-action@v2
Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,79 @@
11
#!/bin/bash
2-
set -eu
2+
set -u
33

44
# Get container name and password from arguments
55
SQL_SERVER_CONTAINER_NAME=$1
66
SQL_SERVER_PASSWORD=$2
7+
MAX_RETRY_COUNT=$3
8+
RETRY_INTERVAL=$4
9+
COUNT=0
10+
11+
echo "INFO: Creating no superuser start."
12+
13+
# A SQL Server container takes a few seconds to start SQL Server process
14+
# in the container. So, first, we wait ${RETRY_INTERVAL} seconds before
15+
# we run the `sqlcmd` command in the container.
16+
echo "INFO: Sleep ${RETRY_INTERVAL} seconds to wait for SQL Server start."
17+
18+
while [[ ${COUNT} -lt ${MAX_RETRY_COUNT} ]]
19+
do
20+
sleep ${RETRY_INTERVAL}
21+
22+
echo "INFO: Retry count: ${COUNT}"
23+
24+
docker exec -t ${SQL_SERVER_CONTAINER_NAME} /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SQL_SERVER_PASSWORD} -d master -Q "SELECT 1"
25+
if [[ $? -eq 0 ]]; then
26+
break
27+
else
28+
echo "INFO: sqlcmd command failed. Will retry after ${RETRY_INTERVAL} seconds."
29+
fi
30+
31+
COUNT=$((COUNT + 1))
32+
33+
if [[ ${COUNT} -eq ${MAX_RETRY_COUNT} ]]; then
34+
echo "ERROR: sqlcmd command failed ${MAX_RETRY_COUNT} times. Please check your configuration." >&2
35+
exit 1
36+
fi
37+
done
38+
39+
echo "INFO: sqlcmd command succeeded. Continue creating no superuser."
740

841
# Create login
42+
echo "INFO: Create login start"
943
docker exec -t ${SQL_SERVER_CONTAINER_NAME} /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SQL_SERVER_PASSWORD} -d master -Q "CREATE LOGIN no_superuser WITH PASSWORD = 'no_superuser_password', DEFAULT_DATABASE = master , CHECK_POLICY = OFF, CHECK_EXPIRATION = OFF"
44+
echo "INFO: Create login end"
1045

1146
# Create database
12-
docker exec -t ${SQL_SERVER_CONTAINER_NAME} /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SQL_SERVER_PASSWORD} -d master -Q "CREATE DATABASE test_db"
47+
echo "INFO: Create database start"
48+
docker exec -t ${SQL_SERVER_CONTAINER_NAME} /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SQL_SERVER_PASSWORD} -d master -Q "CREATE DATABASE test_db COLLATE Japanese_BIN2"
49+
echo "INFO: Create database end"
1350

1451
# Create no_superuser
52+
echo "INFO: Create no_superuser start"
1553
docker exec -t ${SQL_SERVER_CONTAINER_NAME} /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SQL_SERVER_PASSWORD} -d test_db -Q "CREATE USER no_superuser FOR LOGIN no_superuser"
54+
echo "INFO: Create no_superuser end"
1655

1756
# Add roles
57+
echo "INFO: Add role db_ddladmin start"
1858
docker exec -t ${SQL_SERVER_CONTAINER_NAME} /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SQL_SERVER_PASSWORD} -d test_db -Q "EXEC sp_addrolemember @rolename = 'db_ddladmin', @membername = 'no_superuser'"
59+
echo "INFO: Add role db_ddladmin end"
60+
61+
echo "INFO: Add role db_datawriter start"
1962
docker exec -t ${SQL_SERVER_CONTAINER_NAME} /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SQL_SERVER_PASSWORD} -d test_db -Q "EXEC sp_addrolemember @rolename = 'db_datawriter', @membername = 'no_superuser'"
63+
echo "INFO: Add role db_datawriter end"
64+
65+
echo "INFO: Add role db_datareader start"
2066
docker exec -t ${SQL_SERVER_CONTAINER_NAME} /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P ${SQL_SERVER_PASSWORD} -d test_db -Q "EXEC sp_addrolemember @rolename = 'db_datareader', @membername = 'no_superuser'"
67+
echo "INFO: Add role db_datareader end"
68+
69+
# Check the collation of test_db (for debugging purposes)
70+
echo "INFO: Check collation start"
71+
docker exec -t ${SQL_SERVER_CONTAINER_NAME} /opt/mssql-tools/bin/sqlcmd -S localhost -U no_superuser -P no_superuser_password -d test_db -Q "SELECT name, collation_name FROM sys.databases" -W
72+
echo "INFO: Check collation end"
2173

2274
# Check if no_superuser can access SQL Server (for debugging purposes)
75+
echo "INFO: SELECT @@version start"
2376
docker exec -t ${SQL_SERVER_CONTAINER_NAME} /opt/mssql-tools/bin/sqlcmd -S localhost -U no_superuser -P no_superuser_password -d test_db -Q "SELECT @@version"
77+
echo "INFO: SELECT @@version end"
78+
79+
echo "INFO: Creating no superuser succeeded."

0 commit comments

Comments
 (0)