83 lines
2.1 KiB
Go
83 lines
2.1 KiB
Go
package openai
|
||
|
||
import (
|
||
"net/url"
|
||
"sync"
|
||
"testing"
|
||
"time"
|
||
)
|
||
|
||
func TestSessionStore_Stop_Idempotent(t *testing.T) {
|
||
store := NewSessionStore()
|
||
|
||
store.Stop()
|
||
store.Stop()
|
||
|
||
select {
|
||
case <-store.stopCh:
|
||
// ok
|
||
case <-time.After(time.Second):
|
||
t.Fatal("stopCh 未关闭")
|
||
}
|
||
}
|
||
|
||
func TestSessionStore_Stop_Concurrent(t *testing.T) {
|
||
store := NewSessionStore()
|
||
|
||
var wg sync.WaitGroup
|
||
for range 50 {
|
||
wg.Add(1)
|
||
go func() {
|
||
defer wg.Done()
|
||
store.Stop()
|
||
}()
|
||
}
|
||
|
||
wg.Wait()
|
||
|
||
select {
|
||
case <-store.stopCh:
|
||
// ok
|
||
case <-time.After(time.Second):
|
||
t.Fatal("stopCh 未关闭")
|
||
}
|
||
}
|
||
|
||
func TestBuildAuthorizationURLForPlatform_OpenAI(t *testing.T) {
|
||
authURL := BuildAuthorizationURLForPlatform("state-1", "challenge-1", DefaultRedirectURI, OAuthPlatformOpenAI)
|
||
parsed, err := url.Parse(authURL)
|
||
if err != nil {
|
||
t.Fatalf("Parse URL failed: %v", err)
|
||
}
|
||
q := parsed.Query()
|
||
if got := q.Get("client_id"); got != ClientID {
|
||
t.Fatalf("client_id mismatch: got=%q want=%q", got, ClientID)
|
||
}
|
||
if got := q.Get("codex_cli_simplified_flow"); got != "true" {
|
||
t.Fatalf("codex flow mismatch: got=%q want=true", got)
|
||
}
|
||
if got := q.Get("id_token_add_organizations"); got != "true" {
|
||
t.Fatalf("id_token_add_organizations mismatch: got=%q want=true", got)
|
||
}
|
||
}
|
||
|
||
// TestBuildAuthorizationURLForPlatform_Sora 验证 Sora 平台复用 Codex CLI 的 client_id,
|
||
// 但不启用 codex_cli_simplified_flow。
|
||
func TestBuildAuthorizationURLForPlatform_Sora(t *testing.T) {
|
||
authURL := BuildAuthorizationURLForPlatform("state-2", "challenge-2", DefaultRedirectURI, OAuthPlatformSora)
|
||
parsed, err := url.Parse(authURL)
|
||
if err != nil {
|
||
t.Fatalf("Parse URL failed: %v", err)
|
||
}
|
||
q := parsed.Query()
|
||
if got := q.Get("client_id"); got != ClientID {
|
||
t.Fatalf("client_id mismatch: got=%q want=%q (Sora should reuse Codex CLI client_id)", got, ClientID)
|
||
}
|
||
if got := q.Get("codex_cli_simplified_flow"); got != "" {
|
||
t.Fatalf("codex flow should be empty for sora, got=%q", got)
|
||
}
|
||
if got := q.Get("id_token_add_organizations"); got != "true" {
|
||
t.Fatalf("id_token_add_organizations mismatch: got=%q want=true", got)
|
||
}
|
||
}
|