64 lines
3.2 KiB
Bash
64 lines
3.2 KiB
Bash
#!/usr/bin/env bash
|
|
# Diagnostic only. The published xUnit apphost and observer are self-contained .NET 10.0.14.
|
|
set -euo pipefail
|
|
mkdir -p /task/tmp /task/data /task/results /task/control
|
|
export TMPDIR=/task/tmp XDG_DATA_HOME=/task/data
|
|
export OTOPCUA_SDK2_SOAK=1 OTOPCUA_SDK2_SOAK_MODE=saturation OTOPCUA_SDK2_SOAK_SECONDS=1800
|
|
export OTOPCUA_SDK2_SOAK_OUTPUT=/task/resources.jsonl
|
|
export OTOPCUA_SDK2_SATURATION_CONTROL=/task/control
|
|
export OPCUA_CERTIFICATE_LEAK_TRACKING=1
|
|
export DOTNET_CLI_TELEMETRY_OPTOUT=1 DOTNET_NOLOGO=1
|
|
[[ $(uname -s) == Linux && $(uname -m) == aarch64 && -d /proc/self/fd ]]
|
|
dotnet --info > /task/controller-runtime.txt
|
|
vstest_pid= observer_pid=
|
|
cleanup() {
|
|
for child in "$vstest_pid" "$observer_pid"; do
|
|
if [[ -n "$child" ]] && kill -0 "$child" 2>/dev/null; then kill "$child" 2>/dev/null || true; fi
|
|
done
|
|
}
|
|
trap cleanup EXIT
|
|
dotnet vstest /app/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests.dll \
|
|
--TestCaseFilter:'FullyQualifiedName~Sdk2LifecycleSoakTests.Descriptor_probe_' \
|
|
--ResultsDirectory:/task/results '--Logger:trx;LogFileName=descriptor-controls.trx' > /task/descriptor-controls.log 2>&1
|
|
/observer/observer /task/control "$OTOPCUA_SDK2_SATURATION_RUN_ID" > /task/observer.log 2>&1 &
|
|
observer_pid=$!
|
|
dotnet vstest /app/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests.dll \
|
|
--TestCaseFilter:'FullyQualifiedName=ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests.Sdk2LifecycleSoakTests.Repeated_lifecycles_return_resources_to_a_steady_baseline' \
|
|
--ResultsDirectory:/task/results '--Logger:trx;LogFileName=saturation.trx' > /task/test.log 2>&1 &
|
|
vstest_pid=$!
|
|
observed=0
|
|
for attempt in $(seq 1 1200); do
|
|
if [[ -s /task/resources.jsonl ]]; then
|
|
target_pid=$(head -n 1 /task/resources.jsonl | sed -n 's/.*"processId":\([0-9]*\),.*/\1/p')
|
|
[[ -n "$target_pid" ]]
|
|
target_exe=$(readlink "/proc/$target_pid/exe")
|
|
[[ "$target_exe" == /app/ZB.MOM.WW.OtOpcUa.OpcUaServer.IntegrationTests ]]
|
|
printf 'targetPid=%s\nactualExecutable=%s\n' "$target_pid" "$target_exe" > /task/target-runtime.txt
|
|
awk '$6 ~ /\/(libcoreclr.so|libhostfxr.so|libhostpolicy.so|System.Private.CoreLib.dll)$/ {print $6}' "/proc/$target_pid/maps" | sort -u >> /task/target-runtime.txt
|
|
grep -Fx /app/libcoreclr.so /task/target-runtime.txt > /dev/null
|
|
[[ $(readlink "/proc/$observer_pid/exe") == /observer/observer ]]
|
|
awk '$6 ~ /\/libcoreclr.so$/ {print $6}' "/proc/$observer_pid/maps" | sort -u > /task/observer-runtime.txt
|
|
grep -Fx /observer/libcoreclr.so /task/observer-runtime.txt > /dev/null
|
|
observed=1
|
|
break
|
|
fi
|
|
kill -0 "$vstest_pid" 2>/dev/null || break
|
|
sleep 0.1
|
|
done
|
|
[[ "$observed" == 1 ]]
|
|
set +e
|
|
wait "$vstest_pid"
|
|
test_status=$?
|
|
printf '%s\n' "$test_status" > /task/test-exit-status.txt
|
|
for attempt in $(seq 1 400); do
|
|
kill -0 "$observer_pid" 2>/dev/null || break
|
|
sleep 0.1
|
|
done
|
|
if kill -0 "$observer_pid" 2>/dev/null; then kill "$observer_pid"; fi
|
|
wait "$observer_pid"
|
|
observer_status=$?
|
|
printf '%s\n' "$observer_status" > /task/observer-exit-status.txt
|
|
# Preserve a cold-cap failure even when diagnostic readiness succeeds.
|
|
if [[ "$test_status" != 0 ]]; then exit "$test_status"; fi
|
|
exit "$observer_status"
|