diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 5e42957f0d..49fb9e6b35 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -211,6 +211,10 @@ stages: image: "$CI_REGISTRY_IMAGE:debian-trixie-amd64cross32" <<: *linux_amd64 +.debian-trixie-386: &debian_trixie_386_image + image: "$CI_REGISTRY_IMAGE:debian-trixie-386" + <<: *linux_amd64 + .debian-sid-amd64: &debian_sid_amd64_image image: "$CI_REGISTRY_IMAGE:debian-sid-amd64" <<: *linux_amd64 @@ -1308,6 +1312,33 @@ gcc:trixie:amd64cross32: <<: *debian_trixie_amd64cross32_image <<: *build_job +# Jobs for regular GCC builds on Debian 13 "trixie" (386) + +gcc:trixie:386: + variables: + CC: gcc + CFLAGS: "${CFLAGS_COMMON}" + EXTRA_CONFIGURE: "--with-libidn2" + <<: *debian_trixie_386_image + <<: *build_job + +system:gcc:trixie:386: + <<: *debian_trixie_386_image + <<: *system_test_job + <<: *extra_system_tests_triggering_rules + needs: + - job: gcc:trixie:386 + artifacts: true + +unit:gcc:trixie:386: + <<: *debian_trixie_386_image + <<: *unit_test_job + <<: *api_pipelines_schedules_tags_triggers_web_triggering_rules + needs: + - job: gcc:trixie:386 + artifacts: true + + # Jobs for regular GCC builds on Debian "sid" (amd64) # Also tests configration option: --without-lmdb. diff --git a/bin/tests/system/isctest/asyncserver.py b/bin/tests/system/isctest/asyncserver.py index 080c08c380..5942129474 100644 --- a/bin/tests/system/isctest/asyncserver.py +++ b/bin/tests/system/isctest/asyncserver.py @@ -1321,8 +1321,12 @@ class AsyncDnsServer(AsyncServer): qctx.socket, qctx.protocol.name, ) + try: + response_text = str(response) + except OverflowError: + response_text = "" logging.debug( - "\n".join([f"[OUT] {l}" for l in [""] + str(response).splitlines()]) + "\n".join([f"[OUT] {l}" for l in [""] + response_text.splitlines()]) ) return diff --git a/bin/tests/system/isctest/query.py b/bin/tests/system/isctest/query.py index 4f4e0a7c45..14a8027be6 100644 --- a/bin/tests/system/isctest/query.py +++ b/bin/tests/system/isctest/query.py @@ -38,6 +38,17 @@ def generic_query( log_response: bool = True, ) -> Any: + def _safe_to_text(msg: dns.message.Message) -> str: + """ + Convert a DNS message to text, tolerating dnspython's failure to render + RRSIG inception/expiration timestamps that overflow the platform's + time_t (e.g. post-2038 values on 32-bit systems). + """ + try: + return msg.to_text() + except OverflowError: + return "" + def log_querymsg(exception: Exception | None = None) -> None: """ Helper for logging query message. Call this *after* query_func() has @@ -48,7 +59,7 @@ def generic_query( nonlocal log_query if log_query: isctest.log.debug( - f"isc.query.{query_func.__name__}(): query\n{message.to_text()}" + f"isc.query.{query_func.__name__}(): query\n{_safe_to_text(message)}" ) log_query = False # only log query once @@ -79,7 +90,7 @@ def generic_query( if res: if log_response: isctest.log.debug( - f"isc.query.{query_func.__name__}(): response\n{res.to_text()}" + f"isc.query.{query_func.__name__}(): response\n{_safe_to_text(res)}" ) if res.rcode() == expected_rcode or expected_rcode is None: return res