{ "status": "passed", "startedAt": "2026-09-23T03:10:31.408631+00:00", "testedCommit": "b54a303ccdc034cd3062e846c6c6b2c24e55ffaa", "workingTreeStatus": "", "sourceSha256": { "go.mod": "28d68eb2c0a019cceea884e88ab2335f44ad930e1890e28871638f4b073b4f86", "go.sum": "d9c2a5d0de94f08bd18a14a9626f9dda559c245d89bf8a689e32acbd2136fb05", "scripts/verifyHTTP2Proxy.py": "9ef2774b1d19c05f1ae8d9527665dba541561a7c677f9984a24e72d5bddb6ad5", "transport/http2/admission_test.go": "342a7d02bba508100a207b77246ca92e0fa04dd5f8e4a27091a01866b6750d39", "transport/http2/flowControl_test.go": "595b2e937cef2142ff6b6386116e338d874d0fe49e63d80f6de2e1268378dba2", "transport/http2/frameObserver.go": "fcdf431f8269ad9cfd65dd14102ce5c42ac8c4b8b833ed42c4ae15f2a7c7f14c", "transport/http2/lifecycle_test.go": "370a16de8b20248bb78021ab338b9f62ec51f733f270c0fa92f48b1a3ccb9eae", "transport/http2/mixedSoak_test.go": "2111737fe0405bc809bf06325573f7356160ae7fcaebcce06dcd94b2d9e7dccd", "transport/http2/proxy_test.go": "808d0fa7e6c3b0237b1adf4a71a4f30ae2dbc7d1a9d53fab164cda33b15c9d69", "transport/http2/server.go": "aeecdc3aec42219862d70ec788bef5df332189895555bc5d390849a51bd0fbfb", "transport/http2/server_test.go": "c4613e77fa885b6362c06c393937c7dcf9a7ffb4a9a32f85e21fc2f741de81a6", "transport/http2/soak_test.go": "52baa37e37dba497c579b6b55d723bda866ac57676254dc878c511345acc5af2" }, "repetitions": 3, "race": false, "containerLimits": { "cpus": 2, "memoryBytes": 2147483648, "memoryAndSwapBytes": 2147483648, "pidsLimit": 256 }, "wallTimeoutSeconds": 600, "imageIds": { "golang:1.25": "sha256:699337d620559a59b4a2bb298ad59611e535d2ee755a34cf2d2a98f37578dc80", "nginx:1.30.5-alpine": "sha256:bf3201ab56f23e5954646379c775d511fc466e9f11376d9725361064ad07ed35" }, "notes": [ "Compiler and integration stages run sequentially; at most one 2-CPU/2-GiB validation container is active.", "The integration container has network=none, no published ports and a read-only root filesystem. Client, Nginx and origins communicate over loopback inside that container.", "Both TLS legs validate certificates; invalid upstream CA and hostname must fail before reaching the handler.", "HTTP/2 is verified independently on both legs. This is a functional integration test, not a throughput benchmark or a live Cloudflare deployment.", "Single-process Nginx fixture with generated test certificates. Rolling drain switches between old and backup origins; this does not test Nginx master/worker configuration reloads or live Cloudflare routing." ], "proxyVersions": [ "nginx version: nginx/1.30.5" ], "results": [ "tlsAndReuse reusedRequests=32 upstreamConnections=1 invalidTrustStatus=502 invalidNameStatus=502 recovered=true", "timeoutAndCancellation timeoutStatus=504 canceledHandlers=2 recovered=true stats={AcceptedConnections:3 RejectedConnections:0 RejectedRequests:0 ProtocolErrors:0 GoAwaySent:0 RSTStreams:0 GoAwayFrames:0 ActiveConnections:1 ActiveRequests:0}", "goAwayAndRollingDrain oldRequests=2 newRequests=20 heldPostCompleted=true duplicateHandlers=0 oldStats={AcceptedConnections:1 RejectedConnections:0 RejectedRequests:0 ProtocolErrors:0 GoAwaySent:1 RSTStreams:0 GoAwayFrames:1 ActiveConnections:0 ActiveRequests:0}", "tlsAndReuse reusedRequests=32 upstreamConnections=1 invalidTrustStatus=502 invalidNameStatus=502 recovered=true", "timeoutAndCancellation timeoutStatus=504 canceledHandlers=2 recovered=true stats={AcceptedConnections:3 RejectedConnections:0 RejectedRequests:0 ProtocolErrors:0 GoAwaySent:0 RSTStreams:0 GoAwayFrames:0 ActiveConnections:1 ActiveRequests:0}", "goAwayAndRollingDrain oldRequests=2 newRequests=20 heldPostCompleted=true duplicateHandlers=0 oldStats={AcceptedConnections:1 RejectedConnections:0 RejectedRequests:0 ProtocolErrors:0 GoAwaySent:1 RSTStreams:0 GoAwayFrames:1 ActiveConnections:0 ActiveRequests:0}", "tlsAndReuse reusedRequests=32 upstreamConnections=1 invalidTrustStatus=502 invalidNameStatus=502 recovered=true", "timeoutAndCancellation timeoutStatus=504 canceledHandlers=2 recovered=true stats={AcceptedConnections:3 RejectedConnections:0 RejectedRequests:0 ProtocolErrors:0 GoAwaySent:0 RSTStreams:0 GoAwayFrames:0 ActiveConnections:1 ActiveRequests:0}", "goAwayAndRollingDrain oldRequests=2 newRequests=20 heldPostCompleted=true duplicateHandlers=0 oldStats={AcceptedConnections:1 RejectedConnections:0 RejectedRequests:0 ProtocolErrors:0 GoAwaySent:1 RSTStreams:0 GoAwayFrames:1 ActiveConnections:0 ActiveRequests:0}" ], "goVersion": "go1.25.14", "platform": "linux/amd64", "commands": [ [ "/usr/bin/docker", "run", "--rm", "--name", "go-omni-http2-proxy-52da1679e6df-build", "--cpus", "2", "--memory", "2048m", "--memory-swap", "2048m", "--pids-limit", "256", "--log-opt", "max-size=10m", "--log-opt", "max-file=1", "-v", "/root/go-omni-validation:/workspace:ro", "-v", "/tmp/goOmniHTTP2Proxyk3cc3h1_:/output", "-w", "/workspace", "-e", "GOWORK=off", "-e", "GOMAXPROCS=2", "-e", "CGO_ENABLED=0", "-e", "GOPROXY=https://goproxy.cn,direct", "golang:1.25", "sh", "-c", "go version && go vet ./transport/http2 && go test -c -o /output/http2.test ./transport/http2" ], [ "/usr/bin/docker", "run", "--rm", "--name", "go-omni-http2-proxy-52da1679e6df-check", "--cpus", "2", "--memory", "2048m", "--memory-swap", "2048m", "--pids-limit", "256", "--log-opt", "max-size=10m", "--log-opt", "max-file=1", "--network", "none", "--read-only", "--tmpfs", "/tmp:rw,nosuid,noexec,size=128m", "-v", "/tmp/goOmniHTTP2Proxyk3cc3h1_:/test:ro", "--entrypoint", "/test/http2.test", "-e", "GO_OMNI_HTTP2_PROXY_TEST=1", "-e", "GOMAXPROCS=2", "nginx:1.30.5-alpine", "-test.v", "-test.run", "^TestNginxHTTP2Proxy$", "-test.timeout", "120s", "-test.count", "3" ] ], "cleanedContainers": [ "go-omni-http2-proxy-52da1679e6df-build", "go-omni-http2-proxy-52da1679e6df-check" ], "finishedAt": "2026-09-23T03:11:00.363119+00:00", "logSha256": "1263ceb8ce7b65f542898e17031ba56127672d363defd0ee6520199fa1927472", "preExistingContainersStillRunning": 7 }