#!/usr/bin/env bash # The Sql driver's ODBC live gate (OdbcReadTests, lmxopcua#753), fully throwaway. # # A macOS dev box has no ODBC vendor driver, so the gate runs the ALREADY-BUILT test assembly inside a Linux # .NET SDK container that apt-installs unixODBC + psqlODBC, against a disposable PostgreSQL seeded with the same # seed-pg.sql the Postgres suite uses. Everything it starts is removed on exit (trap), success or failure. # # dotnet build tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Sql.IntegrationTests -c Release # tests/Drivers/ZB.MOM.WW.OtOpcUa.Driver.Sql.IntegrationTests/Docker/odbc/run-odbc-gate.sh # # Needs network egress from the SDK container for apt. SDK_IMAGE can be overridden. set -euo pipefail HERE="$(cd "$(dirname "$0")" && pwd)" PROJECT="$(cd "$HERE/../.." && pwd)" BIN="$PROJECT/bin/Release/net10.0" SDK_IMAGE="${SDK_IMAGE:-mcr.microsoft.com/dotnet/sdk:10.0.103-noble}" NET=otopcua-sql-odbc-net PG=otopcua-sql-odbc-pg PW="Sqlodbc_dev_pw1" [ -f "$BIN/ZB.MOM.WW.OtOpcUa.Driver.Sql.IntegrationTests.dll" ] || { echo "build the suite in Release first: $BIN" >&2; exit 2; } cleanup() { docker rm -f "$PG" >/dev/null 2>&1 || true; docker network rm "$NET" >/dev/null 2>&1 || true; } trap cleanup EXIT cleanup docker network create "$NET" >/dev/null docker run -d --name "$PG" --network "$NET" --label project=lmxopcua \ -e POSTGRES_PASSWORD="$PW" -e POSTGRES_DB=sqlpollfixture postgres:17-alpine >/dev/null # a fresh postgres restarts once after initdb; probing too early can catch the shutdown (seen 2026-11-09) sleep 8 for _ in $(seq 1 60); do docker exec "$PG" pg_isready -U postgres -d sqlpollfixture >/dev/null 2>&1 && break; sleep 1; done docker exec -i "$PG" psql -q -v ON_ERROR_STOP=1 -v app_password="$PW" -U postgres -d sqlpollfixture \ < "$PROJECT/Docker/postgres/seed-pg.sql" docker run --rm --network "$NET" -v "$BIN":/suite -w /suite \ -e SQL_ODBC_CONNECTION_STRING="Driver={PostgreSQL Unicode};Server=$PG;Port=5432;Database=sqlpollfixture;Uid=otopcua;Pwd=$PW" \ "$SDK_IMAGE" bash -c ' set -e apt-get update -qq >/dev/null && apt-get install -y -qq unixodbc odbc-postgresql >/dev/null odbcinst -q -d dotnet ZB.MOM.WW.OtOpcUa.Driver.Sql.IntegrationTests.dll -class ZB.MOM.WW.OtOpcUa.Driver.Sql.IntegrationTests.OdbcReadTests '