| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package oauth
- import (
- "strings"
- "sync"
- "testing"
- "time"
- )
- func TestAuthorizeURLMatchesClaudeCodeCLI(t *testing.T) {
- const want = "https://claude.com/cai/oauth/authorize"
- if AuthorizeURL != want {
- t.Fatalf("AuthorizeURL = %q, want %q", AuthorizeURL, want)
- }
- authURL := BuildAuthorizationURL("state-value", "challenge-value", ScopeOAuth)
- if !strings.HasPrefix(authURL, want+"?") {
- t.Fatalf("BuildAuthorizationURL() = %q, want prefix %q", authURL, want+"?")
- }
- for _, part := range []string{
- "code=true",
- "client_id=" + ClientID,
- "response_type=code",
- "code_challenge=challenge-value",
- "code_challenge_method=S256",
- "state=state-value",
- } {
- if !strings.Contains(authURL, part) {
- t.Fatalf("BuildAuthorizationURL() missing %q\nURL: %s", part, authURL)
- }
- }
- }
- 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 未关闭")
- }
- }
|