main bac21c6

Test success 1m 55s

Annotations 1

  • Complete job

    warning

    Node.js 20 is deprecated. The following actions target Node.js 20 but are being forced to run on Node.js 24: actions/setup-go@v5. For more information see: https://github.blog/changelog/2025-09-19-deprecation-of-node-20-on-github-actions-runners/

  1. === RUN TestTransferIdleTimeout_BackpressuredButReadingClientIsNotCut
  2. --- PASS: TestTransferIdleTimeout_BackpressuredButReadingClientIsNotCut (0.63s)
  3. === RUN TestTransferIdleTimeout_NonReadingClientUnblocksWrite
  4. --- PASS: TestTransferIdleTimeout_NonReadingClientUnblocksWrite (0.30s)
  5. === RUN TestTransferIdleTimeout_SilentHandlerContextCanceledAndConnectionClosed
  6. --- PASS: TestTransferIdleTimeout_SilentHandlerContextCanceledAndConnectionClosed (0.30s)
  7. === RUN TestTransferIdleTimeout_ProgressKeepsContextAlive
  8. --- PASS: TestTransferIdleTimeout_ProgressKeepsContextAlive (0.61s)
  9. === RUN TestTransferIdleTimeout_BodyUseAfterHandlerReturnedIsSafe
  10. --- PASS: TestTransferIdleTimeout_BodyUseAfterHandlerReturnedIsSafe (0.00s)
  11. === RUN TestTransferIdleTimeout_HTTP2ReverseProxyEarlyResponseDuringUpload
  12. --- PASS: TestTransferIdleTimeout_HTTP2ReverseProxyEarlyResponseDuringUpload (0.19s)
  13. === RUN TestTransferIdleTimeout_HTTP2BodyUsedAfterHandlerReturned
  14. --- PASS: TestTransferIdleTimeout_HTTP2BodyUsedAfterHandlerReturned (0.11s)
  15. === RUN TestTransferIdleTimeout_FinalFlushToNonReadingClientIsBounded
  16. --- PASS: TestTransferIdleTimeout_FinalFlushToNonReadingClientIsBounded (0.30s)
  17. === RUN TestTransferIdleTimeout_UnreadDeclaredBodyDrainIsBounded
  18. --- PASS: TestTransferIdleTimeout_UnreadDeclaredBodyDrainIsBounded (0.80s)
  19. === RUN TestTransferIdleTimeout_UnreadDeclaredBodyDrainIsBoundedOverTCP
  20. --- PASS: TestTransferIdleTimeout_UnreadDeclaredBodyDrainIsBoundedOverTCP (0.80s)
  21. === RUN TestTransferIdleTimeout_KeepAliveNextRequestNotAffectedByLeftoverDeadlines
  22. --- PASS: TestTransferIdleTimeout_KeepAliveNextRequestNotAffectedByLeftoverDeadlines (1.80s)
  23. === RUN TestTransferIdleTimeout_HijackBlockedOnNonReadingClientIsBounded
  24. --- PASS: TestTransferIdleTimeout_HijackBlockedOnNonReadingClientIsBounded (0.30s)
  25. PASS
  26. ok github.com/bnema/gordon/internal/adapters/in/http/middleware 12.634s
  27. === RUN TestHandler_CACert
  28. --- PASS: TestHandler_CACert (0.00s)
  29. === RUN TestHandler_Mobileconfig
  30. --- PASS: TestHandler_Mobileconfig (0.00s)
  31. === RUN TestHandler_OnboardingPage
  32. --- PASS: TestHandler_OnboardingPage (0.00s)
  33. === RUN TestHandler_OnboardingPage_DefaultHTTPSURLOmitsInternalTLSPort
  34. --- PASS: TestHandler_OnboardingPage_DefaultHTTPSURLOmitsInternalTLSPort (0.00s)
  35. === RUN TestHandler_OnboardingPage_ExplicitHTTPPortMapsToTLSPort
  36. --- PASS: TestHandler_OnboardingPage_ExplicitHTTPPortMapsToTLSPort (0.00s)
  37. === RUN TestHandler_OnboardingPage_ExplicitNonHTTPPortIsPreserved
  38. --- PASS: TestHandler_OnboardingPage_ExplicitNonHTTPPortIsPreserved (0.00s)
  39. === RUN TestHandler_OnboardingPage_IPHostHidesGoToSiteLink
  40. --- PASS: TestHandler_OnboardingPage_IPHostHidesGoToSiteLink (0.00s)
  41. === RUN TestHandler_OnboardingPage_IncludesFingerprintAndClientImportCopy
  42. --- PASS: TestHandler_OnboardingPage_IncludesFingerprintAndClientImportCopy (0.00s)
  43. === RUN TestHandler_OnboardingPage_GoToSiteLinkIsPlainLink
  44. --- PASS: TestHandler_OnboardingPage_GoToSiteLinkIsPlainLink (0.00s)
  45. === RUN TestHandler_OnboardingPage_HEAD
  46. --- PASS: TestHandler_OnboardingPage_HEAD (0.00s)
  47. === RUN TestHandler_CACert_HEAD
  48. --- PASS: TestHandler_CACert_HEAD (0.00s)
  49. === RUN TestHandler_Mobileconfig_HEAD
  50. --- PASS: TestHandler_Mobileconfig_HEAD (0.00s)
  51. PASS
  52. ok github.com/bnema/gordon/internal/adapters/in/http/onboarding 1.024s
  53. === RUN TestForwardToTarget_H2CEndToEnd
  54. --- PASS: TestForwardToTarget_H2CEndToEnd (0.00s)
  55. === RUN TestForwardToTarget_HTTP1StillWorks
  56. --- PASS: TestForwardToTarget_HTTP1StillWorks (0.00s)
  57. === RUN TestTransportForTarget_SelectsCorrectTransport
  58. --- PASS: TestTransportForTarget_SelectsCorrectTransport (0.00s)
  59. === RUN TestForwardToTarget_OriginalHostPreserved
  60. --- PASS: TestForwardToTarget_OriginalHostPreserved (0.00s)
  61. === RUN TestForwardToTarget_RouteHostPreservedForManagedTarget
  62. --- PASS: TestForwardToTarget_RouteHostPreservedForManagedTarget (0.00s)
  63. === RUN TestForwardToTarget_ContextCanceled_Returns499
  64. --- PASS: TestForwardToTarget_ContextCanceled_Returns499 (0.00s)
  65. === RUN TestForwardToTarget_BackendDown_Returns503
  66. --- PASS: TestForwardToTarget_BackendDown_Returns503 (0.00s)
  67. === RUN TestForwardToTarget_ProxyHeaderSet
  68. --- PASS: TestForwardToTarget_ProxyHeaderSet (0.00s)
  69. === RUN TestNewReverseProxy_XForwardedProto
  70. === RUN TestNewReverseProxy_XForwardedProto/trusted_proxy_with_https_preserved
  71. === RUN TestNewReverseProxy_XForwardedProto/untrusted_source_proto_overwritten
  72. === RUN TestNewReverseProxy_XForwardedProto/trusted_proxy_without_proto_set_normally
  73. === RUN TestNewReverseProxy_XForwardedProto/no_trusted_nets_proto_not_preserved
  74. === RUN TestNewReverseProxy_XForwardedProto/bare_IPv4_no_port_trusted_source_preserves_proto
  75. === RUN TestNewReverseProxy_XForwardedProto/bare_IPv6_with_brackets_trusted_source_preserves_proto
  76. === RUN TestNewReverseProxy_XForwardedProto/bare_IPv4_no_port_untrusted_source_strips_proto
  77. --- PASS: TestNewReverseProxy_XForwardedProto (0.01s)
  78. --- PASS: TestNewReverseProxy_XForwardedProto/trusted_proxy_with_https_preserved (0.00s)
  79. --- PASS: TestNewReverseProxy_XForwardedProto/untrusted_source_proto_overwritten (0.00s)
  80. --- PASS: TestNewReverseProxy_XForwardedProto/trusted_proxy_without_proto_set_normally (0.00s)
  81. --- PASS: TestNewReverseProxy_XForwardedProto/no_trusted_nets_proto_not_preserved (0.00s)
  82. --- PASS: TestNewReverseProxy_XForwardedProto/bare_IPv4_no_port_trusted_source_preserves_proto (0.00s)
  83. --- PASS: TestNewReverseProxy_XForwardedProto/bare_IPv6_with_brackets_trusted_source_preserves_proto (0.00s)
  84. --- PASS: TestNewReverseProxy_XForwardedProto/bare_IPv4_no_port_untrusted_source_strips_proto (0.00s)
  85. === RUN TestNewReverseProxy_ClientIPHeaders
  86. === RUN TestNewReverseProxy_ClientIPHeaders/untrusted_IPv4_peer_forged_headers_replaced
  87. === RUN TestNewReverseProxy_ClientIPHeaders/untrusted_IPv6_peer_forged_X-Real-IP_replaced
  88. === RUN TestNewReverseProxy_ClientIPHeaders/untrusted_IPv4-mapped_IPv6_peer_normalized_to_IPv4
  89. === RUN TestNewReverseProxy_ClientIPHeaders/no_trusted_nets_ignores_proxy_headers
  90. === RUN TestNewReverseProxy_ClientIPHeaders/trusted_Cloudflare_peer_uses_Cf-Connecting-Ip
  91. === RUN TestNewReverseProxy_ClientIPHeaders/trusted_Cloudflare_peer_with_IPv6_client
  92. === RUN TestNewReverseProxy_ClientIPHeaders/trusted_non-Cloudflare_proxy_uses_right-most_untrusted_XFF_hop
  93. === RUN TestNewReverseProxy_ClientIPHeaders/trusted_IPv6_proxy_with_IPv4-mapped_XFF_hop
  94. === RUN TestNewReverseProxy_ClientIPHeaders/trusted_proxy_X-Real-IP_honored_without_XFF
  95. === RUN TestNewReverseProxy_ClientIPHeaders/trusted_proxy_adding_a_new_XFF_line_uses_that_line
  96. === RUN TestNewReverseProxy_ClientIPHeaders/trusted_proxy_repeated_X-Real-IP_ignored
  97. === RUN TestNewReverseProxy_ClientIPHeaders/underscore_header_variants_removed
  98. === RUN TestNewReverseProxy_ClientIPHeaders/Cloudflare_peer_not_in_trusted_proxies_strips_Cf-Connecting-Ip
  99. === RUN TestNewReverseProxy_ClientIPHeaders/IPv4-mapped_trusted_Cloudflare_peer_uses_Cf-Connecting-Ip
  100. === RUN TestNewReverseProxy_ClientIPHeaders/trusted_Cloudflare_peer_with_invalid_Cf-Connecting-Ip_falls_back
  101. === RUN TestNewReverseProxy_ClientIPHeaders/unparsable_peer_sends_no_client_IP
  102. --- PASS: TestNewReverseProxy_ClientIPHeaders (0.01s)
  103. --- PASS: TestNewReverseProxy_ClientIPHeaders/untrusted_IPv4_peer_forged_headers_replaced (0.00s)
  104. --- PASS: TestNewReverseProxy_ClientIPHeaders/untrusted_IPv6_peer_forged_X-Real-IP_replaced (0.00s)
  105. --- PASS: TestNewReverseProxy_ClientIPHeaders/untrusted_IPv4-mapped_IPv6_peer_normalized_to_IPv4 (0.00s)
  106. --- PASS: TestNewReverseProxy_ClientIPHeaders/no_trusted_nets_ignores_proxy_headers (0.00s)
  107. --- PASS: TestNewReverseProxy_ClientIPHeaders/trusted_Cloudflare_peer_uses_Cf-Connecting-Ip (0.00s)
  108. --- PASS: TestNewReverseProxy_ClientIPHeaders/trusted_Cloudflare_peer_with_IPv6_client (0.00s)
  109. --- PASS: TestNewReverseProxy_ClientIPHeaders/trusted_non-Cloudflare_proxy_uses_right-most_untrusted_XFF_hop (0.00s)
  110. --- PASS: TestNewReverseProxy_ClientIPHeaders/trusted_IPv6_proxy_with_IPv4-mapped_XFF_hop (0.00s)
  111. --- PASS: TestNewReverseProxy_ClientIPHeaders/trusted_proxy_X-Real-IP_honored_without_XFF (0.00s)
  112. --- PASS: TestNewReverseProxy_ClientIPHeaders/trusted_proxy_adding_a_new_XFF_line_uses_that_line (0.00s)
  113. --- PASS: TestNewReverseProxy_ClientIPHeaders/trusted_proxy_repeated_X-Real-IP_ignored (0.00s)
  114. --- PASS: TestNewReverseProxy_ClientIPHeaders/underscore_header_variants_removed (0.00s)
  115. --- PASS: TestNewReverseProxy_ClientIPHeaders/Cloudflare_peer_not_in_trusted_proxies_strips_Cf-Connecting-Ip (0.00s)
  116. --- PASS: TestNewReverseProxy_ClientIPHeaders/IPv4-mapped_trusted_Cloudflare_peer_uses_Cf-Connecting-Ip (0.00s)
  117. --- PASS: TestNewReverseProxy_ClientIPHeaders/trusted_Cloudflare_peer_with_invalid_Cf-Connecting-Ip_falls_back (0.00s)
  118. --- PASS: TestNewReverseProxy_ClientIPHeaders/unparsable_peer_sends_no_client_IP (0.00s)
  119. === RUN TestHandler_ConcurrentConnectionLimit_503WhenFull
  120. --- PASS: TestHandler_ConcurrentConnectionLimit_503WhenFull (0.00s)
  121. === RUN TestHandler_RoutesToRegistry
  122. --- PASS: TestHandler_RoutesToRegistry (0.00s)
  123. === RUN TestHandler_DeniesRegistryForwardingWhenAuthDisabled
  124. --- PASS: TestHandler_DeniesRegistryForwardingWhenAuthDisabled (0.00s)
  125. === RUN TestHandler_NormalizesRequestHostForLookup
  126. === RUN TestHandler_NormalizesRequestHostForLookup/mixed_case
  127. === RUN TestHandler_NormalizesRequestHostForLookup/explicit_port
  128. === RUN TestHandler_NormalizesRequestHostForLookup/trailing_dot
  129. --- PASS: TestHandler_NormalizesRequestHostForLookup (0.00s)
  130. --- PASS: TestHandler_NormalizesRequestHostForLookup/mixed_case (0.00s)
  131. --- PASS: TestHandler_NormalizesRequestHostForLookup/explicit_port (0.00s)
  132. --- PASS: TestHandler_NormalizesRequestHostForLookup/trailing_dot (0.00s)
  133. === RUN TestHandler_RejectsInvalidRequestHost
  134. --- PASS: TestHandler_RejectsInvalidRequestHost (0.00s)
  135. === RUN TestHandler_Returns404WhenNoTarget
  136. --- PASS: TestHandler_Returns404WhenNoTarget (0.00s)
  137. === RUN TestHandler_ProxiesToTarget
  138. --- PASS: TestHandler_ProxiesToTarget (0.00s)
  139. === RUN TestHandler_ReadsMaxBodySizeConfig
  140. --- PASS: TestHandler_ReadsMaxBodySizeConfig (0.00s)
  141. === RUN TestHandler_UpdatedConfigReflected
  142. --- PASS: TestHandler_UpdatedConfigReflected (0.00s)
  143. === RUN TestHandler_NoConcurrencyLimitWhenZero
  144. --- PASS: TestHandler_NoConcurrencyLimitWhenZero (0.00s)
  145. PASS
  146. ok github.com/bnema/gordon/internal/adapters/in/http/proxy 1.055s
  147. === RUN TestHandler_Base
  148. --- PASS: TestHandler_Base (0.00s)
  149. === RUN TestHandler_NotFound
  150. --- PASS: TestHandler_NotFound (0.00s)
  151. === RUN TestHandler_GetManifest_Success
  152. --- PASS: TestHandler_GetManifest_Success (0.00s)
  153. === RUN TestHandler_GetManifest_HEAD
  154. --- PASS: TestHandler_GetManifest_HEAD (0.00s)
  155. === RUN TestHandler_GetManifest_NotFound
  156. --- PASS: TestHandler_GetManifest_NotFound (0.00s)
  157. === RUN TestHandler_GetManifest_NestedName
  158. --- PASS: TestHandler_GetManifest_NestedName (0.00s)
  159. === RUN TestHandler_ReservedLookingRepositoryIsServedExactly
  160. --- PASS: TestHandler_ReservedLookingRepositoryIsServedExactly (0.00s)
  161. === RUN TestHandler_PutManifest_Success
  162. --- PASS: TestHandler_PutManifest_Success (0.00s)
  163. === RUN TestHandler_PutManifest_MissingContentType
  164. --- PASS: TestHandler_PutManifest_MissingContentType (0.00s)
  165. === RUN TestHandler_PutManifest_StorageError
  166. --- PASS: TestHandler_PutManifest_StorageError (0.00s)
  167. === RUN TestHandler_ManifestRoutes_MethodNotAllowed
  168. --- PASS: TestHandler_ManifestRoutes_MethodNotAllowed (0.00s)
  169. === RUN TestHandler_GetBlob_Success
  170. --- PASS: TestHandler_GetBlob_Success (0.02s)
  171. === RUN TestHandler_GetBlob_NotFound
  172. --- PASS: TestHandler_GetBlob_NotFound (0.00s)
  173. === RUN TestHandler_BlobRoutes_MethodNotAllowed
  174. --- PASS: TestHandler_BlobRoutes_MethodNotAllowed (0.00s)
  175. === RUN TestHandler_StartBlobUpload_Success
  176. --- PASS: TestHandler_StartBlobUpload_Success (0.00s)
  177. === RUN TestHandler_StartBlobUpload_Error
  178. --- PASS: TestHandler_StartBlobUpload_Error (0.00s)
  179. === RUN TestHandler_BlobUpload_PATCH
  180. --- PASS: TestHandler_BlobUpload_PATCH (0.00s)
  181. === RUN TestHandler_BlobUpload_PUT_Finalize
  182. --- PASS: TestHandler_BlobUpload_PUT_Finalize (0.00s)
  183. === RUN TestHandler_BlobUpload_PUT_DigestMismatch
  184. --- PASS: TestHandler_BlobUpload_PUT_DigestMismatch (0.00s)
  185. === RUN TestHandler_ListTags_Success
  186. --- PASS: TestHandler_ListTags_Success (0.00s)
  187. === RUN TestHandler_ListTags_NotFound
  188. --- PASS: TestHandler_ListTags_NotFound (0.00s)
  189. === RUN TestHandler_ListTags_MethodNotAllowed
  190. --- PASS: TestHandler_ListTags_MethodNotAllowed (0.00s)
  191. === RUN TestHandler_RegisterRoutes
  192. --- PASS: TestHandler_RegisterRoutes (0.00s)
  193. === RUN TestHandler_StartBlobUpload_ReturnsDockerUploadUUID
  194. --- PASS: TestHandler_StartBlobUpload_ReturnsDockerUploadUUID (0.00s)
  195. === RUN TestHandler_BlobUpload_PATCH_ReturnsDockerUploadUUID
  196. --- PASS: TestHandler_BlobUpload_PATCH_ReturnsDockerUploadUUID (0.00s)
  197. === RUN TestDefaultMaxBlobChunkSize_Is95MB
  198. --- PASS: TestDefaultMaxBlobChunkSize_Is95MB (0.00s)
  199. === RUN TestHandler_BlobUpload_PATCH_RespectsConfiguredMaxBlobChunkSize
  200. --- PASS: TestHandler_BlobUpload_PATCH_RespectsConfiguredMaxBlobChunkSize (0.00s)
  201. === RUN TestHandler_BlobUpload_PATCH_ReturnsRangeHeader
  202. --- PASS: TestHandler_BlobUpload_PATCH_ReturnsRangeHeader (0.00s)
  203. === RUN TestDefaultMaxBlobSize_Is1GB
  204. --- PASS: TestDefaultMaxBlobSize_Is1GB (0.00s)
  205. === RUN TestHandler_BlobUpload_PATCH_MaxBlobSizeExceededReturnsSizeInvalidAndCancels
  206. --- PASS: TestHandler_BlobUpload_PATCH_MaxBlobSizeExceededReturnsSizeInvalidAndCancels (0.00s)
  207. === RUN TestHandler_BlobUpload_PATCH_ContentLengthTooLargeReturnsSizeInvalidAndCancels
  208. --- PASS: TestHandler_BlobUpload_PATCH_ContentLengthTooLargeReturnsSizeInvalidAndCancels (0.00s)
  209. === RUN TestHandler_BlobUpload_PUT_FinalizeUnderMaxBlobSize
  210. --- PASS: TestHandler_BlobUpload_PUT_FinalizeUnderMaxBlobSize (0.00s)
  211. === RUN TestRateLimitMiddleware_Disabled
  212. --- PASS: TestRateLimitMiddleware_Disabled (0.00s)
  213. === RUN TestRateLimitMiddleware_GlobalLimitHit
  214. --- PASS: TestRateLimitMiddleware_GlobalLimitHit (0.00s)
  215. === RUN TestRateLimitMiddleware_PerIPLimitHit
  216. --- PASS: TestRateLimitMiddleware_PerIPLimitHit (0.00s)
  217. === RUN TestRateLimitMiddleware_BothLimitsPass
  218. --- PASS: TestRateLimitMiddleware_BothLimitsPass (0.00s)
  219. === RUN TestRateLimitMiddleware_TrustedProxy
  220. --- PASS: TestRateLimitMiddleware_TrustedProxy (0.00s)
  221. === RUN TestRateLimitMiddleware_UntrustedProxy
  222. --- PASS: TestRateLimitMiddleware_UntrustedProxy (0.00s)
  223. === RUN TestRateLimitMiddleware_ResponseFormat
  224. --- PASS: TestRateLimitMiddleware_ResponseFormat (0.00s)
  225. === RUN TestRateLimitMiddleware_Integration
  226. --- PASS: TestRateLimitMiddleware_Integration (0.00s)
  227. === RUN TestGetClientIP
  228. === RUN TestGetClientIP/from_RemoteAddr_with_port
  229. === RUN TestGetClientIP/from_RemoteAddr_without_port
  230. === RUN TestGetClientIP/XFF_ignored_when_no_trusted_proxies
  231. === RUN TestGetClientIP/XFF_ignored_when_remote_is_not_trusted
  232. === RUN TestGetClientIP/XFF_honored_from_trusted_proxy_(single_IP)
  233. === RUN TestGetClientIP/XFF_returns_first_untrusted_IP_from_right
  234. === RUN TestGetClientIP/XFF_honored_from_trusted_CIDR
  235. === RUN TestGetClientIP/X-Real-IP_honored_from_trusted_proxy
  236. === RUN TestGetClientIP/X-Real-IP_ignored_when_not_trusted
  237. === RUN TestGetClientIP/XFF_takes_precedence_over_X-Real-IP
  238. --- PASS: TestGetClientIP (0.00s)
  239. --- PASS: TestGetClientIP/from_RemoteAddr_with_port (0.00s)
  240. --- PASS: TestGetClientIP/from_RemoteAddr_without_port (0.00s)
  241. --- PASS: TestGetClientIP/XFF_ignored_when_no_trusted_proxies (0.00s)
  242. --- PASS: TestGetClientIP/XFF_ignored_when_remote_is_not_trusted (0.00s)
  243. --- PASS: TestGetClientIP/XFF_honored_from_trusted_proxy_(single_IP) (0.00s)
  244. --- PASS: TestGetClientIP/XFF_returns_first_untrusted_IP_from_right (0.00s)
  245. --- PASS: TestGetClientIP/XFF_honored_from_trusted_CIDR (0.00s)
  246. --- PASS: TestGetClientIP/X-Real-IP_honored_from_trusted_proxy (0.00s)
  247. --- PASS: TestGetClientIP/X-Real-IP_ignored_when_not_trusted (0.00s)
  248. --- PASS: TestGetClientIP/XFF_takes_precedence_over_X-Real-IP (0.00s)
  249. === RUN TestParseTrustedProxies
  250. === RUN TestParseTrustedProxies/empty_list
  251. === RUN TestParseTrustedProxies/single_IP_match
  252. === RUN TestParseTrustedProxies/single_IP_no_match
  253. === RUN TestParseTrustedProxies/CIDR_match
  254. === RUN TestParseTrustedProxies/CIDR_no_match
  255. === RUN TestParseTrustedProxies/mixed_IP_and_CIDR
  256. === RUN TestParseTrustedProxies/invalid_entries_ignored
  257. --- PASS: TestParseTrustedProxies (0.00s)
  258. --- PASS: TestParseTrustedProxies/empty_list (0.00s)
  259. --- PASS: TestParseTrustedProxies/single_IP_match (0.00s)
  260. --- PASS: TestParseTrustedProxies/single_IP_no_match (0.00s)
  261. --- PASS: TestParseTrustedProxies/CIDR_match (0.00s)
  262. --- PASS: TestParseTrustedProxies/CIDR_no_match (0.00s)
  263. --- PASS: TestParseTrustedProxies/mixed_IP_and_CIDR (0.00s)
  264. --- PASS: TestParseTrustedProxies/invalid_entries_ignored (0.00s)
  265. PASS
  266. ok github.com/bnema/gordon/internal/adapters/in/http/registry 1.051s
  267. === RUN TestParse_Routes
  268. === RUN TestParse_Routes//v2/
  269. === RUN TestParse_Routes//v2
  270. === RUN TestParse_Routes//v2/_catalog
  271. === RUN TestParse_Routes//v2/myrepo/manifests/latest
  272. === RUN TestParse_Routes//v2/myorg/myapp/manifests/v1.0
  273. === RUN TestParse_Routes//v2/myrepo/blobs/sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  274. === RUN TestParse_Routes//v2/myrepo/blobs/uploads/
  275. === RUN TestParse_Routes//v2/myrepo/blobs/uploads/12345678-1234-4123-8123-123456789012
  276. === RUN TestParse_Routes//v2/myrepo/tags/list
  277. --- PASS: TestParse_Routes (0.00s)
  278. --- PASS: TestParse_Routes//v2/ (0.00s)
  279. --- PASS: TestParse_Routes//v2 (0.00s)
  280. --- PASS: TestParse_Routes//v2/_catalog (0.00s)
  281. --- PASS: TestParse_Routes//v2/myrepo/manifests/latest (0.00s)
  282. --- PASS: TestParse_Routes//v2/myorg/myapp/manifests/v1.0 (0.00s)
  283. --- PASS: TestParse_Routes//v2/myrepo/blobs/sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (0.00s)
  284. --- PASS: TestParse_Routes//v2/myrepo/blobs/uploads/ (0.00s)
  285. --- PASS: TestParse_Routes//v2/myrepo/blobs/uploads/12345678-1234-4123-8123-123456789012 (0.00s)
  286. --- PASS: TestParse_Routes//v2/myrepo/tags/list (0.00s)
  287. === RUN TestParse_ResolvesRepositoryFromLastMarker
  288. === RUN TestParse_ResolvesRepositoryFromLastMarker//v2/manifests/victim/manifests/latest
  289. === RUN TestParse_ResolvesRepositoryFromLastMarker//v2/allowed/tags/victim/manifests/latest
  290. === RUN TestParse_ResolvesRepositoryFromLastMarker//v2/blobs/impostor/blobs/sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
  291. --- PASS: TestParse_ResolvesRepositoryFromLastMarker (0.00s)
  292. --- PASS: TestParse_ResolvesRepositoryFromLastMarker//v2/manifests/victim/manifests/latest (0.00s)
  293. --- PASS: TestParse_ResolvesRepositoryFromLastMarker//v2/allowed/tags/victim/manifests/latest (0.00s)
  294. --- PASS: TestParse_ResolvesRepositoryFromLastMarker//v2/blobs/impostor/blobs/sha256:aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa (0.00s)
  295. === RUN TestParse_Errors
  296. === RUN TestParse_Errors/not_found_/healthz
  297. === RUN TestParse_Errors/not_found_/v2/myrepo
  298. === RUN TestParse_Errors/not_found_/v2/myrepo/manifests/
  299. === RUN TestParse_Errors/not_found_/v2/myrepo/manifests/a/b
  300. === RUN TestParse_Errors/not_found_/v2/myrepo/blobs/
  301. === RUN TestParse_Errors/not_found_/v2/myrepo/tags/list/
  302. === RUN TestParse_Errors/not_found_/v2//manifests/latest
  303. === RUN TestParse_Errors/invalid_/v2/BadRepo/manifests/latest
  304. === RUN TestParse_Errors/invalid_/v2/myrepo/manifests/bad_tag
  305. === RUN TestParse_Errors/invalid_/v2/myrepo/blobs/notadigest
  306. === RUN TestParse_Errors/invalid_/v2/myrepo/blobs/uploads/not-a-uuid
  307. --- PASS: TestParse_Errors (0.00s)
  308. --- PASS: TestParse_Errors/not_found_/healthz (0.00s)
  309. --- PASS: TestParse_Errors/not_found_/v2/myrepo (0.00s)
  310. --- PASS: TestParse_Errors/not_found_/v2/myrepo/manifests/ (0.00s)
  311. --- PASS: TestParse_Errors/not_found_/v2/myrepo/manifests/a/b (0.00s)
  312. --- PASS: TestParse_Errors/not_found_/v2/myrepo/blobs/ (0.00s)
  313. --- PASS: TestParse_Errors/not_found_/v2/myrepo/tags/list/ (0.00s)
  314. --- PASS: TestParse_Errors/not_found_/v2//manifests/latest (0.00s)
  315. --- PASS: TestParse_Errors/invalid_/v2/BadRepo/manifests/latest (0.00s)
  316. --- PASS: TestParse_Errors/invalid_/v2/myrepo/manifests/bad_tag (0.00s)
  317. --- PASS: TestParse_Errors/invalid_/v2/myrepo/blobs/notadigest (0.00s)
  318. --- PASS: TestParse_Errors/invalid_/v2/myrepo/blobs/uploads/not-a-uuid (0.00s)
  319. === RUN TestRequiresRepositoryAuth_ProtocolRootsOnly
  320. --- PASS: TestRequiresRepositoryAuth_ProtocolRootsOnly (0.00s)
  321. PASS
  322. ok github.com/bnema/gordon/internal/adapters/in/http/registry/route 1.017s
  323. === RUN TestNewEntryPointHTTPServerUsesConfiguredTimeouts
  324. --- PASS: TestNewEntryPointHTTPServerUsesConfiguredTimeouts (0.00s)
  325. === RUN TestManagerHTTPOptionsDefaultsWithoutSnapshot
  326. --- PASS: TestManagerHTTPOptionsDefaultsWithoutSnapshot (0.00s)
  327. === RUN TestEntryPointServersReceiveConfiguredHTTPOptions
  328. --- PASS: TestEntryPointServersReceiveConfiguredHTTPOptions (0.00s)
  329. === RUN TestTLSMuxServerReceivesConfiguredHTTPOptions
  330. --- PASS: TestTLSMuxServerReceivesConfiguredHTTPOptions (0.00s)
  331. === RUN TestSmartTCPStreamingResponseOutlivesTransferIdleTimeout
  332. --- PASS: TestSmartTCPStreamingResponseOutlivesTransferIdleTimeout (0.91s)
  333. === RUN TestAppL4TCPUdpRoundTrip
  334. --- PASS: TestAppL4TCPUdpRoundTrip (0.05s)
  335. === RUN TestSniffSmartTCPClassifiesHTTP
  336. === RUN TestSniffSmartTCPClassifiesHTTP/get
  337. === RUN TestSniffSmartTCPClassifiesHTTP/propfind
  338. === RUN TestSniffSmartTCPClassifiesHTTP/mkcol
  339. === RUN TestSniffSmartTCPClassifiesHTTP/unknown_method
  340. === RUN TestSniffSmartTCPClassifiesHTTP/extension_method
  341. --- PASS: TestSniffSmartTCPClassifiesHTTP (0.00s)
  342. --- PASS: TestSniffSmartTCPClassifiesHTTP/get (0.00s)
  343. --- PASS: TestSniffSmartTCPClassifiesHTTP/propfind (0.00s)
  344. --- PASS: TestSniffSmartTCPClassifiesHTTP/mkcol (0.00s)
  345. --- PASS: TestSniffSmartTCPClassifiesHTTP/unknown_method (0.00s)
  346. --- PASS: TestSniffSmartTCPClassifiesHTTP/extension_method (0.00s)
  347. === RUN TestSniffSmartTCPClassifiesH2C
  348. --- PASS: TestSniffSmartTCPClassifiesH2C (0.00s)
  349. === RUN TestSniffSmartTCPClassifiesTLSAndAllowsClientHelloParsing
  350. --- PASS: TestSniffSmartTCPClassifiesTLSAndAllowsClientHelloParsing (0.00s)
  351. === RUN TestSniffSmartTCPRejectsMalformedTLSLookingZeroLengthRecord
  352. --- PASS: TestSniffSmartTCPRejectsMalformedTLSLookingZeroLengthRecord (0.00s)
  353. === RUN TestSniffSmartTCPClassifiesSSHBannerAsUnknown
  354. --- PASS: TestSniffSmartTCPClassifiesSSHBannerAsUnknown (0.00s)
  355. === RUN TestSniffSmartTCPRejectsMalformedHTTPLookingRequestLine
  356. --- PASS: TestSniffSmartTCPRejectsMalformedHTTPLookingRequestLine (0.00s)
  357. === RUN TestSniffSmartTCPClassifiesTokenSpacePlaintextAsUnknown
  358. --- PASS: TestSniffSmartTCPClassifiesTokenSpacePlaintextAsUnknown (0.00s)
  359. === RUN TestSniffSmartTCPRejectsPROXY
  360. === RUN TestSniffSmartTCPRejectsPROXY/v1
  361. === RUN TestSniffSmartTCPRejectsPROXY/v2
  362. --- PASS: TestSniffSmartTCPRejectsPROXY (0.00s)
  363. --- PASS: TestSniffSmartTCPRejectsPROXY/v1 (0.00s)
  364. --- PASS: TestSniffSmartTCPRejectsPROXY/v2 (0.00s)
  365. === RUN TestSniffSmartTCPUnknownIsImmediate
  366. --- PASS: TestSniffSmartTCPUnknownIsImmediate (0.00s)
  367. === RUN TestSniffSmartTCPAmbiguousPartialsTimeOut
  368. === RUN TestSniffSmartTCPAmbiguousPartialsTimeOut/g
  369. === RUN TestSniffSmartTCPAmbiguousPartialsTimeOut/b
  370. === RUN TestSniffSmartTCPAmbiguousPartialsTimeOut/bar
  371. === RUN TestSniffSmartTCPAmbiguousPartialsTimeOut/pr
  372. === RUN TestSniffSmartTCPAmbiguousPartialsTimeOut/tls_content_type
  373. === RUN TestSniffSmartTCPAmbiguousPartialsTimeOut/tls_version_major
  374. === RUN TestSniffSmartTCPAmbiguousPartialsTimeOut/tls_version_minor
  375. === RUN TestSniffSmartTCPAmbiguousPartialsTimeOut/tls_record_length_partial
  376. --- PASS: TestSniffSmartTCPAmbiguousPartialsTimeOut (0.16s)
  377. --- PASS: TestSniffSmartTCPAmbiguousPartialsTimeOut/g (0.02s)
  378. --- PASS: TestSniffSmartTCPAmbiguousPartialsTimeOut/b (0.02s)
  379. --- PASS: TestSniffSmartTCPAmbiguousPartialsTimeOut/bar (0.02s)
  380. --- PASS: TestSniffSmartTCPAmbiguousPartialsTimeOut/pr (0.02s)
  381. --- PASS: TestSniffSmartTCPAmbiguousPartialsTimeOut/tls_content_type (0.02s)
  382. --- PASS: TestSniffSmartTCPAmbiguousPartialsTimeOut/tls_version_major (0.02s)
  383. --- PASS: TestSniffSmartTCPAmbiguousPartialsTimeOut/tls_version_minor (0.02s)
  384. --- PASS: TestSniffSmartTCPAmbiguousPartialsTimeOut/tls_record_length_partial (0.02s)
  385. === RUN TestSniffSmartTCPReplayReturnsSniffedBytesBeforeUnderlyingBytes
  386. --- PASS: TestSniffSmartTCPReplayReturnsSniffedBytesBeforeUnderlyingBytes (0.00s)
  387. === RUN TestSniffSmartTCPHandlesLongHTTPRequestLine
  388. --- PASS: TestSniffSmartTCPHandlesLongHTTPRequestLine (0.00s)
  389. === RUN TestSniffSmartTCPClearsReadDeadlineBeforeHandoff
  390. --- PASS: TestSniffSmartTCPClearsReadDeadlineBeforeHandoff (0.00s)
  391. === RUN TestSniffSmartTCPDoesNotTreatClosedPipeAsSuccess
  392. --- PASS: TestSniffSmartTCPDoesNotTreatClosedPipeAsSuccess (0.00s)
  393. === RUN TestTrafficRuntimeDefaultsApplySafeLimits
  394. --- PASS: TestTrafficRuntimeDefaultsApplySafeLimits (0.00s)
  395. === RUN TestBackendFromAddressRejectsOutOfRangePort
  396. --- PASS: TestBackendFromAddressRejectsOutOfRangePort (0.00s)
  397. === RUN TestSmartTCPDispatch
  398. === RUN TestSmartTCPDispatch/cleartext_HTTP_request_reaches_HTTP_handler
  399. === RUN TestSmartTCPDispatch/h2c_prior-knowledge_reaches_HTTP_handler
  400. === RUN TestSmartTCPDispatch/HTTPS_request_reaches_configured_HTTPS_fallback
  401. === RUN TestSmartTCPDispatch/TLS_passthrough_SNI_match_wins_before_HTTPS_fallback
  402. === RUN TestSmartTCPDispatch/no-SNI_TLS_reaches_HTTPS_fallback
  403. === RUN TestSmartTCPDispatch/unknown_bytes_reach_raw_fallback_immediately_when_source_policy_allows
  404. === RUN TestSmartTCPDispatch/unknown_bytes_refused_without_raw_fallback
  405. === RUN TestSmartTCPDispatch/unknown_bytes_refused_when_raw_fallback_source_policy_denies_peer
  406. === RUN TestSmartTCPDispatch/malformed_HTTP-looking_bytes_do_not_reach_raw_fallback
  407. === RUN TestSmartTCPDispatch/malformed_TLS-looking_bytes_do_not_reach_raw_fallback
  408. === RUN TestSmartTCPDispatch/PROXY_v1_and_v2_prefixes_rejected
  409. === RUN TestSmartTCPDispatch/sniff_deadline_cleared_before_backend_handoff
  410. === RUN TestSmartTCPDispatch/raw_fallback_trusted_CIDR_reload_reuses_same_listener
  411. === RUN TestSmartTCPDispatch/raw_fallback_connection_closes_when_trusted_CIDR_no_longer_allows_peer
  412. === RUN TestSmartTCPDispatch/TLS_ClientHello_read_after_sniff_is_bounded
  413. --- PASS: TestSmartTCPDispatch (3.47s)
  414. --- PASS: TestSmartTCPDispatch/cleartext_HTTP_request_reaches_HTTP_handler (0.00s)
  415. --- PASS: TestSmartTCPDispatch/h2c_prior-knowledge_reaches_HTTP_handler (0.01s)
  416. --- PASS: TestSmartTCPDispatch/HTTPS_request_reaches_configured_HTTPS_fallback (0.01s)
  417. --- PASS: TestSmartTCPDispatch/TLS_passthrough_SNI_match_wins_before_HTTPS_fallback (0.02s)
  418. --- PASS: TestSmartTCPDispatch/no-SNI_TLS_reaches_HTTPS_fallback (0.01s)
  419. --- PASS: TestSmartTCPDispatch/unknown_bytes_reach_raw_fallback_immediately_when_source_policy_allows (0.00s)
  420. --- PASS: TestSmartTCPDispatch/unknown_bytes_refused_without_raw_fallback (1.00s)
  421. --- PASS: TestSmartTCPDispatch/unknown_bytes_refused_when_raw_fallback_source_policy_denies_peer (1.00s)
  422. --- PASS: TestSmartTCPDispatch/malformed_HTTP-looking_bytes_do_not_reach_raw_fallback (0.00s)
  423. --- PASS: TestSmartTCPDispatch/malformed_TLS-looking_bytes_do_not_reach_raw_fallback (0.00s)
  424. --- PASS: TestSmartTCPDispatch/PROXY_v1_and_v2_prefixes_rejected (0.00s)
  425. --- PASS: TestSmartTCPDispatch/sniff_deadline_cleared_before_backend_handoff (0.15s)
  426. --- PASS: TestSmartTCPDispatch/raw_fallback_trusted_CIDR_reload_reuses_same_listener (1.00s)
  427. --- PASS: TestSmartTCPDispatch/raw_fallback_connection_closes_when_trusted_CIDR_no_longer_allows_peer (0.00s)
  428. --- PASS: TestSmartTCPDispatch/TLS_ClientHello_read_after_sniff_is_bounded (0.25s)
  429. === RUN TestSetSmartTCPHTTPServerCopiesProtocols
  430. --- PASS: TestSetSmartTCPHTTPServerCopiesProtocols (0.00s)
  431. === RUN TestSmartTCPStatusCounters
  432. === RUN TestSmartTCPStatusCounters/HTTP_accepted
  433. === RUN TestSmartTCPStatusCounters/h2c_accepted
  434. === RUN TestSmartTCPStatusCounters/HTTPS_fallback_accepted
  435. === RUN TestSmartTCPStatusCounters/TLS_passthrough_accepted
  436. === RUN TestSmartTCPStatusCounters/raw_fallback_accepted
  437. === RUN TestSmartTCPStatusCounters/raw_fallback_backend_dial_failure_is_not_accepted
  438. === RUN TestSmartTCPStatusCounters/refused_and_rejected_classes
  439. === RUN TestSmartTCPStatusCounters/unknown_without_fallback_refused
  440. === RUN TestSmartTCPStatusCounters/sniff_timeout
  441. === RUN TestSmartTCPStatusCounters/entrypoint_CIDR_refused
  442. --- PASS: TestSmartTCPStatusCounters (0.09s)
  443. --- PASS: TestSmartTCPStatusCounters/HTTP_accepted (0.00s)
  444. --- PASS: TestSmartTCPStatusCounters/h2c_accepted (0.00s)
  445. --- PASS: TestSmartTCPStatusCounters/HTTPS_fallback_accepted (0.01s)
  446. --- PASS: TestSmartTCPStatusCounters/TLS_passthrough_accepted (0.01s)
  447. --- PASS: TestSmartTCPStatusCounters/raw_fallback_accepted (0.00s)
  448. --- PASS: TestSmartTCPStatusCounters/raw_fallback_backend_dial_failure_is_not_accepted (0.00s)
  449. --- PASS: TestSmartTCPStatusCounters/refused_and_rejected_classes (0.01s)
  450. --- PASS: TestSmartTCPStatusCounters/unknown_without_fallback_refused (0.00s)
  451. --- PASS: TestSmartTCPStatusCounters/sniff_timeout (0.05s)
  452. --- PASS: TestSmartTCPStatusCounters/entrypoint_CIDR_refused (0.00s)
  453. === RUN TestManagerStatusAggregatesSmartTCP
  454. --- PASS: TestManagerStatusAggregatesSmartTCP (0.00s)
  455. === RUN TestSmartTCPLifecycleHardening
  456. === RUN TestSmartTCPLifecycleHardening/internal_HTTP_and_HTTPS_fallback_servers_stop_when_entrypoint_removed
  457. === RUN TestSmartTCPLifecycleHardening/HTTP_fallback_handoff_remains_counted_until_hijacked_connection_closes
  458. === RUN TestSmartTCPLifecycleHardening/shutdown_force_drain_closes_open_HTTP_fallback_handoff
  459. === RUN TestSmartTCPLifecycleHardening/trusted_CIDR_change_closes_active_smart_TCP_connections_no_longer_allowed
  460. === RUN TestSmartTCPLifecycleHardening/active_upgraded_connection_remains_tied_to_accepted_generation
  461. === RUN TestSmartTCPLifecycleHardening/listener_is_not_reused_for_incompatible_address
  462. --- PASS: TestSmartTCPLifecycleHardening (0.06s)
  463. --- PASS: TestSmartTCPLifecycleHardening/internal_HTTP_and_HTTPS_fallback_servers_stop_when_entrypoint_removed (0.00s)
  464. --- PASS: TestSmartTCPLifecycleHardening/HTTP_fallback_handoff_remains_counted_until_hijacked_connection_closes (0.00s)
  465. --- PASS: TestSmartTCPLifecycleHardening/shutdown_force_drain_closes_open_HTTP_fallback_handoff (0.05s)
  466. --- PASS: TestSmartTCPLifecycleHardening/trusted_CIDR_change_closes_active_smart_TCP_connections_no_longer_allowed (0.00s)
  467. --- PASS: TestSmartTCPLifecycleHardening/active_upgraded_connection_remains_tied_to_accepted_generation (0.00s)
  468. --- PASS: TestSmartTCPLifecycleHardening/listener_is_not_reused_for_incompatible_address (0.00s)
  469. === RUN TestSmartTCPHTTPHandoff
  470. === RUN TestSmartTCPHTTPHandoff/HTTP_Upgrade_h2c_reaches_handler_and_not_raw_fallback
  471. === RUN TestSmartTCPHTTPHandoff/websocket_upgrade_supports_hijacker
  472. === RUN TestSmartTCPHTTPHandoff/CONNECT_reaches_HTTP_handler_and_not_raw_fallback
  473. === RUN TestSmartTCPHTTPHandoff/handoff_connection_has_cleared_deadlines_and_useful_addresses
  474. --- PASS: TestSmartTCPHTTPHandoff (0.16s)
  475. --- PASS: TestSmartTCPHTTPHandoff/HTTP_Upgrade_h2c_reaches_handler_and_not_raw_fallback (0.00s)
  476. --- PASS: TestSmartTCPHTTPHandoff/websocket_upgrade_supports_hijacker (0.00s)
  477. --- PASS: TestSmartTCPHTTPHandoff/CONNECT_reaches_HTTP_handler_and_not_raw_fallback (0.00s)
  478. --- PASS: TestSmartTCPHTTPHandoff/handoff_connection_has_cleared_deadlines_and_useful_addresses (0.15s)
  479. === RUN TestRouteToHTTPListenerServeFailureReturnsFalseAndLeavesTrackedForCaller
  480. --- PASS: TestRouteToHTTPListenerServeFailureReturnsFalseAndLeavesTrackedForCaller (0.00s)
  481. === RUN TestTCPManagerLifecycle
  482. --- PASS: TestTCPManagerLifecycle (0.00s)
  483. === RUN TestTCPManagerRejectsInvalidGraphWithoutReplacingSnapshot
  484. --- PASS: TestTCPManagerRejectsInvalidGraphWithoutReplacingSnapshot (0.00s)
  485. === RUN TestTCPManagerReplacesSameAddressEntrypoint
  486. --- PASS: TestTCPManagerReplacesSameAddressEntrypoint (0.00s)
  487. === RUN TestTCPManagerSameAddressProtocolChangeStartsTLSHTTPServer
  488. --- PASS: TestTCPManagerSameAddressProtocolChangeStartsTLSHTTPServer (0.01s)
  489. === RUN TestTCPManagerSameAddressTLSMuxRenameRefreshesHTTPSRoute
  490. --- PASS: TestTCPManagerSameAddressTLSMuxRenameRefreshesHTTPSRoute (0.01s)
  491. === RUN TestTCPRuntimeDoesNotPublishTLSHTTPServerAfterClose
  492. --- PASS: TestTCPRuntimeDoesNotPublishTLSHTTPServerAfterClose (0.00s)
  493. === RUN TestTCPManagerSameAddressProtocolChangeStopsTLSHTTPServer
  494. --- PASS: TestTCPManagerSameAddressProtocolChangeStopsTLSHTTPServer (0.01s)
  495. === RUN TestTrackedTCPConnClosesLateBackendAfterStaleClose
  496. --- PASS: TestTrackedTCPConnClosesLateBackendAfterStaleClose (0.00s)
  497. === RUN TestTCPPassthroughRejectsUntrustedCIDR
  498. --- PASS: TestTCPPassthroughRejectsUntrustedCIDR (0.00s)
  499. === RUN TestTCPPassthroughReloadAppliesTrustedCIDRChange
  500. --- PASS: TestTCPPassthroughReloadAppliesTrustedCIDRChange (0.00s)
  501. === RUN TestTLSMuxReloadClosesActiveUntrustedHTTPSFallbackConnections
  502. --- PASS: TestTLSMuxReloadClosesActiveUntrustedHTTPSFallbackConnections (0.01s)
  503. === RUN TestTCPPassthroughReloadClosesActiveUntrustedConnections
  504. --- PASS: TestTCPPassthroughReloadClosesActiveUntrustedConnections (0.00s)
  505. === RUN TestTCPPassthroughEcho
  506. --- PASS: TestTCPPassthroughEcho (0.00s)
  507. === RUN TestTCPPassthroughUnknownRouterCloses
  508. --- PASS: TestTCPPassthroughUnknownRouterCloses (0.00s)
  509. === RUN TestTCPPassthroughBackendDialFailure
  510. --- PASS: TestTCPPassthroughBackendDialFailure (0.00s)
  511. === RUN TestTCPPassthroughShutdownStopsAccepting
  512. --- PASS: TestTCPPassthroughShutdownStopsAccepting (0.00s)
  513. === RUN TestTCPPassthroughIdleTimeoutClosesConnection
  514. --- PASS: TestTCPPassthroughIdleTimeoutClosesConnection (0.05s)
  515. === RUN TestTCPPassthroughMaxConnectionsRejectsOverflow
  516. --- PASS: TestTCPPassthroughMaxConnectionsRejectsOverflow (0.00s)
  517. === RUN TestTCPPassthroughDrainWaitsForActiveConnectionThenTimesOut
  518. --- PASS: TestTCPPassthroughDrainWaitsForActiveConnectionThenTimesOut (0.05s)
  519. === RUN TestTCPPassthroughStatusCountersTrackAcceptedRefusedErrorsAndBytes
  520. --- PASS: TestTCPPassthroughStatusCountersTrackAcceptedRefusedErrorsAndBytes (0.01s)
  521. === RUN TestClientHelloTooLargeUsesDomainSentinel
  522. --- PASS: TestClientHelloTooLargeUsesDomainSentinel (0.00s)
  523. === RUN TestClientHelloPeek
  524. === RUN TestClientHelloPeek/valid_sni_returns_replayable_bytes
  525. === RUN TestClientHelloPeek/no_sni
  526. === RUN TestClientHelloPeek/malformed
  527. === RUN TestClientHelloPeek/fragmented
  528. === RUN TestClientHelloPeek/client_hello_across_multiple_tls_records
  529. === RUN TestClientHelloPeek/client_hello_header_across_multiple_tls_records
  530. --- PASS: TestClientHelloPeek (0.02s)
  531. --- PASS: TestClientHelloPeek/valid_sni_returns_replayable_bytes (0.00s)
  532. --- PASS: TestClientHelloPeek/no_sni (0.00s)
  533. --- PASS: TestClientHelloPeek/malformed (0.00s)
  534. --- PASS: TestClientHelloPeek/fragmented (0.01s)
  535. --- PASS: TestClientHelloPeek/client_hello_across_multiple_tls_records (0.00s)
  536. --- PASS: TestClientHelloPeek/client_hello_header_across_multiple_tls_records (0.00s)
  537. === RUN TestTLSPassthrough
  538. --- PASS: TestTLSPassthrough (0.02s)
  539. === RUN TestTLSMuxUnknownClosesWithoutHTTPSRoute
  540. --- PASS: TestTLSMuxUnknownClosesWithoutHTTPSRoute (0.00s)
  541. === RUN TestTLSMuxIncompleteClientHelloDoesNotHangShutdown
  542. --- PASS: TestTLSMuxIncompleteClientHelloDoesNotHangShutdown (0.05s)
  543. === RUN TestTLSMuxHTTPServerRefreshesActiveRuntime
  544. --- PASS: TestTLSMuxHTTPServerRefreshesActiveRuntime (0.02s)
  545. === RUN TestTLSHTTPListenerServeRejectsAfterClose
  546. --- PASS: TestTLSHTTPListenerServeRejectsAfterClose (0.01s)
  547. === RUN TestTLSHTTPListenerCloseDrainsQueuedConnections
  548. --- PASS: TestTLSHTTPListenerCloseDrainsQueuedConnections (0.00s)
  549. === RUN TestTLSMuxHTTPSRoute
  550. --- PASS: TestTLSMuxHTTPSRoute (0.02s)
  551. === RUN TestTLSMuxHTTP2Route
  552. --- PASS: TestTLSMuxHTTP2Route (0.01s)
  553. === RUN TestHostMatchesTLSWildcard
  554. --- PASS: TestHostMatchesTLSWildcard (0.00s)
  555. === RUN TestUDPPassthroughEcho
  556. --- PASS: TestUDPPassthroughEcho (0.05s)
  557. === RUN TestUDPRejectsUntrustedCIDR
  558. --- PASS: TestUDPRejectsUntrustedCIDR (0.08s)
  559. === RUN TestUDPReloadAppliesTrustedCIDRChange
  560. --- PASS: TestUDPReloadAppliesTrustedCIDRChange (0.08s)
  561. === RUN TestUDPReloadClosesActiveUntrustedSessions
  562. --- PASS: TestUDPReloadClosesActiveUntrustedSessions (0.08s)
  563. === RUN TestUDPReloadReplacesSessionWhenBackendChanges
  564. --- PASS: TestUDPReloadReplacesSessionWhenBackendChanges (0.11s)
  565. === RUN TestUDPStaleRemovalKeepsReplacementSession
  566. --- PASS: TestUDPStaleRemovalKeepsReplacementSession (0.00s)
  567. === RUN TestUDPExpiryClosesOnlyRegisteredIdleSessionOnce
  568. --- PASS: TestUDPExpiryClosesOnlyRegisteredIdleSessionOnce (0.00s)
  569. === RUN TestUDPAdmissionGateBlocksPublicationAfterClosingBegins
  570. --- PASS: TestUDPAdmissionGateBlocksPublicationAfterClosingBegins (0.00s)
  571. === RUN TestUDPPublishSessionRejectsCompletedDialAfterAdmissionClosure
  572. --- PASS: TestUDPPublishSessionRejectsCompletedDialAfterAdmissionClosure (0.00s)
  573. === RUN TestUDPPublishSessionReusesExistingAndTouchesIt
  574. --- PASS: TestUDPPublishSessionReusesExistingAndTouchesIt (0.00s)
  575. === RUN TestUDPRemoveSessionNilIsSafe
  576. --- PASS: TestUDPRemoveSessionNilIsSafe (0.00s)
  577. === RUN TestUDPReadLoopRejectsInvalidSourceAddress
  578. --- PASS: TestUDPReadLoopRejectsInvalidSourceAddress (0.06s)
  579. === RUN TestUDPStopBeforeStartLeavesNoRuntimeGoroutines
  580. --- PASS: TestUDPStopBeforeStartLeavesNoRuntimeGoroutines (0.00s)
  581. === RUN TestUDPShutdownLeavesNoSessionsOrRuntimeGoroutines
  582. --- PASS: TestUDPShutdownLeavesNoSessionsOrRuntimeGoroutines (0.05s)
  583. === RUN TestUDPConcurrentCreationDuringShutdownLeavesNoSessions
  584. --- PASS: TestUDPConcurrentCreationDuringShutdownLeavesNoSessions (0.00s)
  585. === RUN TestUDPInFlightDialDoesNotPublishAfterAdmissionClosure
  586. --- PASS: TestUDPInFlightDialDoesNotPublishAfterAdmissionClosure (0.00s)
  587. === RUN TestUDPAddrPortNormalizesIPv4MappedAndPreservesZones
  588. --- PASS: TestUDPAddrPortNormalizesIPv4MappedAndPreservesZones (0.00s)
  589. === RUN TestUDPAddrPortRejectsInvalidAddresses
  590. --- PASS: TestUDPAddrPortRejectsInvalidAddresses (0.00s)
  591. === RUN TestUDPSessionPrecomputesImmutableRemoteAddr
  592. --- PASS: TestUDPSessionPrecomputesImmutableRemoteAddr (0.00s)
  593. === RUN TestUDPTrustedAddrPortMatchesCIDRs
  594. --- PASS: TestUDPTrustedAddrPortMatchesCIDRs (0.00s)
  595. === RUN TestUDPTwoClientsGetIsolatedSessions
  596. --- PASS: TestUDPTwoClientsGetIsolatedSessions (0.05s)
  597. === RUN TestUDPIdleSessionExpires
  598. --- PASS: TestUDPIdleSessionExpires (0.05s)
  599. === RUN TestUDPMaxSessionsRejectsOverflow
  600. --- PASS: TestUDPMaxSessionsRejectsOverflow (0.13s)
  601. === RUN TestUDPRemovedRouterWithRetainedEntryPointDrainsSession
  602. --- PASS: TestUDPRemovedRouterWithRetainedEntryPointDrainsSession (0.13s)
  603. === RUN TestUDPBackendChangeDrainsExistingSession
  604. --- PASS: TestUDPBackendChangeDrainsExistingSession (0.11s)
  605. === RUN TestUDPRemovedRouterDrainsThenClosesSessions
  606. --- PASS: TestUDPRemovedRouterDrainsThenClosesSessions (0.05s)
  607. === RUN TestUDPShutdownClosesSocket
  608. --- PASS: TestUDPShutdownClosesSocket (0.00s)
  609. === RUN TestUDPStatusCountersTrackDatagrams
  610. --- PASS: TestUDPStatusCountersTrackDatagrams (0.05s)
  611. PASS
  612. ok github.com/bnema/gordon/internal/adapters/in/traffic 7.357s
  613. === RUN TestEnsureRuntimeDirPrefersXDG
  614. --- PASS: TestEnsureRuntimeDirPrefersXDG (0.00s)
  615. === RUN TestEnsureRuntimeDirFallsBackToHome
  616. --- PASS: TestEnsureRuntimeDirFallsBackToHome (0.00s)
  617. === RUN TestEnsureRuntimeDirRejectsUnsafeXDG
  618. --- PASS: TestEnsureRuntimeDirRejectsUnsafeXDG (0.00s)
  619. === RUN TestEnsureRuntimeDirRejectsRelativeXDG
  620. --- PASS: TestEnsureRuntimeDirRejectsRelativeXDG (0.00s)
  621. === RUN TestEnsureRuntimeDirNoFallbackOnCreateError
  622. --- PASS: TestEnsureRuntimeDirNoFallbackOnCreateError (0.00s)
  623. === RUN TestEnsureDirRefusesSymlinkAncestor
  624. --- PASS: TestEnsureDirRefusesSymlinkAncestor (0.00s)
  625. === RUN TestEnsureDirTightensPermissions
  626. --- PASS: TestEnsureDirTightensPermissions (0.00s)
  627. === RUN TestEnsureDirRejectsOwnerOwnedWritableAncestor
  628. --- PASS: TestEnsureDirRejectsOwnerOwnedWritableAncestor (0.00s)
  629. === RUN TestValidatePathComponentRejectsForeignOwnedAncestors
  630. === RUN TestValidatePathComponentRejectsForeignOwnedAncestors/-rwxr-xr-x
  631. === RUN TestValidatePathComponentRejectsForeignOwnedAncestors/-rwx------
  632. --- PASS: TestValidatePathComponentRejectsForeignOwnedAncestors (0.00s)
  633. --- PASS: TestValidatePathComponentRejectsForeignOwnedAncestors/-rwxr-xr-x (0.00s)
  634. --- PASS: TestValidatePathComponentRejectsForeignOwnedAncestors/-rwx------ (0.00s)
  635. === RUN TestValidatePathComponentAllowsRootOwnedStickyAncestor
  636. --- PASS: TestValidatePathComponentAllowsRootOwnedStickyAncestor (0.00s)
  637. === RUN TestValidateDirAllowsStickyRootAncestor
  638. --- PASS: TestValidateDirAllowsStickyRootAncestor (0.00s)
  639. === RUN TestEnsureDirRejectsSymlinkDirectory
  640. --- PASS: TestEnsureDirRejectsSymlinkDirectory (0.00s)
  641. === RUN TestEnsureDirRejectsRegularFile
  642. --- PASS: TestEnsureDirRejectsRegularFile (0.00s)
  643. === RUN TestEnsureDirRejectsForeignOwner
  644. localadmin_test.go:197: requires root to change directory ownership
  645. --- SKIP: TestEnsureDirRejectsForeignOwner (0.00s)
  646. === RUN TestListenCreatesOwnerOnlySocket
  647. --- PASS: TestListenCreatesOwnerOnlySocket (0.00s)
  648. === RUN TestListenRefusesActiveListener
  649. --- PASS: TestListenRefusesActiveListener (0.00s)
  650. === RUN TestListenRemovesStaleOwnedSocket
  651. --- PASS: TestListenRemovesStaleOwnedSocket (0.00s)
  652. === RUN TestListenRefusesRegularFileCollision
  653. --- PASS: TestListenRefusesRegularFileCollision (0.00s)
  654. === RUN TestListenRefusesSymlinkSocket
  655. --- PASS: TestListenRefusesSymlinkSocket (0.00s)
  656. === RUN TestValidateSocketRejectsGroupAccessibleSocket
  657. --- PASS: TestValidateSocketRejectsGroupAccessibleSocket (0.00s)
  658. === RUN TestRemoveOwnedSocketRemovesBoundSocket
  659. --- PASS: TestRemoveOwnedSocketRemovesBoundSocket (0.00s)
  660. === RUN TestRemoveOwnedSocketLeavesReplacement
  661. --- PASS: TestRemoveOwnedSocketLeavesReplacement (0.00s)
  662. === RUN TestRemoveOwnedSocketIgnoresMissingPath
  663. --- PASS: TestRemoveOwnedSocketIgnoresMissingPath (0.00s)
  664. === RUN TestClientDirCandidatesOrderAndDedupe
  665. === RUN TestClientDirCandidatesOrderAndDedupe/xdg_coincides_with_the_systemd_default
  666. === RUN TestClientDirCandidatesOrderAndDedupe/xdg_differs_from_the_systemd_default
  667. --- PASS: TestClientDirCandidatesOrderAndDedupe (0.00s)
  668. --- PASS: TestClientDirCandidatesOrderAndDedupe/xdg_coincides_with_the_systemd_default (0.00s)
  669. --- PASS: TestClientDirCandidatesOrderAndDedupe/xdg_differs_from_the_systemd_default (0.00s)
  670. === RUN TestDialContextRejectsPeerUIDMismatchBeforeUse
  671. --- PASS: TestDialContextRejectsPeerUIDMismatchBeforeUse (0.00s)
  672. === RUN TestListenRefusesForeignOwnedSocketDirectory
  673. localadmin_test.go:389: requires root to change directory ownership
  674. --- SKIP: TestListenRefusesForeignOwnedSocketDirectory (0.00s)
  675. PASS
  676. ok github.com/bnema/gordon/internal/adapters/localadmin 1.019s
  677. === RUN TestFormatJSON_AllFields
  678. --- PASS: TestFormatJSON_AllFields (0.00s)
  679. === RUN TestFormatJSON_OneLinePerEntry
  680. --- PASS: TestFormatJSON_OneLinePerEntry (0.00s)
  681. === RUN TestFormatJSON_TimestampMillisecondPrecision
  682. --- PASS: TestFormatJSON_TimestampMillisecondPrecision (0.00s)
  683. === RUN TestFormatJSON_ClientIPNoPort
  684. --- PASS: TestFormatJSON_ClientIPNoPort (0.00s)
  685. === RUN TestFormatJSON_EmptyOptionalFields
  686. --- PASS: TestFormatJSON_EmptyOptionalFields (0.00s)
  687. === RUN TestFormatJSON_WithQuery
  688. --- PASS: TestFormatJSON_WithQuery (0.00s)
  689. === RUN TestFormatCLF_BasicLine
  690. --- PASS: TestFormatCLF_BasicLine (0.00s)
  691. === RUN TestFormatCLF_WithQuery
  692. --- PASS: TestFormatCLF_WithQuery (0.00s)
  693. === RUN TestFormatCLF_NoRefererOrUA
  694. --- PASS: TestFormatCLF_NoRefererOrUA (0.00s)
  695. === RUN TestFormatCLF_EscapesQuotesInTarget
  696. --- PASS: TestFormatCLF_EscapesQuotesInTarget (0.00s)
  697. === RUN TestFormatCombined_BasicLine
  698. --- PASS: TestFormatCombined_BasicLine (0.00s)
  699. === RUN TestFormatCombined_EmptyRefererIsDash
  700. --- PASS: TestFormatCombined_EmptyRefererIsDash (0.00s)
  701. === RUN TestFormatCombined_EmptyUAIsDash
  702. --- PASS: TestFormatCombined_EmptyUAIsDash (0.00s)
  703. === RUN TestFormatCombined_WithReferer
  704. --- PASS: TestFormatCombined_WithReferer (0.00s)
  705. === RUN TestFormatCombined_EscapesQuotesInUA
  706. --- PASS: TestFormatCombined_EscapesQuotesInUA (0.00s)
  707. === RUN TestBuildRequestTarget_NoQuery
  708. --- PASS: TestBuildRequestTarget_NoQuery (0.00s)
  709. === RUN TestBuildRequestTarget_WithQuery
  710. --- PASS: TestBuildRequestTarget_WithQuery (0.00s)
  711. === RUN TestEscapeQuoted
  712. --- PASS: TestEscapeQuoted (0.00s)
  713. === RUN TestEscapeQuoted_ControlCharacters
  714. --- PASS: TestEscapeQuoted_ControlCharacters (0.00s)
  715. === RUN TestNewJournaldSink_JournaldUnavailable
  716. --- PASS: TestNewJournaldSink_JournaldUnavailable (0.00s)
  717. === RUN TestNewJournaldSink_EmptySyslogIdentifier
  718. --- PASS: TestNewJournaldSink_EmptySyslogIdentifier (0.00s)
  719. === RUN TestNewJournaldSink_WhitespaceSyslogIdentifier
  720. --- PASS: TestNewJournaldSink_WhitespaceSyslogIdentifier (0.00s)
  721. === RUN TestJournaldSink_Write_CallsJournalSend
  722. --- PASS: TestJournaldSink_Write_CallsJournalSend (0.00s)
  723. === RUN TestJournaldSink_Write_SendsCustomIdentifier
  724. --- PASS: TestJournaldSink_Write_SendsCustomIdentifier (0.00s)
  725. === RUN TestJournaldSink_Write_ReturnsErrorOnSendFailure
  726. --- PASS: TestJournaldSink_Write_ReturnsErrorOnSendFailure (0.00s)
  727. === RUN TestNew_InvalidFormat
  728. --- PASS: TestNew_InvalidFormat (0.00s)
  729. === RUN TestNew_InvalidOutput
  730. --- PASS: TestNew_InvalidOutput (0.00s)
  731. === RUN TestNew_FileOutput_EmptyPath
  732. --- PASS: TestNew_FileOutput_EmptyPath (0.00s)
  733. === RUN TestNew_FileOutput_CreatesDirectory
  734. --- PASS: TestNew_FileOutput_CreatesDirectory (0.00s)
  735. === RUN TestWriter_Stdout_JSON
  736. --- PASS: TestWriter_Stdout_JSON (0.00s)
  737. === RUN TestWriter_Stdout_CLF
  738. --- PASS: TestWriter_Stdout_CLF (0.00s)
  739. === RUN TestWriter_Stdout_Combined
  740. --- PASS: TestWriter_Stdout_Combined (0.00s)
  741. === RUN TestWriter_File_WritesLines
  742. --- PASS: TestWriter_File_WritesLines (0.00s)
  743. === RUN TestWriter_ConcurrentWrites
  744. --- PASS: TestWriter_ConcurrentWrites (0.01s)
  745. PASS
  746. ok github.com/bnema/gordon/internal/adapters/out/accesslog 1.024s
  747. === RUN TestCloudflareZoneResolverFindsParentZone
  748. --- PASS: TestCloudflareZoneResolverFindsParentZone (0.00s)
  749. === RUN TestCloudflareZoneResolverDoesNotLeakTokenInError
  750. --- PASS: TestCloudflareZoneResolverDoesNotLeakTokenInError (0.00s)
  751. === RUN TestCloudflareZoneResolverSimpleDomain
  752. --- PASS: TestCloudflareZoneResolverSimpleDomain (0.00s)
  753. === RUN TestCloudflareZoneResolverNoZoneFound
  754. --- PASS: TestCloudflareZoneResolverNoZoneFound (0.00s)
  755. === RUN TestCloudflareZoneResolverCachesErrorsWithShortTTL
  756. --- PASS: TestCloudflareZoneResolverCachesErrorsWithShortTTL (0.00s)
  757. === RUN TestCloudflareZoneResolverUnsuccessfulAPI
  758. --- PASS: TestCloudflareZoneResolverUnsuccessfulAPI (0.00s)
  759. === RUN TestCloudflareZoneResolverImplementsInterface
  760. --- PASS: TestCloudflareZoneResolverImplementsInterface (0.00s)
  761. === RUN TestWithCloudflareHTTPClientNilLeavesDefault
  762. --- PASS: TestWithCloudflareHTTPClientNilLeavesDefault (0.00s)
  763. === RUN TestCloudflareZoneResolverFindZoneLowercasesInput
  764. --- PASS: TestCloudflareZoneResolverFindZoneLowercasesInput (0.00s)
  765. === RUN TestCloudflareZoneResolverFindZoneMixedCaseWithTrailingDot
  766. --- PASS: TestCloudflareZoneResolverFindZoneMixedCaseWithTrailingDot (0.00s)
  767. === RUN TestHTTPProviderStoresAndCleansChallenge
  768. --- PASS: TestHTTPProviderStoresAndCleansChallenge (0.00s)
  769. === RUN TestHTTPProviderNilSink
  770. --- PASS: TestHTTPProviderNilSink (0.00s)
  771. === RUN TestNewIssuerValidatesEmail
  772. --- PASS: TestNewIssuerValidatesEmail (0.00s)
  773. === RUN TestNewIssuerValidatesStore
  774. --- PASS: TestNewIssuerValidatesStore (0.00s)
  775. === RUN TestNewIssuerValidatesHTTPChallengeSink
  776. --- PASS: TestNewIssuerValidatesHTTPChallengeSink (0.00s)
  777. === RUN TestNewIssuerValidatesChallengeMode
  778. --- PASS: TestNewIssuerValidatesChallengeMode (0.00s)
  779. === RUN TestNewIssuerValidatesCloudflareToken
  780. --- PASS: TestNewIssuerValidatesCloudflareToken (0.00s)
  781. === RUN TestNewIssuerValidatesCloudflareDNSConfig
  782. --- PASS: TestNewIssuerValidatesCloudflareDNSConfig (0.00s)
  783. === RUN TestNormalizeDNSResolversErrorsIncludeEntryContext
  784. === RUN TestNormalizeDNSResolversErrorsIncludeEntryContext/empty_after_trimming
  785. === RUN TestNormalizeDNSResolversErrorsIncludeEntryContext/missing_port
  786. === RUN TestNormalizeDNSResolversErrorsIncludeEntryContext/empty_host
  787. === RUN TestNormalizeDNSResolversErrorsIncludeEntryContext/invalid_port
  788. --- PASS: TestNormalizeDNSResolversErrorsIncludeEntryContext (0.00s)
  789. --- PASS: TestNormalizeDNSResolversErrorsIncludeEntryContext/empty_after_trimming (0.00s)
  790. --- PASS: TestNormalizeDNSResolversErrorsIncludeEntryContext/missing_port (0.00s)
  791. --- PASS: TestNormalizeDNSResolversErrorsIncludeEntryContext/empty_host (0.00s)
  792. --- PASS: TestNormalizeDNSResolversErrorsIncludeEntryContext/invalid_port (0.00s)
  793. === RUN TestNewIssuerRejectsNonHTTPSURL
  794. --- PASS: TestNewIssuerRejectsNonHTTPSURL (0.00s)
  795. === RUN TestNewIssuerValidWithDefaults
  796. --- PASS: TestNewIssuerValidWithDefaults (0.00s)
  797. === RUN TestCloudflareDNSProviderConfigUsesDNSSettings
  798. --- PASS: TestCloudflareDNSProviderConfigUsesDNSSettings (0.00s)
  799. === RUN TestPrivateKeyRoundTrip
  800. --- PASS: TestPrivateKeyRoundTrip (0.00s)
  801. === RUN TestPrivateKeyRSARoundTrip
  802. --- PASS: TestPrivateKeyRSARoundTrip (0.10s)
  803. === RUN TestResourceConversionToStoredCertificate
  804. --- PASS: TestResourceConversionToStoredCertificate (0.00s)
  805. === RUN TestResourceConversionNoIssuer
  806. --- PASS: TestResourceConversionNoIssuer (0.00s)
  807. === RUN TestAccountJSONRoundTrip
  808. --- PASS: TestAccountJSONRoundTrip (0.00s)
  809. === RUN TestParsedCertificateNotAfter
  810. --- PASS: TestParsedCertificateNotAfter (0.00s)
  811. PASS
  812. ok github.com/bnema/gordon/internal/adapters/out/acmelego 1.134s
  813. === RUN TestStoreSaveLoadAll
  814. --- PASS: TestStoreSaveLoadAll (0.00s)
  815. === RUN TestStorePrivateKeyMode
  816. --- PASS: TestStorePrivateKeyMode (0.00s)
  817. === RUN TestStoreRejectsUnsafeID
  818. === RUN TestStoreRejectsUnsafeID/../escape
  819. === RUN TestStoreRejectsUnsafeID/.
  820. === RUN TestStoreRejectsUnsafeID/.hidden
  821. === RUN TestStoreRejectsUnsafeID/tenant.old
  822. === RUN TestStoreRejectsUnsafeID/tenant.tmp-123
  823. --- PASS: TestStoreRejectsUnsafeID (0.00s)
  824. --- PASS: TestStoreRejectsUnsafeID/../escape (0.00s)
  825. --- PASS: TestStoreRejectsUnsafeID/. (0.00s)
  826. --- PASS: TestStoreRejectsUnsafeID/.hidden (0.00s)
  827. --- PASS: TestStoreRejectsUnsafeID/tenant.old (0.00s)
  828. --- PASS: TestStoreRejectsUnsafeID/tenant.tmp-123 (0.00s)
  829. === RUN TestStoreLockAcquireRelease
  830. --- PASS: TestStoreLockAcquireRelease (0.00s)
  831. === RUN TestStoreLockContextCanceled
  832. --- PASS: TestStoreLockContextCanceled (0.00s)
  833. === RUN TestStoreNewRestoresBackupDir
  834. --- PASS: TestStoreNewRestoresBackupDir (0.00s)
  835. === RUN TestStoreSaveLoadAccount
  836. --- PASS: TestStoreSaveLoadAccount (0.00s)
  837. === RUN TestStoreAccountFileMode
  838. --- PASS: TestStoreAccountFileMode (0.00s)
  839. === RUN TestStoreSaveLoadState
  840. --- PASS: TestStoreSaveLoadState (0.00s)
  841. === RUN TestStoreLoadAllInvalidChallenge
  842. --- PASS: TestStoreLoadAllInvalidChallenge (0.00s)
  843. === RUN TestStoreLoadAllCorruptPrivkey
  844. --- PASS: TestStoreLoadAllCorruptPrivkey (0.00s)
  845. === RUN TestStoreLoadAllCorruptFullchain
  846. --- PASS: TestStoreLoadAllCorruptFullchain (0.00s)
  847. === RUN TestStoreLoadAllSkipsTempAndBackupDirs
  848. --- PASS: TestStoreLoadAllSkipsTempAndBackupDirs (0.00s)
  849. === RUN TestStoreLoadAllInvalidPEM
  850. --- PASS: TestStoreLoadAllInvalidPEM (0.00s)
  851. PASS
  852. ok github.com/bnema/gordon/internal/adapters/out/acmestore 1.025s
  853. === RUN TestValidateAppSecretPath
  854. --- PASS: TestValidateAppSecretPath (0.00s)
  855. PASS
  856. ok github.com/bnema/gordon/internal/adapters/out/appsecrets 1.012s
  857. === RUN TestStore_ProtectionSnapshotCoversEveryRoot
  858. --- PASS: TestStore_ProtectionSnapshotCoversEveryRoot (0.01s)
  859. === RUN TestStore_ProtectionSnapshotStoppedAppKeepsActive
  860. --- PASS: TestStore_ProtectionSnapshotStoppedAppKeepsActive (0.00s)
  861. === RUN TestStore_ProtectionSnapshotKeepsHistoricalIncarnations
  862. --- PASS: TestStore_ProtectionSnapshotKeepsHistoricalIncarnations (0.00s)
  863. === RUN TestStore_ProtectionSnapshotKeepsDifferentClaimStates
  864. --- PASS: TestStore_ProtectionSnapshotKeepsDifferentClaimStates (0.00s)
  865. === RUN TestStore_ProtectionSnapshotReleasedIsTheOnlyDeletableState
  866. --- PASS: TestStore_ProtectionSnapshotReleasedIsTheOnlyDeletableState (0.00s)
  867. === RUN TestStore_ProtectionSnapshotUnknownStateIsRetained
  868. --- PASS: TestStore_ProtectionSnapshotUnknownStateIsRetained (0.00s)
  869. === RUN TestStore_ProtectionSnapshotMigrationBackfillsHistory
  870. --- PASS: TestStore_ProtectionSnapshotMigrationBackfillsHistory (0.00s)
  871. === RUN TestStore_ProtectionSnapshotReportsCorruptRecords
  872. --- PASS: TestStore_ProtectionSnapshotReportsCorruptRecords (0.00s)
  873. === RUN TestStore_ProtectionSnapshotConcurrentWrites
  874. --- PASS: TestStore_ProtectionSnapshotConcurrentWrites (0.05s)
  875. === RUN TestStore_ProtectionSnapshotCancellation
  876. --- PASS: TestStore_ProtectionSnapshotCancellation (0.00s)
  877. === RUN TestStore_ClaimOperationCreatesInFlightJournal
  878. --- PASS: TestStore_ClaimOperationCreatesInFlightJournal (0.00s)
  879. === RUN TestStore_ClaimOperationReplaysSameRequest
  880. --- PASS: TestStore_ClaimOperationReplaysSameRequest (0.00s)
  881. === RUN TestStore_ClaimOperationConflictsOnDifferentRequest
  882. --- PASS: TestStore_ClaimOperationConflictsOnDifferentRequest (0.00s)
  883. === RUN TestStore_ClaimOperationRefusesUnknownAppWithoutState
  884. --- PASS: TestStore_ClaimOperationRefusesUnknownAppWithoutState (0.00s)
  885. === RUN TestStore_ClaimOperationIsAtomicUnderConcurrency
  886. --- PASS: TestStore_ClaimOperationIsAtomicUnderConcurrency (0.00s)
  887. === RUN TestStore_ClaimOperationReplaysAfterReopen
  888. --- PASS: TestStore_ClaimOperationReplaysAfterReopen (0.00s)
  889. === RUN TestStore_ClaimOperationSurvivesRetire
  890. --- PASS: TestStore_ClaimOperationSurvivesRetire (0.00s)
  891. === RUN TestStore_CommitApplyRejectsSupersededIntent
  892. --- PASS: TestStore_CommitApplyRejectsSupersededIntent (0.00s)
  893. === RUN TestStore_RecoverDropsSupersededCommittedIntent
  894. --- PASS: TestStore_RecoverDropsSupersededCommittedIntent (0.01s)
  895. === RUN TestStore_CollectGarbagePreservesInFlightIntent
  896. --- PASS: TestStore_CollectGarbagePreservesInFlightIntent (0.00s)
  897. === RUN TestStore_RetireAppEndsIncarnation
  898. --- PASS: TestStore_RetireAppEndsIncarnation (0.00s)
  899. === RUN TestStore_RetireAppIsAtomicOnEmptyApp
  900. --- PASS: TestStore_RetireAppIsAtomicOnEmptyApp (0.00s)
  901. === RUN TestProtectionSnapshot_OperationDigestRootCarriesRepository
  902. --- PASS: TestProtectionSnapshot_OperationDigestRootCarriesRepository (0.00s)
  903. === RUN TestStore_BackendBindsRegisterRelease
  904. --- PASS: TestStore_BackendBindsRegisterRelease (0.00s)
  905. === RUN TestStore_BackendBindsConflictCrossApp
  906. --- PASS: TestStore_BackendBindsConflictCrossApp (0.00s)
  907. === RUN TestStore_BackendBindsUDPProtocol
  908. --- PASS: TestStore_BackendBindsUDPProtocol (0.00s)
  909. === RUN TestStore_StageCommitMaterialize
  910. --- PASS: TestStore_StageCommitMaterialize (0.00s)
  911. === RUN TestStore_RecoverCompletesCommitted
  912. --- PASS: TestStore_RecoverCompletesCommitted (0.00s)
  913. === RUN TestStore_ConcurrentSamePortCrossApp
  914. --- PASS: TestStore_ConcurrentSamePortCrossApp (0.01s)
  915. === RUN TestStore_GarbageProtectsReferenced
  916. --- PASS: TestStore_GarbageProtectsReferenced (0.01s)
  917. === RUN TestStore_CorruptAndIncompatible
  918. --- PASS: TestStore_CorruptAndIncompatible (0.00s)
  919. === RUN TestStore_AcceptApplyPublishesDesiredRevision
  920. --- PASS: TestStore_AcceptApplyPublishesDesiredRevision (0.00s)
  921. === RUN TestStore_GarbageSweepsStagedOrphan
  922. --- PASS: TestStore_GarbageSweepsStagedOrphan (0.00s)
  923. === RUN TestStore_OperationJournal
  924. --- PASS: TestStore_OperationJournal (0.00s)
  925. === RUN TestStore_IntentAndOwnership
  926. --- PASS: TestStore_IntentAndOwnership (0.00s)
  927. === RUN TestStore_RetentionEvictsUnreferencedBeyondDefault
  928. --- PASS: TestStore_RetentionEvictsUnreferencedBeyondDefault (0.03s)
  929. === RUN TestStore_ConfiguredRetentionOverridesDefault
  930. --- PASS: TestStore_ConfiguredRetentionOverridesDefault (0.01s)
  931. === RUN TestStore_ReopenPersistsAcrossClose
  932. --- PASS: TestStore_ReopenPersistsAcrossClose (0.00s)
  933. === RUN TestStore_OwnershipUUIDSurvivesNameReuse
  934. --- PASS: TestStore_OwnershipUUIDSurvivesNameReuse (0.00s)
  935. === RUN TestStore_RecoveryInhibitionsAreDurableAndGenerationScoped
  936. --- PASS: TestStore_RecoveryInhibitionsAreDurableAndGenerationScoped (0.00s)
  937. === RUN TestStore_DesiredDevicesRoundTrip
  938. --- PASS: TestStore_DesiredDevicesRoundTrip (0.00s)
  939. === RUN TestStore_DesiredWithoutDevicesLoads
  940. --- PASS: TestStore_DesiredWithoutDevicesLoads (0.00s)
  941. === RUN TestStore_DesiredCapabilitiesRoundTrip
  942. --- PASS: TestStore_DesiredCapabilitiesRoundTrip (0.00s)
  943. === RUN TestStore_DesiredWithoutCapabilitiesLoads
  944. --- PASS: TestStore_DesiredWithoutCapabilitiesLoads (0.00s)
  945. PASS
  946. ok github.com/bnema/gordon/internal/adapters/out/appstate 1.206s
  947. === RUN TestDetectRuntimeSocket_ExplicitPathTakesPrecedence
  948. --- PASS: TestDetectRuntimeSocket_ExplicitPathTakesPrecedence (0.00s)
  949. === RUN TestDetectRuntimeSocket_FallsBackToDockerHost
  950. --- PASS: TestDetectRuntimeSocket_FallsBackToDockerHost (0.00s)
  951. === RUN TestDetectRuntimeSocket_EmptyDockerHostIgnored
  952. --- PASS: TestDetectRuntimeSocket_EmptyDockerHostIgnored (0.00s)
  953. === RUN TestDetectRuntimeSocket_NonUnixDockerHostPassedThrough
  954. --- PASS: TestDetectRuntimeSocket_NonUnixDockerHostPassedThrough (0.00s)
  955. === RUN TestParseUnixSocketPath
  956. === RUN TestParseUnixSocketPath/unix:///var/run/docker.sock
  957. === RUN TestParseUnixSocketPath/unix:///run/podman/podman.sock
  958. === RUN TestParseUnixSocketPath/tcp://localhost:2375
  959. === RUN TestParseUnixSocketPath//var/run/docker.sock
  960. --- PASS: TestParseUnixSocketPath (0.00s)
  961. --- PASS: TestParseUnixSocketPath/unix:///var/run/docker.sock (0.00s)
  962. --- PASS: TestParseUnixSocketPath/unix:///run/podman/podman.sock (0.00s)
  963. --- PASS: TestParseUnixSocketPath/tcp://localhost:2375 (0.00s)
  964. --- PASS: TestParseUnixSocketPath//var/run/docker.sock (0.00s)
  965. === RUN TestNewRuntimeWithSocket_UsesExplicitHost
  966. --- PASS: TestNewRuntimeWithSocket_UsesExplicitHost (0.00s)
  967. === RUN TestRuntime_StreamContainerLogs_DemuxesTimestampedLines
  968. --- PASS: TestRuntime_StreamContainerLogs_DemuxesTimestampedLines (0.00s)
  969. === RUN TestRuntime_StreamContainerLogs_NotFound
  970. --- PASS: TestRuntime_StreamContainerLogs_NotFound (0.00s)
  971. === RUN TestReadBoundedLine_TruncatesOversizedLines
  972. --- PASS: TestReadBoundedLine_TruncatesOversizedLines (0.00s)
  973. === RUN TestParseTimestampedLine_KeepsBodyWithoutTimestamp
  974. --- PASS: TestParseTimestampedLine_KeepsBodyWithoutTimestamp (0.00s)
  975. === RUN TestParseTimestampedLine_SanitizesInvalidUTF8
  976. --- PASS: TestParseTimestampedLine_SanitizesInvalidUTF8 (0.00s)
  977. === RUN TestBuildNetworkProbeCommand
  978. === RUN TestBuildNetworkProbeCommand/http_carries_path,_whole-second_timeout,_and_exact_endpoint
  979. === RUN TestBuildNetworkProbeCommand/tcp_carries_no_path
  980. === RUN TestBuildNetworkProbeCommand/nc_bound_stays_strictly_under_the_attempt_bound
  981. === RUN TestBuildNetworkProbeCommand/timeout_is_clamped_into_the_bounded_window
  982. --- PASS: TestBuildNetworkProbeCommand (0.00s)
  983. --- PASS: TestBuildNetworkProbeCommand/http_carries_path,_whole-second_timeout,_and_exact_endpoint (0.00s)
  984. --- PASS: TestBuildNetworkProbeCommand/tcp_carries_no_path (0.00s)
  985. --- PASS: TestBuildNetworkProbeCommand/nc_bound_stays_strictly_under_the_attempt_bound (0.00s)
  986. --- PASS: TestBuildNetworkProbeCommand/timeout_is_clamped_into_the_bounded_window (0.00s)
  987. === RUN TestProbeHelperHostConfig_IsHardened
  988. --- PASS: TestProbeHelperHostConfig_IsHardened (0.00s)
  989. === RUN TestProbeHelperConfig_NoSharedNetworks
  990. --- PASS: TestProbeHelperConfig_NoSharedNetworks (0.00s)
  991. === RUN TestParseProbeStatus
  992. --- PASS: TestParseProbeStatus (0.00s)
  993. === RUN TestCappedProbeBuffer
  994. --- PASS: TestCappedProbeBuffer (0.00s)
  995. === RUN TestHTTPProbeScript_RequiresThreeDigitStatus
  996. --- PASS: TestHTTPProbeScript_RequiresThreeDigitStatus (0.00s)
  997. === RUN TestProbeCleanupResult_PriorErrorNeverHidesCleanupFailure
  998. <U+001B>[90m2026-10-22T08:23:55Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1mfailed to remove network probe helper<U+001B>[0m <U+001B>[36merror=<U+001B>[0m<U+001B>[31m<U+001B>[1m"remove failed"<U+001B>[0m<U+001B>[0m
  999. --- PASS: TestProbeCleanupResult_PriorErrorNeverHidesCleanupFailure (0.00s)
  1000. === RUN TestProbeBoundExpired_OnlySessionDeadline
  1001. --- PASS: TestProbeBoundExpired_OnlySessionDeadline (0.00s)
  1002. === RUN TestProbeTimeoutFailure_IsUnhealthyNotError
  1003. --- PASS: TestProbeTimeoutFailure_IsUnhealthyNotError (0.00s)
  1004. === RUN TestProbeDiagnostic
  1005. --- PASS: TestProbeDiagnostic (0.00s)
  1006. === RUN TestDefaultNetworkProbeImage_IsDigestPinned
  1007. --- PASS: TestDefaultNetworkProbeImage_IsDigestPinned (0.00s)
  1008. === RUN TestRuntime_GetContainerNetwork
  1009. --- PASS: TestRuntime_GetContainerNetwork (0.00s)
  1010. === RUN TestRuntime_GetContainerNetwork_Fallback
  1011. --- PASS: TestRuntime_GetContainerNetwork_Fallback (0.00s)
  1012. === RUN TestRuntime_GetContainerNetwork_EmptyNetworks
  1013. --- PASS: TestRuntime_GetContainerNetwork_EmptyNetworks (0.00s)
  1014. === RUN TestRuntime_GetContainerNetwork_NilNetworkSettings
  1015. --- PASS: TestRuntime_GetContainerNetwork_NilNetworkSettings (0.00s)
  1016. === RUN TestRuntime_GetContainerBackendBindsRejectsMalformedMappings
  1017. === RUN TestRuntime_GetContainerBackendBindsRejectsMalformedMappings/wildcard
  1018. === RUN TestRuntime_GetContainerBackendBindsRejectsMalformedMappings/non-loopback
  1019. === RUN TestRuntime_GetContainerBackendBindsRejectsMalformedMappings/empty_host_ip
  1020. === RUN TestRuntime_GetContainerBackendBindsRejectsMalformedMappings/multiple_bindings
  1021. === RUN TestRuntime_GetContainerBackendBindsRejectsMalformedMappings/invalid_host_port
  1022. --- PASS: TestRuntime_GetContainerBackendBindsRejectsMalformedMappings (0.01s)
  1023. --- PASS: TestRuntime_GetContainerBackendBindsRejectsMalformedMappings/wildcard (0.00s)
  1024. --- PASS: TestRuntime_GetContainerBackendBindsRejectsMalformedMappings/non-loopback (0.00s)
  1025. --- PASS: TestRuntime_GetContainerBackendBindsRejectsMalformedMappings/empty_host_ip (0.00s)
  1026. --- PASS: TestRuntime_GetContainerBackendBindsRejectsMalformedMappings/multiple_bindings (0.00s)
  1027. --- PASS: TestRuntime_GetContainerBackendBindsRejectsMalformedMappings/invalid_host_port (0.00s)
  1028. === RUN TestRuntime_GetContainerBackendBindsResolvesTCPAndUDPTogether
  1029. --- PASS: TestRuntime_GetContainerBackendBindsResolvesTCPAndUDPTogether (0.00s)
  1030. === RUN TestRuntime_GetContainerBackendBindsFailsWhenProtocolMissing
  1031. --- PASS: TestRuntime_GetContainerBackendBindsFailsWhenProtocolMissing (0.00s)
  1032. === RUN TestRuntime_CreateContainerPublishesExplicitUDPPort
  1033. --- PASS: TestRuntime_CreateContainerPublishesExplicitUDPPort (0.00s)
  1034. === RUN TestRuntime_CreateContainerKeepsLegacyPortsRandomLoopbackTCP
  1035. --- PASS: TestRuntime_CreateContainerKeepsLegacyPortsRandomLoopbackTCP (0.00s)
  1036. === RUN TestRuntime_CreateContainerAppliesRestartPolicy
  1037. --- PASS: TestRuntime_CreateContainerAppliesRestartPolicy (0.00s)
  1038. === RUN TestRuntime_CreateContainerMountsDeclaredReadOnlyVolumes
  1039. --- PASS: TestRuntime_CreateContainerMountsDeclaredReadOnlyVolumes (0.00s)
  1040. === RUN TestRuntime_CreateContainerAppliesNetworkAndResourceLimits
  1041. --- PASS: TestRuntime_CreateContainerAppliesNetworkAndResourceLimits (0.00s)
  1042. === RUN TestRuntime_CreateContainerTranslatesBindMounts
  1043. --- PASS: TestRuntime_CreateContainerTranslatesBindMounts (0.00s)
  1044. === RUN TestBuildBindMounts
  1045. === RUN TestBuildBindMounts/sorts_by_destination
  1046. === RUN TestBuildBindMounts/invalid_paths_rejected_without_echoing_source
  1047. === RUN TestBuildBindMounts/invalid_paths_rejected_without_echoing_source/relative_source
  1048. === RUN TestBuildBindMounts/invalid_paths_rejected_without_echoing_source/empty_source
  1049. === RUN TestBuildBindMounts/invalid_paths_rejected_without_echoing_source/unclean_source
  1050. === RUN TestBuildBindMounts/invalid_paths_rejected_without_echoing_source/relative_destination
  1051. === RUN TestBuildBindMounts/invalid_paths_rejected_without_echoing_source/sensitive_destination
  1052. === RUN TestBuildBindMounts/duplicate_destination_rejected
  1053. --- PASS: TestBuildBindMounts (0.00s)
  1054. --- PASS: TestBuildBindMounts/sorts_by_destination (0.00s)
  1055. --- PASS: TestBuildBindMounts/invalid_paths_rejected_without_echoing_source (0.00s)
  1056. --- PASS: TestBuildBindMounts/invalid_paths_rejected_without_echoing_source/relative_source (0.00s)
  1057. --- PASS: TestBuildBindMounts/invalid_paths_rejected_without_echoing_source/empty_source (0.00s)
  1058. --- PASS: TestBuildBindMounts/invalid_paths_rejected_without_echoing_source/unclean_source (0.00s)
  1059. --- PASS: TestBuildBindMounts/invalid_paths_rejected_without_echoing_source/relative_destination (0.00s)
  1060. --- PASS: TestBuildBindMounts/invalid_paths_rejected_without_echoing_source/sensitive_destination (0.00s)
  1061. --- PASS: TestBuildBindMounts/duplicate_destination_rejected (0.00s)
  1062. === RUN TestMergeAddedCapabilities
  1063. --- PASS: TestMergeAddedCapabilities (0.00s)
  1064. === RUN TestRuntime_CreateContainerAddsGrantedCapabilitiesOnTopOfDefaults
  1065. --- PASS: TestRuntime_CreateContainerAddsGrantedCapabilitiesOnTopOfDefaults (0.00s)
  1066. === RUN TestRuntime_CreateContainerWithoutGrantsKeepsDefaultCapabilities
  1067. --- PASS: TestRuntime_CreateContainerWithoutGrantsKeepsDefaultCapabilities (0.00s)
  1068. === RUN TestBuildDeviceRequests_EmptyIsNil
  1069. --- PASS: TestBuildDeviceRequests_EmptyIsNil (0.00s)
  1070. === RUN TestBuildDeviceRequests_OneNativeCDIRequest
  1071. --- PASS: TestBuildDeviceRequests_OneNativeCDIRequest (0.00s)
  1072. === RUN TestBuildDeviceRequests_DoesNotMutateConfig
  1073. --- PASS: TestBuildDeviceRequests_DoesNotMutateConfig (0.00s)
  1074. === RUN TestCheckCDISupportMatrix
  1075. === RUN TestCheckCDISupportMatrix/podman_6.1.1
  1076. === RUN TestCheckCDISupportMatrix/podman_5.4_exact
  1077. === RUN TestCheckCDISupportMatrix/podman_4.9_refused
  1078. === RUN TestCheckCDISupportMatrix/docker_28.3
  1079. === RUN TestCheckCDISupportMatrix/docker_27_refused
  1080. === RUN TestCheckCDISupportMatrix/unknown_engine_refused
  1081. === RUN TestCheckCDISupportMatrix/socket_hint_podman_accepted
  1082. === RUN TestCheckCDISupportMatrix/unparsable_version_refused
  1083. === RUN TestCheckCDISupportMatrix/prerelease_minor_refused
  1084. --- PASS: TestCheckCDISupportMatrix (0.00s)
  1085. --- PASS: TestCheckCDISupportMatrix/podman_6.1.1 (0.00s)
  1086. --- PASS: TestCheckCDISupportMatrix/podman_5.4_exact (0.00s)
  1087. --- PASS: TestCheckCDISupportMatrix/podman_4.9_refused (0.00s)
  1088. --- PASS: TestCheckCDISupportMatrix/docker_28.3 (0.00s)
  1089. --- PASS: TestCheckCDISupportMatrix/docker_27_refused (0.00s)
  1090. --- PASS: TestCheckCDISupportMatrix/unknown_engine_refused (0.00s)
  1091. --- PASS: TestCheckCDISupportMatrix/socket_hint_podman_accepted (0.00s)
  1092. --- PASS: TestCheckCDISupportMatrix/unparsable_version_refused (0.00s)
  1093. --- PASS: TestCheckCDISupportMatrix/prerelease_minor_refused (0.00s)
  1094. === RUN TestCompareEngineVersion
  1095. --- PASS: TestCompareEngineVersion (0.00s)
  1096. === RUN TestEngineProbeError
  1097. === RUN TestEngineProbeError/canceled_probe_keeps_the_sentinel_and_drops_the_endpoint
  1098. === RUN TestEngineProbeError/canceled_adapter_cause_is_preserved
  1099. === RUN TestEngineProbeError/other_probe_failures_stay_redacted
  1100. --- PASS: TestEngineProbeError (0.00s)
  1101. --- PASS: TestEngineProbeError/canceled_probe_keeps_the_sentinel_and_drops_the_endpoint (0.00s)
  1102. --- PASS: TestEngineProbeError/canceled_adapter_cause_is_preserved (0.00s)
  1103. --- PASS: TestEngineProbeError/other_probe_failures_stay_redacted (0.00s)
  1104. === RUN TestParseExecOutput_SplitsStdoutAndStderr
  1105. --- PASS: TestParseExecOutput_SplitsStdoutAndStderr (0.00s)
  1106. === RUN TestParseExecOutput_RejectsOversizedFrameBeforeReadingPayload
  1107. --- PASS: TestParseExecOutput_RejectsOversizedFrameBeforeReadingPayload (0.00s)
  1108. === RUN TestRuntime_ExecInContainer_RejectsEmptyCommand
  1109. === RUN TestRuntime_ExecInContainer_RejectsEmptyCommand/nil
  1110. === RUN TestRuntime_ExecInContainer_RejectsEmptyCommand/empty_slice
  1111. --- PASS: TestRuntime_ExecInContainer_RejectsEmptyCommand (0.00s)
  1112. --- PASS: TestRuntime_ExecInContainer_RejectsEmptyCommand/nil (0.00s)
  1113. --- PASS: TestRuntime_ExecInContainer_RejectsEmptyCommand/empty_slice (0.00s)
  1114. === RUN TestExtractFileFromTarMatchesFullCleanPath
  1115. --- PASS: TestExtractFileFromTarMatchesFullCleanPath (0.00s)
  1116. === RUN TestExtractFileFromTarMatchesBasenameForCopiedFile
  1117. --- PASS: TestExtractFileFromTarMatchesBasenameForCopiedFile (0.00s)
  1118. === RUN TestExtractFileFromTarPrefersExactPathOverBasename
  1119. --- PASS: TestExtractFileFromTarPrefersExactPathOverBasename (0.00s)
  1120. === RUN TestExtractFileFromTarRejectsAmbiguousBasenameFallback
  1121. --- PASS: TestExtractFileFromTarRejectsAmbiguousBasenameFallback (0.00s)
  1122. === RUN TestExtractFileFromTarDoesNotMatchBasenameInNestedDirectory
  1123. --- PASS: TestExtractFileFromTarDoesNotMatchBasenameInNestedDirectory (0.00s)
  1124. === RUN TestReadExtractedEnvFileRejectsOversizedContent
  1125. --- PASS: TestReadExtractedEnvFileRejectsOversizedContent (0.01s)
  1126. === RUN TestRuntime_GetContainerHealthStatus_ConfiguredHealthcheck
  1127. --- PASS: TestRuntime_GetContainerHealthStatus_ConfiguredHealthcheck (0.00s)
  1128. === RUN TestRuntime_GetContainerHealthStatus_NoConfiguredHealthcheckWithStateHealthObject
  1129. --- PASS: TestRuntime_GetContainerHealthStatus_NoConfiguredHealthcheckWithStateHealthObject (0.00s)
  1130. === RUN TestRuntime_GetContainerHealthStatus_DisabledHealthcheck
  1131. --- PASS: TestRuntime_GetContainerHealthStatus_DisabledHealthcheck (0.00s)
  1132. === RUN TestRuntime_InspectContainer_ReportsConfiguredCapAdd
  1133. --- PASS: TestRuntime_InspectContainer_ReportsConfiguredCapAdd (0.00s)
  1134. === RUN Test_sortPortsHTTPFirst
  1135. === RUN Test_sortPortsHTTPFirst/single_port_unchanged
  1136. === RUN Test_sortPortsHTTPFirst/SSH_port_pushed_to_end
  1137. === RUN Test_sortPortsHTTPFirst/HTTP_ports_sorted_by_priority
  1138. === RUN Test_sortPortsHTTPFirst/SSH_pushed_behind_non-priority_ports
  1139. === RUN Test_sortPortsHTTPFirst/mixed_priority_and_non-priority_ports
  1140. === RUN Test_sortPortsHTTPFirst/all_non-priority_ports_sorted_ascending
  1141. === RUN Test_sortPortsHTTPFirst/empty_slice_is_no-op
  1142. === RUN Test_sortPortsHTTPFirst/gitea-style_multi-port_image
  1143. --- PASS: Test_sortPortsHTTPFirst (0.00s)
  1144. --- PASS: Test_sortPortsHTTPFirst/single_port_unchanged (0.00s)
  1145. --- PASS: Test_sortPortsHTTPFirst/SSH_port_pushed_to_end (0.00s)
  1146. --- PASS: Test_sortPortsHTTPFirst/HTTP_ports_sorted_by_priority (0.00s)
  1147. --- PASS: Test_sortPortsHTTPFirst/SSH_pushed_behind_non-priority_ports (0.00s)
  1148. --- PASS: Test_sortPortsHTTPFirst/mixed_priority_and_non-priority_ports (0.00s)
  1149. --- PASS: Test_sortPortsHTTPFirst/all_non-priority_ports_sorted_ascending (0.00s)
  1150. --- PASS: Test_sortPortsHTTPFirst/empty_slice_is_no-op (0.00s)
  1151. --- PASS: Test_sortPortsHTTPFirst/gitea-style_multi-port_image (0.00s)
  1152. === RUN TestRuntime_InventoryRuntime
  1153. --- PASS: TestRuntime_InventoryRuntime (0.00s)
  1154. === RUN TestRuntime_InventoryRuntimeReportsGapsNotAbsence
  1155. --- PASS: TestRuntime_InventoryRuntimeReportsGapsNotAbsence (0.00s)
  1156. === RUN TestRuntime_InventoryRuntimeContainerListFailureProtectsImages
  1157. --- PASS: TestRuntime_InventoryRuntimeContainerListFailureProtectsImages (0.00s)
  1158. === RUN TestRuntime_RemoveImageExactUsesExactIdentityWithoutForce
  1159. --- PASS: TestRuntime_RemoveImageExactUsesExactIdentityWithoutForce (0.00s)
  1160. === RUN TestRuntime_RemoveVolumeExactUsesExactIdentityWithoutForce
  1161. --- PASS: TestRuntime_RemoveVolumeExactUsesExactIdentityWithoutForce (0.00s)
  1162. === RUN TestRuntime_ExactRemovalRejectsInvalidIdentity
  1163. --- PASS: TestRuntime_ExactRemovalRejectsInvalidIdentity (0.00s)
  1164. === RUN TestRuntime_ExactRemovalPropagatesRuntimeErrors
  1165. --- PASS: TestRuntime_ExactRemovalPropagatesRuntimeErrors (0.00s)
  1166. === RUN TestRuntime_InspectContainerReportsNotFoundSentinel
  1167. --- PASS: TestRuntime_InspectContainerReportsNotFoundSentinel (0.00s)
  1168. === RUN TestRuntime_InspectContainerPreservesTransientErrors
  1169. --- PASS: TestRuntime_InspectContainerPreservesTransientErrors (0.00s)
  1170. === RUN TestRuntime_InspectContainerNormalizesStatusAndExecutionStart
  1171. === RUN TestRuntime_InspectContainerNormalizesStatusAndExecutionStart/running
  1172. === RUN TestRuntime_InspectContainerNormalizesStatusAndExecutionStart/exited
  1173. === RUN TestRuntime_InspectContainerNormalizesStatusAndExecutionStart/restarting
  1174. === RUN TestRuntime_InspectContainerNormalizesStatusAndExecutionStart/paused
  1175. === RUN TestRuntime_InspectContainerNormalizesStatusAndExecutionStart/created
  1176. --- PASS: TestRuntime_InspectContainerNormalizesStatusAndExecutionStart (0.00s)
  1177. --- PASS: TestRuntime_InspectContainerNormalizesStatusAndExecutionStart/running (0.00s)
  1178. --- PASS: TestRuntime_InspectContainerNormalizesStatusAndExecutionStart/exited (0.00s)
  1179. --- PASS: TestRuntime_InspectContainerNormalizesStatusAndExecutionStart/restarting (0.00s)
  1180. --- PASS: TestRuntime_InspectContainerNormalizesStatusAndExecutionStart/paused (0.00s)
  1181. --- PASS: TestRuntime_InspectContainerNormalizesStatusAndExecutionStart/created (0.00s)
  1182. === RUN TestRuntime_StartContainerReportsNotFoundSentinel
  1183. --- PASS: TestRuntime_StartContainerReportsNotFoundSentinel (0.00s)
  1184. === RUN TestRuntime_GetContainerLogsSinceScopesTheRequest
  1185. --- PASS: TestRuntime_GetContainerLogsSinceScopesTheRequest (0.00s)
  1186. === RUN TestRuntime_GetContainerLogsSinceReportsNotFoundSentinel
  1187. --- PASS: TestRuntime_GetContainerLogsSinceReportsNotFoundSentinel (0.00s)
  1188. === RUN TestRuntime_InspectImageEnv_RedactsValuesInDebugLog
  1189. --- PASS: TestRuntime_InspectImageEnv_RedactsValuesInDebugLog (0.00s)
  1190. === RUN TestWaitForVolumeArchiveContainerIgnoresNilErrorBeforeStatus
  1191. --- PASS: TestWaitForVolumeArchiveContainerIgnoresNilErrorBeforeStatus (0.00s)
  1192. === RUN TestWaitForVolumeArchiveContainerHandlesClosedErrorChannelBeforeStatus
  1193. --- PASS: TestWaitForVolumeArchiveContainerHandlesClosedErrorChannelBeforeStatus (0.00s)
  1194. === RUN TestWaitForVolumeArchiveContainerReturnsErrorChannelError
  1195. --- PASS: TestWaitForVolumeArchiveContainerReturnsErrorChannelError (0.00s)
  1196. === RUN TestWaitForVolumeArchiveContainerErrorsWhenStatusChannelCloses
  1197. --- PASS: TestWaitForVolumeArchiveContainerErrorsWhenStatusChannelCloses (0.00s)
  1198. === RUN TestStopTimeout_ConvertsGraceToAPISeconds
  1199. === RUN TestStopTimeout_ConvertsGraceToAPISeconds/zero_keeps_the_runtime_default
  1200. === RUN TestStopTimeout_ConvertsGraceToAPISeconds/negative_keeps_the_runtime_default
  1201. === RUN TestStopTimeout_ConvertsGraceToAPISeconds/default_app_grace
  1202. === RUN TestStopTimeout_ConvertsGraceToAPISeconds/sub-second_rounds_up
  1203. === RUN TestStopTimeout_ConvertsGraceToAPISeconds/fractional_rounds_up
  1204. === RUN TestStopTimeout_ConvertsGraceToAPISeconds/exact_seconds_are_preserved
  1205. === RUN TestStopTimeout_ConvertsGraceToAPISeconds/the_app_cap_is_preserved
  1206. --- PASS: TestStopTimeout_ConvertsGraceToAPISeconds (0.00s)
  1207. --- PASS: TestStopTimeout_ConvertsGraceToAPISeconds/zero_keeps_the_runtime_default (0.00s)
  1208. --- PASS: TestStopTimeout_ConvertsGraceToAPISeconds/negative_keeps_the_runtime_default (0.00s)
  1209. --- PASS: TestStopTimeout_ConvertsGraceToAPISeconds/default_app_grace (0.00s)
  1210. --- PASS: TestStopTimeout_ConvertsGraceToAPISeconds/sub-second_rounds_up (0.00s)
  1211. --- PASS: TestStopTimeout_ConvertsGraceToAPISeconds/fractional_rounds_up (0.00s)
  1212. --- PASS: TestStopTimeout_ConvertsGraceToAPISeconds/exact_seconds_are_preserved (0.00s)
  1213. --- PASS: TestStopTimeout_ConvertsGraceToAPISeconds/the_app_cap_is_preserved (0.00s)
  1214. PASS
  1215. ok github.com/bnema/gordon/internal/adapters/out/docker 1.108s
  1216. ? github.com/bnema/gordon/internal/adapters/out/eventbus [no test files]
  1217. === RUN TestBackupStorage_StoreAndGet
  1218. --- PASS: TestBackupStorage_StoreAndGet (0.00s)
  1219. === RUN TestBackupStorage_StoreSameSecondBackupsUseDistinctFinalAndTempPaths
  1220. --- PASS: TestBackupStorage_StoreSameSecondBackupsUseDistinctFinalAndTempPaths (0.00s)
  1221. === RUN TestBackupStorage_PreservesCanonicalIdentityAndSeparatesSameNamedDatabases
  1222. --- PASS: TestBackupStorage_PreservesCanonicalIdentityAndSeparatesSameNamedDatabases (0.00s)
  1223. === RUN TestBackupStorage_DoesNotMergePreCutoverRecords
  1224. --- PASS: TestBackupStorage_DoesNotMergePreCutoverRecords (0.00s)
  1225. === RUN TestBackupStorage_ListWithScheduleFilter
  1226. --- PASS: TestBackupStorage_ListWithScheduleFilter (0.00s)
  1227. === RUN TestBackupStorage_Delete
  1228. --- PASS: TestBackupStorage_Delete (0.00s)
  1229. === RUN TestBackupStorage_ApplyRetention
  1230. --- PASS: TestBackupStorage_ApplyRetention (0.00s)
  1231. === RUN TestBackupStorage_StoreSanitizesDotOnlyPathComponents
  1232. --- PASS: TestBackupStorage_StoreSanitizesDotOnlyPathComponents (0.00s)
  1233. === RUN TestBackupStorage_StoreSanitizesSchedulePathComponent
  1234. --- PASS: TestBackupStorage_StoreSanitizesSchedulePathComponent (0.00s)
  1235. === RUN TestBlobStorage_CleanupStaleUploads_RemovesOldFiles
  1236. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_CleanupStaleUploads_RemovesOldFiles1169463292/001
  1237. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mremoved stale upload<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36msize=<U+001B>[0m1024 <U+001B>[36muuid=<U+001B>[0mstale-uuid-1234
  1238. --- PASS: TestBlobStorage_CleanupStaleUploads_RemovesOldFiles (0.00s)
  1239. === RUN TestBlobStorage_CleanupStaleUploads_PreservesRecentFiles
  1240. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_CleanupStaleUploads_PreservesRecentFiles3221381154/001
  1241. --- PASS: TestBlobStorage_CleanupStaleUploads_PreservesRecentFiles (0.00s)
  1242. === RUN TestBlobStorage_CleanupStaleUploads_EmptyUploadsDir
  1243. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_CleanupStaleUploads_EmptyUploadsDir1204262072/001
  1244. --- PASS: TestBlobStorage_CleanupStaleUploads_EmptyUploadsDir (0.00s)
  1245. === RUN TestBlobStorage_CleanupStaleUploads_MixedAges
  1246. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_CleanupStaleUploads_MixedAges1810035615/001
  1247. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mremoved stale upload<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36msize=<U+001B>[0m2048 <U+001B>[36muuid=<U+001B>[0mstale-uuid
  1248. --- PASS: TestBlobStorage_CleanupStaleUploads_MixedAges (0.00s)
  1249. === RUN TestNewBlobStorage
  1250. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestNewBlobStorage253012530/001
  1251. --- PASS: TestNewBlobStorage (0.00s)
  1252. === RUN TestNewBlobStorage_InvalidPath
  1253. --- PASS: TestNewBlobStorage_InvalidPath (0.00s)
  1254. === RUN TestBlobStorage_PutAndGetBlob
  1255. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_PutAndGetBlob3073290834/001
  1256. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36msize_bytes=<U+001B>[0m17
  1257. --- PASS: TestBlobStorage_PutAndGetBlob (0.00s)
  1258. === RUN TestBlobStorage_GetBlob_NotFound
  1259. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_GetBlob_NotFound939962819/001
  1260. --- PASS: TestBlobStorage_GetBlob_NotFound (0.00s)
  1261. === RUN TestBlobStorage_GetBlobPath
  1262. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_GetBlobPath3105171576/001
  1263. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36msize_bytes=<U+001B>[0m17
  1264. --- PASS: TestBlobStorage_GetBlobPath (0.00s)
  1265. === RUN TestBlobStorage_GetBlobPath_NotFound
  1266. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_GetBlobPath_NotFound394836739/001
  1267. --- PASS: TestBlobStorage_GetBlobPath_NotFound (0.00s)
  1268. === RUN TestBlobStorage_PutBlob_SizeMismatch
  1269. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_PutBlob_SizeMismatch4114999355/001
  1270. --- PASS: TestBlobStorage_PutBlob_SizeMismatch (0.00s)
  1271. === RUN TestBlobStorage_PutBlob_ZeroSize
  1272. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_PutBlob_ZeroSize3913759062/001
  1273. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:b3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d5 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36msize_bytes=<U+001B>[0m17
  1274. --- PASS: TestBlobStorage_PutBlob_ZeroSize (0.00s)
  1275. === RUN TestBlobStorage_DeleteBlob
  1276. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_DeleteBlob1329402853/001
  1277. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:b3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d5 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36msize_bytes=<U+001B>[0m17
  1278. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob deleted<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:b3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d5 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36msize_bytes=<U+001B>[0m17
  1279. --- PASS: TestBlobStorage_DeleteBlob (0.00s)
  1280. === RUN TestBlobStorage_DeleteBlob_NotFound
  1281. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_DeleteBlob_NotFound3182534200/001
  1282. --- PASS: TestBlobStorage_DeleteBlob_NotFound (0.00s)
  1283. === RUN TestBlobStorage_BlobExists
  1284. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_BlobExists3838992741/001
  1285. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:b3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d5 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36msize_bytes=<U+001B>[0m17
  1286. --- PASS: TestBlobStorage_BlobExists (0.00s)
  1287. === RUN TestBlobStorage_ListBlobs
  1288. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_ListBlobs3815818051/001
  1289. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36msize_bytes=<U+001B>[0m17
  1290. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:b3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d5 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36msize_bytes=<U+001B>[0m17
  1291. --- PASS: TestBlobStorage_ListBlobs (0.00s)
  1292. === RUN TestBlobStorage_ListBlobs_Empty
  1293. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_ListBlobs_Empty949215507/001
  1294. --- PASS: TestBlobStorage_ListBlobs_Empty (0.00s)
  1295. === RUN TestBlobStorage_StartBlobUpload
  1296. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_StartBlobUpload2157185594/001
  1297. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m446cbe7b-56eb-4ae3-9d39-c3ff245c3473
  1298. --- PASS: TestBlobStorage_StartBlobUpload (0.00s)
  1299. === RUN TestBlobStorage_AppendBlobChunk
  1300. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_AppendBlobChunk2184606715/001
  1301. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m7cb18512-48fc-4495-8865-b666a1c9fd6e
  1302. --- PASS: TestBlobStorage_AppendBlobChunk (0.00s)
  1303. === RUN TestBlobStorage_AppendBlobChunk_NotFound
  1304. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_AppendBlobChunk_NotFound3825893072/001
  1305. --- PASS: TestBlobStorage_AppendBlobChunk_NotFound (0.00s)
  1306. === RUN TestBlobStorage_AppendBlobChunk_MaxBlobSize
  1307. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_AppendBlobChunk_MaxBlobSize2254218516/001
  1308. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m77397e7e-0268-4059-af4e-2ce8aa6587a8
  1309. --- PASS: TestBlobStorage_AppendBlobChunk_MaxBlobSize (0.00s)
  1310. === RUN TestBlobStorage_AppendBlobChunk_MaxBlobSizeContentLengthTooLargeDoesNotRead
  1311. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_AppendBlobChunk_MaxBlobSizeContentLengthTooLarge4082353754/001
  1312. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0ma39eaeb4-abc2-47bb-8b82-6e99c22e33e2
  1313. --- PASS: TestBlobStorage_AppendBlobChunk_MaxBlobSizeContentLengthTooLargeDoesNotRead (0.00s)
  1314. === RUN TestBlobStorage_AppendBlobChunk_MaxBlobSizeOverflowMidReadTruncates
  1315. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_AppendBlobChunk_MaxBlobSizeOverflowMidReadTrunca316578184/001
  1316. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m0da6c358-b81c-42c2-bd19-d54b2648e7b7
  1317. --- PASS: TestBlobStorage_AppendBlobChunk_MaxBlobSizeOverflowMidReadTruncates (0.00s)
  1318. === RUN TestBlobStorage_GetBlobUpload
  1319. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_GetBlobUpload2998001977/001
  1320. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0mb1d52727-bc92-4399-8564-a4991e3093d8
  1321. --- PASS: TestBlobStorage_GetBlobUpload (0.00s)
  1322. === RUN TestBlobStorage_GetBlobUpload_NotFound
  1323. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_GetBlobUpload_NotFound2580924057/001
  1324. --- PASS: TestBlobStorage_GetBlobUpload_NotFound (0.00s)
  1325. === RUN TestBlobStorage_FinishBlobUpload
  1326. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_FinishBlobUpload132812385/001
  1327. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0mcb1ed31e-210b-46f7-b976-bcd3821315cf
  1328. --- PASS: TestBlobStorage_FinishBlobUpload (0.00s)
  1329. === RUN TestBlobStorage_CancelBlobUpload
  1330. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_CancelBlobUpload2521052866/001
  1331. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m8e66a23b-0822-4b1e-b5ba-bbccc764ba7b
  1332. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload cancelled<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m8e66a23b-0822-4b1e-b5ba-bbccc764ba7b
  1333. --- PASS: TestBlobStorage_CancelBlobUpload (0.00s)
  1334. === RUN TestBlobStorage_CancelBlobUpload_NotFound
  1335. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_CancelBlobUpload_NotFound3909342215/001
  1336. --- PASS: TestBlobStorage_CancelBlobUpload_NotFound (0.00s)
  1337. === RUN TestBlobStorage_BlobPathStructure
  1338. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_BlobPathStructure742708555/001
  1339. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36msize_bytes=<U+001B>[0m17
  1340. --- PASS: TestBlobStorage_BlobPathStructure (0.00s)
  1341. === RUN TestBlobStorage_DigestFormats
  1342. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_DigestFormats3181560821/001
  1343. === RUN TestBlobStorage_DigestFormats/sha256_standard
  1344. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36msize_bytes=<U+001B>[0m88
  1345. === RUN TestBlobStorage_DigestFormats/sha512
  1346. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha512:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36msize_bytes=<U+001B>[0m152
  1347. --- PASS: TestBlobStorage_DigestFormats (0.00s)
  1348. --- PASS: TestBlobStorage_DigestFormats/sha256_standard (0.00s)
  1349. --- PASS: TestBlobStorage_DigestFormats/sha512 (0.00s)
  1350. === RUN TestBlobStorage_CompleteUploadFlow
  1351. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_CompleteUploadFlow3098151535/001
  1352. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyorg/myapp <U+001B>[36muuid=<U+001B>[0m140d30d6-0d01-4ee5-9e5d-e5a31525e7e1
  1353. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload cancelled<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyorg/myapp <U+001B>[36muuid=<U+001B>[0m140d30d6-0d01-4ee5-9e5d-e5a31525e7e1
  1354. --- PASS: TestBlobStorage_CompleteUploadFlow (0.00s)
  1355. === RUN TestBlobStorage_ConcurrentAppendAndFinalize
  1356. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_ConcurrentAppendAndFinalize2139033938/001
  1357. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m20ea04a6-ed7d-4672-a2fc-33a8ab4a754b
  1358. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload finished<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:e28df5bd6963a61ee101b65a7bb927154720ff11bb96e66fac684a61c8265b65 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m20ea04a6-ed7d-4672-a2fc-33a8ab4a754b
  1359. --- PASS: TestBlobStorage_ConcurrentAppendAndFinalize (0.00s)
  1360. === RUN TestBlobStorage_AppendAfterFinalize
  1361. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_AppendAfterFinalize2858428988/001
  1362. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m4ecd363c-fbea-49f3-852d-c0de876a3489
  1363. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload finished<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:230d6ef6dba6e66b584ea80ab7f70d5654e1149930c6f555b4d40ce0df212677 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m4ecd363c-fbea-49f3-852d-c0de876a3489
  1364. --- PASS: TestBlobStorage_AppendAfterFinalize (0.00s)
  1365. === RUN TestBlobStorage_FinishBlobUploadMarksBlobAsRecentlyFinalized
  1366. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_FinishBlobUploadMarksBlobAsRecentlyFinalized2265458089/001
  1367. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0mfd2e4318-6cb4-4a38-9804-ee55ec3ce689
  1368. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload finished<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:230d6ef6dba6e66b584ea80ab7f70d5654e1149930c6f555b4d40ce0df212677 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0mfd2e4318-6cb4-4a38-9804-ee55ec3ce689
  1369. --- PASS: TestBlobStorage_FinishBlobUploadMarksBlobAsRecentlyFinalized (0.00s)
  1370. === RUN TestBlobStorage_FailedFinalizeRetryable
  1371. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_FailedFinalizeRetryable1455439861/001
  1372. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0md4f8477e-98d2-4d40-a1dd-f1fe465e70a2
  1373. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload finished<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:23eba1d161026739b83ff8de576b8fe41a81239c4f759d2e870143568b95b074 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0md4f8477e-98d2-4d40-a1dd-f1fe465e70a2
  1374. --- PASS: TestBlobStorage_FailedFinalizeRetryable (0.00s)
  1375. === RUN TestBlobStorage_SequentialFlow
  1376. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_SequentialFlow2446689598/001
  1377. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m4c9408f3-062b-429a-9702-bfba661bda7d
  1378. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload finished<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:26ec65d7941970f710a75fe966c09fdef470067ef7072951beae88e4f36d6e1c <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m4c9408f3-062b-429a-9702-bfba661bda7d
  1379. --- PASS: TestBlobStorage_SequentialFlow (0.00s)
  1380. === RUN TestBlobStorage_UploadBoundToRepository
  1381. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_UploadBoundToRepository3108333385/001
  1382. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mowner <U+001B>[36muuid=<U+001B>[0m097c41db-c944-4b2d-b159-a06115e2d776
  1383. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload finished<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:f57e412226282015394463a91a090cdb7508e746819cb38979d22fa98592f574 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mowner <U+001B>[36muuid=<U+001B>[0m097c41db-c944-4b2d-b159-a06115e2d776
  1384. --- PASS: TestBlobStorage_UploadBoundToRepository (0.00s)
  1385. === RUN TestBlobStorage_BlobOwnershipPersistsAcrossRestart
  1386. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_BlobOwnershipPersistsAcrossRestart161875223/001
  1387. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m03206fdc-678a-48bb-bb27-bcfeb08a8b02
  1388. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload finished<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mdigest=<U+001B>[0msha256:371ff2b882c995407dfcbb34cb71c4bbc2427dc1ecd7bb25e7fdb9a312102d98 <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m03206fdc-678a-48bb-bb27-bcfeb08a8b02
  1389. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_BlobOwnershipPersistsAcrossRestart161875223/001
  1390. --- PASS: TestBlobStorage_BlobOwnershipPersistsAcrossRestart (0.00s)
  1391. === RUN TestBlobStorage_FailedFinishDoesNotRecordOwnership
  1392. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestBlobStorage_FailedFinishDoesNotRecordOwnership1877238982/001
  1393. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mblob upload started<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36muuid=<U+001B>[0m8c58efb6-9869-4c91-a70f-d720a5135846
  1394. --- PASS: TestBlobStorage_FailedFinishDoesNotRecordOwnership (0.00s)
  1395. === RUN TestNewManifestStorage
  1396. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestNewManifestStorage652083874/001
  1397. --- PASS: TestNewManifestStorage (0.00s)
  1398. === RUN TestNewManifestStorage_InvalidPath
  1399. --- PASS: TestNewManifestStorage_InvalidPath (0.00s)
  1400. === RUN TestManifestStorage_PutAndGetManifest
  1401. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_PutAndGetManifest349550987/001
  1402. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mlatest
  1403. --- PASS: TestManifestStorage_PutAndGetManifest (0.00s)
  1404. === RUN TestManifestStorage_PutMirrorsDigest
  1405. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_PutMirrorsDigest2663662818/001
  1406. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mv1
  1407. --- PASS: TestManifestStorage_PutMirrorsDigest (0.00s)
  1408. === RUN TestManifestStorage_GetManifest_NotFound
  1409. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_GetManifest_NotFound2878051645/001
  1410. --- PASS: TestManifestStorage_GetManifest_NotFound (0.00s)
  1411. === RUN TestManifestStorage_GetManifestModTime
  1412. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_GetManifestModTime3984058724/001
  1413. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mlatest
  1414. --- PASS: TestManifestStorage_GetManifestModTime (0.00s)
  1415. === RUN TestManifestStorage_GetManifestModTime_NotFound
  1416. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_GetManifestModTime_NotFound3533829252/001
  1417. --- PASS: TestManifestStorage_GetManifestModTime_NotFound (0.00s)
  1418. === RUN TestManifestStorage_GetManifest_FallbackContentType
  1419. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_GetManifest_FallbackContentType1861184802/001
  1420. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1mcould not get manifest content type, falling back to default<U+001B>[0m <U+001B>[36merror=<U+001B>[0m<U+001B>[31m<U+001B>[1m"open /tmp/TestManifestStorage_GetManifest_FallbackContentType1861184802/001/repositories/myapp/manifests/latest.contenttype: no such file or directory"<U+001B>[0m<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mlatest
  1421. --- PASS: TestManifestStorage_GetManifest_FallbackContentType (0.00s)
  1422. === RUN TestManifestStorage_DeleteManifest
  1423. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_DeleteManifest3915186190/001
  1424. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mlatest
  1425. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest deleted<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mlatest
  1426. --- PASS: TestManifestStorage_DeleteManifest (0.00s)
  1427. === RUN TestManifestStorage_DeleteManifest_NotFound
  1428. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_DeleteManifest_NotFound1807105496/001
  1429. --- PASS: TestManifestStorage_DeleteManifest_NotFound (0.00s)
  1430. === RUN TestManifestStorage_ListTags
  1431. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_ListTags257195093/001
  1432. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mlatest
  1433. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mv1.0
  1434. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mv2.0
  1435. --- PASS: TestManifestStorage_ListTags (0.00s)
  1436. === RUN TestManifestStorage_ListTags_Empty
  1437. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_ListTags_Empty2752192440/001
  1438. --- PASS: TestManifestStorage_ListTags_Empty (0.00s)
  1439. === RUN TestManifestStorage_ListTags_SkipsDigestReference
  1440. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_ListTags_SkipsDigestReference300699173/001
  1441. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0msha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
  1442. --- PASS: TestManifestStorage_ListTags_SkipsDigestReference (0.00s)
  1443. === RUN TestManifestStorage_ListTags_AfterDelete
  1444. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_ListTags_AfterDelete1293707489/001
  1445. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mlatest
  1446. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mv1.0
  1447. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest deleted<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mv1.0
  1448. --- PASS: TestManifestStorage_ListTags_AfterDelete (0.00s)
  1449. === RUN TestManifestStorage_ListRepositories
  1450. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_ListRepositories3902696200/001
  1451. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mapp1 <U+001B>[36mreference=<U+001B>[0mlatest
  1452. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mapp2 <U+001B>[36mreference=<U+001B>[0mlatest
  1453. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0morg/app3 <U+001B>[36mreference=<U+001B>[0mlatest
  1454. --- PASS: TestManifestStorage_ListRepositories (0.00s)
  1455. === RUN TestManifestStorage_ListRepositories_Empty
  1456. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_ListRepositories_Empty2417712252/001
  1457. --- PASS: TestManifestStorage_ListRepositories_Empty (0.00s)
  1458. === RUN TestManifestStorage_NestedRepositoryNames
  1459. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_NestedRepositoryNames754007716/001
  1460. === RUN TestManifestStorage_NestedRepositoryNames/simple
  1461. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0msimple <U+001B>[36mreference=<U+001B>[0mlatest
  1462. === RUN TestManifestStorage_NestedRepositoryNames/org/project
  1463. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0morg/project <U+001B>[36mreference=<U+001B>[0mv1.0
  1464. === RUN TestManifestStorage_NestedRepositoryNames/org/team/project
  1465. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0morg/team/project <U+001B>[36mreference=<U+001B>[0mv2.0
  1466. === RUN TestManifestStorage_NestedRepositoryNames/deeply/nested/repo/name
  1467. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mdeeply/nested/repo/name <U+001B>[36mreference=<U+001B>[0msha256:abc123
  1468. --- PASS: TestManifestStorage_NestedRepositoryNames (0.00s)
  1469. --- PASS: TestManifestStorage_NestedRepositoryNames/simple (0.00s)
  1470. --- PASS: TestManifestStorage_NestedRepositoryNames/org/project (0.00s)
  1471. --- PASS: TestManifestStorage_NestedRepositoryNames/org/team/project (0.00s)
  1472. --- PASS: TestManifestStorage_NestedRepositoryNames/deeply/nested/repo/name (0.00s)
  1473. === RUN TestManifestStorage_ContentTypes
  1474. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_ContentTypes923844902/001
  1475. === RUN TestManifestStorage_ContentTypes/v2_manifest
  1476. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mtest-repo <U+001B>[36mreference=<U+001B>[0mtag-a
  1477. === RUN TestManifestStorage_ContentTypes/v1_manifest
  1478. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mtest-repo <U+001B>[36mreference=<U+001B>[0mtag-b
  1479. === RUN TestManifestStorage_ContentTypes/OCI_manifest
  1480. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mtest-repo <U+001B>[36mreference=<U+001B>[0mtag-c
  1481. === RUN TestManifestStorage_ContentTypes/OCI_index
  1482. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mtest-repo <U+001B>[36mreference=<U+001B>[0mtag-d
  1483. === RUN TestManifestStorage_ContentTypes/manifest_list
  1484. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mtest-repo <U+001B>[36mreference=<U+001B>[0mtag-e
  1485. --- PASS: TestManifestStorage_ContentTypes (0.00s)
  1486. --- PASS: TestManifestStorage_ContentTypes/v2_manifest (0.00s)
  1487. --- PASS: TestManifestStorage_ContentTypes/v1_manifest (0.00s)
  1488. --- PASS: TestManifestStorage_ContentTypes/OCI_manifest (0.00s)
  1489. --- PASS: TestManifestStorage_ContentTypes/OCI_index (0.00s)
  1490. --- PASS: TestManifestStorage_ContentTypes/manifest_list (0.00s)
  1491. === RUN TestManifestStorage_DuplicateTag
  1492. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_DuplicateTag3225770921/001
  1493. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mlatest
  1494. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mlatest
  1495. --- PASS: TestManifestStorage_DuplicateTag (0.00s)
  1496. === RUN TestManifestStorage_LargeManifest
  1497. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_LargeManifest556434543/001
  1498. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mlarge-app <U+001B>[36mreference=<U+001B>[0mlatest
  1499. --- PASS: TestManifestStorage_LargeManifest (0.04s)
  1500. === RUN TestManifestStorage_SpecialCharactersInReference
  1501. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_SpecialCharactersInReference1014109375/001
  1502. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0msha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
  1503. --- PASS: TestManifestStorage_SpecialCharactersInReference (0.00s)
  1504. === RUN TestManifestStorage_CompleteWorkflow
  1505. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_CompleteWorkflow1824111933/001
  1506. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyorg/myapp <U+001B>[36mreference=<U+001B>[0mv1.0
  1507. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyorg/myapp <U+001B>[36mreference=<U+001B>[0mlatest
  1508. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyorg/myapp <U+001B>[36mreference=<U+001B>[0mv2.0
  1509. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyorg/myapp <U+001B>[36mreference=<U+001B>[0mlatest
  1510. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest deleted<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyorg/myapp <U+001B>[36mreference=<U+001B>[0mv1.0
  1511. --- PASS: TestManifestStorage_CompleteWorkflow (0.00s)
  1512. === RUN TestManifestStorage_UpdateTagsList_CleansLegacyDigestEntries
  1513. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_UpdateTagsList_CleansLegacyDigestEntries2963811790/001
  1514. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mv1.0
  1515. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mv2.0
  1516. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mv3.0
  1517. --- PASS: TestManifestStorage_UpdateTagsList_CleansLegacyDigestEntries (0.00s)
  1518. === RUN TestManifestStorage_RemoveFromTagsList_CleansLegacyDigestEntries
  1519. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest storage initialized<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mroot_dir=<U+001B>[0m/tmp/TestManifestStorage_RemoveFromTagsList_CleansLegacyDigestEntries199012160/001
  1520. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mv1.0
  1521. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mv2.0
  1522. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest stored<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mv3.0
  1523. <U+001B>[90m2026-10-22T08:23:56Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mmanifest deleted<U+001B>[0m <U+001B>[36madapter=<U+001B>[0mfilesystem <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mname=<U+001B>[0mmyapp <U+001B>[36mreference=<U+001B>[0mv2.0
  1524. --- PASS: TestManifestStorage_RemoveFromTagsList_CleansLegacyDigestEntries (0.00s)
  1525. PASS
  1526. ok github.com/bnema/gordon/internal/adapters/out/filesystem 1.136s
  1527. ? github.com/bnema/gordon/internal/adapters/out/httpprober [no test files]
  1528. === RUN TestResolver_PinnedPassesThrough
  1529. --- PASS: TestResolver_PinnedPassesThrough (0.00s)
  1530. === RUN TestResolver_LocalManifestHashes
  1531. --- PASS: TestResolver_LocalManifestHashes (0.00s)
  1532. === RUN TestResolver_ExternalNeedsRemote
  1533. --- PASS: TestResolver_ExternalNeedsRemote (0.00s)
  1534. === RUN TestResolver_RejectsMalformedRemoteDigest
  1535. --- PASS: TestResolver_RejectsMalformedRemoteDigest (0.00s)
  1536. === RUN TestResolver_RejectsDisallowedRefsWithoutConnecting
  1537. --- PASS: TestResolver_RejectsDisallowedRefsWithoutConnecting (0.00s)
  1538. === RUN TestResolver_AllowsInstallationAndAllowlistedRefs
  1539. --- PASS: TestResolver_AllowsInstallationAndAllowlistedRefs (0.00s)
  1540. === RUN TestResolver_RequireDigestRejectsTags
  1541. --- PASS: TestResolver_RequireDigestRejectsTags (0.00s)
  1542. PASS
  1543. ok github.com/bnema/gordon/internal/adapters/out/imageref 1.013s
  1544. === RUN TestNew
  1545. === RUN TestNew/creates_log_directory
  1546. === RUN TestNew/uses_existing_directory
  1547. --- PASS: TestNew (0.00s)
  1548. --- PASS: TestNew/creates_log_directory (0.00s)
  1549. --- PASS: TestNew/uses_existing_directory (0.00s)
  1550. === RUN TestStartLogging
  1551. === RUN TestStartLogging/creates_log_file_and_writes_data
  1552. === RUN TestStartLogging/replaces_existing_log_stream_for_same_container
  1553. --- PASS: TestStartLogging (0.25s)
  1554. --- PASS: TestStartLogging/creates_log_file_and_writes_data (0.10s)
  1555. --- PASS: TestStartLogging/replaces_existing_log_stream_for_same_container (0.15s)
  1556. === RUN TestStopLogging
  1557. === RUN TestStopLogging/stops_log_collection
  1558. === RUN TestStopLogging/noop_for_non-existent_container
  1559. --- PASS: TestStopLogging (0.05s)
  1560. --- PASS: TestStopLogging/stops_log_collection (0.05s)
  1561. --- PASS: TestStopLogging/noop_for_non-existent_container (0.00s)
  1562. === RUN TestClose
  1563. === RUN TestClose/stops_all_log_streams
  1564. --- PASS: TestClose (0.03s)
  1565. --- PASS: TestClose/stops_all_log_streams (0.03s)
  1566. === RUN TestSanitizeDomain
  1567. === RUN TestSanitizeDomain/app.example.com
  1568. === RUN TestSanitizeDomain/api.v1.example.com
  1569. === RUN TestSanitizeDomain/localhost:8080
  1570. === RUN TestSanitizeDomain/app/service
  1571. === RUN TestSanitizeDomain/app_with_spaces
  1572. === RUN TestSanitizeDomain/simple
  1573. --- PASS: TestSanitizeDomain (0.00s)
  1574. --- PASS: TestSanitizeDomain/app.example.com (0.00s)
  1575. --- PASS: TestSanitizeDomain/api.v1.example.com (0.00s)
  1576. --- PASS: TestSanitizeDomain/localhost:8080 (0.00s)
  1577. --- PASS: TestSanitizeDomain/app/service (0.00s)
  1578. --- PASS: TestSanitizeDomain/app_with_spaces (0.00s)
  1579. --- PASS: TestSanitizeDomain/simple (0.00s)
  1580. === RUN TestMultipleContainers
  1581. --- PASS: TestMultipleContainers (0.10s)
  1582. PASS
  1583. ok github.com/bnema/gordon/internal/adapters/out/logwriter 1.440s
  1584. === RUN TestNewCA_GeneratesRootAndIntermediate
  1585. <U+001B>[90m2026-10-22T08:23:57Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mgenerated new root CA<U+001B>[0m <U+001B>[36mcn=<U+001B>[0m"Gordon Internal CA - 2026 ECC Root"
  1586. <U+001B>[90m2026-10-22T08:23:57Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mgenerated new intermediate CA<U+001B>[0m <U+001B>[36mcn=<U+001B>[0m"Gordon Internal CA - ECC Intermediate" <U+001B>[36mexpires=<U+001B>[0m2026-10-29T08:23:57Z
  1587. --- PASS: TestNewCA_GeneratesRootAndIntermediate (0.00s)
  1588. === RUN TestNewCA_LoadsExistingOnRestart
  1589. <U+001B>[90m2026-10-22T08:23:57Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mgenerated new root CA<U+001B>[0m <U+001B>[36mcn=<U+001B>[0m"Gordon Internal CA - 2026 ECC Root"
  1590. <U+001B>[90m2026-10-22T08:23:57Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mgenerated new intermediate CA<U+001B>[0m <U+001B>[36mcn=<U+001B>[0m"Gordon Internal CA - ECC Intermediate" <U+001B>[36mexpires=<U+001B>[0m2026-10-29T08:23:57Z
  1591. <U+001B>[90m2026-10-22T08:23:57Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mloaded existing root CA<U+001B>[0m <U+001B>[36mcn=<U+001B>[0m"Gordon Internal CA - 2026 ECC Root"
  1592. <U+001B>[90m2026-10-22T08:23:57Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mloaded existing intermediate CA<U+001B>[0m <U+001B>[36mcn=<U+001B>[0m"Gordon Internal CA - ECC Intermediate" <U+001B>[36mexpires=<U+001B>[0m2026-10-29T08:23:57Z
  1593. --- PASS: TestNewCA_LoadsExistingOnRestart (0.00s)
  1594. === RUN TestCA_IssueCertificate
  1595. <U+001B>[90m2026-10-22T08:23:57Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mgenerated new root CA<U+001B>[0m <U+001B>[36mcn=<U+001B>[0m"Gordon Internal CA - 2026 ECC Root"
  1596. <U+001B>[90m2026-10-22T08:23:57Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mgenerated new intermediate CA<U+001B>[0m <U+001B>[36mcn=<U+001B>[0m"Gordon Internal CA - ECC Intermediate" <U+001B>[36mexpires=<U+001B>[0m2026-10-29T08:23:57Z
  1597. --- PASS: TestCA_IssueCertificate (0.00s)
  1598. === RUN TestCA_RenewIntermediate
  1599. <U+001B>[90m2026-10-22T08:23:57Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mgenerated new root CA<U+001B>[0m <U+001B>[36mcn=<U+001B>[0m"Gordon Internal CA - 2026 ECC Root"
  1600. <U+001B>[90m2026-10-22T08:23:57Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mgenerated new intermediate CA<U+001B>[0m <U+001B>[36mcn=<U+001B>[0m"Gordon Internal CA - ECC Intermediate" <U+001B>[36mexpires=<U+001B>[0m2026-10-29T08:23:57Z
  1601. <U+001B>[90m2026-10-22T08:23:58Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mgenerated new intermediate CA<U+001B>[0m <U+001B>[36mcn=<U+001B>[0m"Gordon Internal CA - ECC Intermediate" <U+001B>[36mexpires=<U+001B>[0m2026-10-29T08:23:58Z
  1602. <U+001B>[90m2026-10-22T08:23:58Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mintermediate CA renewed<U+001B>[0m <U+001B>[36mexpires=<U+001B>[0m2026-10-29T08:23:58Z
  1603. --- PASS: TestCA_RenewIntermediate (1.10s)
  1604. === RUN TestGenerateMobileconfig
  1605. <U+001B>[90m2026-10-22T08:23:58Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mgenerated new root CA<U+001B>[0m <U+001B>[36mcn=<U+001B>[0m"Gordon Internal CA - 2026 ECC Root"
  1606. <U+001B>[90m2026-10-22T08:23:58Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mgenerated new intermediate CA<U+001B>[0m <U+001B>[36mcn=<U+001B>[0m"Gordon Internal CA - ECC Intermediate" <U+001B>[36mexpires=<U+001B>[0m2026-10-29T08:23:58Z
  1607. --- PASS: TestGenerateMobileconfig (0.00s)
  1608. === RUN TestGenerateMobileconfig_UsesIdentifierSafePayloadIdentifier
  1609. --- PASS: TestGenerateMobileconfig_UsesIdentifierSafePayloadIdentifier (0.00s)
  1610. PASS
  1611. ok github.com/bnema/gordon/internal/adapters/out/pki 2.129s
  1612. === RUN TestMemoryStore_Allow_WithinLimit
  1613. --- PASS: TestMemoryStore_Allow_WithinLimit (0.00s)
  1614. === RUN TestMemoryStore_Allow_ExceedsLimit
  1615. --- PASS: TestMemoryStore_Allow_ExceedsLimit (0.00s)
  1616. === RUN TestMemoryStore_Allow_BurstBehavior
  1617. --- PASS: TestMemoryStore_Allow_BurstBehavior (0.20s)
  1618. === RUN TestMemoryStore_Allow_IndependentKeys
  1619. --- PASS: TestMemoryStore_Allow_IndependentKeys (0.00s)
  1620. === RUN TestMemoryStore_AllowN_Basic
  1621. --- PASS: TestMemoryStore_AllowN_Basic (0.00s)
  1622. === RUN TestMemoryStore_AllowN_ExceedsBurst
  1623. --- PASS: TestMemoryStore_AllowN_ExceedsBurst (0.00s)
  1624. === RUN TestMemoryStore_Allow_ConcurrentAccess
  1625. --- PASS: TestMemoryStore_Allow_ConcurrentAccess (0.00s)
  1626. === RUN TestMemoryStore_IPKeyFormat
  1627. --- PASS: TestMemoryStore_IPKeyFormat (0.00s)
  1628. === RUN TestMemoryStore_GlobalKey
  1629. --- PASS: TestMemoryStore_GlobalKey (0.00s)
  1630. === RUN TestNewStore_MemoryBackend
  1631. --- PASS: TestNewStore_MemoryBackend (0.00s)
  1632. === RUN TestNewStore_EmptyBackend
  1633. --- PASS: TestNewStore_EmptyBackend (0.00s)
  1634. === RUN TestNewStore_RedisBackend
  1635. --- PASS: TestNewStore_RedisBackend (0.00s)
  1636. === RUN TestNewStore_UnknownBackend
  1637. --- PASS: TestNewStore_UnknownBackend (0.00s)
  1638. PASS
  1639. ok github.com/bnema/gordon/internal/adapters/out/ratelimit 1.214s
  1640. === RUN TestVolumeBackupStorageStoreListGet
  1641. --- PASS: TestVolumeBackupStorageStoreListGet (0.00s)
  1642. === RUN TestVolumeBackupStorageSendsConfiguredStorageClass
  1643. --- PASS: TestVolumeBackupStorageSendsConfiguredStorageClass (0.00s)
  1644. === RUN TestVolumeBackupStorageRetentionMixesLongAndShortIDs
  1645. --- PASS: TestVolumeBackupStorageRetentionMixesLongAndShortIDs (0.00s)
  1646. === RUN TestVolumeBackupStorageLatestVolumeArchives
  1647. --- PASS: TestVolumeBackupStorageLatestVolumeArchives (0.00s)
  1648. === RUN TestVolumeBackupStorageRetentionUsesParsedKeyTimestamp
  1649. --- PASS: TestVolumeBackupStorageRetentionUsesParsedKeyTimestamp (0.00s)
  1650. === RUN TestVolumeBackupStorageRejectsWrongBucketArtifact
  1651. --- PASS: TestVolumeBackupStorageRejectsWrongBucketArtifact (0.00s)
  1652. PASS
  1653. ok github.com/bnema/gordon/internal/adapters/out/s3 1.016s
  1654. === RUN TestStore_WriteModesAndRead
  1655. --- PASS: TestStore_WriteModesAndRead (0.00s)
  1656. === RUN TestStore_WriteNeverReplacesExistingContainer
  1657. --- PASS: TestStore_WriteNeverReplacesExistingContainer (0.00s)
  1658. === RUN TestStore_RemoveAndList
  1659. --- PASS: TestStore_RemoveAndList (0.00s)
  1660. === RUN TestStore_InvalidNamesRejected
  1661. === RUN TestStore_InvalidNamesRejected/app_traversal
  1662. === RUN TestStore_InvalidNamesRejected/app_slash
  1663. === RUN TestStore_InvalidNamesRejected/container_dot
  1664. === RUN TestStore_InvalidNamesRejected/container_dotdot
  1665. === RUN TestStore_InvalidNamesRejected/container_slash
  1666. === RUN TestStore_InvalidNamesRejected/container_empty
  1667. === RUN TestStore_InvalidNamesRejected/bad_key
  1668. === RUN TestStore_InvalidNamesRejected/key_traversal
  1669. --- PASS: TestStore_InvalidNamesRejected (0.00s)
  1670. --- PASS: TestStore_InvalidNamesRejected/app_traversal (0.00s)
  1671. --- PASS: TestStore_InvalidNamesRejected/app_slash (0.00s)
  1672. --- PASS: TestStore_InvalidNamesRejected/container_dot (0.00s)
  1673. --- PASS: TestStore_InvalidNamesRejected/container_dotdot (0.00s)
  1674. --- PASS: TestStore_InvalidNamesRejected/container_slash (0.00s)
  1675. --- PASS: TestStore_InvalidNamesRejected/container_empty (0.00s)
  1676. --- PASS: TestStore_InvalidNamesRejected/bad_key (0.00s)
  1677. --- PASS: TestStore_InvalidNamesRejected/key_traversal (0.00s)
  1678. === RUN TestStore_SymlinkEscapeRefused
  1679. --- PASS: TestStore_SymlinkEscapeRefused (0.00s)
  1680. === RUN TestNewStore_RefusesSymlinkBase
  1681. --- PASS: TestNewStore_RefusesSymlinkBase (0.00s)
  1682. PASS
  1683. ok github.com/bnema/gordon/internal/adapters/out/secretfiles 1.015s
  1684. === RUN TestValidatePath
  1685. === RUN TestValidatePath/simple_path
  1686. === RUN TestValidatePath/path_with_dots_in_name
  1687. === RUN TestValidatePath/path_with_hyphens
  1688. === RUN TestValidatePath/path_with_underscores
  1689. === RUN TestValidatePath/nested_path
  1690. === RUN TestValidatePath/path_traversal_with_double_dots
  1691. === RUN TestValidatePath/path_traversal_in_middle
  1692. === RUN TestValidatePath/path_traversal_at_end
  1693. === RUN TestValidatePath/encoded_path_traversal
  1694. === RUN TestValidatePath/absolute_path
  1695. === RUN TestValidatePath/absolute_path_with_valid_chars
  1696. === RUN TestValidatePath/semicolon_injection
  1697. === RUN TestValidatePath/pipe_injection
  1698. === RUN TestValidatePath/backtick_injection
  1699. === RUN TestValidatePath/dollar_injection
  1700. === RUN TestValidatePath/ampersand_injection
  1701. === RUN TestValidatePath/newline_injection
  1702. === RUN TestValidatePath/space_in_path
  1703. === RUN TestValidatePath/null_byte_injection
  1704. === RUN TestValidatePath/empty_path
  1705. === RUN TestValidatePath/single_dot
  1706. --- PASS: TestValidatePath (0.00s)
  1707. --- PASS: TestValidatePath/simple_path (0.00s)
  1708. --- PASS: TestValidatePath/path_with_dots_in_name (0.00s)
  1709. --- PASS: TestValidatePath/path_with_hyphens (0.00s)
  1710. --- PASS: TestValidatePath/path_with_underscores (0.00s)
  1711. --- PASS: TestValidatePath/nested_path (0.00s)
  1712. --- PASS: TestValidatePath/path_traversal_with_double_dots (0.00s)
  1713. --- PASS: TestValidatePath/path_traversal_in_middle (0.00s)
  1714. --- PASS: TestValidatePath/path_traversal_at_end (0.00s)
  1715. --- PASS: TestValidatePath/encoded_path_traversal (0.00s)
  1716. --- PASS: TestValidatePath/absolute_path (0.00s)
  1717. --- PASS: TestValidatePath/absolute_path_with_valid_chars (0.00s)
  1718. --- PASS: TestValidatePath/semicolon_injection (0.00s)
  1719. --- PASS: TestValidatePath/pipe_injection (0.00s)
  1720. --- PASS: TestValidatePath/backtick_injection (0.00s)
  1721. --- PASS: TestValidatePath/dollar_injection (0.00s)
  1722. --- PASS: TestValidatePath/ampersand_injection (0.00s)
  1723. --- PASS: TestValidatePath/newline_injection (0.00s)
  1724. --- PASS: TestValidatePath/space_in_path (0.00s)
  1725. --- PASS: TestValidatePath/null_byte_injection (0.00s)
  1726. --- PASS: TestValidatePath/empty_path (0.00s)
  1727. --- PASS: TestValidatePath/single_dot (0.00s)
  1728. === RUN TestPassProvider_GetSecret_PathValidation
  1729. === RUN TestPassProvider_GetSecret_PathValidation/valid_path_rejected_due_to_pass_not_installed
  1730. === RUN TestPassProvider_GetSecret_PathValidation/path_traversal_rejected_before_command_execution
  1731. <U+001B>[90m2026-10-22T08:24:00Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1mrejected invalid pass path<U+001B>[0m <U+001B>[36merror=<U+001B>[0m<U+001B>[31m<U+001B>[1m"path traversal not allowed"<U+001B>[0m<U+001B>[0m <U+001B>[36madapter=<U+001B>[0msecrets <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mpath=<U+001B>[0m../../../etc/passwd <U+001B>[36mprovider=<U+001B>[0mpass
  1732. === RUN TestPassProvider_GetSecret_PathValidation/command_injection_rejected_before_command_execution
  1733. <U+001B>[90m2026-10-22T08:24:00Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1mrejected invalid pass path<U+001B>[0m <U+001B>[36merror=<U+001B>[0m<U+001B>[31m<U+001B>[1m"invalid path: must contain only alphanumeric characters, /, _, ., -"<U+001B>[0m<U+001B>[0m <U+001B>[36madapter=<U+001B>[0msecrets <U+001B>[36mlayer=<U+001B>[0madapter <U+001B>[36mpath=<U+001B>[0msecret;whoami <U+001B>[36mprovider=<U+001B>[0mpass
  1734. --- PASS: TestPassProvider_GetSecret_PathValidation (0.00s)
  1735. --- PASS: TestPassProvider_GetSecret_PathValidation/valid_path_rejected_due_to_pass_not_installed (0.00s)
  1736. --- PASS: TestPassProvider_GetSecret_PathValidation/path_traversal_rejected_before_command_execution (0.00s)
  1737. --- PASS: TestPassProvider_GetSecret_PathValidation/command_injection_rejected_before_command_execution (0.00s)
  1738. === RUN TestPublicTLSResolverPrefersPass
  1739. --- PASS: TestPublicTLSResolverPrefersPass (0.00s)
  1740. === RUN TestPublicTLSResolverFallsBackToTokenFile
  1741. --- PASS: TestPublicTLSResolverFallsBackToTokenFile (0.00s)
  1742. === RUN TestPublicTLSResolverFallsBackToEnv
  1743. --- PASS: TestPublicTLSResolverFallsBackToEnv (0.00s)
  1744. === RUN TestPublicTLSResolverNoToken
  1745. --- PASS: TestPublicTLSResolverNoToken (0.00s)
  1746. === RUN TestPublicTLSResolverPassErrorWithoutFallback
  1747. --- PASS: TestPublicTLSResolverPassErrorWithoutFallback (0.00s)
  1748. === RUN TestPublicTLSResolverPassErrorWithEnvFallback
  1749. --- PASS: TestPublicTLSResolverPassErrorWithEnvFallback (0.00s)
  1750. === RUN TestPublicTLSResolverTokenFileErrorWithoutFallback
  1751. --- PASS: TestPublicTLSResolverTokenFileErrorWithoutFallback (0.00s)
  1752. === RUN TestPublicTLSResolverTokenFileErrorWithEnvFallback
  1753. --- PASS: TestPublicTLSResolverTokenFileErrorWithEnvFallback (0.00s)
  1754. === RUN TestPublicTLSResolverEmptyPassValueFallback
  1755. --- PASS: TestPublicTLSResolverEmptyPassValueFallback (0.00s)
  1756. === RUN TestConvertToSopsExtractPath
  1757. === RUN TestConvertToSopsExtractPath/empty_string
  1758. === RUN TestConvertToSopsExtractPath/single_key
  1759. === RUN TestConvertToSopsExtractPath/two_level_nested
  1760. === RUN TestConvertToSopsExtractPath/three_level_nested
  1761. === RUN TestConvertToSopsExtractPath/key_with_underscores
  1762. === RUN TestConvertToSopsExtractPath/key_with_hyphens
  1763. === RUN TestConvertToSopsExtractPath/array_index_only
  1764. === RUN TestConvertToSopsExtractPath/key_with_array_index
  1765. === RUN TestConvertToSopsExtractPath/nested_key_with_array_index
  1766. === RUN TestConvertToSopsExtractPath/nested_key_with_array_then_key
  1767. === RUN TestConvertToSopsExtractPath/multiple_array_indices
  1768. === RUN TestConvertToSopsExtractPath/deeply_nested_with_array
  1769. --- PASS: TestConvertToSopsExtractPath (0.00s)
  1770. --- PASS: TestConvertToSopsExtractPath/empty_string (0.00s)
  1771. --- PASS: TestConvertToSopsExtractPath/single_key (0.00s)
  1772. --- PASS: TestConvertToSopsExtractPath/two_level_nested (0.00s)
  1773. --- PASS: TestConvertToSopsExtractPath/three_level_nested (0.00s)
  1774. --- PASS: TestConvertToSopsExtractPath/key_with_underscores (0.00s)
  1775. --- PASS: TestConvertToSopsExtractPath/key_with_hyphens (0.00s)
  1776. --- PASS: TestConvertToSopsExtractPath/array_index_only (0.00s)
  1777. --- PASS: TestConvertToSopsExtractPath/key_with_array_index (0.00s)
  1778. --- PASS: TestConvertToSopsExtractPath/nested_key_with_array_index (0.00s)
  1779. --- PASS: TestConvertToSopsExtractPath/nested_key_with_array_then_key (0.00s)
  1780. --- PASS: TestConvertToSopsExtractPath/multiple_array_indices (0.00s)
  1781. --- PASS: TestConvertToSopsExtractPath/deeply_nested_with_array (0.00s)
  1782. PASS
  1783. ok github.com/bnema/gordon/internal/adapters/out/secrets 1.023s
  1784. === RUN TestRecordBackupRun_CountsResultAndTracksLastSuccess
  1785. --- PASS: TestRecordBackupRun_CountsResultAndTracksLastSuccess (0.00s)
  1786. === RUN TestObserveStoredBackup_KeepsTheNewestSuccess
  1787. --- PASS: TestObserveStoredBackup_KeepsTheNewestSuccess (0.00s)
  1788. === RUN TestRetainBackupTargets_ForgetsUndeclaredTargetsOfThatKindOnly
  1789. --- PASS: TestRetainBackupTargets_ForgetsUndeclaredTargetsOfThatKindOnly (0.00s)
  1790. === RUN TestRetainBackupTargets_KeepsSuccessRecordedAfterTheSnapshot
  1791. --- PASS: TestRetainBackupTargets_KeepsSuccessRecordedAfterTheSnapshot (0.00s)
  1792. === RUN TestObserveBackupNextRun
  1793. --- PASS: TestObserveBackupNextRun (0.00s)
  1794. === RUN TestLogExporter_ExportsPerSourceIdentity
  1795. --- PASS: TestLogExporter_ExportsPerSourceIdentity (0.02s)
  1796. === RUN TestLogExporter_DropsAfterShutdown
  1797. --- PASS: TestLogExporter_DropsAfterShutdown (0.00s)
  1798. === RUN TestObserveManagedContainers
  1799. --- PASS: TestObserveManagedContainers (0.00s)
  1800. PASS
  1801. ok github.com/bnema/gordon/internal/adapters/out/telemetry 1.051s
  1802. === RUN TestParsePassLsOutput
  1803. === RUN TestParsePassLsOutput/flat_entries_only
  1804. === RUN TestParsePassLsOutput/nested_entries_with_slash_in_subject
  1805. === RUN TestParsePassLsOutput/deeply_nested_entries
  1806. === RUN TestParsePassLsOutput/mixed_flat_and_nested
  1807. === RUN TestParsePassLsOutput/empty_output_(no_entries)
  1808. === RUN TestParsePassLsOutput/ascii_tree_decoration_variant
  1809. --- PASS: TestParsePassLsOutput (0.00s)
  1810. --- PASS: TestParsePassLsOutput/flat_entries_only (0.00s)
  1811. --- PASS: TestParsePassLsOutput/nested_entries_with_slash_in_subject (0.00s)
  1812. --- PASS: TestParsePassLsOutput/deeply_nested_entries (0.00s)
  1813. --- PASS: TestParsePassLsOutput/mixed_flat_and_nested (0.00s)
  1814. --- PASS: TestParsePassLsOutput/empty_output_(no_entries) (0.00s)
  1815. --- PASS: TestParsePassLsOutput/ascii_tree_decoration_variant (0.00s)
  1816. === RUN TestPassStore_GetToken_CacheHit
  1817. --- PASS: TestPassStore_GetToken_CacheHit (0.00s)
  1818. === RUN TestPassStore_GetToken_CacheMiss_ReturnsNotFound
  1819. --- PASS: TestPassStore_GetToken_CacheMiss_ReturnsNotFound (0.00s)
  1820. === RUN TestPassStore_IsRevoked_CacheHit_Revoked
  1821. --- PASS: TestPassStore_IsRevoked_CacheHit_Revoked (0.00s)
  1822. === RUN TestPassStore_IsRevoked_CacheHit_NotRevoked
  1823. --- PASS: TestPassStore_IsRevoked_CacheHit_NotRevoked (0.00s)
  1824. === RUN TestPassStore_CacheUpdate_OnSave
  1825. --- PASS: TestPassStore_CacheUpdate_OnSave (0.00s)
  1826. === RUN TestPassStore_CacheClear_OnDelete
  1827. --- PASS: TestPassStore_CacheClear_OnDelete (0.00s)
  1828. === RUN TestPassStore_GetToken_ConcurrentAccess
  1829. --- PASS: TestPassStore_GetToken_ConcurrentAccess (0.00s)
  1830. === RUN TestPassStore_IsRevoked_ConcurrentAccess
  1831. --- PASS: TestPassStore_IsRevoked_ConcurrentAccess (0.00s)
  1832. === RUN TestPassStore_RevokeUpdatesCache
  1833. --- PASS: TestPassStore_RevokeUpdatesCache (0.00s)
  1834. === RUN TestPassStore_SaveToken_RejectsInvalidSubject
  1835. === RUN TestPassStore_SaveToken_RejectsInvalidSubject/path_traversal_with_../
  1836. === RUN TestPassStore_SaveToken_RejectsInvalidSubject/path_traversal_with_..\
  1837. === RUN TestPassStore_SaveToken_RejectsInvalidSubject/shell_metacharacter_semicolon
  1838. === RUN TestPassStore_SaveToken_RejectsInvalidSubject/shell_metacharacter_pipe
  1839. === RUN TestPassStore_SaveToken_RejectsInvalidSubject/shell_metacharacter_ampersand
  1840. === RUN TestPassStore_SaveToken_RejectsInvalidSubject/shell_metacharacter_backtick
  1841. === RUN TestPassStore_SaveToken_RejectsInvalidSubject/shell_metacharacter_dollar_sign
  1842. === RUN TestPassStore_SaveToken_RejectsInvalidSubject/newline_character
  1843. === RUN TestPassStore_SaveToken_RejectsInvalidSubject/null_byte
  1844. --- PASS: TestPassStore_SaveToken_RejectsInvalidSubject (0.00s)
  1845. --- PASS: TestPassStore_SaveToken_RejectsInvalidSubject/path_traversal_with_../ (0.00s)
  1846. --- PASS: TestPassStore_SaveToken_RejectsInvalidSubject/path_traversal_with_..\ (0.00s)
  1847. --- PASS: TestPassStore_SaveToken_RejectsInvalidSubject/shell_metacharacter_semicolon (0.00s)
  1848. --- PASS: TestPassStore_SaveToken_RejectsInvalidSubject/shell_metacharacter_pipe (0.00s)
  1849. --- PASS: TestPassStore_SaveToken_RejectsInvalidSubject/shell_metacharacter_ampersand (0.00s)
  1850. --- PASS: TestPassStore_SaveToken_RejectsInvalidSubject/shell_metacharacter_backtick (0.00s)
  1851. --- PASS: TestPassStore_SaveToken_RejectsInvalidSubject/shell_metacharacter_dollar_sign (0.00s)
  1852. --- PASS: TestPassStore_SaveToken_RejectsInvalidSubject/newline_character (0.00s)
  1853. --- PASS: TestPassStore_SaveToken_RejectsInvalidSubject/null_byte (0.00s)
  1854. === RUN TestPassStore_SaveToken_AcceptsValidSubject
  1855. === RUN TestPassStore_SaveToken_AcceptsValidSubject/simple_username
  1856. === RUN TestPassStore_SaveToken_AcceptsValidSubject/username_with_dots
  1857. === RUN TestPassStore_SaveToken_AcceptsValidSubject/username_with_hyphens
  1858. === RUN TestPassStore_SaveToken_AcceptsValidSubject/username_with_underscores
  1859. === RUN TestPassStore_SaveToken_AcceptsValidSubject/email-like
  1860. === RUN TestPassStore_SaveToken_AcceptsValidSubject/path-like_but_safe
  1861. --- PASS: TestPassStore_SaveToken_AcceptsValidSubject (0.00s)
  1862. --- PASS: TestPassStore_SaveToken_AcceptsValidSubject/simple_username (0.00s)
  1863. --- PASS: TestPassStore_SaveToken_AcceptsValidSubject/username_with_dots (0.00s)
  1864. --- PASS: TestPassStore_SaveToken_AcceptsValidSubject/username_with_hyphens (0.00s)
  1865. --- PASS: TestPassStore_SaveToken_AcceptsValidSubject/username_with_underscores (0.00s)
  1866. --- PASS: TestPassStore_SaveToken_AcceptsValidSubject/email-like (0.00s)
  1867. --- PASS: TestPassStore_SaveToken_AcceptsValidSubject/path-like_but_safe (0.00s)
  1868. === RUN TestPassStore_GetToken_RejectsInvalidSubject
  1869. === RUN TestPassStore_GetToken_RejectsInvalidSubject/../../../etc/passwd
  1870. === RUN TestPassStore_GetToken_RejectsInvalidSubject/user;rm_-rf_/
  1871. === RUN TestPassStore_GetToken_RejectsInvalidSubject/user|cat
  1872. === RUN TestPassStore_GetToken_RejectsInvalidSubject/user_newline
  1873. --- PASS: TestPassStore_GetToken_RejectsInvalidSubject (0.00s)
  1874. --- PASS: TestPassStore_GetToken_RejectsInvalidSubject/../../../etc/passwd (0.00s)
  1875. --- PASS: TestPassStore_GetToken_RejectsInvalidSubject/user;rm_-rf_/ (0.00s)
  1876. --- PASS: TestPassStore_GetToken_RejectsInvalidSubject/user|cat (0.00s)
  1877. --- PASS: TestPassStore_GetToken_RejectsInvalidSubject/user_newline (0.00s)
  1878. === RUN TestPassStore_DeleteToken_RejectsInvalidSubject
  1879. === RUN TestPassStore_DeleteToken_RejectsInvalidSubject/../../../etc/passwd
  1880. === RUN TestPassStore_DeleteToken_RejectsInvalidSubject/user;rm_-rf_/
  1881. === RUN TestPassStore_DeleteToken_RejectsInvalidSubject/user|cat
  1882. --- PASS: TestPassStore_DeleteToken_RejectsInvalidSubject (0.00s)
  1883. --- PASS: TestPassStore_DeleteToken_RejectsInvalidSubject/../../../etc/passwd (0.00s)
  1884. --- PASS: TestPassStore_DeleteToken_RejectsInvalidSubject/user;rm_-rf_/ (0.00s)
  1885. --- PASS: TestPassStore_DeleteToken_RejectsInvalidSubject/user|cat (0.00s)
  1886. === RUN TestUnsafeStoreRevokeConcurrentNoLoss
  1887. --- PASS: TestUnsafeStoreRevokeConcurrentNoLoss (0.01s)
  1888. PASS
  1889. ok github.com/bnema/gordon/internal/adapters/out/tokenstore 1.031s
  1890. === RUN TestLoadConfig_ACMEDefaults
  1891. --- PASS: TestLoadConfig_ACMEDefaults (0.00s)
  1892. === RUN TestBuildAppCapabilityPolicies_ValidConfig
  1893. --- PASS: TestBuildAppCapabilityPolicies_ValidConfig (0.00s)
  1894. === RUN TestBuildAppCapabilityPolicies_Invalid
  1895. === RUN TestBuildAppCapabilityPolicies_Invalid/empty_add
  1896. === RUN TestBuildAppCapabilityPolicies_Invalid/ALL
  1897. === RUN TestBuildAppCapabilityPolicies_Invalid/SYS_ADMIN
  1898. === RUN TestBuildAppCapabilityPolicies_Invalid/duplicate
  1899. === RUN TestBuildAppCapabilityPolicies_Invalid/empty_apps
  1900. === RUN TestBuildAppCapabilityPolicies_Invalid/empty_services
  1901. --- PASS: TestBuildAppCapabilityPolicies_Invalid (0.00s)
  1902. --- PASS: TestBuildAppCapabilityPolicies_Invalid/empty_add (0.00s)
  1903. --- PASS: TestBuildAppCapabilityPolicies_Invalid/ALL (0.00s)
  1904. --- PASS: TestBuildAppCapabilityPolicies_Invalid/SYS_ADMIN (0.00s)
  1905. --- PASS: TestBuildAppCapabilityPolicies_Invalid/duplicate (0.00s)
  1906. --- PASS: TestBuildAppCapabilityPolicies_Invalid/empty_apps (0.00s)
  1907. --- PASS: TestBuildAppCapabilityPolicies_Invalid/empty_services (0.00s)
  1908. === RUN TestValidateAppCapabilityKeys_UnknownKey
  1909. --- PASS: TestValidateAppCapabilityKeys_UnknownKey (0.00s)
  1910. === RUN TestValidateAppPolicies_IncludesCapabilities
  1911. --- PASS: TestValidateAppPolicies_IncludesCapabilities (0.00s)
  1912. === RUN TestBuildAppCapabilityPolicies_CopiesSlicesAndDefaultsEmpty
  1913. --- PASS: TestBuildAppCapabilityPolicies_CopiesSlicesAndDefaultsEmpty (0.00s)
  1914. === RUN TestAppDeployHandler_RequestCancellationDoesNotAbortExecution
  1915. --- PASS: TestAppDeployHandler_RequestCancellationDoesNotAbortExecution (0.05s)
  1916. === RUN TestBuildAppDevicePolicies_ValidConfigUnmarshal
  1917. --- PASS: TestBuildAppDevicePolicies_ValidConfigUnmarshal (0.00s)
  1918. === RUN TestBuildAppDevicePolicies_Invalid
  1919. === RUN TestBuildAppDevicePolicies_Invalid/empty_cdi
  1920. === RUN TestBuildAppDevicePolicies_Invalid/raw_path
  1921. === RUN TestBuildAppDevicePolicies_Invalid/aggregate
  1922. === RUN TestBuildAppDevicePolicies_Invalid/empty_allowed_apps
  1923. === RUN TestBuildAppDevicePolicies_Invalid/empty_allowed_services
  1924. === RUN TestBuildAppDevicePolicies_Invalid/duplicate_cdi
  1925. --- PASS: TestBuildAppDevicePolicies_Invalid (0.00s)
  1926. --- PASS: TestBuildAppDevicePolicies_Invalid/empty_cdi (0.00s)
  1927. --- PASS: TestBuildAppDevicePolicies_Invalid/raw_path (0.00s)
  1928. --- PASS: TestBuildAppDevicePolicies_Invalid/aggregate (0.00s)
  1929. --- PASS: TestBuildAppDevicePolicies_Invalid/empty_allowed_apps (0.00s)
  1930. --- PASS: TestBuildAppDevicePolicies_Invalid/empty_allowed_services (0.00s)
  1931. --- PASS: TestBuildAppDevicePolicies_Invalid/duplicate_cdi (0.00s)
  1932. === RUN TestValidateAppDeviceKeys_UnknownKey
  1933. --- PASS: TestValidateAppDeviceKeys_UnknownKey (0.00s)
  1934. === RUN TestValidateAppDeviceKeys_Valid
  1935. --- PASS: TestValidateAppDeviceKeys_Valid (0.00s)
  1936. === RUN TestBuildAppDevicePolicies_CopiesSlices
  1937. --- PASS: TestBuildAppDevicePolicies_CopiesSlices (0.00s)
  1938. === RUN TestConfig_AppDevicesDefaultsEmpty
  1939. --- PASS: TestConfig_AppDevicesDefaultsEmpty (0.00s)
  1940. === RUN TestAppTrafficPublisher_WithdrawServiceIsFailClosedInStateAndIndex
  1941. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m1
  1942. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m1
  1943. --- PASS: TestAppTrafficPublisher_WithdrawServiceIsFailClosedInStateAndIndex (0.00s)
  1944. === RUN TestAppTrafficPublisher_WithdrawServiceSurfacesStateFailure
  1945. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m1
  1946. --- PASS: TestAppTrafficPublisher_WithdrawServiceSurfacesStateFailure (0.00s)
  1947. === RUN TestAppTrafficPublisher_WithdrawUnknownServiceIsANoop
  1948. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m0
  1949. --- PASS: TestAppTrafficPublisher_WithdrawUnknownServiceIsANoop (0.00s)
  1950. === RUN TestAppTrafficPublisher_RebuildTrafficReprojectsVerifiedState
  1951. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m1
  1952. --- PASS: TestAppTrafficPublisher_RebuildTrafficReprojectsVerifiedState (0.00s)
  1953. === RUN TestAppTrafficPublisher_SerializesConcurrentPublication
  1954. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m1
  1955. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m1
  1956. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m1
  1957. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m1
  1958. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m1
  1959. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m1
  1960. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m1
  1961. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m1
  1962. --- PASS: TestAppTrafficPublisher_SerializesConcurrentPublication (0.01s)
  1963. === RUN TestAppTrafficPublisher_WithdrawalIsIdempotent
  1964. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m1
  1965. --- PASS: TestAppTrafficPublisher_WithdrawalIsIdempotent (0.00s)
  1966. === RUN TestAppMonitor_RunsOnePassPerTick
  1967. --- PASS: TestAppMonitor_RunsOnePassPerTick (0.00s)
  1968. === RUN TestAppMonitor_DoesNotOverlapPasses
  1969. --- PASS: TestAppMonitor_DoesNotOverlapPasses (0.00s)
  1970. === RUN TestAppMonitor_ReconciliationErrorDoesNotStopTheLoop
  1971. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1mapp reconciliation pass failed<U+001B>[0m <U+001B>[36merror=<U+001B>[0m<U+001B>[31m<U+001B>[1m"assert.AnError general error for testing"<U+001B>[0m<U+001B>[0m
  1972. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[33mWRN<U+001B>[0m <U+001B>[1mapp reconciliation pass failed<U+001B>[0m <U+001B>[36merror=<U+001B>[0m<U+001B>[31m<U+001B>[1m"assert.AnError general error for testing"<U+001B>[0m<U+001B>[0m
  1973. --- PASS: TestAppMonitor_ReconciliationErrorDoesNotStopTheLoop (0.00s)
  1974. === RUN TestAppMonitor_StartIsIdempotent
  1975. --- PASS: TestAppMonitor_StartIsIdempotent (0.00s)
  1976. === RUN TestAppMonitor_StopCancelsAndJoins
  1977. --- PASS: TestAppMonitor_StopCancelsAndJoins (0.03s)
  1978. === RUN TestAppMonitor_NilReconcilerNeverStarts
  1979. --- PASS: TestAppMonitor_NilReconcilerNeverStarts (0.00s)
  1980. === RUN TestAppTrafficPublisher_RebuildSkipsStoppedApps
  1981. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m1
  1982. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m0
  1983. --- PASS: TestAppTrafficPublisher_RebuildSkipsStoppedApps (0.00s)
  1984. === RUN TestAppTrafficPublisher_AdmissionHonorsContextCancellation
  1985. <U+001B>[90m2026-10-22T08:24:06Z<U+001B>[0m <U+001B>[32mINF<U+001B>[0m <U+001B>[1mapptraffic: host index rebuilt<U+001B>[0m <U+001B>[36mhosts=<U+001B>[0m0
  1986. --- PASS: TestAppTrafficPublisher_AdmissionHonorsContextCancellation (0.00s)
  1987. === RUN TestBuildAppMountPolicies_ValidConfigUnmarshal
  1988. --- PASS: TestBuildAppMountPolicies_ValidConfigUnmarshal (0.00s)
  1989. === RUN TestBuildAppMountPolicies_Invalid
  1990. === RUN TestBuildAppMountPolicies_Invalid/empty_source
  1991. === RUN TestBuildAppMountPolicies_Invalid/relative_source
  1992. === RUN TestBuildAppMountPolicies_Invalid/empty_allowed_apps
  1993. === RUN TestBuildAppMountPolicies_Invalid/empty_allowed_services
  1994. === RUN TestBuildAppMountPolicies_Invalid/unclean_root
  1995. --- PASS: TestBuildAppMountPolicies_Invalid (0.00s)
  1996. --- PASS: TestBuildAppMountPolicies_Invalid/empty_source (0.00s)
  1997. --- PASS: TestBuildAppMountPolicies_Invalid/relative_source (0.00s)
  1998. --- PASS: TestBuildAppMountPolicies_Invalid/empty_allowed_apps (0.00s)
  1999. --- PASS: TestBuildAppMountPolicies_Invalid/empty_allowed_services (0.00s)
  2000. --- PASS: TestBuildAppMountPolicies_Invalid/unclean_root (0.00s)

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 7

Tags 106

↑↓ moveenter openesc close