diff --git a/scripts/conformance/server-parity/codec-deadline-cells.sh b/scripts/conformance/server-parity/codec-deadline-cells.sh index 1665456d8..6ad5614be 100644 --- a/scripts/conformance/server-parity/codec-deadline-cells.sh +++ b/scripts/conformance/server-parity/codec-deadline-cells.sh @@ -19,7 +19,8 @@ actors_stopped() { local name state for name in "$@"; do if ! state=$(docker inspect --format '{{.State.Running}}' "$name" 2>&1); then - if [[ "$state" == *"No such object"* || "$state" == *"No such container"* ]]; then + # The Docker CLI on the Ubuntu 26 runner image prints these in lower case. + if [[ "${state,,}" == *"no such object"* || "${state,,}" == *"no such container"* ]]; then continue fi echo "::error::Could not confirm that $name stopped: $state" >&2 diff --git a/tests/Unit/ServerParityCodecDeadlineCellsTest.mjs b/tests/Unit/ServerParityCodecDeadlineCellsTest.mjs index 7d49b36b0..07e7e78e3 100644 --- a/tests/Unit/ServerParityCodecDeadlineCellsTest.mjs +++ b/tests/Unit/ServerParityCodecDeadlineCellsTest.mjs @@ -38,7 +38,9 @@ case "$command" in rm -f "$LIVE/$name" ;; inspect) if [[ -n "\${INSPECT_FAILS:-}" ]]; then echo "Cannot connect to the Docker daemon" >&2; exit 1; fi - if [[ -e "$LIVE/$name" ]]; then echo true; else echo "Error: No such object: $name" >&2; exit 1; fi ;; + if [[ -e "$LIVE/$name" ]]; then echo true; exit 0; fi + if [[ -n "\${LOWERCASE_ABSENT:-}" ]]; then echo "error: no such object: $name" >&2; else echo "Error: No such object: $name" >&2; fi + exit 1 ;; *) exit 2 ;; esac `); @@ -84,6 +86,15 @@ test('every cell runs once, in its own scope, after the previous one stopped, an assert.deepEqual(states, []); }); +// Run 41338240707 on #925: the Ubuntu 26 runner image's Docker CLI reports a +// removed container in lower case, which the absence check did not accept. +test("a removed container reported in lower case counts as stopped", () => { + const {child, statuses, events} = runCells({LOWERCASE_ABSENT: '1'}); + assert.equal(child.status, 0, child.stderr); + assert.deepEqual(events, DATABASES.map(started)); + assert.deepEqual(new Set(Object.values(statuses)), new Set(['0'])); +}); + // Run 40110569900 on #748: the MySQL-family cells exited 2 because their // unique scopes (cpu-mysql-8.0, ...) held a dot the cell refuses. test('every cell gets a unique scope the cell accepts', () => {