{"Time":"2026-09-11T18:00:02.726329+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/service"} {"Time":"2026-09-11T18:00:02.7273466+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/repository"} {"Time":"2026-09-11T18:00:02.7273466+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint"} {"Time":"2026-09-11T18:00:02.7273466+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin"} {"Time":"2026-09-11T18:00:02.9346494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPActualHelloAndImmutableProfile"} {"Time":"2026-09-11T18:00:02.9346494+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPActualHelloAndImmutableProfile","Output":"=== RUN TestLocalTLSHTTPActualHelloAndImmutableProfile\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:02.9393227+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPActualHelloAndImmutableProfile","Output":"--- PASS: TestLocalTLSHTTPActualHelloAndImmutableProfile (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:02.9393227+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPActualHelloAndImmutableProfile","Elapsed":0} {"Time":"2026-09-11T18:00:02.9393227+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSRejectsUntrustedCertificate"} {"Time":"2026-09-11T18:00:02.9393227+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSRejectsUntrustedCertificate","Output":"=== RUN TestLocalTLSRejectsUntrustedCertificate\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:02.9635663+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSRejectsUntrustedCertificate","Output":"2026/09/11 18:00:02 http: TLS handshake error from 127.0.0.1:57303: remote error: tls: bad certificate\n"} {"Time":"2026-09-11T18:00:02.9635663+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSRejectsUntrustedCertificate","Output":"--- PASS: TestLocalTLSRejectsUntrustedCertificate (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:02.9635663+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSRejectsUntrustedCertificate","Elapsed":0.02} {"Time":"2026-09-11T18:00:02.9635663+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile"} {"Time":"2026-09-11T18:00:02.9635663+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile","Output":"=== RUN TestLocalTLSHTTPAndHTTPSConnectUseProfile\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:02.9635663+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile/http"} {"Time":"2026-09-11T18:00:02.9635663+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile/http","Output":"=== RUN TestLocalTLSHTTPAndHTTPSConnectUseProfile/http\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:02.9655989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile/http","Output":"--- PASS: TestLocalTLSHTTPAndHTTPSConnectUseProfile/http (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:02.9655989+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile/http","Elapsed":0} {"Time":"2026-09-11T18:00:02.9655989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile/https"} {"Time":"2026-09-11T18:00:02.9655989+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile/https","Output":"=== RUN TestLocalTLSHTTPAndHTTPSConnectUseProfile/https\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:02.9697483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile/https","Output":"--- PASS: TestLocalTLSHTTPAndHTTPSConnectUseProfile/https (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:02.9697483+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile/https","Elapsed":0} {"Time":"2026-09-11T18:00:02.9697483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile","Output":"--- PASS: TestLocalTLSHTTPAndHTTPSConnectUseProfile (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:02.9697483+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile","Elapsed":0.01} {"Time":"2026-09-11T18:00:02.9697483+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProxyErrorsNeverBypassProxy"} {"Time":"2026-09-11T18:00:02.9697483+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProxyErrorsNeverBypassProxy","Output":"=== RUN TestLocalTLSProxyErrorsNeverBypassProxy\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:02.9717965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProxyErrorsNeverBypassProxy","Output":"2026/09/11 18:00:02 http: TLS handshake error from 127.0.0.1:57318: remote error: tls: bad certificate\n"} {"Time":"2026-09-11T18:00:02.9717965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProxyErrorsNeverBypassProxy","Output":"--- PASS: TestLocalTLSProxyErrorsNeverBypassProxy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:02.9717965+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProxyErrorsNeverBypassProxy","Elapsed":0} {"Time":"2026-09-11T18:00:02.9717965+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSSOCKSUsesProfile"} {"Time":"2026-09-11T18:00:02.9717965+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSSOCKSUsesProfile","Output":"=== RUN TestLocalTLSSOCKSUsesProfile\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:02.9738305+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSSOCKSUsesProfile","Output":"--- PASS: TestLocalTLSSOCKSUsesProfile (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:02.9738305+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSSOCKSUsesProfile","Elapsed":0} {"Time":"2026-09-11T18:00:02.9738305+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSConnectCancellation"} {"Time":"2026-09-11T18:00:02.9738305+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSConnectCancellation","Output":"=== RUN TestLocalTLSConnectCancellation\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSConnectCancellation","Output":"--- PASS: TestLocalTLSConnectCancellation (0.10s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSConnectCancellation","Elapsed":0.1} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSRejectsUnsupportedRoutes"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSRejectsUnsupportedRoutes","Output":"=== RUN TestLocalTLSRejectsUnsupportedRoutes\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSRejectsUnsupportedRoutes","Output":"--- PASS: TestLocalTLSRejectsUnsupportedRoutes (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSRejectsUnsupportedRoutes","Elapsed":0} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey","Output":"=== RUN TestLocalTLSProfileCloneAndContentKey\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/extensions"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/extensions","Output":"=== RUN TestLocalTLSProfileCloneAndContentKey/extensions\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/extensions","Output":"--- PASS: TestLocalTLSProfileCloneAndContentKey/extensions (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/extensions","Elapsed":0} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/alpn"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/alpn","Output":"=== RUN TestLocalTLSProfileCloneAndContentKey/alpn\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/alpn","Output":"--- PASS: TestLocalTLSProfileCloneAndContentKey/alpn (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/alpn","Elapsed":0} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/ciphers"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/ciphers","Output":"=== RUN TestLocalTLSProfileCloneAndContentKey/ciphers\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/ciphers","Output":"--- PASS: TestLocalTLSProfileCloneAndContentKey/ciphers (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/ciphers","Elapsed":0} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/curves"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/curves","Output":"=== RUN TestLocalTLSProfileCloneAndContentKey/curves\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/curves","Output":"--- PASS: TestLocalTLSProfileCloneAndContentKey/curves (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/curves","Elapsed":0} {"Time":"2026-09-11T18:00:03.075146+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey","Output":"--- PASS: TestLocalTLSProfileCloneAndContentKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.075146+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey","Elapsed":0} {"Time":"2026-09-11T18:00:03.075146+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Output":"PASS\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.07776+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Output":"ok \tgithub.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint\t0.350s\n"} {"Time":"2026-09-11T18:00:03.07776+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Elapsed":0.35} {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL"} {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL","Output":"=== RUN TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL","Output":"--- PASS: TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL","Elapsed":0} {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling"} {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling","Output":"=== RUN TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling","Output":"--- PASS: TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling","Elapsed":0} {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails"} {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails","Output":"=== RUN TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails","Output":"--- PASS: TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3167979+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails","Elapsed":0} {"Time":"2026-09-11T18:00:03.3167979+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails"} {"Time":"2026-09-11T18:00:03.3167979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails","Output":"=== RUN TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3167979+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails","Output":"--- PASS: TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3167979+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails","Elapsed":0} {"Time":"2026-09-11T18:00:03.3203973+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeHTTPProxy"} {"Time":"2026-09-11T18:00:03.3203973+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeHTTPProxy","Output":"=== RUN TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeHTTPProxy\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3219475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeHTTPProxy","Output":"--- PASS: TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeHTTPProxy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3219475+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeHTTPProxy","Elapsed":0} {"Time":"2026-09-11T18:00:03.3219475+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeSOCKSProxy"} {"Time":"2026-09-11T18:00:03.3219475+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeSOCKSProxy","Output":"=== RUN TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeSOCKSProxy\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3224593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeSOCKSProxy","Output":"--- PASS: TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeSOCKSProxy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3224593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeSOCKSProxy","Elapsed":0} {"Time":"2026-09-11T18:00:03.3224593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestTLSFingerprintHTTPSProxyUsesFingerprintDialer"} {"Time":"2026-09-11T18:00:03.3224593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestTLSFingerprintHTTPSProxyUsesFingerprintDialer","Output":"=== RUN TestTLSFingerprintHTTPSProxyUsesFingerprintDialer\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3224593+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestTLSFingerprintHTTPSProxyUsesFingerprintDialer","Output":"--- PASS: TestTLSFingerprintHTTPSProxyUsesFingerprintDialer (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3224593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestTLSFingerprintHTTPSProxyUsesFingerprintDialer","Elapsed":0} {"Time":"2026-09-11T18:00:03.3229723+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile"} {"Time":"2026-09-11T18:00:03.3229723+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile","Output":"=== RUN TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3229723+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile","Output":"--- PASS: TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3229723+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile","Elapsed":0} {"Time":"2026-09-11T18:00:03.3229723+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello"} {"Time":"2026-09-11T18:00:03.3229723+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello","Output":"=== RUN TestMode1DoWithTLSActuallyUsesClientHello\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3251269+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello","Output":"--- PASS: TestMode1DoWithTLSActuallyUsesClientHello (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3251269+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello","Elapsed":0} {"Time":"2026-09-11T18:00:03.3271854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy"} {"Time":"2026-09-11T18:00:03.3271854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy","Output":"=== RUN TestMode1SchedulerProjectionRetainsPolicyAndProxy\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3271854+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy","Output":"--- PASS: TestMode1SchedulerProjectionRetainsPolicyAndProxy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3271854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy","Elapsed":0} {"Time":"2026-09-11T18:00:03.3297924+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Output":"PASS\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3338558+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Output":"ok \tgithub.com/Wei-Shaw/sub2api/internal/repository\t0.607s\n"} {"Time":"2026-09-11T18:00:03.3338558+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Elapsed":0.607} {"Time":"2026-09-11T18:00:03.3875398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Output":"testing: warning: no tests to run\n"} {"Time":"2026-09-11T18:00:03.3875398+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Output":"PASS\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.3908853+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Output":"ok \tgithub.com/Wei-Shaw/sub2api/internal/handler/admin\t0.664s [no tests to run]\n"} {"Time":"2026-09-11T18:00:03.3908853+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Elapsed":0.664} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"2026/09/11 10:00:03 Timezone initialized: UTC (UTC offset: +00:00)\n"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI","Output":"=== RUN TestPreviewAntiDegradeOpenAI\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI","Output":"--- PASS: TestPreviewAntiDegradeOpenAI (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI","Elapsed":0} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic","Output":"=== RUN TestPreviewAntiDegradeAnthropic\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic","Output":"--- PASS: TestPreviewAntiDegradeAnthropic (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic","Elapsed":0} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo","Output":"=== RUN TestPreviewAntiDegradeNothingToDo\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo","Output":"--- PASS: TestPreviewAntiDegradeNothingToDo (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo","Elapsed":0} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled","Output":"=== RUN TestPreviewAntiDegradeAlreadyEnabled\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled","Output":"--- PASS: TestPreviewAntiDegradeAlreadyEnabled (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled","Elapsed":0} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade","Output":"=== RUN TestApplyRevertAntiDegrade\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade","Output":"--- PASS: TestApplyRevertAntiDegrade (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade","Elapsed":0} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot","Output":"=== RUN TestRevertAntiDegradeRejectsBadSnapshot\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot","Output":"--- PASS: TestRevertAntiDegradeRejectsBadSnapshot (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot","Elapsed":0} {"Time":"2026-09-11T18:00:03.4622583+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed"} {"Time":"2026-09-11T18:00:03.4622583+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed","Output":"=== RUN TestDuplicateAccountDoesNotCopyCodexFingerprintSeed\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4622583+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed","Output":"--- PASS: TestDuplicateAccountDoesNotCopyCodexFingerprintSeed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4622583+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed","Elapsed":0} {"Time":"2026-09-11T18:00:03.4622583+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads"} {"Time":"2026-09-11T18:00:03.4627667+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads","Output":"=== RUN TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads","Output":"--- PASS: TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads","Elapsed":0} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift","Output":"=== RUN TestMode1RuntimeRejectsConfigurationDrift\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift","Output":"--- PASS: TestMode1RuntimeRejectsConfigurationDrift (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift","Elapsed":0} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade","Output":"=== RUN TestMode1InvalidMarkerDoesNotDowngrade\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade","Output":"--- PASS: TestMode1InvalidMarkerDoesNotDowngrade (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade","Elapsed":0} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer","Output":"=== RUN TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer","Output":"--- PASS: TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer","Elapsed":0} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy","Output":"=== RUN TestMode1PartialAndBulkUpdatesCannotDisablePolicy\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy","Output":"--- PASS: TestMode1PartialAndBulkUpdatesCannotDisablePolicy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy","Elapsed":0} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback","Output":"=== RUN TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback","Output":"--- PASS: TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback","Elapsed":0} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RejectsUnverifiedPlugin"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RejectsUnverifiedPlugin","Output":"=== RUN TestMode1RejectsUnverifiedPlugin\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RejectsUnverifiedPlugin","Output":"--- PASS: TestMode1RejectsUnverifiedPlugin (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RejectsUnverifiedPlugin","Elapsed":0} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget","Output":"=== RUN TestMode1IntegrityPreservesReasoningToolsAndBudget\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget","Output":"--- PASS: TestMode1IntegrityPreservesReasoningToolsAndBudget (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget","Elapsed":0} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough","Output":"=== RUN TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false"} {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false","Output":"=== RUN TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4670199+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false","Output":"--- PASS: TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4670199+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false","Elapsed":0} {"Time":"2026-09-11T18:00:03.4670199+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true"} {"Time":"2026-09-11T18:00:03.4670199+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Output":"=== RUN TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4670199+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Output":"2026/09/11 10:00:03 [OpenAI 自动透传] 命中自动透传分支: account=1 name=mode1 type=oauth model=gpt-5.2 stream=true\n"} {"Time":"2026-09-11T18:00:03.4670199+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Output":"--- PASS: TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4670199+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Elapsed":0} {"Time":"2026-09-11T18:00:03.4670199+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough","Output":"--- PASS: TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4670199+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough","Elapsed":0} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode","Output":"=== RUN TestGetCodexFingerprintMode\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号","Output":"=== RUN TestGetCodexFingerprintMode/nil_账号\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号","Output":"--- PASS: TestGetCodexFingerprintMode/nil_账号 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号","Elapsed":0} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号","Output":"=== RUN TestGetCodexFingerprintMode/非_OAuth_账号\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号","Output":"--- PASS: TestGetCodexFingerprintMode/非_OAuth_账号 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号","Elapsed":0} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token","Output":"=== RUN TestGetCodexFingerprintMode/OpenAI_setup_token\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token","Output":"--- PASS: TestGetCodexFingerprintMode/OpenAI_setup_token (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token","Elapsed":0} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token","Output":"=== RUN TestGetCodexFingerprintMode/Anthropic_setup_token\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token","Output":"--- PASS: TestGetCodexFingerprintMode/Anthropic_setup_token (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token","Elapsed":0} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off","Output":"=== RUN TestGetCodexFingerprintMode/无_extra_默认_off\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off","Output":"--- PASS: TestGetCodexFingerprintMode/无_extra_默认_off (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off","Elapsed":0} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off","Output":"=== RUN TestGetCodexFingerprintMode/空值默认_off\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off","Output":"--- PASS: TestGetCodexFingerprintMode/空值默认_off (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off","Elapsed":0} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off","Output":"=== RUN TestGetCodexFingerprintMode/非法值默认_off\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off","Output":"--- PASS: TestGetCodexFingerprintMode/非法值默认_off (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off","Elapsed":0} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off","Output":"=== RUN TestGetCodexFingerprintMode/显式_off\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off","Output":"--- PASS: TestGetCodexFingerprintMode/显式_off (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off","Elapsed":0} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device","Output":"=== RUN TestGetCodexFingerprintMode/device\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device","Output":"--- PASS: TestGetCodexFingerprintMode/device (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device","Elapsed":0} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session","Output":"=== RUN TestGetCodexFingerprintMode/session\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session","Output":"--- PASS: TestGetCodexFingerprintMode/session (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session","Elapsed":0} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full","Output":"=== RUN TestGetCodexFingerprintMode/full\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full","Output":"--- PASS: TestGetCodexFingerprintMode/full (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full","Elapsed":0} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode","Output":"--- PASS: TestGetCodexFingerprintMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode","Elapsed":0} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOff\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOff (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing_with_device_override","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string","Output":"=== RUN TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed","Output":"--- PASS: TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_OffMode\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_OffMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_DeviceMode\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_DeviceMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_SessionMode\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_SessionMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients","Output":"=== RUN TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients","Output":"--- PASS: TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients","Elapsed":0} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode","Output":"=== RUN TestApplyCodexFingerprintHeaders_FullMode\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode","Output":"--- PASS: TestApplyCodexFingerprintHeaders_FullMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode","Elapsed":0} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_OffMode\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_OffMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode","Elapsed":0} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_DeviceMode\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_DeviceMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode","Elapsed":0} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_SessionMode\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_SessionMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode","Elapsed":0} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode","Output":"=== RUN TestApplyCodexFingerprintClientMetadata_FullMode\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode","Output":"--- PASS: TestApplyCodexFingerprintClientMetadata_FullMode (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode","Elapsed":0} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default","Elapsed":0} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default","Elapsed":0} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override","Elapsed":0} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence","Elapsed":0} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_key_is_not_injected","Elapsed":0} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/empty_key_preserved","Elapsed":0} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/whitespace-different_key_is_an_explicit_override","Elapsed":0} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_key_preserved","Elapsed":0} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/missing_source_metadata_preserves_key","Elapsed":0} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key"} {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-string_source_session_preserves_key","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/non-object_source_metadata_preserves_key","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/device_mode_preserves_key","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body","Output":"=== RUN TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives/off_mode_preserves_body","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives","Output":"--- PASS: TestApplyCodexFingerprintPromptCacheKey_Negatives (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/no_client_metadata","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/non_object_value","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/device/object_with_extras","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/non_object_value","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/object_with_extras","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/session/no_client_metadata","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/non_object_value","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/object_with_extras","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant/full/no_client_metadata","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_Noop\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_Noop (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount","Output":"=== RUN TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount","Output":"--- PASS: TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount","Output":"=== RUN TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount","Output":"--- PASS: TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount","Elapsed":0} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount","Output":"=== RUN TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount","Output":"--- PASS: TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount","Elapsed":0} {"Time":"2026-09-11T18:00:03.4948599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched"} {"Time":"2026-09-11T18:00:03.4948599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched","Output":"=== RUN TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4948599+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched","Output":"--- PASS: TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.4948599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched","Elapsed":0} {"Time":"2026-09-11T18:00:03.5179477+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey"} {"Time":"2026-09-11T18:00:03.5179477+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5194791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5194791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Elapsed":0} {"Time":"2026-09-11T18:00:03.5194791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey"} {"Time":"2026-09-11T18:00:03.5194791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5194791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"2026/09/11 10:00:03 [OpenAI 自动透传] 命中自动透传分支: account=4402 name=oauth-raw type=oauth model=gpt-5.6-sol stream=true\n"} {"Time":"2026-09-11T18:00:03.5194791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5194791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Elapsed":0} {"Time":"2026-09-11T18:00:03.5194791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata"} {"Time":"2026-09-11T18:00:03.5194791+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5200087+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5200087+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Elapsed":0} {"Time":"2026-09-11T18:00:03.5200087+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey"} {"Time":"2026-09-11T18:00:03.5200087+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Output":"=== RUN TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5205182+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Output":"--- PASS: TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5205182+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Elapsed":0} {"Time":"2026-09-11T18:00:03.5262118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse"} {"Time":"2026-09-11T18:00:03.5262118+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse","Elapsed":0} {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL"} {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL","Elapsed":0} {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot"} {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot","Output":"=== RUN TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot","Output":"--- PASS: TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot","Elapsed":0} {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity"} {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity","Elapsed":0} {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL"} {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL","Elapsed":0} {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout"} {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout","Output":"=== RUN TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout","Output":"--- PASS: TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout","Elapsed":0} {"Time":"2026-09-11T18:00:03.5288395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey"} {"Time":"2026-09-11T18:00:03.5288395+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"=== RUN TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.530412+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Output":"--- PASS: TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.530412+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey","Elapsed":0} {"Time":"2026-09-11T18:00:03.5314319+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation"} {"Time":"2026-09-11T18:00:03.5314319+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Output":"=== RUN TestMode1WSSActualHandshakeAndFramePreservation\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5350626+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Output":"--- PASS: TestMode1WSSActualHandshakeAndFramePreservation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5350626+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Elapsed":0} {"Time":"2026-09-11T18:00:03.5350626+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation"} {"Time":"2026-09-11T18:00:03.5350626+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation","Output":"=== RUN TestMode1WSSTransportCacheIsolationAndProfileRotation\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5350626+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation","Output":"--- PASS: TestMode1WSSTransportCacheIsolationAndProfileRotation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5350626+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation","Elapsed":0} {"Time":"2026-09-11T18:00:03.5350626+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate"} {"Time":"2026-09-11T18:00:03.5350626+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5355776+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate"} {"Time":"2026-09-11T18:00:03.5355776+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate","Elapsed":0.02} {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS"} {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/invalid_ALPN_cannot_fall_back_to_ordinary_TLS","Elapsed":0} {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected"} {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected","Output":"=== RUN TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected","Elapsed":0} {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate","Output":"--- PASS: TestMode1WSSFailsClosedOnInvalidTLSAndCertificate (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate","Elapsed":0.02} {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility"} {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"=== RUN TestMode1WSConnectionPoolTransportCompatibility\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.558257+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Output":"--- PASS: TestMode1WSConnectionPoolTransportCompatibility (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.558257+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Elapsed":0.01} {"Time":"2026-09-11T18:00:03.558257+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated"} {"Time":"2026-09-11T18:00:03.558257+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Output":"=== RUN TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5608217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Output":"--- PASS: TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5608217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Elapsed":0} {"Time":"2026-09-11T18:00:03.5608217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed"} {"Time":"2026-09-11T18:00:03.5608217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed","Output":"=== RUN TestMode1WSRuntimeConcurrencyCapCannotBeBypassed\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5608217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed","Output":"--- PASS: TestMode1WSRuntimeConcurrencyCapCannotBeBypassed (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5608217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed","Elapsed":0} {"Time":"2026-09-11T18:00:03.5608217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS"} {"Time":"2026-09-11T18:00:03.5608217+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"=== RUN TestMode1WSPassthroughEntryReachesRealTLS\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:03.5613299+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"2026/09/11 10:00:03 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=45 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=123\n"} {"Time":"2026-09-11T18:00:03.5613299+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"2026/09/11 10:00:03 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=45 ws_host=chatgpt.com ws_path=/backend-api/codex/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:03.5628728+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"2026/09/11 10:00:03 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=45 status_code=0 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:03.5628728+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"2026/09/11 10:00:03 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=relay_start direction=- msg_type=text bytes=123 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:03.5628728+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"2026/09/11 10:00:03 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=123 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:03.5628728+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"2026/09/11 10:00:03 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:03.5628728+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"2026/09/11 10:00:03 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:04.5634601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"2026/09/11 10:00:04 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough first output timeout\n"} {"Time":"2026-09-11T18:00:04.5634601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"2026/09/11 10:00:04 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=second_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough first output timeout\n"} {"Time":"2026-09-11T18:00:04.5634601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"2026/09/11 10:00:04 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=45 stage=relay_client_closed direction=- msg_type=- bytes=0 graceful=true wrote_downstream=true err=-\n"} {"Time":"2026-09-11T18:00:04.5634601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"2026/09/11 10:00:04 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=45 request_id=- terminal_event=- duration_ms=1000 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=0\n"} {"Time":"2026-09-11T18:00:04.5634601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Output":"--- PASS: TestMode1WSPassthroughEntryReachesRealTLS (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5634601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Elapsed":1} {"Time":"2026-09-11T18:00:04.5634601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial"} {"Time":"2026-09-11T18:00:04.5634601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial","Output":"=== RUN TestMode1WSIngressRejectsLossyPolicyBeforeDial\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5634601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough"} {"Time":"2026-09-11T18:00:04.5634601+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Output":"=== RUN TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5650341+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Output":"2026/09/11 10:00:04 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=46 model=gpt-5.4 previous_response_id=- first_message_type=text first_message_bytes=122\n"} {"Time":"2026-09-11T18:00:04.5650341+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Output":"--- PASS: TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5650341+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Elapsed":0} {"Time":"2026-09-11T18:00:04.5655878+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool"} {"Time":"2026-09-11T18:00:04.5655878+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool","Output":"=== RUN TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.566624+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool","Output":"--- PASS: TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.566624+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool","Elapsed":0} {"Time":"2026-09-11T18:00:04.566624+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial","Output":"--- PASS: TestMode1WSIngressRejectsLossyPolicyBeforeDial (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.566624+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial","Elapsed":0} {"Time":"2026-09-11T18:00:04.566624+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy"} {"Time":"2026-09-11T18:00:04.566624+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy","Output":"=== RUN TestMode1WSSOverLocalHTTPAndHTTPSProxy\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.566624+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http"} {"Time":"2026-09-11T18:00:04.566624+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Output":"=== RUN TestMode1WSSOverLocalHTTPAndHTTPSProxy/http\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5692137+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Output":"--- PASS: TestMode1WSSOverLocalHTTPAndHTTPSProxy/http (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5692137+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Elapsed":0} {"Time":"2026-09-11T18:00:04.5692137+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https"} {"Time":"2026-09-11T18:00:04.5692137+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Output":"=== RUN TestMode1WSSOverLocalHTTPAndHTTPSProxy/https\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Output":"--- PASS: TestMode1WSSOverLocalHTTPAndHTTPSProxy/https (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Elapsed":0} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy","Output":"--- PASS: TestMode1WSSOverLocalHTTPAndHTTPSProxy (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy","Elapsed":0.01} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle","Output":"=== RUN TestOpenAIWSConnPool_CleanupStaleAndTrimIdle\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle","Output":"--- PASS: TestOpenAIWSConnPool_CleanupStaleAndTrimIdle (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle","Elapsed":0} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat","Output":"=== RUN TestOpenAIWSConnPool_NextConnIDFormat\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat","Output":"--- PASS: TestOpenAIWSConnPool_NextConnIDFormat (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat","Elapsed":0} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval","Output":"=== RUN TestOpenAIWSConnPool_AcquireCleanupInterval\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval","Output":"--- PASS: TestOpenAIWSConnPool_AcquireCleanupInterval (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval","Elapsed":0} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive","Output":"=== RUN TestOpenAIWSConnPool_TargetConnCountAdaptive\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive","Output":"--- PASS: TestOpenAIWSConnPool_TargetConnCountAdaptive (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive","Elapsed":0} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero","Output":"=== RUN TestOpenAIWSConnPool_TargetConnCountMinIdleZero\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero","Output":"--- PASS: TestOpenAIWSConnPool_TargetConnCountMinIdleZero (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.57283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero","Elapsed":0} {"Time":"2026-09-11T18:00:04.57283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsync"} {"Time":"2026-09-11T18:00:04.57283+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsync","Output":"=== RUN TestOpenAIWSConnPool_EnsureTargetIdleAsync\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5934029+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsync","Output":"--- PASS: TestOpenAIWSConnPool_EnsureTargetIdleAsync (0.02s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:04.5934029+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsync","Elapsed":0.02} {"Time":"2026-09-11T18:00:04.5934029+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown"} {"Time":"2026-09-11T18:00:04.5934029+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown","Output":"=== RUN TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.2052797+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown","Output":"--- PASS: TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown (0.61s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.2052797+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown","Elapsed":0.61} {"Time":"2026-09-11T18:00:05.2052797+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress"} {"Time":"2026-09-11T18:00:05.2052797+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress","Output":"=== RUN TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.3665638+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress","Output":"--- PASS: TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress (0.16s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.3668694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress","Elapsed":0.16} {"Time":"2026-09-11T18:00:05.3668694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireQueueWaitMetrics"} {"Time":"2026-09-11T18:00:05.3668694+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireQueueWaitMetrics","Output":"=== RUN TestOpenAIWSConnPool_AcquireQueueWaitMetrics\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4269527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireQueueWaitMetrics","Output":"--- PASS: TestOpenAIWSConnPool_AcquireQueueWaitMetrics (0.06s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4269527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireQueueWaitMetrics","Elapsed":0.06} {"Time":"2026-09-11T18:00:05.4269527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease"} {"Time":"2026-09-11T18:00:05.4269527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease","Output":"=== RUN TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4269527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease","Output":"--- PASS: TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4269527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease","Elapsed":0} {"Time":"2026-09-11T18:00:05.4269527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial"} {"Time":"2026-09-11T18:00:05.4269527+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial","Output":"=== RUN TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.438059+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial","Output":"--- PASS: TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.438059+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial","Elapsed":0.01} {"Time":"2026-09-11T18:00:05.438059+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter"} {"Time":"2026-09-11T18:00:05.438059+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter","Output":"=== RUN TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter","Output":"--- PASS: TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter (0.05s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter","Elapsed":0.05} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration","Output":"=== RUN TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration","Output":"--- PASS: TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration","Elapsed":0} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse","Output":"=== RUN TestOpenAIWSConnPool_ForceNewConnSkipsReuse\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse","Output":"--- PASS: TestOpenAIWSConnPool_ForceNewConnSkipsReuse (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse","Elapsed":0} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures","Output":"=== RUN TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures","Output":"--- PASS: TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures","Elapsed":0} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata","Output":"=== RUN TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata","Output":"--- PASS: TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata","Elapsed":0} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity"} {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation","Elapsed":0} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen","Elapsed":0} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore","Elapsed":0} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread","Elapsed":0} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request","Elapsed":0} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window","Output":"=== RUN TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window","Elapsed":0} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity","Output":"--- PASS: TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity","Elapsed":0} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity"} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity","Output":"=== RUN TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity","Output":"--- PASS: TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity","Elapsed":0} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity"} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity","Output":"=== RUN TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity","Output":"--- PASS: TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity","Elapsed":0} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures"} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures","Output":"=== RUN TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures","Output":"--- PASS: TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures","Elapsed":0} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection"} {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection","Output":"=== RUN TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection","Output":"--- PASS: TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection (0.05s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection","Elapsed":0.05} {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy"} {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy","Output":"=== RUN TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy","Output":"--- PASS: TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy","Elapsed":0} {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable"} {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable","Output":"=== RUN TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable","Output":"--- PASS: TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable","Elapsed":0} {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly"} {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly","Output":"=== RUN TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly","Output":"--- PASS: TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly (0.06s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly","Elapsed":0.06} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull","Output":"=== RUN TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull","Output":"--- PASS: TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull","Elapsed":0} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn","Output":"=== RUN TestOpenAIWSConnPool_CleanupSkipsPinnedConn\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn","Output":"--- PASS: TestOpenAIWSConnPool_CleanupSkipsPinnedConn (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn","Elapsed":0} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches","Output":"=== RUN TestOpenAIWSConnPool_PinUnpinConnBranches\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches","Output":"--- PASS: TestOpenAIWSConnPool_PinUnpinConnBranches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches","Elapsed":0} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount","Output":"=== RUN TestOpenAIWSConnPool_EffectiveMaxConnsByAccount\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount","Output":"--- PASS: TestOpenAIWSConnPool_EffectiveMaxConnsByAccount (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount","Elapsed":0} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap","Output":"=== RUN TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap","Output":"--- PASS: TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap","Elapsed":0} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap","Output":"=== RUN TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap","Output":"--- PASS: TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap","Elapsed":0} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero"} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero","Output":"=== RUN TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero","Output":"--- PASS: TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero","Elapsed":0} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn"} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn","Output":"=== RUN TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn","Output":"--- PASS: TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn","Elapsed":0} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire"} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire","Output":"=== RUN TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire","Output":"--- PASS: TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire","Elapsed":0} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection"} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection","Output":"=== RUN TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection","Output":"--- PASS: TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection","Elapsed":0} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches"} {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches","Output":"=== RUN TestOpenAIWSConnPool_BackgroundWorkerGuardBranches\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches","Output":"--- PASS: TestOpenAIWSConnPool_BackgroundWorkerGuardBranches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches","Elapsed":0} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries","Output":"=== RUN TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries","Output":"--- PASS: TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries","Elapsed":0} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap","Output":"=== RUN TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap","Output":"--- PASS: TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap","Elapsed":0} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured","Output":"=== RUN TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured","Output":"--- PASS: TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured","Elapsed":0} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close","Output":"=== RUN TestOpenAIWSConnPool_Close\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close","Output":"--- PASS: TestOpenAIWSConnPool_Close (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close","Elapsed":0} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad"} {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad","Output":"=== RUN TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6019406+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad","Output":"--- PASS: TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6019406+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad","Elapsed":0} {"Time":"2026-09-11T18:00:05.6019406+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel"} {"Time":"2026-09-11T18:00:05.6019406+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel","Output":"=== RUN TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6320515+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel","Output":"--- PASS: TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel (0.03s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6320515+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel","Elapsed":0.03} {"Time":"2026-09-11T18:00:05.6320515+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections"} {"Time":"2026-09-11T18:00:05.6320515+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections","Output":"=== RUN TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6320515+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections","Output":"--- PASS: TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6320515+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections","Elapsed":0} {"Time":"2026-09-11T18:00:05.6320515+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit"} {"Time":"2026-09-11T18:00:05.6320515+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit","Output":"=== RUN TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6429186+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit","Output":"--- PASS: TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit (0.01s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6429186+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit","Elapsed":0.01} {"Time":"2026-09-11T18:00:05.6429186+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches"} {"Time":"2026-09-11T18:00:05.6429186+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches","Output":"=== RUN TestOpenAIWSConnPool_UtilityBranches\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6429186+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches","Output":"--- PASS: TestOpenAIWSConnPool_UtilityBranches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6429186+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches","Elapsed":0} {"Time":"2026-09-11T18:00:05.6434226+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease"} {"Time":"2026-09-11T18:00:05.6434226+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease","Output":"=== RUN TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6434226+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease","Output":"--- PASS: TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:05.6434226+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease","Elapsed":0} {"Time":"2026-09-11T18:00:05.6434226+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches"} {"Time":"2026-09-11T18:00:05.6434226+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches","Output":"=== RUN TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches","Output":"--- PASS: TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches (0.93s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches","Elapsed":0.93} {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Acquire_ErrorBranches"} {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Acquire_ErrorBranches","Output":"=== RUN TestOpenAIWSConnPool_Acquire_ErrorBranches\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Acquire_ErrorBranches","Output":"--- PASS: TestOpenAIWSConnPool_Acquire_ErrorBranches (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Acquire_ErrorBranches","Elapsed":0} {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection"} {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection","Output":"=== RUN TestOpenAIWSConnPool_DialConnNilConnection\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection","Output":"--- PASS: TestOpenAIWSConnPool_DialConnNilConnection (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection","Elapsed":0} {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics"} {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics","Output":"=== RUN TestOpenAIWSConnPool_SnapshotTransportMetrics\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics","Output":"--- PASS: TestOpenAIWSConnPool_SnapshotTransportMetrics (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics","Elapsed":0} {"Time":"2026-09-11T18:00:06.5808087+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect"} {"Time":"2026-09-11T18:00:06.5808087+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"=== RUN TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:06.5818387+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:06.5818387+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:06.5818387+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:06.5818387+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:06.5818387+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:06.5818387+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=901 turn=1 request_id=resp_first terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\n"} {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"2026/09/11 10:00:06 INFO account_rate_limited account_id=901 platform=openai reset_at=2026-09-11T11:30:06.000Z reset_in=1h29m59s\n"} {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_rate_limit_failover account_id=901 err_code=rate_limit_exceeded err_type=usage_limit_reached err_message=The usage limit has been reached\n"} {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=upstream_message_rejected direction=upstream_to_client msg_type=text bytes=152 graceful=false wrote_downstream=true err=openai ws client close: 1013 upstream rate limit exceeded; please reconnect: later passthrough turn was rate limited before output\n"} {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=- msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai ws client close: 1013 upstream rate limit exceeded; please reconnect: later passthrough turn was rate limited before output\n"} {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=false err=fail to get reader: received close frame: status = StatusTryAgainLater and reason = \"upstream rate limit exceeded; please reconnect\"\n"} {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=false err=fail to get reader: received close frame: status = StatusTryAgainLater and reason = \"upstream rate limit exceeded; please reconnect\"\n"} {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_exit direction=- msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai ws client close: 1013 upstream rate limit exceeded; please reconnect: later passthrough turn was rate limited before output\n"} {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_failed account_id=901 stage=upstream_message wrote_downstream=true err=openai ws client close: 1013 upstream rate limit exceeded; please reconnect: later passthrough turn was rate limited before output duration_ms=0 c2u_frames=2 u2c_frames=1 dropped_frames=0 turns=1\n"} {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Output":"--- PASS: TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Elapsed":0} {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn"} {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn","Output":"=== RUN TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error"} {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error","Output":"=== RUN TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:06.5828616+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:06.5828616+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:06.5828616+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:06.5828616+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:06.5828616+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:06.5828616+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=901 turn=1 request_id=resp_err terminal_event=response.fail turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=9 output_tokens=2 cache_read_tokens=0\n"} {"Time":"2026-09-11T18:00:06.5828616+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:06.5833953+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error","Output":"2026/09/11 10:00:06 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:07.7830897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error","Output":"2026/09/11 10:00:07 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=context canceled\n"} {"Time":"2026-09-11T18:00:07.7830897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error","Output":"2026/09/11 10:00:07 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_client_closed direction=- msg_type=- bytes=0 graceful=true wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:07.7830897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error","Output":"2026/09/11 10:00:07 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=901 request_id=resp_err terminal_event=response.fail duration_ms=1200 c2u_frames=1 u2c_frames=2 dropped_frames=0 turns=1\n"} {"Time":"2026-09-11T18:00:07.7830897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error","Output":"--- PASS: TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error (1.20s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:07.7830897+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error","Elapsed":1.2} {"Time":"2026-09-11T18:00:07.7830897+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed"} {"Time":"2026-09-11T18:00:07.7830897+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed","Output":"=== RUN TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:07.7835908+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed","Output":"2026/09/11 10:00:07 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:07.7835908+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed","Output":"2026/09/11 10:00:07 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:07.7835908+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed","Output":"2026/09/11 10:00:07 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:07.7835908+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed","Output":"2026/09/11 10:00:07 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:07.7835908+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed","Output":"2026/09/11 10:00:07 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:07.7841024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed","Output":"2026/09/11 10:00:07 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=901 turn=1 request_id=resp_fail terminal_event=response.fail turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=9 output_tokens=2 cache_read_tokens=0\n"} {"Time":"2026-09-11T18:00:07.7841024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed","Output":"2026/09/11 10:00:07 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:07.7841024+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed","Output":"2026/09/11 10:00:07 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:08.9846279+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed","Output":"2026/09/11 10:00:08 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=context canceled\n"} {"Time":"2026-09-11T18:00:08.9846279+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed","Output":"2026/09/11 10:00:08 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_client_closed direction=- msg_type=- bytes=0 graceful=true wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:08.9846279+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed","Output":"2026/09/11 10:00:08 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=901 request_id=resp_fail terminal_event=response.fail duration_ms=1201 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\n"} {"Time":"2026-09-11T18:00:08.9846279+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed","Output":"--- PASS: TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed (1.20s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:08.9846279+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed","Elapsed":1.2} {"Time":"2026-09-11T18:00:08.9846279+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn","Output":"--- PASS: TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn (2.40s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:08.9846279+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn","Elapsed":2.4} {"Time":"2026-09-11T18:00:08.9846279+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects"} {"Time":"2026-09-11T18:00:08.9846279+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Output":"=== RUN TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:08.9857653+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Output":"2026/09/11 10:00:08 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:08.9862776+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Output":"2026/09/11 10:00:08 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:08.9862776+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Output":"2026/09/11 10:00:08 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:08.9862776+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Output":"2026/09/11 10:00:08 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:08.9862776+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Output":"2026/09/11 10:00:08 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:08.9862776+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Output":"2026/09/11 10:00:08 WARN account_disabled_auth_error account_id=901 error=\"Authentication failed (401): invalid or expired credentials\"\n"} {"Time":"2026-09-11T18:00:08.9862776+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Output":"2026/09/11 10:00:08 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=901 turn=1 request_id=resp_non_cyber terminal_event=response.fail turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=3 output_tokens=1 cache_read_tokens=0\n"} {"Time":"2026-09-11T18:00:08.9867963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Output":"2026/09/11 10:00:08 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:08.9867963+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Output":"2026/09/11 10:00:08 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:10.1873252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Output":"2026/09/11 10:00:10 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=context canceled\n"} {"Time":"2026-09-11T18:00:10.1873252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Output":"2026/09/11 10:00:10 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_client_closed direction=- msg_type=- bytes=0 graceful=true wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:10.1873252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Output":"2026/09/11 10:00:10 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=901 request_id=resp_non_cyber terminal_event=response.fail duration_ms=1201 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\n"} {"Time":"2026-09-11T18:00:10.1873252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Output":"--- PASS: TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects (1.20s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:10.1873252+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects","Elapsed":1.2} {"Time":"2026-09-11T18:00:10.1873252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects"} {"Time":"2026-09-11T18:00:10.1873252+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects","Output":"=== RUN TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:10.187951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects","Output":"2026/09/11 10:00:10 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:10.187951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects","Output":"2026/09/11 10:00:10 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:10.187951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects","Output":"2026/09/11 10:00:10 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:10.187951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects","Output":"2026/09/11 10:00:10 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:10.187951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects","Output":"2026/09/11 10:00:10 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:10.187951+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects","Output":"2026/09/11 10:00:10 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=901 turn=1 request_id=resp_cyber_auth terminal_event=response.fail turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=0 output_tokens=0 cache_read_tokens=0\n"} {"Time":"2026-09-11T18:00:10.1884617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects","Output":"2026/09/11 10:00:10 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:10.1884617+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects","Output":"2026/09/11 10:00:10 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:11.3887899+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=context canceled\n"} {"Time":"2026-09-11T18:00:11.3887899+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_client_closed direction=- msg_type=- bytes=0 graceful=true wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:11.3887899+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=901 request_id=resp_cyber_auth terminal_event=response.fail duration_ms=1200 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\n"} {"Time":"2026-09-11T18:00:11.3887899+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects","Output":"--- PASS: TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects (1.20s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:11.3887899+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects","Elapsed":1.2} {"Time":"2026-09-11T18:00:11.3887899+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8"} {"Time":"2026-09-11T18:00:11.3887899+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8","Output":"=== RUN TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:11.3900905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:11.3900905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:11.3900905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:11.3900905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:11.3900905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:11.3900905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1008 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa界: policy ...\n"} {"Time":"2026-09-11T18:00:11.3900905+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1008 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa界: policy ...\n"} {"Time":"2026-09-11T18:00:11.3906881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1008 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa界: policy ...\n"} {"Time":"2026-09-11T18:00:11.3906881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_failed account_id=901 stage=read_upstream wrote_downstream=false err=openai ws client close: 1008 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa界: policy ... duration_ms=0 c2u_frames=1 u2c_frames=0 dropped_frames=0 turns=0\n"} {"Time":"2026-09-11T18:00:11.3906881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8","Output":"--- PASS: TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8 (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:11.3906881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8","Elapsed":0} {"Time":"2026-09-11T18:00:11.3906881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls"} {"Time":"2026-09-11T18:00:11.3906881+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls","Output":"=== RUN TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:11.3918419+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=173\n"} {"Time":"2026-09-11T18:00:11.3918419+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:11.3923756+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:11.3923756+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=173 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:11.3923756+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=173 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:11.3923756+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=901 turn=1 request_id=resp_lite terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\n"} {"Time":"2026-09-11T18:00:11.3932281+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:11.3932281+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls","Output":"2026/09/11 10:00:11 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:12.5941673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=context canceled\n"} {"Time":"2026-09-11T18:00:12.5941673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_client_closed direction=- msg_type=- bytes=0 graceful=true wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:12.5941673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=901 request_id=resp_lite terminal_event=response.completed duration_ms=1201 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\n"} {"Time":"2026-09-11T18:00:12.5941673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls","Output":"--- PASS: TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls (1.20s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:12.5941673+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls","Elapsed":1.2} {"Time":"2026-09-11T18:00:12.5941673+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose"} {"Time":"2026-09-11T18:00:12.5941673+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose","Output":"=== RUN TestPassthroughLifecycle_LeaseLossSendsRetryClose\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:12.5958084+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:12.5958084+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:12.5958084+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:12.5958084+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:12.5958084+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:12.5958084+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=upstream websocket closed before terminal event: context canceled\n"} {"Time":"2026-09-11T18:00:12.5958084+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=upstream websocket closed before terminal event: context canceled\n"} {"Time":"2026-09-11T18:00:12.5963196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1013 websocket ingress capacity lease lost; please reconnect: openai websocket ingress lease lost\n"} {"Time":"2026-09-11T18:00:12.5963196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1013 websocket ingress capacity lease lost; please reconnect: openai websocket ingress lease lost\n"} {"Time":"2026-09-11T18:00:12.5963196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=upstream websocket closed before terminal event: context canceled\n"} {"Time":"2026-09-11T18:00:12.5963196+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose","Output":"--- PASS: TestPassthroughLifecycle_LeaseLossSendsRetryClose (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:12.5963196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose","Elapsed":0} {"Time":"2026-09-11T18:00:12.5968374+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle"} {"Time":"2026-09-11T18:00:12.5968374+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Output":"=== RUN TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:12.5973531+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:12.5973531+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:12.5973531+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:12.5973531+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:12.5973531+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:12.5973531+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Output":"2026/09/11 10:00:12 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=901 turn=1 request_id=resp_idle terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\n"} {"Time":"2026-09-11T18:00:13.5974405+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Output":"2026/09/11 10:00:13 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1000 websocket idle timeout: context deadline exceeded\n"} {"Time":"2026-09-11T18:00:13.5982013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Output":"2026/09/11 10:00:13 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1000 websocket idle timeout: context deadline exceeded\n"} {"Time":"2026-09-11T18:00:13.5982013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Output":"2026/09/11 10:00:13 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=context canceled\n"} {"Time":"2026-09-11T18:00:13.5982013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Output":"2026/09/11 10:00:13 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=second_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=context canceled\n"} {"Time":"2026-09-11T18:00:13.5982013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Output":"2026/09/11 10:00:13 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_exit direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai ws client close: 1000 websocket idle timeout: context deadline exceeded\n"} {"Time":"2026-09-11T18:00:13.5982013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Output":"2026/09/11 10:00:13 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_failed account_id=901 stage=read_client wrote_downstream=true err=openai ws client close: 1000 websocket idle timeout: context deadline exceeded duration_ms=1000 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=1\n"} {"Time":"2026-09-11T18:00:13.5982013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Output":"--- PASS: TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:13.5982013+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Elapsed":1} {"Time":"2026-09-11T18:00:13.5982013+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout"} {"Time":"2026-09-11T18:00:13.5982013+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Output":"=== RUN TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:13.5992411+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Output":"2026/09/11 10:00:13 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:13.5992411+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Output":"2026/09/11 10:00:13 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:13.5992411+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Output":"2026/09/11 10:00:13 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:13.5992411+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Output":"2026/09/11 10:00:13 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:13.5992411+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Output":"2026/09/11 10:00:13 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:14.5995893+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Output":"2026/09/11 10:00:14 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough active turn read timeout\n"} {"Time":"2026-09-11T18:00:14.5995893+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Output":"2026/09/11 10:00:14 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough active turn read timeout\n"} {"Time":"2026-09-11T18:00:14.5995893+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Output":"2026/09/11 10:00:14 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusGoingAway and reason = \"upstream websocket read timeout; please reconnect\"\n"} {"Time":"2026-09-11T18:00:14.5995893+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Output":"2026/09/11 10:00:14 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusGoingAway and reason = \"upstream websocket read timeout; please reconnect\"\n"} {"Time":"2026-09-11T18:00:14.5995893+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Output":"2026/09/11 10:00:14 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough active turn read timeout\n"} {"Time":"2026-09-11T18:00:14.5995893+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Output":"2026/09/11 10:00:14 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_failed account_id=901 stage=read_upstream wrote_downstream=true err=openai websocket passthrough active turn read timeout duration_ms=1000 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=0\n"} {"Time":"2026-09-11T18:00:14.6003294+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Output":"--- PASS: TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:14.6003294+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Elapsed":1} {"Time":"2026-09-11T18:00:14.6003294+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel"} {"Time":"2026-09-11T18:00:14.6003294+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel","Output":"=== RUN TestPassthroughLifecycle_PreambleAllowsPromptClientCancel\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:14.600912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel","Output":"2026/09/11 10:00:14 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:14.600912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel","Output":"2026/09/11 10:00:14 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:14.600912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel","Output":"2026/09/11 10:00:14 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:14.600912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel","Output":"2026/09/11 10:00:14 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:14.600912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel","Output":"2026/09/11 10:00:14 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:14.600912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel","Output":"2026/09/11 10:00:14 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:14.600912+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel","Output":"2026/09/11 10:00:14 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:15.801609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=upstream websocket closed before terminal event: context canceled\n"} {"Time":"2026-09-11T18:00:15.801609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_client_closed direction=- msg_type=- bytes=0 graceful=true wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:15.801609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=901 request_id=- terminal_event=- duration_ms=1200 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=0\n"} {"Time":"2026-09-11T18:00:15.801609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel","Output":"--- PASS: TestPassthroughLifecycle_PreambleAllowsPromptClientCancel (1.20s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:15.801609+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel","Elapsed":1.2} {"Time":"2026-09-11T18:00:15.801609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate"} {"Time":"2026-09-11T18:00:15.801609+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Output":"=== RUN TestPassthroughLifecycle_RejectsOverlappingResponseCreate\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:15.8024063+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:15.8024063+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:15.8024063+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:15.8024063+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:15.8024063+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:15.8029446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1008 overlapping response.create is not supported: overlapping response.create is not supported\n"} {"Time":"2026-09-11T18:00:15.8029446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1008 overlapping response.create is not supported: overlapping response.create is not supported\n"} {"Time":"2026-09-11T18:00:15.8029446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=upstream websocket closed before terminal event: context canceled\n"} {"Time":"2026-09-11T18:00:15.8029446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=second_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=upstream websocket closed before terminal event: context canceled\n"} {"Time":"2026-09-11T18:00:15.8029446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_exit direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai ws client close: 1008 overlapping response.create is not supported: overlapping response.create is not supported\n"} {"Time":"2026-09-11T18:00:15.8029446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_failed account_id=901 stage=read_client wrote_downstream=true err=openai ws client close: 1008 overlapping response.create is not supported: overlapping response.create is not supported duration_ms=0 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=0\n"} {"Time":"2026-09-11T18:00:15.8029446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Output":"--- PASS: TestPassthroughLifecycle_RejectsOverlappingResponseCreate (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:15.8029446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Elapsed":0} {"Time":"2026-09-11T18:00:15.8029446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout"} {"Time":"2026-09-11T18:00:15.8029446+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Output":"=== RUN TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:15.8034563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:15.8034563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:15.8034563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:15.8034563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:15.8034563+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Output":"2026/09/11 10:00:15 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:17.6039538+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Output":"2026/09/11 10:00:17 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=901 turn=1 request_id=resp_active_refresh terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=1800 first_token_ms=0 input_tokens=1 output_tokens=3 cache_read_tokens=0\n"} {"Time":"2026-09-11T18:00:17.6044779+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Output":"2026/09/11 10:00:17 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:17.6044779+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Output":"2026/09/11 10:00:17 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusNormalClosure and reason = \"done\"\n"} {"Time":"2026-09-11T18:00:18.8048371+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Output":"2026/09/11 10:00:18 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=context canceled\n"} {"Time":"2026-09-11T18:00:18.8048371+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Output":"2026/09/11 10:00:18 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_client_closed direction=- msg_type=- bytes=0 graceful=true wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:18.8048371+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Output":"2026/09/11 10:00:18 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_completed account_id=901 request_id=resp_active_refresh terminal_event=response.completed duration_ms=3001 c2u_frames=1 u2c_frames=4 dropped_frames=0 turns=1\n"} {"Time":"2026-09-11T18:00:18.8048371+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Output":"--- PASS: TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout (3.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:18.8048371+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Elapsed":3} {"Time":"2026-09-11T18:00:18.8048371+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout"} {"Time":"2026-09-11T18:00:18.8048371+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"=== RUN TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:18.8056204+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"2026/09/11 10:00:18 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:18.8056204+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"2026/09/11 10:00:18 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:18.806133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"2026/09/11 10:00:18 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:18.806133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"2026/09/11 10:00:18 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:18.806133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"2026/09/11 10:00:18 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:18.806133+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"2026/09/11 10:00:18 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=901 turn=1 request_id=resp_idle_first terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\n"} {"Time":"2026-09-11T18:00:20.1063137+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"2026/09/11 10:00:20 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=901 turn=2 request_id=resp_idle_second terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\n"} {"Time":"2026-09-11T18:00:22.1063966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"2026/09/11 10:00:22 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1000 websocket idle timeout: context deadline exceeded\n"} {"Time":"2026-09-11T18:00:22.1063966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"2026/09/11 10:00:22 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai ws client close: 1000 websocket idle timeout: context deadline exceeded\n"} {"Time":"2026-09-11T18:00:22.1063966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"2026/09/11 10:00:22 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=context canceled\n"} {"Time":"2026-09-11T18:00:22.1063966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"2026/09/11 10:00:22 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=second_exit direction=upstream_to_client msg_type=- bytes=0 graceful=true wrote_downstream=true err=context canceled\n"} {"Time":"2026-09-11T18:00:22.1063966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"2026/09/11 10:00:22 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_exit direction=client_to_upstream msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai ws client close: 1000 websocket idle timeout: context deadline exceeded\n"} {"Time":"2026-09-11T18:00:22.1063966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"2026/09/11 10:00:22 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_failed account_id=901 stage=read_client wrote_downstream=true err=openai ws client close: 1000 websocket idle timeout: context deadline exceeded duration_ms=3300 c2u_frames=2 u2c_frames=2 dropped_frames=0 turns=2\n"} {"Time":"2026-09-11T18:00:22.1063966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Output":"--- PASS: TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout (3.30s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:22.1063966+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout","Elapsed":3.3} {"Time":"2026-09-11T18:00:22.1063966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded"} {"Time":"2026-09-11T18:00:22.1063966+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded","Output":"=== RUN TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:22.1076588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded","Output":"2026/09/11 10:00:22 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:22.1076588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded","Output":"2026/09/11 10:00:22 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:22.1076588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded","Output":"2026/09/11 10:00:22 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:22.1076588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded","Output":"2026/09/11 10:00:22 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:22.1076588+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded","Output":"2026/09/11 10:00:22 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:23.1082045+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded","Output":"2026/09/11 10:00:23 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai websocket passthrough first output timeout\n"} {"Time":"2026-09-11T18:00:23.1085156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded","Output":"2026/09/11 10:00:23 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai websocket passthrough first output timeout\n"} {"Time":"2026-09-11T18:00:23.1085156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded","Output":"2026/09/11 10:00:23 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=false err=openai websocket passthrough first output timeout\n"} {"Time":"2026-09-11T18:00:23.1085156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded","Output":"2026/09/11 10:00:23 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_failed account_id=901 stage=read_upstream wrote_downstream=false err=openai websocket passthrough first output timeout duration_ms=1000 c2u_frames=1 u2c_frames=0 dropped_frames=0 turns=0\n"} {"Time":"2026-09-11T18:00:23.1085156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded","Output":"2026/09/11 10:00:23 OpenAI first output timeout: account=901 model=gpt-5.1 effort= phase=websocket_first_semantic_output elapsed=1.0005457s limit=1s\n"} {"Time":"2026-09-11T18:00:23.1085156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded","Output":"--- PASS: TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:23.1085156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded","Elapsed":1} {"Time":"2026-09-11T18:00:23.1085156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover"} {"Time":"2026-09-11T18:00:23.1085156+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Output":"=== RUN TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:23.1090167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Output":"2026/09/11 10:00:23 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:23.1090167+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Output":"2026/09/11 10:00:23 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:23.1095545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Output":"2026/09/11 10:00:23 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:23.1095545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Output":"2026/09/11 10:00:23 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:23.1095545+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Output":"2026/09/11 10:00:23 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:24.1099487+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Output":"2026/09/11 10:00:24 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough first output timeout\n"} {"Time":"2026-09-11T18:00:24.1099487+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Output":"2026/09/11 10:00:24 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough first output timeout\n"} {"Time":"2026-09-11T18:00:24.1099487+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Output":"2026/09/11 10:00:24 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusGoingAway and reason = \"upstream produced no semantic output; please reconnect\"\n"} {"Time":"2026-09-11T18:00:24.1099487+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Output":"2026/09/11 10:00:24 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusGoingAway and reason = \"upstream produced no semantic output; please reconnect\"\n"} {"Time":"2026-09-11T18:00:24.1099487+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Output":"2026/09/11 10:00:24 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough first output timeout\n"} {"Time":"2026-09-11T18:00:24.1099487+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Output":"2026/09/11 10:00:24 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_failed account_id=901 stage=read_upstream wrote_downstream=true err=openai websocket passthrough first output timeout duration_ms=1000 c2u_frames=1 u2c_frames=1 dropped_frames=0 turns=0\n"} {"Time":"2026-09-11T18:00:24.1099487+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Output":"2026/09/11 10:00:24 OpenAI first output timeout: account=901 model=gpt-5.1 effort= phase=websocket_first_semantic_output elapsed=1.0003942s limit=1s\n"} {"Time":"2026-09-11T18:00:24.1107414+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Output":"--- PASS: TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:24.1107414+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Elapsed":1} {"Time":"2026-09-11T18:00:24.1107414+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe"} {"Time":"2026-09-11T18:00:24.1107414+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"=== RUN TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:24.1112627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"2026/09/11 10:00:24 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_start account_id=901 model=gpt-5.1 previous_response_id=- first_message_type=text first_message_bytes=59\n"} {"Time":"2026-09-11T18:00:24.1112627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"2026/09/11 10:00:24 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_start account_id=901 ws_host=api.openai.com ws_path=/v1/responses proxy_enabled=false\n"} {"Time":"2026-09-11T18:00:24.1112627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"2026/09/11 10:00:24 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_dial_ok account_id=901 status_code=101 upstream_request_id=-\n"} {"Time":"2026-09-11T18:00:24.1112627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"2026/09/11 10:00:24 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_start direction=- msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:24.1112627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"2026/09/11 10:00:24 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=write_first_message_skipped direction=client_to_upstream msg_type=text bytes=59 graceful=false wrote_downstream=false err=-\n"} {"Time":"2026-09-11T18:00:24.1112627+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"2026/09/11 10:00:24 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_turn_completed account_id=901 turn=1 request_id=resp_first terminal_event=response.completed turn_requested_model=gpt-5.1 turn_upstream_model=gpt-5.1 duration_ms=0 first_token_ms=-1 input_tokens=1 output_tokens=1 cache_read_tokens=0\n"} {"Time":"2026-09-11T18:00:25.1120934+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"2026/09/11 10:00:25 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_upstream_fail direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough first output timeout\n"} {"Time":"2026-09-11T18:00:25.1120934+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"2026/09/11 10:00:25 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=first_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough first output timeout\n"} {"Time":"2026-09-11T18:00:25.1120934+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"2026/09/11 10:00:25 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=read_client_fail direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusGoingAway and reason = \"upstream produced no semantic output; please reconnect\"\n"} {"Time":"2026-09-11T18:00:25.1120934+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"2026/09/11 10:00:25 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=second_exit direction=client_to_upstream msg_type=- bytes=0 graceful=true wrote_downstream=false err=fail to get reader: received close frame: status = StatusGoingAway and reason = \"upstream produced no semantic output; please reconnect\"\n"} {"Time":"2026-09-11T18:00:25.1120934+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"2026/09/11 10:00:25 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_trace account_id=901 stage=relay_exit direction=upstream_to_client msg_type=- bytes=0 graceful=false wrote_downstream=true err=openai websocket passthrough first output timeout\n"} {"Time":"2026-09-11T18:00:25.1120934+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"2026/09/11 10:00:25 [OpenAI WS v2 passthrough] ws_mode=passthrough ws_router=v2 relay_failed account_id=901 stage=read_upstream wrote_downstream=true err=openai websocket passthrough first output timeout duration_ms=1000 c2u_frames=2 u2c_frames=2 dropped_frames=0 turns=1\n"} {"Time":"2026-09-11T18:00:25.1120934+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"2026/09/11 10:00:25 OpenAI first output timeout: account=901 model=gpt-5.1 effort= phase=websocket_first_semantic_output elapsed=1.0003192s limit=1s\n"} {"Time":"2026-09-11T18:00:25.1127122+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Output":"--- PASS: TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe (1.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:25.1127122+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Elapsed":1} {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingDoesNotTouchAPIKeyOrOtherProviders"} {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingDoesNotTouchAPIKeyOrOtherProviders","Output":"=== RUN TestPluginManagerRoutingDoesNotTouchAPIKeyOrOtherProviders\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingDoesNotTouchAPIKeyOrOtherProviders","Output":"--- PASS: TestPluginManagerRoutingDoesNotTouchAPIKeyOrOtherProviders (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingDoesNotTouchAPIKeyOrOtherProviders","Elapsed":0} {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingKeepsOAuthOnLegacyPathWithoutEnabledBinding"} {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingKeepsOAuthOnLegacyPathWithoutEnabledBinding","Output":"=== RUN TestPluginManagerRoutingKeepsOAuthOnLegacyPathWithoutEnabledBinding\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingKeepsOAuthOnLegacyPathWithoutEnabledBinding","Output":"--- PASS: TestPluginManagerRoutingKeepsOAuthOnLegacyPathWithoutEnabledBinding (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingKeepsOAuthOnLegacyPathWithoutEnabledBinding","Elapsed":0} {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts"} {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts","Output":"=== RUN TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts","Output":"--- PASS: TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts (0.00s)\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts","Elapsed":0} {"Time":"2026-09-11T18:00:25.1299387+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"PASS\n","OutputType":"frame"} {"Time":"2026-09-11T18:00:25.1356728+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"ok \tgithub.com/Wei-Shaw/sub2api/internal/service\t22.408s\n"} {"Time":"2026-09-11T18:00:25.1356728+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Elapsed":22.409}