backend-tests.jsonl 292 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062
  1. {"Time":"2026-09-11T18:00:02.726329+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/service"}
  2. {"Time":"2026-09-11T18:00:02.7273466+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/repository"}
  3. {"Time":"2026-09-11T18:00:02.7273466+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint"}
  4. {"Time":"2026-09-11T18:00:02.7273466+08:00","Action":"start","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin"}
  5. {"Time":"2026-09-11T18:00:02.9346494+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPActualHelloAndImmutableProfile"}
  6. {"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"}
  7. {"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"}
  8. {"Time":"2026-09-11T18:00:02.9393227+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPActualHelloAndImmutableProfile","Elapsed":0}
  9. {"Time":"2026-09-11T18:00:02.9393227+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSRejectsUntrustedCertificate"}
  10. {"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"}
  11. {"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"}
  12. {"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"}
  13. {"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}
  14. {"Time":"2026-09-11T18:00:02.9635663+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile"}
  15. {"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"}
  16. {"Time":"2026-09-11T18:00:02.9635663+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile/http"}
  17. {"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"}
  18. {"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"}
  19. {"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}
  20. {"Time":"2026-09-11T18:00:02.9655989+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSHTTPAndHTTPSConnectUseProfile/https"}
  21. {"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"}
  22. {"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"}
  23. {"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}
  24. {"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"}
  25. {"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}
  26. {"Time":"2026-09-11T18:00:02.9697483+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProxyErrorsNeverBypassProxy"}
  27. {"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"}
  28. {"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"}
  29. {"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"}
  30. {"Time":"2026-09-11T18:00:02.9717965+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProxyErrorsNeverBypassProxy","Elapsed":0}
  31. {"Time":"2026-09-11T18:00:02.9717965+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSSOCKSUsesProfile"}
  32. {"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"}
  33. {"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"}
  34. {"Time":"2026-09-11T18:00:02.9738305+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSSOCKSUsesProfile","Elapsed":0}
  35. {"Time":"2026-09-11T18:00:02.9738305+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSConnectCancellation"}
  36. {"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"}
  37. {"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"}
  38. {"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}
  39. {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSRejectsUnsupportedRoutes"}
  40. {"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"}
  41. {"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"}
  42. {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSRejectsUnsupportedRoutes","Elapsed":0}
  43. {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey"}
  44. {"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"}
  45. {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/extensions"}
  46. {"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"}
  47. {"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"}
  48. {"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}
  49. {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/alpn"}
  50. {"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"}
  51. {"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"}
  52. {"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}
  53. {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/ciphers"}
  54. {"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"}
  55. {"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"}
  56. {"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}
  57. {"Time":"2026-09-11T18:00:03.0745668+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey/curves"}
  58. {"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"}
  59. {"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"}
  60. {"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}
  61. {"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"}
  62. {"Time":"2026-09-11T18:00:03.075146+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Test":"TestLocalTLSProfileCloneAndContentKey","Elapsed":0}
  63. {"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"}
  64. {"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"}
  65. {"Time":"2026-09-11T18:00:03.07776+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/pkg/tlsfingerprint","Elapsed":0.35}
  66. {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL"}
  67. {"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"}
  68. {"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"}
  69. {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateEnsuresCodexFingerprintSeedWithPerRowSQL","Elapsed":0}
  70. {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling"}
  71. {"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"}
  72. {"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"}
  73. {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestUpdateExtraEnsuresCodexFingerprintSeedAtomicallyWhenEnabling","Elapsed":0}
  74. {"Time":"2026-09-11T18:00:03.3162718+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails"}
  75. {"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"}
  76. {"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"}
  77. {"Time":"2026-09-11T18:00:03.3167979+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenUpdateFails","Elapsed":0}
  78. {"Time":"2026-09-11T18:00:03.3167979+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails"}
  79. {"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"}
  80. {"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"}
  81. {"Time":"2026-09-11T18:00:03.3167979+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestBulkUpdateCodexFingerprintSeedRollsBackWhenOutboxFails","Elapsed":0}
  82. {"Time":"2026-09-11T18:00:03.3203973+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeHTTPProxy"}
  83. {"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"}
  84. {"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"}
  85. {"Time":"2026-09-11T18:00:03.3219475+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeHTTPProxy","Elapsed":0}
  86. {"Time":"2026-09-11T18:00:03.3219475+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeSOCKSProxy"}
  87. {"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"}
  88. {"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"}
  89. {"Time":"2026-09-11T18:00:03.3224593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestHTTPUpstreamDoWithTLSRejectsPlainHTTPBeforeSOCKSProxy","Elapsed":0}
  90. {"Time":"2026-09-11T18:00:03.3224593+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestTLSFingerprintHTTPSProxyUsesFingerprintDialer"}
  91. {"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"}
  92. {"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"}
  93. {"Time":"2026-09-11T18:00:03.3224593+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestTLSFingerprintHTTPSProxyUsesFingerprintDialer","Elapsed":0}
  94. {"Time":"2026-09-11T18:00:03.3229723+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile"}
  95. {"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"}
  96. {"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"}
  97. {"Time":"2026-09-11T18:00:03.3229723+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1TLSPoolAlwaysSeparatesAccountsProxyAndProfile","Elapsed":0}
  98. {"Time":"2026-09-11T18:00:03.3229723+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello"}
  99. {"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"}
  100. {"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"}
  101. {"Time":"2026-09-11T18:00:03.3251269+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1DoWithTLSActuallyUsesClientHello","Elapsed":0}
  102. {"Time":"2026-09-11T18:00:03.3271854+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy"}
  103. {"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"}
  104. {"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"}
  105. {"Time":"2026-09-11T18:00:03.3271854+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Test":"TestMode1SchedulerProjectionRetainsPolicyAndProxy","Elapsed":0}
  106. {"Time":"2026-09-11T18:00:03.3297924+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Output":"PASS\n","OutputType":"frame"}
  107. {"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"}
  108. {"Time":"2026-09-11T18:00:03.3338558+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/repository","Elapsed":0.607}
  109. {"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"}
  110. {"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"}
  111. {"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"}
  112. {"Time":"2026-09-11T18:00:03.3908853+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/handler/admin","Elapsed":0.664}
  113. {"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"}
  114. {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI"}
  115. {"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"}
  116. {"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"}
  117. {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeOpenAI","Elapsed":0}
  118. {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic"}
  119. {"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"}
  120. {"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"}
  121. {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAnthropic","Elapsed":0}
  122. {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo"}
  123. {"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"}
  124. {"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"}
  125. {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeNothingToDo","Elapsed":0}
  126. {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled"}
  127. {"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"}
  128. {"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"}
  129. {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPreviewAntiDegradeAlreadyEnabled","Elapsed":0}
  130. {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade"}
  131. {"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"}
  132. {"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"}
  133. {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyRevertAntiDegrade","Elapsed":0}
  134. {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot"}
  135. {"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"}
  136. {"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"}
  137. {"Time":"2026-09-11T18:00:03.4617366+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestRevertAntiDegradeRejectsBadSnapshot","Elapsed":0}
  138. {"Time":"2026-09-11T18:00:03.4622583+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed"}
  139. {"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"}
  140. {"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"}
  141. {"Time":"2026-09-11T18:00:03.4622583+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestDuplicateAccountDoesNotCopyCodexFingerprintSeed","Elapsed":0}
  142. {"Time":"2026-09-11T18:00:03.4622583+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads"}
  143. {"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"}
  144. {"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"}
  145. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IdentityIsUniquePersistentAndDoesNotMergeThreads","Elapsed":0}
  146. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift"}
  147. {"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"}
  148. {"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"}
  149. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RuntimeRejectsConfigurationDrift","Elapsed":0}
  150. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade"}
  151. {"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"}
  152. {"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"}
  153. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1InvalidMarkerDoesNotDowngrade","Elapsed":0}
  154. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer"}
  155. {"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"}
  156. {"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"}
  157. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1DifferentAccountsWithDuplicatedLegacyDeviceStillDiffer","Elapsed":0}
  158. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy"}
  159. {"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"}
  160. {"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"}
  161. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1PartialAndBulkUpdatesCannotDisablePolicy","Elapsed":0}
  162. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback"}
  163. {"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"}
  164. {"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"}
  165. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1HTTPAndAccountTestUseSameTLSWithoutFallback","Elapsed":0}
  166. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RejectsUnverifiedPlugin"}
  167. {"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"}
  168. {"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"}
  169. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1RejectsUnverifiedPlugin","Elapsed":0}
  170. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget"}
  171. {"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"}
  172. {"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"}
  173. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1IntegrityPreservesReasoningToolsAndBudget","Elapsed":0}
  174. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough"}
  175. {"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"}
  176. {"Time":"2026-09-11T18:00:03.4649694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false"}
  177. {"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"}
  178. {"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"}
  179. {"Time":"2026-09-11T18:00:03.4670199+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/false","Elapsed":0}
  180. {"Time":"2026-09-11T18:00:03.4670199+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true"}
  181. {"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"}
  182. {"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"}
  183. {"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"}
  184. {"Time":"2026-09-11T18:00:03.4670199+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough/true","Elapsed":0}
  185. {"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"}
  186. {"Time":"2026-09-11T18:00:03.4670199+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1ForwardPreservesPayloadThroughNormalAndPassthrough","Elapsed":0}
  187. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode"}
  188. {"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"}
  189. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号"}
  190. {"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"}
  191. {"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"}
  192. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/nil_账号","Elapsed":0}
  193. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号"}
  194. {"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"}
  195. {"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"}
  196. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非_OAuth_账号","Elapsed":0}
  197. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/OpenAI_setup_token"}
  198. {"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"}
  199. {"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"}
  200. {"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}
  201. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/Anthropic_setup_token"}
  202. {"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"}
  203. {"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"}
  204. {"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}
  205. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/无_extra_默认_off"}
  206. {"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"}
  207. {"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"}
  208. {"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}
  209. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off"}
  210. {"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"}
  211. {"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"}
  212. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/空值默认_off","Elapsed":0}
  213. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off"}
  214. {"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"}
  215. {"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"}
  216. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/非法值默认_off","Elapsed":0}
  217. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off"}
  218. {"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"}
  219. {"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"}
  220. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/显式_off","Elapsed":0}
  221. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device"}
  222. {"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"}
  223. {"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"}
  224. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/device","Elapsed":0}
  225. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session"}
  226. {"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"}
  227. {"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"}
  228. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/session","Elapsed":0}
  229. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full"}
  230. {"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"}
  231. {"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"}
  232. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode/full","Elapsed":0}
  233. {"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"}
  234. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestGetCodexFingerprintMode","Elapsed":0}
  235. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff"}
  236. {"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"}
  237. {"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"}
  238. {"Time":"2026-09-11T18:00:03.4927824+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOff","Elapsed":0}
  239. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff"}
  240. {"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"}
  241. {"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"}
  242. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_DefaultIsOff","Elapsed":0}
  243. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored"}
  244. {"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"}
  245. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/device"}
  246. {"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"}
  247. {"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"}
  248. {"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}
  249. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/session"}
  250. {"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"}
  251. {"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"}
  252. {"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}
  253. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored/full"}
  254. {"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"}
  255. {"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"}
  256. {"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}
  257. {"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"}
  258. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_ExplicitOptInHonored","Elapsed":0}
  259. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed"}
  260. {"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"}
  261. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/missing"}
  262. {"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"}
  263. {"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"}
  264. {"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}
  265. {"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"}
  266. {"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"}
  267. {"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"}
  268. {"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}
  269. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/blank"}
  270. {"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"}
  271. {"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"}
  272. {"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}
  273. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/uppercase"}
  274. {"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"}
  275. {"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"}
  276. {"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}
  277. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/nil_uuid"}
  278. {"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"}
  279. {"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"}
  280. {"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}
  281. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed/non_string"}
  282. {"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"}
  283. {"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"}
  284. {"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}
  285. {"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"}
  286. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestResolveCodexFingerprintIDsFromRequest_EnabledModesRequireValidSeed","Elapsed":0}
  287. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode"}
  288. {"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"}
  289. {"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"}
  290. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_OffMode","Elapsed":0}
  291. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode"}
  292. {"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"}
  293. {"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"}
  294. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_DeviceMode","Elapsed":0}
  295. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode"}
  296. {"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"}
  297. {"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"}
  298. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode","Elapsed":0}
  299. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_SessionMode_DifferentClients"}
  300. {"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"}
  301. {"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"}
  302. {"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}
  303. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode"}
  304. {"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"}
  305. {"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"}
  306. {"Time":"2026-09-11T18:00:03.4932883+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintHeaders_FullMode","Elapsed":0}
  307. {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode"}
  308. {"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"}
  309. {"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"}
  310. {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_OffMode","Elapsed":0}
  311. {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode"}
  312. {"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"}
  313. {"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"}
  314. {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_DeviceMode","Elapsed":0}
  315. {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode"}
  316. {"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"}
  317. {"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"}
  318. {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_SessionMode","Elapsed":0}
  319. {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode"}
  320. {"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"}
  321. {"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"}
  322. {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadata_FullMode","Elapsed":0}
  323. {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence"}
  324. {"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"}
  325. {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/session/default"}
  326. {"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"}
  327. {"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"}
  328. {"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}
  329. {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/full/default"}
  330. {"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"}
  331. {"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"}
  332. {"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}
  333. {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence/explicit_override"}
  334. {"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"}
  335. {"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"}
  336. {"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}
  337. {"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"}
  338. {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_MapRawEquivalence","Elapsed":0}
  339. {"Time":"2026-09-11T18:00:03.4938455+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives"}
  340. {"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"}
  341. {"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"}
  342. {"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"}
  343. {"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"}
  344. {"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}
  345. {"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"}
  346. {"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"}
  347. {"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"}
  348. {"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}
  349. {"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"}
  350. {"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"}
  351. {"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"}
  352. {"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}
  353. {"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"}
  354. {"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"}
  355. {"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"}
  356. {"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}
  357. {"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"}
  358. {"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"}
  359. {"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"}
  360. {"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}
  361. {"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"}
  362. {"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"}
  363. {"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"}
  364. {"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}
  365. {"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"}
  366. {"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"}
  367. {"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"}
  368. {"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}
  369. {"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"}
  370. {"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"}
  371. {"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"}
  372. {"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}
  373. {"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"}
  374. {"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"}
  375. {"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"}
  376. {"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}
  377. {"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"}
  378. {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintPromptCacheKey_Negatives","Elapsed":0}
  379. {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant"}
  380. {"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"}
  381. {"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"}
  382. {"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"}
  383. {"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"}
  384. {"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}
  385. {"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"}
  386. {"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"}
  387. {"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"}
  388. {"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}
  389. {"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"}
  390. {"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"}
  391. {"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"}
  392. {"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}
  393. {"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"}
  394. {"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"}
  395. {"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"}
  396. {"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}
  397. {"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"}
  398. {"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"}
  399. {"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"}
  400. {"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}
  401. {"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"}
  402. {"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"}
  403. {"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"}
  404. {"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}
  405. {"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"}
  406. {"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"}
  407. {"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"}
  408. {"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}
  409. {"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"}
  410. {"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"}
  411. {"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"}
  412. {"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}
  413. {"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"}
  414. {"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"}
  415. {"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"}
  416. {"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}
  417. {"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"}
  418. {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_MatchesMapVariant","Elapsed":0}
  419. {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields"}
  420. {"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"}
  421. {"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"}
  422. {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_PreservesUnrelatedFields","Elapsed":0}
  423. {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop"}
  424. {"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"}
  425. {"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"}
  426. {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_Noop","Elapsed":0}
  427. {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount"}
  428. {"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"}
  429. {"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"}
  430. {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestStageCodexFingerprintIDs_NilOverwritesPreviousAccount","Elapsed":0}
  431. {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount"}
  432. {"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"}
  433. {"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"}
  434. {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintRejectsDifferentOAuthAccount","Elapsed":0}
  435. {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount"}
  436. {"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"}
  437. {"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"}
  438. {"Time":"2026-09-11T18:00:03.4943537+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyStagedCodexFingerprintHeaders_SkipsNonOAuthAccount","Elapsed":0}
  439. {"Time":"2026-09-11T18:00:03.4948599+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched"}
  440. {"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"}
  441. {"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"}
  442. {"Time":"2026-09-11T18:00:03.4948599+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestApplyCodexFingerprintClientMetadataRaw_NonObjectBodyUntouched","Elapsed":0}
  443. {"Time":"2026-09-11T18:00:03.5179477+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey"}
  444. {"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"}
  445. {"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"}
  446. {"Time":"2026-09-11T18:00:03.5194791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPTransformedHeaderBodyParityAndDefaultCacheKey","Elapsed":0}
  447. {"Time":"2026-09-11T18:00:03.5194791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey"}
  448. {"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"}
  449. {"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"}
  450. {"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"}
  451. {"Time":"2026-09-11T18:00:03.5194791+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintHTTPRawPassthroughHeaderBodyParityAndDefaultCacheKey","Elapsed":0}
  452. {"Time":"2026-09-11T18:00:03.5194791+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata"}
  453. {"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"}
  454. {"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"}
  455. {"Time":"2026-09-11T18:00:03.5200087+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintCompactDoesNotRewriteBodyCacheKeyOrMetadata","Elapsed":0}
  456. {"Time":"2026-09-11T18:00:03.5200087+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey"}
  457. {"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"}
  458. {"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"}
  459. {"Time":"2026-09-11T18:00:03.5205182+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_CodexFingerprintMessagesBridgeDoesNotInjectBodyPromptCacheKey","Elapsed":0}
  460. {"Time":"2026-09-11T18:00:03.5262118+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse"}
  461. {"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"}
  462. {"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"}
  463. {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientReuse","Elapsed":0}
  464. {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL"}
  465. {"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"}
  466. {"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"}
  467. {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyHTTPClientInvalidURL","Elapsed":0}
  468. {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot"}
  469. {"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"}
  470. {"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"}
  471. {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_TransportMetricsSnapshot","Elapsed":0}
  472. {"Time":"2026-09-11T18:00:03.5267318+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity"}
  473. {"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"}
  474. {"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"}
  475. {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheCapacity","Elapsed":0}
  476. {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL"}
  477. {"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"}
  478. {"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"}
  479. {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyClientCacheIdleTTL","Elapsed":0}
  480. {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout"}
  481. {"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"}
  482. {"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"}
  483. {"Time":"2026-09-11T18:00:03.527752+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestCoderOpenAIWSClientDialer_ProxyTransportTLSHandshakeTimeout","Elapsed":0}
  484. {"Time":"2026-09-11T18:00:03.5288395+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIGatewayService_Forward_WSv2_CodexFingerprintHandshakeBodyParityAndDefaultCacheKey"}
  485. {"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"}
  486. {"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"}
  487. {"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}
  488. {"Time":"2026-09-11T18:00:03.5314319+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation"}
  489. {"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"}
  490. {"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"}
  491. {"Time":"2026-09-11T18:00:03.5350626+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSActualHandshakeAndFramePreservation","Elapsed":0}
  492. {"Time":"2026-09-11T18:00:03.5350626+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation"}
  493. {"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"}
  494. {"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"}
  495. {"Time":"2026-09-11T18:00:03.5350626+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSTransportCacheIsolationAndProfileRotation","Elapsed":0}
  496. {"Time":"2026-09-11T18:00:03.5350626+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate"}
  497. {"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"}
  498. {"Time":"2026-09-11T18:00:03.5355776+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/untrusted_certificate"}
  499. {"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"}
  500. {"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"}
  501. {"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}
  502. {"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"}
  503. {"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"}
  504. {"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"}
  505. {"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}
  506. {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate/plaintext_rejected"}
  507. {"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"}
  508. {"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"}
  509. {"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}
  510. {"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"}
  511. {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSFailsClosedOnInvalidTLSAndCertificate","Elapsed":0.02}
  512. {"Time":"2026-09-11T18:00:03.552064+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility"}
  513. {"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"}
  514. {"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"}
  515. {"Time":"2026-09-11T18:00:03.558257+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSConnectionPoolTransportCompatibility","Elapsed":0.01}
  516. {"Time":"2026-09-11T18:00:03.558257+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated"}
  517. {"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"}
  518. {"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"}
  519. {"Time":"2026-09-11T18:00:03.5608217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSAcquireUsesAccountTLSAndKeepsSessionsIsolated","Elapsed":0}
  520. {"Time":"2026-09-11T18:00:03.5608217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed"}
  521. {"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"}
  522. {"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"}
  523. {"Time":"2026-09-11T18:00:03.5608217+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSRuntimeConcurrencyCapCannotBeBypassed","Elapsed":0}
  524. {"Time":"2026-09-11T18:00:03.5608217+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS"}
  525. {"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"}
  526. {"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"}
  527. {"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"}
  528. {"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"}
  529. {"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"}
  530. {"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"}
  531. {"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"}
  532. {"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"}
  533. {"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"}
  534. {"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"}
  535. {"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"}
  536. {"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"}
  537. {"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"}
  538. {"Time":"2026-09-11T18:00:04.5634601+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSPassthroughEntryReachesRealTLS","Elapsed":1}
  539. {"Time":"2026-09-11T18:00:04.5634601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial"}
  540. {"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"}
  541. {"Time":"2026-09-11T18:00:04.5634601+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough"}
  542. {"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"}
  543. {"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"}
  544. {"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"}
  545. {"Time":"2026-09-11T18:00:04.5650341+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/passthrough","Elapsed":0}
  546. {"Time":"2026-09-11T18:00:04.5655878+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial/ctx_pool"}
  547. {"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"}
  548. {"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"}
  549. {"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}
  550. {"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"}
  551. {"Time":"2026-09-11T18:00:04.566624+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSIngressRejectsLossyPolicyBeforeDial","Elapsed":0}
  552. {"Time":"2026-09-11T18:00:04.566624+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy"}
  553. {"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"}
  554. {"Time":"2026-09-11T18:00:04.566624+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http"}
  555. {"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"}
  556. {"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"}
  557. {"Time":"2026-09-11T18:00:04.5692137+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/http","Elapsed":0}
  558. {"Time":"2026-09-11T18:00:04.5692137+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https"}
  559. {"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"}
  560. {"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"}
  561. {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy/https","Elapsed":0}
  562. {"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"}
  563. {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestMode1WSSOverLocalHTTPAndHTTPSProxy","Elapsed":0.01}
  564. {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle"}
  565. {"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"}
  566. {"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"}
  567. {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupStaleAndTrimIdle","Elapsed":0}
  568. {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat"}
  569. {"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"}
  570. {"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"}
  571. {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_NextConnIDFormat","Elapsed":0}
  572. {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval"}
  573. {"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"}
  574. {"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"}
  575. {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireCleanupInterval","Elapsed":0}
  576. {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive"}
  577. {"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"}
  578. {"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"}
  579. {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAdaptive","Elapsed":0}
  580. {"Time":"2026-09-11T18:00:04.5723232+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero"}
  581. {"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"}
  582. {"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"}
  583. {"Time":"2026-09-11T18:00:04.57283+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountMinIdleZero","Elapsed":0}
  584. {"Time":"2026-09-11T18:00:04.57283+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsync"}
  585. {"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"}
  586. {"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"}
  587. {"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}
  588. {"Time":"2026-09-11T18:00:04.5934029+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncCooldown"}
  589. {"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"}
  590. {"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"}
  591. {"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}
  592. {"Time":"2026-09-11T18:00:05.2052797+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EnsureTargetIdleAsyncFailureSuppress"}
  593. {"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"}
  594. {"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"}
  595. {"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}
  596. {"Time":"2026-09-11T18:00:05.3668694+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireQueueWaitMetrics"}
  597. {"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"}
  598. {"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"}
  599. {"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}
  600. {"Time":"2026-09-11T18:00:05.4269527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease"}
  601. {"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"}
  602. {"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"}
  603. {"Time":"2026-09-11T18:00:05.4269527+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialSuccessWakesTopologyWaiterAndCanceledWaiterDoesNotLoseLease","Elapsed":0}
  604. {"Time":"2026-09-11T18:00:05.4269527+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PrewarmHintChangeDoesNotInvalidateHealthyDial"}
  605. {"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"}
  606. {"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"}
  607. {"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}
  608. {"Time":"2026-09-11T18:00:05.438059+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountWakesIncompatibleTopologyWaiter"}
  609. {"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"}
  610. {"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"}
  611. {"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}
  612. {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration"}
  613. {"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"}
  614. {"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"}
  615. {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ClearAccountDoesNotReviveInFlightDialGeneration","Elapsed":0}
  616. {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse"}
  617. {"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"}
  618. {"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"}
  619. {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_ForceNewConnSkipsReuse","Elapsed":0}
  620. {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures"}
  621. {"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"}
  622. {"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"}
  623. {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesOnlyMatchingBetaFeatures","Elapsed":0}
  624. {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata"}
  625. {"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"}
  626. {"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"}
  627. {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReusesSameStableIdentityWithDifferentTurnMetadata","Elapsed":0}
  628. {"Time":"2026-09-11T18:00:05.4882168+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity"}
  629. {"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"}
  630. {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/installation"}
  631. {"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"}
  632. {"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"}
  633. {"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}
  634. {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_hyphen"}
  635. {"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"}
  636. {"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"}
  637. {"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}
  638. {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/session_underscore"}
  639. {"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"}
  640. {"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"}
  641. {"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}
  642. {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/thread"}
  643. {"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"}
  644. {"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"}
  645. {"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}
  646. {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/client_request"}
  647. {"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"}
  648. {"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"}
  649. {"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}
  650. {"Time":"2026-09-11T18:00:05.4889951+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity/window"}
  651. {"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"}
  652. {"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"}
  653. {"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}
  654. {"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"}
  655. {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireDoesNotReuseDifferentStableIdentity","Elapsed":0}
  656. {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity"}
  657. {"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"}
  658. {"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"}
  659. {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRoutingHintRemainsSoftAffinity","Elapsed":0}
  660. {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity"}
  661. {"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"}
  662. {"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"}
  663. {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DeviceModeKeysOnlyInstallationIdentity","Elapsed":0}
  664. {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures"}
  665. {"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"}
  666. {"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"}
  667. {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIdleConnWithDifferentBetaFeatures","Elapsed":0}
  668. {"Time":"2026-09-11T18:00:05.4895328+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireWaitsForBusyIncompatibleConnection"}
  669. {"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"}
  670. {"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"}
  671. {"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}
  672. {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy"}
  673. {"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"}
  674. {"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"}
  675. {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireReplacesIncompatibleIdleWhenMatchingBusy","Elapsed":0}
  676. {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable"}
  677. {"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"}
  678. {"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"}
  679. {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnUnavailable","Elapsed":0}
  680. {"Time":"2026-09-11T18:00:05.539734+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnQueuesOnPreferredOnly"}
  681. {"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"}
  682. {"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"}
  683. {"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}
  684. {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull"}
  685. {"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"}
  686. {"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"}
  687. {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireForcePreferredConnDirectAndQueueFull","Elapsed":0}
  688. {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn"}
  689. {"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"}
  690. {"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"}
  691. {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CleanupSkipsPinnedConn","Elapsed":0}
  692. {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches"}
  693. {"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"}
  694. {"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"}
  695. {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PinUnpinConnBranches","Elapsed":0}
  696. {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount"}
  697. {"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"}
  698. {"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"}
  699. {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount","Elapsed":0}
  700. {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap"}
  701. {"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"}
  702. {"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"}
  703. {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsDisabledFallbackHardCap","Elapsed":0}
  704. {"Time":"2026-09-11T18:00:05.6001921+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_EffectiveMaxConnsByAccount_ModeRouterV2RespectsHardCap"}
  705. {"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"}
  706. {"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"}
  707. {"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}
  708. {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero"}
  709. {"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"}
  710. {"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"}
  711. {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_AcquireRejectsWhenEffectiveMaxConnsIsZero","Elapsed":0}
  712. {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundPingSweep_EvictsDeadIdleConn"}
  713. {"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"}
  714. {"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"}
  715. {"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}
  716. {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundCleanupSweep_WithoutAcquire"}
  717. {"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"}
  718. {"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"}
  719. {"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}
  720. {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection"}
  721. {"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"}
  722. {"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"}
  723. {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RecyclesUnsupportedIdlePingConnection","Elapsed":0}
  724. {"Time":"2026-09-11T18:00:05.6008964+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches"}
  725. {"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"}
  726. {"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"}
  727. {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_BackgroundWorkerGuardBranches","Elapsed":0}
  728. {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotIdleConnsForPing_SkipsInvalidEntries"}
  729. {"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"}
  730. {"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"}
  731. {"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}
  732. {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundCleanupSweep_SkipsInvalidAndUsesAccountCap"}
  733. {"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"}
  734. {"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"}
  735. {"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}
  736. {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_QueueLimitPerConn_DefaultAndConfigured"}
  737. {"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"}
  738. {"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"}
  739. {"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}
  740. {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close"}
  741. {"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"}
  742. {"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"}
  743. {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close","Elapsed":0}
  744. {"Time":"2026-09-11T18:00:05.6014269+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad"}
  745. {"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"}
  746. {"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"}
  747. {"Time":"2026-09-11T18:00:05.6019406+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_PickOldestIdleAndAccountPoolLoad","Elapsed":0}
  748. {"Time":"2026-09-11T18:00:05.6019406+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_WaitsWorkerGroupAndNilStopChannel"}
  749. {"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"}
  750. {"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"}
  751. {"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}
  752. {"Time":"2026-09-11T18:00:05.6320515+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Close_ClosesOnlyIdleConnections"}
  753. {"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"}
  754. {"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"}
  755. {"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}
  756. {"Time":"2026-09-11T18:00:05.6320515+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_RunBackgroundPingSweep_ConcurrencyLimit"}
  757. {"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"}
  758. {"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"}
  759. {"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}
  760. {"Time":"2026-09-11T18:00:05.6429186+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches"}
  761. {"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"}
  762. {"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"}
  763. {"Time":"2026-09-11T18:00:05.6429186+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_UtilityBranches","Elapsed":0}
  764. {"Time":"2026-09-11T18:00:05.6434226+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease"}
  765. {"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"}
  766. {"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"}
  767. {"Time":"2026-09-11T18:00:05.6434226+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_CanceledWaiterReturnsDeliveredLease","Elapsed":0}
  768. {"Time":"2026-09-11T18:00:05.6434226+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_TargetConnCountAndPrewarmBranches"}
  769. {"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"}
  770. {"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"}
  771. {"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}
  772. {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_Acquire_ErrorBranches"}
  773. {"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"}
  774. {"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"}
  775. {"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}
  776. {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection"}
  777. {"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"}
  778. {"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"}
  779. {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_DialConnNilConnection","Elapsed":0}
  780. {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics"}
  781. {"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"}
  782. {"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"}
  783. {"Time":"2026-09-11T18:00:06.5771505+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestOpenAIWSConnPool_SnapshotTransportMetrics","Elapsed":0}
  784. {"Time":"2026-09-11T18:00:06.5808087+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect"}
  785. {"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"}
  786. {"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"}
  787. {"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"}
  788. {"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"}
  789. {"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"}
  790. {"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"}
  791. {"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"}
  792. {"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"}
  793. {"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"}
  794. {"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"}
  795. {"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"}
  796. {"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"}
  797. {"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"}
  798. {"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"}
  799. {"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"}
  800. {"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"}
  801. {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LaterTurnPreOutputRateLimitRequestsReconnect","Elapsed":0}
  802. {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn"}
  803. {"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"}
  804. {"Time":"2026-09-11T18:00:06.5823551+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/error"}
  805. {"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"}
  806. {"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"}
  807. {"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"}
  808. {"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"}
  809. {"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"}
  810. {"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"}
  811. {"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"}
  812. {"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"}
  813. {"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"}
  814. {"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"}
  815. {"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"}
  816. {"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"}
  817. {"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"}
  818. {"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}
  819. {"Time":"2026-09-11T18:00:07.7830897+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberTerminalEventsMarkBeforeAfterTurn/response_failed"}
  820. {"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"}
  821. {"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"}
  822. {"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"}
  823. {"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"}
  824. {"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"}
  825. {"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"}
  826. {"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"}
  827. {"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"}
  828. {"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"}
  829. {"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"}
  830. {"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"}
  831. {"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"}
  832. {"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"}
  833. {"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}
  834. {"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"}
  835. {"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}
  836. {"Time":"2026-09-11T18:00:08.9846279+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_NonCyberFailureKeepsAccountSideEffects"}
  837. {"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"}
  838. {"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"}
  839. {"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"}
  840. {"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"}
  841. {"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"}
  842. {"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"}
  843. {"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"}
  844. {"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"}
  845. {"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"}
  846. {"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"}
  847. {"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"}
  848. {"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"}
  849. {"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"}
  850. {"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"}
  851. {"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}
  852. {"Time":"2026-09-11T18:00:10.1873252+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CyberSkipsFailureAccountSideEffects"}
  853. {"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"}
  854. {"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"}
  855. {"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"}
  856. {"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"}
  857. {"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"}
  858. {"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"}
  859. {"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"}
  860. {"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"}
  861. {"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"}
  862. {"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"}
  863. {"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"}
  864. {"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"}
  865. {"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"}
  866. {"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}
  867. {"Time":"2026-09-11T18:00:11.3887899+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8"}
  868. {"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"}
  869. {"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"}
  870. {"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"}
  871. {"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"}
  872. {"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"}
  873. {"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"}
  874. {"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"}
  875. {"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"}
  876. {"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"}
  877. {"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"}
  878. {"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"}
  879. {"Time":"2026-09-11T18:00:11.3906881+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CloseReasonTruncationPreservesUTF8","Elapsed":0}
  880. {"Time":"2026-09-11T18:00:11.3906881+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponsesLiteFirstFramePinsParallelToolCalls"}
  881. {"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"}
  882. {"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"}
  883. {"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"}
  884. {"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"}
  885. {"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"}
  886. {"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"}
  887. {"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"}
  888. {"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"}
  889. {"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"}
  890. {"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"}
  891. {"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"}
  892. {"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"}
  893. {"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"}
  894. {"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}
  895. {"Time":"2026-09-11T18:00:12.5941673+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose"}
  896. {"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"}
  897. {"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"}
  898. {"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"}
  899. {"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"}
  900. {"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"}
  901. {"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"}
  902. {"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"}
  903. {"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"}
  904. {"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"}
  905. {"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"}
  906. {"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"}
  907. {"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"}
  908. {"Time":"2026-09-11T18:00:12.5963196+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_LeaseLossSendsRetryClose","Elapsed":0}
  909. {"Time":"2026-09-11T18:00:12.5968374+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle"}
  910. {"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"}
  911. {"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"}
  912. {"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"}
  913. {"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"}
  914. {"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"}
  915. {"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"}
  916. {"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"}
  917. {"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"}
  918. {"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"}
  919. {"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"}
  920. {"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"}
  921. {"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"}
  922. {"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"}
  923. {"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"}
  924. {"Time":"2026-09-11T18:00:13.5982013+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_CompletedTurnStartsInterTurnIdle","Elapsed":1}
  925. {"Time":"2026-09-11T18:00:13.5982013+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout"}
  926. {"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"}
  927. {"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"}
  928. {"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"}
  929. {"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"}
  930. {"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"}
  931. {"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"}
  932. {"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"}
  933. {"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"}
  934. {"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"}
  935. {"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"}
  936. {"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"}
  937. {"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"}
  938. {"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"}
  939. {"Time":"2026-09-11T18:00:14.6003294+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnInactivityUsesReadTimeout","Elapsed":1}
  940. {"Time":"2026-09-11T18:00:14.6003294+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_PreambleAllowsPromptClientCancel"}
  941. {"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"}
  942. {"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"}
  943. {"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"}
  944. {"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"}
  945. {"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"}
  946. {"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"}
  947. {"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"}
  948. {"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"}
  949. {"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"}
  950. {"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"}
  951. {"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"}
  952. {"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"}
  953. {"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}
  954. {"Time":"2026-09-11T18:00:15.801609+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate"}
  955. {"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"}
  956. {"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"}
  957. {"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"}
  958. {"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"}
  959. {"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"}
  960. {"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"}
  961. {"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"}
  962. {"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"}
  963. {"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"}
  964. {"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"}
  965. {"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"}
  966. {"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"}
  967. {"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"}
  968. {"Time":"2026-09-11T18:00:15.8029446+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_RejectsOverlappingResponseCreate","Elapsed":0}
  969. {"Time":"2026-09-11T18:00:15.8029446+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout"}
  970. {"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"}
  971. {"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"}
  972. {"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"}
  973. {"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"}
  974. {"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"}
  975. {"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"}
  976. {"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"}
  977. {"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"}
  978. {"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"}
  979. {"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"}
  980. {"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"}
  981. {"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"}
  982. {"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"}
  983. {"Time":"2026-09-11T18:00:18.8048371+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ActiveTurnActivityRefreshesReadTimeout","Elapsed":3}
  984. {"Time":"2026-09-11T18:00:18.8048371+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_TerminalSwitchesToInterTurnIdleTimeout"}
  985. {"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"}
  986. {"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"}
  987. {"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"}
  988. {"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"}
  989. {"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"}
  990. {"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"}
  991. {"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"}
  992. {"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"}
  993. {"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"}
  994. {"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"}
  995. {"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"}
  996. {"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"}
  997. {"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"}
  998. {"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"}
  999. {"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"}
  1000. {"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}
  1001. {"Time":"2026-09-11T18:00:22.1063966+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded"}
  1002. {"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"}
  1003. {"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"}
  1004. {"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"}
  1005. {"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"}
  1006. {"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"}
  1007. {"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"}
  1008. {"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"}
  1009. {"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"}
  1010. {"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"}
  1011. {"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"}
  1012. {"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"}
  1013. {"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"}
  1014. {"Time":"2026-09-11T18:00:23.1085156+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_FirstOutputTimeoutRemainsBounded","Elapsed":1}
  1015. {"Time":"2026-09-11T18:00:23.1085156+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover"}
  1016. {"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"}
  1017. {"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"}
  1018. {"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"}
  1019. {"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"}
  1020. {"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"}
  1021. {"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"}
  1022. {"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"}
  1023. {"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"}
  1024. {"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"}
  1025. {"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"}
  1026. {"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"}
  1027. {"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"}
  1028. {"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"}
  1029. {"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"}
  1030. {"Time":"2026-09-11T18:00:24.1107414+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_ResponseCreatedTimeoutClosesWithoutFailover","Elapsed":1}
  1031. {"Time":"2026-09-11T18:00:24.1107414+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe"}
  1032. {"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"}
  1033. {"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"}
  1034. {"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"}
  1035. {"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"}
  1036. {"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"}
  1037. {"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"}
  1038. {"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"}
  1039. {"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"}
  1040. {"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"}
  1041. {"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"}
  1042. {"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"}
  1043. {"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"}
  1044. {"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"}
  1045. {"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"}
  1046. {"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"}
  1047. {"Time":"2026-09-11T18:00:25.1127122+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPassthroughLifecycle_SecondTurnTimeoutIsNotFailoverSafe","Elapsed":1}
  1048. {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingDoesNotTouchAPIKeyOrOtherProviders"}
  1049. {"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"}
  1050. {"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"}
  1051. {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingDoesNotTouchAPIKeyOrOtherProviders","Elapsed":0}
  1052. {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingKeepsOAuthOnLegacyPathWithoutEnabledBinding"}
  1053. {"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"}
  1054. {"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"}
  1055. {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingKeepsOAuthOnLegacyPathWithoutEnabledBinding","Elapsed":0}
  1056. {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"run","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts"}
  1057. {"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"}
  1058. {"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"}
  1059. {"Time":"2026-09-11T18:00:25.1174163+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Test":"TestPluginManagerRoutingSelectsOnlyEligibleOpenAIOAuthAccounts","Elapsed":0}
  1060. {"Time":"2026-09-11T18:00:25.1299387+08:00","Action":"output","Package":"github.com/Wei-Shaw/sub2api/internal/service","Output":"PASS\n","OutputType":"frame"}
  1061. {"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"}
  1062. {"Time":"2026-09-11T18:00:25.1356728+08:00","Action":"pass","Package":"github.com/Wei-Shaw/sub2api/internal/service","Elapsed":22.409}