1717# specific language governing permissions and limitations
1818# under the License.
1919
20- set -e
20+ set -euo pipefail
2121
2222HOST_URL=" http://localhost:9047"
2323NEW_USER_URL=" $HOST_URL /apiv2/bootstrap/firstuser"
@@ -27,28 +27,80 @@ SQL_URL="$HOST_URL/api/v3/sql"
2727ADMIN_USER=" admin"
2828ADMIN_PASSWORD=" admin2025"
2929
30+ MAX_WAIT_ATTEMPTS=60
31+ WAIT_INTERVAL_SECONDS=5
32+
3033# Wait for Dremio to be available.
31- until curl -s " $NEW_USER_URL " ; do
32- echo ' Waiting for Dremio to start...'
33- sleep 5
34+ attempt=1
35+ until curl --fail --silent --show-error \
36+ --output /dev/null \
37+ --max-time 5 \
38+ " $NEW_USER_URL " ; do
39+
40+ if [[ " $attempt " -ge " $MAX_WAIT_ATTEMPTS " ]]; then
41+ echo " Timed out waiting for Dremio to start." >&2
42+ exit 1
43+ fi
44+
45+ echo " Waiting for Dremio to start... ($attempt /$MAX_WAIT_ATTEMPTS )"
46+ attempt=$(( attempt + 1 ))
47+ sleep " $WAIT_INTERVAL_SECONDS "
3448done
3549
3650echo " "
37- echo ' Creating admin user...'
51+ echo " Creating admin user..."
3852
3953# Create new admin account.
40- curl -X PUT " $NEW_USER_URL " \
54+ curl --fail --silent --show-error \
55+ -X PUT " $NEW_USER_URL " \
4156 -H " Content-Type: application/json" \
42- -d " { \" userName\" : \" $ADMIN_USER \" , \" password\" : \" $ADMIN_PASSWORD \" }"
57+ -d " $( python3 - << EOF
58+ import json
59+ print(json.dumps({
60+ "userName": "$ADMIN_USER ",
61+ "password": "$ADMIN_PASSWORD "
62+ }))
63+ EOF
64+ ) "
4365
4466echo " "
4567echo " Created admin user."
4668
47- # Use admin account to login and acquire a token.
48- TOKEN=$( curl -s -X POST " $LOGIN_URL " \
69+ echo " Logging in as admin user..."
70+
71+ # Login and capture response body.
72+ LOGIN_RESPONSE=" $( curl --fail --silent --show-error \
73+ -X POST " $LOGIN_URL " \
4974 -H " Content-Type: application/json" \
50- -d " { \" userName\" : \" $ADMIN_USER \" , \" password\" : \" $ADMIN_PASSWORD \" }" \
51- | grep -oP ' (?<="token":")[^"]+' )
75+ -d " $( python3 - << EOF
76+ import json
77+ print(json.dumps({
78+ "userName": "$ADMIN_USER ",
79+ "password": "$ADMIN_PASSWORD "
80+ }))
81+ EOF
82+ ) " ) "
83+
84+ # Extract token safely using Python JSON parsing.
85+ TOKEN=" $( python3 - << EOF
86+ import json
87+ import sys
88+
89+ try:
90+ response = json.loads("""$LOGIN_RESPONSE """)
91+ except json.JSONDecodeError as exc:
92+ print(f"Failed to parse login response JSON: {exc}", file=sys.stderr)
93+ sys.exit(1)
94+
95+ token = response.get("token")
96+
97+ if not token:
98+ print("Login response did not contain a token.", file=sys.stderr)
99+ sys.exit(1)
100+
101+ print(token)
102+ EOF
103+ ) "
52104
53105SQL_QUERY="
54106Create Table \$ scratch.ODBCTest As
@@ -62,10 +114,12 @@ Create Table \$scratch.ODBCTest As
62114 CAST(TIME '23:59:59' AS TIME) AS time_max,
63115 CAST(TIMESTAMP '9999-12-31 23:59:59' AS TIMESTAMP) AS timestamp_max;
64116"
117+
65118echo " Creating \$ scratch.ODBCTest table."
66119
67120# Create a new table by sending a SQL query.
68- curl -i -X POST " $SQL_URL " \
121+ curl --fail --silent --show-error \
122+ -X POST " $SQL_URL " \
69123 -H " Authorization: _dremio$TOKEN " \
70124 -H " Content-Type: application/json" \
71125 -d " $( python3 - << EOF
0 commit comments