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)
|
|||
|
|
}
|
|||
|
|
}
|