| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062 |
- {"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}
|