This is an automated email from the ASF dual-hosted git repository.
isapego pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/ignite-3.git
The following commit(s) were added to refs/heads/main by this push:
new 47f51d5baf8 IGNITE-27304 C++ Client: Add Windows TC suite (#7875)
47f51d5baf8 is described below
commit 47f51d5baf8868112b7fafd73054800adf8df4f2
Author: Igor Sapego <[email protected]>
AuthorDate: Thu Mar 26 10:37:29 2026 +0100
IGNITE-27304 C++ Client: Add Windows TC suite (#7875)
---
.../files/scripts/powershell/AnalyzeCrashDumps.ps1 | 31 ++++++
.../CollectDebugArtifactsForCrashDumps.ps1 | 43 +++++++
.teamcity/test/build_types/RunPlatformTests.kt | 2 +-
.../test/platform_tests/PlatformCppTestsWindows.kt | 124 +++++++++++++--------
.../cpp/ignite/odbc/install/install_win.cmd | 26 -----
.../cpp/ignite/odbc/install/install_win.ps1 | 102 +++++++++++++++++
modules/platforms/cpp/tests/client-test/main.cpp | 12 +-
modules/platforms/cpp/tests/odbc-test/main.cpp | 6 +-
.../cpp/tests/odbc-test/transaction_test.cpp | 4 +-
9 files changed, 273 insertions(+), 77 deletions(-)
diff --git a/.teamcity/files/scripts/powershell/AnalyzeCrashDumps.ps1
b/.teamcity/files/scripts/powershell/AnalyzeCrashDumps.ps1
new file mode 100644
index 00000000000..673839605e7
--- /dev/null
+++ b/.teamcity/files/scripts/powershell/AnalyzeCrashDumps.ps1
@@ -0,0 +1,31 @@
+$dumpsDir = "%PATH__CRASH_DUMPS%"
+$binDir = "%PATH__CMAKE_BUILD_DIRECTORY%\Debug\bin"
+$cdb = "C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\cdb.exe"
+$symPath = "$dumpsDir;$binDir"
+$srcPath = "%PATH__WORKING_DIR%"
+
+if (-not (Test-Path $dumpsDir)) {
+ Write-Host "Dumps directory '$dumpsDir' does not exist, skipping."
+ exit 0
+}
+
+$dumps = @(Get-ChildItem -Path $dumpsDir -File -Filter "*.dmp")
+if ($dumps.Count -eq 0) {
+ Write-Host "No dump files found in '$dumpsDir', skipping."
+ exit 0
+}
+
+if (-not (Test-Path $cdb)) {
+ Write-Error "Crash dump analyzer requires cdb.exe, but it was not found at
the expected path: '$cdb'. " +
+ "Ensure the Windows SDK Debuggers are installed and the path
is correct."
+ exit 1
+}
+
+foreach ($dump in $dumps) {
+ Write-Host "##teamcity[buildProblem description='Crash dump detected:
$($dump.Name)']"
+ Write-Host "##teamcity[blockOpened name='Crash analysis: $($dump.Name)']"
+
+ & $cdb -z $dump.FullName -y $symPath -srcpath $srcPath -t 0 -c ".symopt+
0x80000; .reload /f; .lines; .ecxr; ~*kp; q"
+
+ Write-Host "##teamcity[blockClosed name='Crash analysis: $($dump.Name)']"
+}
\ No newline at end of file
diff --git
a/.teamcity/files/scripts/powershell/CollectDebugArtifactsForCrashDumps.ps1
b/.teamcity/files/scripts/powershell/CollectDebugArtifactsForCrashDumps.ps1
new file mode 100644
index 00000000000..c3618243418
--- /dev/null
+++ b/.teamcity/files/scripts/powershell/CollectDebugArtifactsForCrashDumps.ps1
@@ -0,0 +1,43 @@
+$dumpsDir = "%PATH__CRASH_DUMPS%"
+$binDir = "%PATH__CMAKE_BUILD_DIRECTORY%\Debug\bin"
+
+if (-not (Test-Path $dumpsDir)) {
+ Write-Host "Dumps directory '$dumpsDir' does not exist, skipping."
+ exit 0
+}
+
+$dumps = Get-ChildItem -Path $dumpsDir -File -Filter "*.dmp"
+if ($dumps.Count -eq 0) {
+ Write-Host "Dumps directory '$dumpsDir' is empty, skipping."
+ exit 0
+}
+
+Write-Host "Found $($dumps.Count) dump file(s), collecting binaries from CMake
build directory."
+
+if (-not (Test-Path $binDir)) {
+ Write-Error "Bin directory '$binDir' does not exist."
+ exit 1
+}
+
+$dumpNames = $dumps | ForEach-Object { ($_.BaseName -split "\.exe")[0] }
+
+$exes = @(Get-ChildItem -Path "$binDir\*" -File -Include "*.exe" |
+ Where-Object { $dumpNames -contains $_.BaseName })
+
+$dlls = @(Get-ChildItem -Path "$binDir\*" -File -Include "*.dll")
+
+$binaryNames = @(($exes + $dlls) | ForEach-Object { $_.BaseName })
+
+$pdbs = @(Get-ChildItem -Path "$binDir\*" -File -Include "*.pdb" |
+ Where-Object { $binaryNames -contains $_.BaseName })
+
+$filesToCopy = @($exes + $dlls + $pdbs)
+if ($filesToCopy.Count -eq 0) {
+ Write-Host "Warning: no matching binaries found in '$binDir'."
+ exit 0
+}
+
+$filesToCopy | ForEach-Object {
+ Copy-Item -Path $_.FullName -Destination $dumpsDir -Force
+ Write-Host "Copied: $($_.Name)"
+}
diff --git a/.teamcity/test/build_types/RunPlatformTests.kt
b/.teamcity/test/build_types/RunPlatformTests.kt
index ee2d2aece0f..a0ef75a4c01 100644
--- a/.teamcity/test/build_types/RunPlatformTests.kt
+++ b/.teamcity/test/build_types/RunPlatformTests.kt
@@ -15,7 +15,7 @@ object RunPlatformTests : BuildType({
snapshot(PlatformCppOdbcTestsDebLinux) {}
snapshot(PlatformCppOdbcTestsRpmLinux) {}
snapshot(PlatformCppOdbcTestsTgzLinux) {}
-// snapshot(PlatformCppTestsWindows) {} // Always falling, under
investigation
+ snapshot(PlatformCppTestsWindows) {}
snapshot(PlatformDotnetTestsWindows) {}
snapshot(PlatformDotnetTestsLinux) {}
snapshot(RunPythonTests) {}
diff --git a/.teamcity/test/platform_tests/PlatformCppTestsWindows.kt
b/.teamcity/test/platform_tests/PlatformCppTestsWindows.kt
index 9a538e942a5..a4d9716cd7d 100644
--- a/.teamcity/test/platform_tests/PlatformCppTestsWindows.kt
+++ b/.teamcity/test/platform_tests/PlatformCppTestsWindows.kt
@@ -1,7 +1,7 @@
package test.platform_tests
import jetbrains.buildServer.configs.kotlin.BuildType
-import jetbrains.buildServer.configs.kotlin.ParameterDisplay
+import jetbrains.buildServer.configs.kotlin.BuildStep
import jetbrains.buildServer.configs.kotlin.buildFeatures.XmlReport
import jetbrains.buildServer.configs.kotlin.buildFeatures.xmlReport
import jetbrains.buildServer.configs.kotlin.buildSteps.*
@@ -9,9 +9,8 @@ import
jetbrains.buildServer.configs.kotlin.failureConditions.BuildFailureOnMetr
import
jetbrains.buildServer.configs.kotlin.failureConditions.BuildFailureOnText
import
jetbrains.buildServer.configs.kotlin.failureConditions.failOnMetricChange
import jetbrains.buildServer.configs.kotlin.failureConditions.failOnText
-import jetbrains.buildServer.configs.kotlin.triggers.vcs
import org.apache.ignite.teamcity.CustomBuildSteps.Companion.customGradle
-import org.apache.ignite.teamcity.CustomBuildSteps.Companion.customScript
+import org.apache.ignite.teamcity.CustomBuildSteps.Companion.customPowerShell
import org.apache.ignite.teamcity.Teamcity
import org.apache.ignite.teamcity.Teamcity.Companion.hiddenText
@@ -23,6 +22,7 @@ object PlatformCppTestsWindows : BuildType({
artifactRules = """
%PATH__UNIT_TESTS_RESULT% => test_logs
%PATH__CLIENT_TEST_RESULTS% => test_logs
+ %PATH__CRASH_DUMPS% => crash_dumps
""".trimIndent()
params {
@@ -30,48 +30,44 @@ object PlatformCppTestsWindows : BuildType({
hiddenText("PATH__CMAKE_BUILD_DIRECTORY",
"""%PATH__WORKING_DIR%\cmake-build-debug""")
hiddenText("PATH__CLIENT_TEST_RESULTS",
"""%PATH__CMAKE_BUILD_DIRECTORY%\cpp_client_tests_results.xml""")
hiddenText("PATH__ODBC_TEST_RESULTS",
"""%PATH__CMAKE_BUILD_DIRECTORY%\odbc_tests_results.xml""")
+ hiddenText("PATH__CRASH_DUMPS",
"""%PATH__CMAKE_BUILD_DIRECTORY%\dumps""")
hiddenText("PATH__UNIT_TESTS_RESULT",
"""%PATH__CMAKE_BUILD_DIRECTORY%\cpp_unit_test_results.xml""")
- hiddenText("PATH__WORKING_DIR",
"""%VCSROOT__IGNITE3%\modules\platforms\cpp""")
+ hiddenText("PATH__WORKING_DIR",
"""%teamcity.build.checkoutDir%\%VCSROOT__IGNITE3%\modules\platforms\cpp""")
hiddenText("env.CPP_STAGING", """%PATH__WORKING_DIR%\cpp_staging""")
}
steps {
- script {
+
+ powerShell {
name = "Build C++"
- scriptContent = """
- @echo on
-
- mkdir %PATH__CMAKE_BUILD_DIRECTORY%
- cd %PATH__CMAKE_BUILD_DIRECTORY%
-
- cmake .. -DENABLE_TESTS=ON -DENABLE_ODBC=ON
-DWARNINGS_AS_ERRORS=ON -DCMAKE_BUILD_TYPE=Debug
-DCMAKE_INSTALL_PREFIX=%env.CPP_STAGING% -DCMAKE_CONFIGURATION_TYPES="Debug" -G
"Visual Studio 15 2017" -A x64
-
- @echo off
- if %%ERRORLEVEL%% NEQ 0 (
- echo 'CMake configuration failed'
- exit 5
- )
- @echo on
-
- cmake --build . -j8
-
- @echo off
- if %%ERRORLEVEL%% NEQ 0 (
- echo 'CMake build failed'
- exit 6
- )
- @echo on
-
- cmake --install .
-
- @echo off
- if %%ERRORLEVEL%% NEQ 0 (
- echo 'CMake install failed'
- exit 7
- )
- @echo on
- """.trimIndent()
- }
+ platform = PowerShellStep.Platform.x64
+ scriptMode = script {
+ content = """
+ ${'$'}ErrorActionPreference = "Stop"
+
+ New-Item -ItemType Directory -Force -Path
"%PATH__CMAKE_BUILD_DIRECTORY%" | Out-Null
+ Set-Location "%PATH__CMAKE_BUILD_DIRECTORY%"
+
+ cmake .. -DENABLE_TESTS=ON -DENABLE_ODBC=ON
-DWARNINGS_AS_ERRORS=ON -DCMAKE_BUILD_TYPE=Debug
-DCMAKE_INSTALL_PREFIX="%env.CPP_STAGING%" -DCMAKE_CONFIGURATION_TYPES="Debug"
-G "Visual Studio 15 2017" -A x64
+ if (${'$'}LASTEXITCODE -ne 0) {
+ Write-Error "CMake configuration failed"
+ exit 1
+ }
+
+ cmake --build . -j8
+ if (${'$'}LASTEXITCODE -ne 0) {
+ Write-Error "CMake build failed"
+ exit 2
+ }
+
+ cmake --install .
+ if (${'$'}LASTEXITCODE -ne 0) {
+ Write-Error "CMake install failed"
+ exit 3
+ }
+ """.trimIndent()
+ }
+ }
script {
name = "Unit tests"
workingDir = "%PATH__CMAKE_BUILD_DIRECTORY%"
@@ -83,26 +79,66 @@ object PlatformCppTestsWindows : BuildType({
formatStderrAsError = true
}
customGradle {
- name = "Verify runner is builded"
+ name = "Verify runner is built"
tasks = ":ignite-runner:integrationTestClasses"
}
script {
name = "C++ Client integration tests"
workingDir = "%PATH__CMAKE_BUILD_DIRECTORY%"
- scriptContent = """Debug\bin\ignite-client-test
--gtest_output=xml:%PATH__CLIENT_TEST_RESULTS%"""
+ scriptContent = """
+ mkdir %PATH__CRASH_DUMPS% 2>nul
+ procdump -accepteula -ma -e -n 1 -x %PATH__CRASH_DUMPS%
Debug\bin\ignite-client-test --gtest_output=xml:%PATH__CLIENT_TEST_RESULTS%
+ if %%ERRORLEVEL%% NEQ 0 if %%ERRORLEVEL%% NEQ -2 (
+ echo procdump failed unexpectedly with code %%ERRORLEVEL%%
+ exit /b 1
+ )
+ """.trimIndent()
formatStderrAsError = true
}
+ powerShell {
+ name = "Install ODBC"
+ platform = PowerShellStep.Platform.x64
+ scriptMode = file {
+ path =
"%PATH__WORKING_DIR%\\ignite\\odbc\\install\\install_win.ps1"
+ }
+ scriptArgs = "install
\"%PATH__CMAKE_BUILD_DIRECTORY%\\Debug\\bin\\ignite3-odbc.dll\""
+ }
script {
name = "ODBC integration tests"
- enabled = false
workingDir = "%PATH__CMAKE_BUILD_DIRECTORY%"
- scriptContent = """Debug\bin\ignite-odbc-test
--gtest_output=xml:%PATH__ODBC_TEST_RESULTS%"""
+ scriptContent = """
+ mkdir %PATH__CRASH_DUMPS% 2>nul
+ procdump -accepteula -ma -e -n 1 -x %PATH__CRASH_DUMPS%
Debug\bin\ignite-odbc-test --gtest_output=xml:%PATH__ODBC_TEST_RESULTS%
+ if %%ERRORLEVEL%% NEQ 0 if %%ERRORLEVEL%% NEQ -2 (
+ echo procdump failed unexpectedly with code %%ERRORLEVEL%%
+ exit /b 1
+ )
+ """.trimIndent()
formatStderrAsError = true
}
+ powerShell {
+ name = "Remove ODBC"
+ platform = PowerShellStep.Platform.x64
+ scriptMode = file {
+ path =
"%PATH__WORKING_DIR%\\ignite\\odbc\\install\\install_win.ps1"
+ }
+ scriptArgs = "remove"
+ executionMode = BuildStep.ExecutionMode.ALWAYS
+ }
+ customPowerShell {
+ name = "Collect debug artifacts for crash dumps"
+ workingDir = "%PATH__CMAKE_BUILD_DIRECTORY%"
+ executionMode = BuildStep.ExecutionMode.RUN_ON_FAILURE
+ }
+ customPowerShell {
+ name = "Analyze crash dumps"
+ workingDir = "%PATH__CMAKE_BUILD_DIRECTORY%"
+ executionMode = BuildStep.ExecutionMode.RUN_ON_FAILURE
+ }
}
failureConditions {
- executionTimeoutMin = 20
+ executionTimeoutMin = 40
failOnMetricChange {
metric = BuildFailureOnMetric.MetricType.TEST_COUNT
threshold = 5
diff --git a/modules/platforms/cpp/ignite/odbc/install/install_win.cmd
b/modules/platforms/cpp/ignite/odbc/install/install_win.cmd
deleted file mode 100644
index 03a2be40ee8..00000000000
--- a/modules/platforms/cpp/ignite/odbc/install/install_win.cmd
+++ /dev/null
@@ -1,26 +0,0 @@
-@echo off
-
-set ODBC_AMD64=%1
-
-if [%ODBC_AMD64%] == [] (
- echo error: driver path is not specified. Call format: install_win
abs_path_to_64_bit_driver
- pause
- exit /b 1
-)
-
-if exist %ODBC_AMD64% (
- for %%i IN (%ODBC_AMD64%) DO IF EXIST %%~si\NUL (
- echo warning: The path you have specified seems to be a
directory. Note that you have to specify path to driver file itself instead.
- )
- echo Installing 64-bit driver: %ODBC_AMD64%
- reg add "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Apache Ignite"
/v DriverODBCVer /t REG_SZ /d "03.80" /f
- reg add "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Apache Ignite"
/v UsageCount /t REG_DWORD /d 00000001 /f
- reg add "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Apache Ignite"
/v Driver /t REG_SZ /d %ODBC_AMD64% /f
- reg add "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Apache Ignite"
/v Setup /t REG_SZ /d %ODBC_AMD64% /f
- reg add "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers" /v
"Apache Ignite 3" /t REG_SZ /d "Installed" /f
-) else (
- echo 64-bit driver can not be found: %ODBC_AMD64%
- echo Call format: install_win abs_path_to_64_bit_driver
- pause
- exit /b 1
-)
diff --git a/modules/platforms/cpp/ignite/odbc/install/install_win.ps1
b/modules/platforms/cpp/ignite/odbc/install/install_win.ps1
new file mode 100644
index 00000000000..eb3f9c8e9c8
--- /dev/null
+++ b/modules/platforms/cpp/ignite/odbc/install/install_win.ps1
@@ -0,0 +1,102 @@
+param (
+ [Parameter(Mandatory = $true, Position = 0, HelpMessage = "Mode of
operation: 'install' or 'remove'.")]
+ [ValidateSet("install", "remove")]
+ [string]$Mode,
+
+ [Parameter(Position = 1, HelpMessage = "Absolute path to the ODBC driver
file. Required for 'install' mode.")]
+ [string]$DriverPath
+)
+
+# Treat all errors as terminating so unhandled failures always produce a
non-zero exit code.
+$ErrorActionPreference = 'Stop'
+
+# Check for administrator privileges explicitly so the error is clear in the
build log.
+$isAdmin = ([Security.Principal.WindowsPrincipal]
[Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole(
+ [Security.Principal.WindowsBuiltInRole]::Administrator
+)
+if (-not $isAdmin) {
+ Write-Error "This script must be run as Administrator. Ensure the TeamCity
build agent service account has the required privileges."
+ exit 1
+}
+
+$DriverName = "Apache Ignite 3"
+$OdbcInstKey = "HKLM:\SOFTWARE\ODBC\ODBCINST.INI\$DriverName"
+$OdbcDrvKey = "HKLM:\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers"
+
+# ============================================================
+# INSTALL
+# ============================================================
+if ($Mode -eq "install") {
+
+ # --- Validate DriverPath was supplied ---
+ if (-not $DriverPath) {
+ Write-Error "DriverPath is required in 'install' mode. Call format:
.\install_win.ps1 install <abs_path_to_driver>"
+ exit 1
+ }
+
+ # --- Validate the path points to an existing file (not a directory) ---
+ if (-not (Test-Path -LiteralPath $DriverPath)) {
+ Write-Error "Driver cannot be found: $DriverPath"
+ exit 1
+ }
+
+ if (Test-Path -LiteralPath $DriverPath -PathType Container) {
+ Write-Error "The path '$DriverPath' is a directory. You must specify
the path to the driver file itself, not its folder."
+ exit 1
+ }
+
+ # --- Install the driver ---
+ Write-Host "Installing ODBC driver: $DriverPath"
+
+ # Create the driver sub-key if it doesn't exist
+ if (-not (Test-Path -LiteralPath $OdbcInstKey)) {
+ New-Item -Path $OdbcInstKey -Force | Out-Null
+ }
+
+ # Write driver properties
+ New-ItemProperty -LiteralPath $OdbcInstKey -Name "DriverODBCVer" -Value
"03.80" -PropertyType String -Force | Out-Null
+ New-ItemProperty -LiteralPath $OdbcInstKey -Name "UsageCount" -Value 1
-PropertyType DWord -Force | Out-Null
+ New-ItemProperty -LiteralPath $OdbcInstKey -Name "Driver" -Value
$DriverPath -PropertyType String -Force | Out-Null
+ New-ItemProperty -LiteralPath $OdbcInstKey -Name "Setup" -Value
$DriverPath -PropertyType String -Force | Out-Null
+
+ # Register the driver name in the ODBC Drivers list
+ if (-not (Test-Path -LiteralPath $OdbcDrvKey)) {
+ New-Item -Path $OdbcDrvKey -Force | Out-Null
+ }
+ New-ItemProperty -LiteralPath $OdbcDrvKey -Name $DriverName -Value
"Installed" -PropertyType String -Force | Out-Null
+
+ Write-Host "Driver '$DriverName' installed successfully."
+}
+
+# ============================================================
+# REMOVE
+# ============================================================
+elseif ($Mode -eq "remove") {
+
+ $removedSomething = $false
+
+ # Remove the driver properties key
+ if (Test-Path -LiteralPath $OdbcInstKey) {
+ Remove-Item -LiteralPath $OdbcInstKey -Recurse -Force
+ Write-Host "Removed registry key: $OdbcInstKey"
+ $removedSomething = $true
+ } else {
+ Write-Warning "Driver key not found (already removed?): $OdbcInstKey"
+ }
+
+ # Remove the entry from the ODBC Drivers list
+ $drvProperty = Get-ItemProperty -LiteralPath $OdbcDrvKey -Name $DriverName
-ErrorAction SilentlyContinue
+ if ($null -ne $drvProperty) {
+ Remove-ItemProperty -LiteralPath $OdbcDrvKey -Name $DriverName -Force
+ Write-Host "Removed '$DriverName' from ODBC Drivers list."
+ $removedSomething = $true
+ } else {
+ Write-Warning "Driver entry not found in ODBC Drivers list (already
removed?): $DriverName"
+ }
+
+ if ($removedSomething) {
+ Write-Host "Driver '$DriverName' removed successfully."
+ } else {
+ Write-Host "Nothing to remove - driver '$DriverName' was not
registered."
+ }
+}
diff --git a/modules/platforms/cpp/tests/client-test/main.cpp
b/modules/platforms/cpp/tests/client-test/main.cpp
index 9139c2e6119..2b1e3749e8e 100644
--- a/modules/platforms/cpp/tests/client-test/main.cpp
+++ b/modules/platforms/cpp/tests/client-test/main.cpp
@@ -71,24 +71,28 @@ int main(int argc, char **argv) {
ignite_runner runner;
set_process_abort_handler([&](int signal) {
- std::cout << "Caught signal " << signal << " during tests" <<
std::endl;
+ std::cerr << "Caught signal " << signal << " during tests" <<
std::endl;
runner.stop();
});
if (!check_test_node_connectable(std::chrono::seconds(5))) {
runner.start();
- ensure_node_connectable(std::chrono::seconds(60));
+ auto timeout = std::chrono::minutes(5);
+ if (!check_test_node_connectable(timeout)) {
+ std::cerr << "Failed to start node within timeout: " <<
timeout.count() << "min" << std::endl;
+ return 3;
+ }
}
try {
::testing::InitGoogleTest(&argc, argv);
[[maybe_unused]] int run_res = RUN_ALL_TESTS();
} catch (const std::exception &err) {
- std::cout << "Uncaught error: " << err.what() << std::endl;
+ std::cerr << "Uncaught error: " << err.what() << std::endl;
return 1;
} catch (...) {
- std::cout << "Unknown uncaught error" << std::endl;
+ std::cerr << "Unknown uncaught error" << std::endl;
return 2;
}
diff --git a/modules/platforms/cpp/tests/odbc-test/main.cpp
b/modules/platforms/cpp/tests/odbc-test/main.cpp
index 9139c2e6119..d022a8932e1 100644
--- a/modules/platforms/cpp/tests/odbc-test/main.cpp
+++ b/modules/platforms/cpp/tests/odbc-test/main.cpp
@@ -78,7 +78,11 @@ int main(int argc, char **argv) {
if (!check_test_node_connectable(std::chrono::seconds(5))) {
runner.start();
- ensure_node_connectable(std::chrono::seconds(60));
+ auto timeout = std::chrono::minutes(5);
+ if (!check_test_node_connectable(timeout)) {
+ std::cerr << "Failed to start node within timeout: " <<
timeout.count() << "min" << std::endl;
+ return 3;
+ }
}
try {
diff --git a/modules/platforms/cpp/tests/odbc-test/transaction_test.cpp
b/modules/platforms/cpp/tests/odbc-test/transaction_test.cpp
index 1c1c1558785..d5aa3649939 100644
--- a/modules/platforms/cpp/tests/odbc-test/transaction_test.cpp
+++ b/modules/platforms/cpp/tests/odbc-test/transaction_test.cpp
@@ -657,5 +657,7 @@ TEST_F(transaction_test,
heartbeat_disable_connection_is_closed) {
ret = SQLEndTran(SQL_HANDLE_ENV, m_env, SQL_ROLLBACK);
- EXPECT_EQ(ret, SQL_ERROR);
+ std::cout << "Error message: " << get_odbc_error_message(SQL_HANDLE_ENV,
m_env) << std::endl;
+
+ EXPECT_TRUE(ret == SQL_ERROR || ret == SQL_SUCCESS_WITH_INFO);
}