Running phase: unpackPhase unpacking source archive /nix/store/wwsjd21m5lmxqyw2p3krh1zw5a1dsjnh-source source root is source Running phase: patchPhase Running phase: updateAutotoolsGnuConfigScriptsPhase Running phase: configurePhase no configure script, doing nothing Running phase: buildPhase Picked up JAVA_TOOL_OPTIONS: -Duser.home=/nix/store/rh84p9pd70gz5b0q43ycvjnwpi2ra74n-clojure-home -Djava.io.tmpdir=/build Picked up JAVA_TOOL_OPTIONS: -Duser.home=/nix/store/rh84p9pd70gz5b0q43ycvjnwpi2ra74n-clojure-home -Djava.io.tmpdir=/build Picked up JAVA_TOOL_OPTIONS: -Duser.home=/nix/store/rh84p9pd70gz5b0q43ycvjnwpi2ra74n-clojure-home -Djava.io.tmpdir=/build Picked up JAVA_TOOL_OPTIONS: -Duser.home=/nix/store/rh84p9pd70gz5b0q43ycvjnwpi2ra74n-clojure-home -Djava.io.tmpdir=/build Skipping coordinate: {:git/url https://github.com/Ramblurr/coffi.git, :git/branch feat/update-tools-build, :git/sha 9b05e268b915b1992bfd4175cb7c8c7c45d8973a, :deps/manifest :deps, :deps/root /nix/store/fnm0xh19n7179lak59x1f1r2l0fprmrf-org.suskalo-coffi-9b05e268b915b1992bfd4175cb7c8c7c45d8973a-prepped, :parents #{[]}, :paths [/nix/store/fnm0xh19n7179lak59x1f1r2l0fprmrf-org.suskalo-coffi-9b05e268b915b1992bfd4175cb7c8c7c45d8973a-prepped/src/clj /nix/store/fnm0xh19n7179lak59x1f1r2l0fprmrf-org.suskalo-coffi-9b05e268b915b1992bfd4175cb7c8c7c45d8973a-prepped/target/classes /nix/store/fnm0xh19n7179lak59x1f1r2l0fprmrf-org.suskalo-coffi-9b05e268b915b1992bfd4175cb7c8c7c45d8973a-prepped/resources]} Skipping coordinate: {:git/sha 04f7bf854bcbe379df14e3f9d7221af9d0c030d6, :git/url https://github.com/outskirtslabs/clave.git, :deps/manifest :deps, :deps/root /nix/store/k51zqgrqnh5a0bxd2glkbdn8bkd9c870-clave-04f7bf8, :parents #{[]}, :paths [/nix/store/k51zqgrqnh5a0bxd2glkbdn8bkd9c870-clave-04f7bf8/src]} Running phase: checkPhase All source files formatted correctly linting took 584ms, errors: 0, warnings: 0 Picked up JAVA_TOOL_OPTIONS: -Duser.home=/nix/store/rh84p9pd70gz5b0q43ycvjnwpi2ra74n-clojure-home -Djava.io.tmpdir=/build Picked up JAVA_TOOL_OPTIONS: -Duser.home=/nix/store/rh84p9pd70gz5b0q43ycvjnwpi2ra74n-clojure-home -Djava.io.tmpdir=/build --- h2o (clojure.test) --------------------------- ol.busker.config-test load-new-config-shape-test loads top-level tls, map entrypoints, and dispatch defaults exposes config defaults used by the loader entrypoint-http3-defaults-test defaults HTTP/3 from effective entrypoint TLS session-ticket-config-contract-test accepts the minimal active session ticket config rejects storage persistence without top-level tls storage rejects unknown session ticket knobs malformed session ticket values stay on the normal spec validation path bind-address-valid-test accepts supported bind address forms config->listeners-test flattens entrypoint map into listeners with entrypoint ids bind-address-invalid-test rejects unsupported bind address forms validate-entrypoint-selection-test rejects dispatch references to unknown entrypoints rejects HTTP/3 on explicit cleartext entrypoints rejects conflicting bind usage across entrypoints validate-top-level-tls-test rejects tls listeners when no global certificates are available rejects pem load entries with missing files parse-bind-test parses tcp binds parses unix binds rejects invalid bind values ol.busker.byte-bounded-queue-test close-test Close prevents new puts Close allows draining existing items Close is idempotent put-and-drain-test Put and drain single item Put and drain multiple items Drain respects max-bytes limit Drain returns empty vector when queue is empty byte-bounded-spsc-queue-creation-test Creates queue with valid capacity Rejects invalid capacity backpressure-test Put blocks when capacity exceeded Rejects item larger than capacity zero-byte-items-test Zero-byte items don't consume capacity accounting-accuracy-test Accounting remains accurate across operations ol.busker.util-test parse-authority-test parses valid RFC 9110 host forms treats malformed authorities as opaque values with the default port ol.busker.reload-test reload-publishes-candidate-before-old-generation-begins-drain-test http3-reload-activates-new-generation-and-drains-old-connections-test reload-failure-keeps-current-generation-active-test memory-session-tickets-not-reused-after-disabled-reload-test http3-reload-with-worker-topology-increase-reuses-transport-and-routes-to-active-generation-test http3-reload-with-worker-topology-change-reuses-transport-and-routes-to-active-generation-test repeated-reloads-retain-multiple-draining-generations-test memory-session-ticket-policy-change-replaces-service-but-preserves-keys-test reload-reports-listener-acquisition-failure-stage-test memory-service-is-not-reused-after-mode-change-during-overlap-test begin-drain-waits-for-stop-accepting-before-background-stop-test memory-session-ticket-service-is-shared-during-reload-overlap-test reload-reports-tls-startup-failure-stage-test memory-session-tickets-survive-reload-test stop-waits-for-active-and-draining-generations-test reload-activates-new-generation-and-drains-old-test reload-calls-serialize-through-lifecycle-gate-test failed-reload-does-not-leak-shared-ticket-native-manager-test reload-activates-while-managed-certificates-converge-test ol.busker.examples-test first-server-doc-source-test FAIL examples-layout-test quickstart early-hints sse first-server FAIL sse-example-test events stream brotli stream protocol headers first-server-example-test plain HTTP hello built-in gzip compression quickstart-example-test HTTP/1.1 keep-alive promptly serves the next request hello, echo, and large response protocol headers early-hints-example-test html and css early hints over http2 protocol headers ol.busker.clave-adapter-test start-managed-test starts clave, manages names, and returns before initial cert readiness post-activation certificate-failed events are consumed in the background wrap-handler-test returns original handler when runtime is nil composes acme middleware for challenge routes stop-managed-test delegates stop to clave automation returns nil when runtime is nil build-managed-plan-test returns nil when no managed subject names exist extracts managed subject names and clave config from top-level tls lookup-certificate-test returns nil when runtime is missing delegates to clave lookup ol.busker.http3-test http3-request-with-streaming-body-test HTTP/3 streaming response works correctly create-ptls-context-test ptls context creation succeeds with valid cert/key tcp-tls-session-resumption-test TCP TLS 1.2 session resumption via tickets http3-no-sni-default-domain-miss-no-crash-test HTTP/3 no-SNI miss fails closed without crashing the server process server-no-udp-when-http3-disabled-test Server with :http3? false does not create UDP socket http3-request-response-test HTTP/3 request receives correct response http3-and-http2-share-limit-test HTTP/3 and HTTP/2 connections share the global limit http3-global-limit-across-workers-test Connection limit is global across workers, not per-worker non-tls-listener-no-http3-test Non-TLS listeners should not have HTTP/3 http3-zero-rtt-test HTTP/3 0-RTT early data detection http3-graceful-shutdown-test Server gracefully shuts down HTTP/3 connections tcp-tls13-session-resumption-test TCP TLS 1.3 session resumption via tickets pooled-http3-udp-bind-supports-ipv6-host-test A pooled HTTP/3 UDP bind can reserve an IPv6 host pooled-http3-udp-bind-retains-port-until-release-test A pooled HTTP/3 UDP bind keeps the port unavailable until release http3-connection-limit-test HTTP/3 connections respect global max-connections limit create-ptls-context-invalid-cert-test[SHIM DEBUG] failed to load certificates from nonexistent.crt ptls context creation returns nil with invalid cert http3-can-be-disabled-test TLS listeners can opt-out of HTTP/3 with :http3? false http3-early-data-key-present-test HTTP/3 requests include :ol.busker/early-data? key create-quicly-context-test quicly context creation succeeds with valid ptls context server-creates-udp-listener-test Server with TLS listener creates UDP socket on same port http3-no-sni-managed-fallback-success-test HTTP/3 handshake without SNI succeeds when a managed fallback subject exists http3-enabled-by-default-test TLS listeners should have HTTP/3 enabled by default ipv6-http2-and-http3-request-response-test A TLS IPv6 entrypoint serves both HTTP/2 and HTTP/3 traffic ol.busker.runtime-test runtime-starts-and-serves-one-generation-test state reports the running generation requests are served through the runtime handle stop! waits for the in-flight request to finish candidate-plan-skips-unchanged-snapshots-unless-forced-test cert-automation-reuse-and-replacement-test runtime-start-fails-when-automation-startup-fails-test candidate-plan-computes-listener-and-automation-deltas-test ol.busker.generation-test generation-starts-and-stops-without-runtime-bridge-test ol.busker.specs-test managed-plan-spec-test managed plan conforms when using managed subject names managed plan rejects empty subject names every-spec-has-descriptor-map-test each Busker spec key has a descriptor map var with :key/:doc/:default ol.busker.dispatch-test dispatch-handler-test routes by entrypoint and resolves qualified symbols honors mutually exclusive groups and terminal dispatchers wraps middleware around dispatcher handlers ol.busker.server-test ring-cookie-and-session-middleware-response-headers-test test-request-info Request info is correctly populated tcp-and-tls-share-limit-test TCP and TLS connections share the global limit tcp-connection-limit-test TCP connections respect global max-connections limit test-async async response 103 early hints sse test-query-strings Query strings are parsed correctly persistent-session-ticket-keys-survive-restart-test top-level tls storage persists session ticket keys across restart test-host-header-without-request-body domain Host headers do not make empty requests enter body streaming tls-lookup-no-sni-uses-first-managed-subject-test lookup function routes missing SNI to the first managed subject name tls-lookup-falls-back-to-clave-test lookup function uses clave bundle when no static cert material exists disabled-session-tickets-skip-native-ticket-manager-test disabled session tickets do not create ticket manager state persistent-session-ticket-resumption-works-across-peer-processes-test a saved TLS session resumes against a peer Busker process sharing the same storage root tls-lookup-prefers-static-certificate-test lookup function returns static cert/key material before clave lookup repeated-ring-headers-over-http1-and-http2-test h1 h2 corrupt-persistent-session-ticket-file-fails-startup-test storage-backed startup fails against a corrupt persisted session ticket file test-content-length content-length with get and head tcp-tls-no-sni-falls-back-to-managed-subject-test TCP TLS handshake without SNI succeeds using the first managed subject name test-tls-listener TLS listener with HTTPS connections plaintext HTTP endpoint works HTTPS endpoint works HTTPS with HTTP/2 ALPN negotiation tls-storage-alone-does-not-enable-ticket-persistence-test top-level tls storage without persistence selector remains memory only tcp-tls-no-sni-miss-without-fallback-test TCP TLS handshake without SNI fails when no fallback material exists test-ring-body-types All Ring StreamableResponseBody types work correctly String body Byte array body Sequence body File body InputStream body Nil body No body (204) persistent-session-ticket-resumption-survives-restart-test a saved TLS session resumes after restart when storage-backed tickets are enabled test-ipv6-request-info IPv6 listeners accept requests and expose correct Ring metadata tls-lookup-no-sni-miss-without-fallback-test lookup function returns miss when SNI is missing and no fallback material exists managed-clave-lifecycle-test server starts/stops managed clave runtime with server lifecycle test-unix-socket-listener Unix socket listeners serve requests and clean up their socket path tls-lookup-callback-lifecycle-test server builds lookup callback at startup test-different-status-codes Different status codes are returned correctly tls-lookup-no-sni-uses-first-static-certificate-test lookup function uses the first static certificate when SNI is absent test-simple-request simple chunked large gzip ol.busker.large-payload-test request-body response-body ol.busker-test public-api-reload-test public-api-managed-reload-stays-healthy-after-delayed-certificate-failure-test public-api-start-stop-and-state-test The public API starts the server and exposes pure state data public-api-unchanged-and-failed-reload-test ol.busker.request-test write-request-channel-empty-final-chunk-test empty final chunks do not occupy the body queue write-request-channel-final-chunk-test a final chunk and EOF can be delivered before the handler reads ol.busker.tickets-test rotate-keys-preserves-distinct-full-ticket-names-test rotation keeps keys whose 16-byte names differ even if the first byte matches storage-ticket-store-persists-rotation-schedule-metadata-test storage-backed snapshots persist explicit rotation schedule metadata storage-ticket-store-startup-fails-on-corrupt-persisted-data-test storage-backed startup fails when persisted ticket data is corrupt rotate-keys-trims-retained-set-to-max-keys-test rotation keeps only the newest max-keys valid entries storage-ticket-store-reuses-persisted-keys-across-managers-test two managers using the same storage root converge on one stored key set storage-ticket-store-startup-reuses-existing-keys-test storage-backed startup reloads the stored snapshot instead of generating a new one storage-ticket-store-startup-honors-stored-next-rotation-ms-test storage-backed startup trusts persisted next-rotation timing instead of deriving it from key age storage-ticket-store-startup-persists-immediately-test storage-backed startup persists keys under the fixed storage key and lock storage-ticket-store-startup-fails-on-storage-read-error-test storage-backed startup fails when persisted ticket data cannot be read storage-ticket-store-startup-fails-when-storage-is-unavailable-test storage-backed startup treats storage lock failures as fatal rotate-keys-max-keys-one-activates-replacement-immediately-test rotation with max-keys 1 keeps an immediately valid encryption key memory-ticket-store-does-not-persist-across-managers-test memory-only stores lose keys across restart ol.busker.listen-test pooled-udp-claim-retains-port-until-final-release-test UDP claims keep the bound port unavailable until the final release pooled-unix-final-cleanup-skips-replacement-nonsocket-file-test Final unix cleanup leaves a replacement non-socket file alone pooled-claims-expose-live-resources-test Claims return the live pooled resource for reuse pooled-ipv6-tcp-claim-retains-port-until-final-release-test IPv6 TCP claims keep the bound port unavailable until the final release pooled-unix-claim-refuses-preexisting-nonsocket-path-test Unix socket claims refuse to overwrite a pre-existing non-socket path pooled-abstract-unix-claim-has-no-filesystem-side-effects-test Abstract unix socket claims never create filesystem paths pooled-unix-claim-replaces-stale-socket-file-test Unix socket claims replace a stale socket file before binding pooled-unix-claim-retains-path-until-final-release-test Unix socket claims keep the socket path alive until the final release listener-key-normalizes-bind-identity-test Listener keys normalize host defaults and keep transports distinct pooled-tcp-claim-retains-port-until-final-release-test TCP claims keep the bound port unavailable until the final release Randomized with --seed 1157667996 FAIL in ol.busker.examples-test/first-server-doc-source-test (examples_test.clj:135) Expected: {:deps "{:paths [\".\"]\n :deps {org.clojure/clojure {:mvn/version \"1.12.5\"}\n com.outskirtslabs/busker {:git/url \"https://github.com/outskirtslabs/busker\"\n :git/sha \"07fb6b7962a8d534bbb11006c78a4c5a99160d97\"}\n ;; Choose the package for your platform.\n com.outskirtslabs.busker/linux-x86-64 {:mvn/version \"0.0.4\"}}\n :aliases {:repl {:jvm-opts [\"--enable-native-access=ALL-UNNAMED\"]}}}", :main "(ns main\n (:require\n [ol.busker :as busker]))\n\n(defn handler\n [req]\n {:status 200\n :headers {\"content-type\" \"text/plain; charset=utf-8\"}\n :body (str \"Hello from Busker over \" (:protocol req) \".\\n\"\n \"Busker can compress this response automatically when the client asks for it.\\n\")})\n\n(def config\n {:entrypoints {:http {:bind \"127.0.0.1:8080\"\n :tls false}}\n :dispatch [{:handler handler}]})\n\n(def server (atom nil))\n\n(defn start!\n []\n (reset! server (busker/start! config))\n nil)\n\n(defn stop!\n []\n (busker/stop! @server)\n (reset! server nil))"} Actual: {:deps -"{:paths [\".\"]\n :deps {org.clojure/clojure {:mvn/version \"1.12.5\"}\n com.outskirtslabs/busker {:git/url \"https://github.com/outskirtslabs/busker\"\n :git/sha \"07fb6b7962a8d534bbb11006c78a4c5a99160d97\"}\n ;; Choose the package for your platform.\n com.outskirtslabs.busker/linux-x86-64 {:mvn/version \"0.0.4\"}}\n :aliases {:repl {:jvm-opts [\"--enable-native-access=ALL-UNNAMED\"]}}}" +"{:paths [\".\"]\n :deps {org.clojure/clojure {:mvn/version \"1.12.5\"}\n ;; Choose the package for your platform.\n com.outskirtslabs.busker/linux-x86-64 {:mvn/version \"0.0.4\"}\n\n com.outskirtslabs/busker {:git/url \"https://github.com/outskirtslabs/busker\"\n :git/sha \"07fb6b7962a8d534bbb11006c78a4c5a99160d97\"}}\n :aliases {:repl {:jvm-opts [\"--enable-native-access=ALL-UNNAMED\"]}}}", :main "(ns main\n (:require\n [ol.busker :as busker]))\n\n(defn handler\n [req]\n {:status 200\n :headers {\"content-type\" \"text/plain; charset=utf-8\"}\n :body (str \"Hello from Busker over \" (:protocol req) \".\\n\"\n \"Busker can compress this response automatically when the client asks for it.\\n\")})\n\n(def config\n {:entrypoints {:http {:bind \"127.0.0.1:8080\"\n :tls false}}\n :dispatch [{:handler handler}]})\n\n(def server (atom nil))\n\n(defn start!\n []\n (reset! server (busker/start! config))\n nil)\n\n(defn stop!\n []\n (busker/stop! @server)\n (reset! server nil))"} FAIL in ol.busker.examples-test/examples-layout-test (examples_test.clj:126) first-server Expected: ["-m" "main"] Actual: -["-m" "main"] +nil 138 tests, 843 assertions, 2 failures.