Skip to content

Commit 8973ecf

Browse files
committed
Auto-commit
1 parent fcf2b6d commit 8973ecf

File tree

8 files changed

+2149
-35
lines changed

8 files changed

+2149
-35
lines changed
Lines changed: 208 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,208 @@
1+
#!/bin/bash
2+
#
3+
# OAuth Credentials Challenge
4+
# Verifies OAuth credential integration for Claude Code and Qwen Code CLI agents
5+
#
6+
7+
set -e
8+
9+
# Colors for output
10+
RED='\033[0;31m'
11+
GREEN='\033[0;32m'
12+
YELLOW='\033[1;33m'
13+
BLUE='\033[0;34m'
14+
NC='\033[0m' # No Color
15+
16+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
17+
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/../.." && pwd)"
18+
19+
echo -e "${BLUE}======================================${NC}"
20+
echo -e "${BLUE} OAuth Credentials Challenge ${NC}"
21+
echo -e "${BLUE}======================================${NC}"
22+
echo ""
23+
24+
# Load environment variables
25+
if [ -f "${PROJECT_ROOT}/.env" ]; then
26+
export $(grep -v '^#' "${PROJECT_ROOT}/.env" | xargs)
27+
fi
28+
29+
# Track results
30+
TOTAL_TESTS=0
31+
PASSED_TESTS=0
32+
FAILED_TESTS=0
33+
SKIPPED_TESTS=0
34+
35+
# Function to report test result
36+
report_test() {
37+
local name=$1
38+
local result=$2
39+
local message=$3
40+
TOTAL_TESTS=$((TOTAL_TESTS + 1))
41+
42+
if [ "$result" == "pass" ]; then
43+
PASSED_TESTS=$((PASSED_TESTS + 1))
44+
echo -e "${GREEN}[PASS]${NC} $name"
45+
if [ -n "$message" ]; then
46+
echo -e " ${GREEN}$message${NC}"
47+
fi
48+
elif [ "$result" == "skip" ]; then
49+
SKIPPED_TESTS=$((SKIPPED_TESTS + 1))
50+
echo -e "${YELLOW}[SKIP]${NC} $name"
51+
if [ -n "$message" ]; then
52+
echo -e " ${YELLOW}$message${NC}"
53+
fi
54+
else
55+
FAILED_TESTS=$((FAILED_TESTS + 1))
56+
echo -e "${RED}[FAIL]${NC} $name"
57+
if [ -n "$message" ]; then
58+
echo -e " ${RED}$message${NC}"
59+
fi
60+
fi
61+
}
62+
63+
echo -e "${BLUE}1. Checking OAuth Environment Variables${NC}"
64+
echo "----------------------------------------"
65+
66+
# Check Claude OAuth env var
67+
if [ "$CLAUDE_CODE_USE_OUATH_CREDENTIALS" == "true" ] || [ "$CLAUDE_CODE_USE_OAUTH_CREDENTIALS" == "true" ]; then
68+
report_test "Claude OAuth enabled" "pass" "CLAUDE_CODE_USE_O[U]ATH_CREDENTIALS=true"
69+
else
70+
report_test "Claude OAuth enabled" "skip" "Set CLAUDE_CODE_USE_OAUTH_CREDENTIALS=true to enable"
71+
fi
72+
73+
# Check Qwen OAuth env var
74+
if [ "$QWEN_CODE_USE_OUATH_CREDENTIALS" == "true" ] || [ "$QWEN_CODE_USE_OAUTH_CREDENTIALS" == "true" ]; then
75+
report_test "Qwen OAuth enabled" "pass" "QWEN_CODE_USE_O[U]ATH_CREDENTIALS=true"
76+
else
77+
report_test "Qwen OAuth enabled" "skip" "Set QWEN_CODE_USE_OAUTH_CREDENTIALS=true to enable"
78+
fi
79+
80+
echo ""
81+
echo -e "${BLUE}2. Checking OAuth Credential Files${NC}"
82+
echo "----------------------------------------"
83+
84+
# Check Claude credentials file
85+
CLAUDE_CREDS_PATH="$HOME/.claude/.credentials.json"
86+
if [ -f "$CLAUDE_CREDS_PATH" ]; then
87+
# Check if it contains OAuth credentials
88+
if grep -q "claudeAiOauth" "$CLAUDE_CREDS_PATH"; then
89+
ACCESS_TOKEN=$(jq -r '.claudeAiOauth.accessToken // empty' "$CLAUDE_CREDS_PATH" 2>/dev/null || echo "")
90+
EXPIRES_AT=$(jq -r '.claudeAiOauth.expiresAt // 0' "$CLAUDE_CREDS_PATH" 2>/dev/null || echo "0")
91+
SUB_TYPE=$(jq -r '.claudeAiOauth.subscriptionType // "unknown"' "$CLAUDE_CREDS_PATH" 2>/dev/null || echo "unknown")
92+
93+
if [ -n "$ACCESS_TOKEN" ] && [ "$ACCESS_TOKEN" != "null" ]; then
94+
# Check expiration
95+
NOW_MS=$(($(date +%s) * 1000))
96+
if [ "$EXPIRES_AT" -gt "$NOW_MS" ]; then
97+
EXPIRES_IN_HOURS=$(( (EXPIRES_AT - NOW_MS) / 3600000 ))
98+
report_test "Claude OAuth credentials" "pass" "Valid token (expires in ${EXPIRES_IN_HOURS}h), subscription: $SUB_TYPE"
99+
else
100+
report_test "Claude OAuth credentials" "fail" "Token expired at $(date -d @$((EXPIRES_AT / 1000)))"
101+
fi
102+
else
103+
report_test "Claude OAuth credentials" "fail" "No access token found"
104+
fi
105+
else
106+
report_test "Claude OAuth credentials" "skip" "No OAuth credentials in file"
107+
fi
108+
else
109+
report_test "Claude OAuth credentials" "skip" "Credential file not found: $CLAUDE_CREDS_PATH"
110+
fi
111+
112+
# Check Qwen credentials file
113+
QWEN_CREDS_PATH="$HOME/.qwen/oauth_creds.json"
114+
if [ -f "$QWEN_CREDS_PATH" ]; then
115+
ACCESS_TOKEN=$(jq -r '.access_token // empty' "$QWEN_CREDS_PATH" 2>/dev/null || echo "")
116+
EXPIRY_DATE=$(jq -r '.expiry_date // 0' "$QWEN_CREDS_PATH" 2>/dev/null || echo "0")
117+
118+
if [ -n "$ACCESS_TOKEN" ] && [ "$ACCESS_TOKEN" != "null" ]; then
119+
# Check expiration
120+
NOW_MS=$(($(date +%s) * 1000))
121+
if [ "$EXPIRY_DATE" -gt "$NOW_MS" ]; then
122+
EXPIRES_IN_HOURS=$(( (EXPIRY_DATE - NOW_MS) / 3600000 ))
123+
report_test "Qwen OAuth credentials" "pass" "Valid token (expires in ${EXPIRES_IN_HOURS}h)"
124+
else
125+
report_test "Qwen OAuth credentials" "fail" "Token expired at $(date -d @$((EXPIRY_DATE / 1000)))"
126+
fi
127+
else
128+
report_test "Qwen OAuth credentials" "skip" "No access token found"
129+
fi
130+
else
131+
report_test "Qwen OAuth credentials" "skip" "Credential file not found: $QWEN_CREDS_PATH"
132+
fi
133+
134+
echo ""
135+
echo -e "${BLUE}3. Running Go Unit Tests${NC}"
136+
echo "----------------------------------------"
137+
138+
cd "$PROJECT_ROOT"
139+
140+
# Run OAuth credential unit tests
141+
echo "Running oauth_credentials package tests..."
142+
if go test -v ./internal/auth/oauth_credentials/... 2>&1 | tail -5; then
143+
report_test "OAuth credential unit tests" "pass"
144+
else
145+
report_test "OAuth credential unit tests" "fail"
146+
fi
147+
148+
echo ""
149+
echo -e "${BLUE}4. Running Integration Tests${NC}"
150+
echo "----------------------------------------"
151+
152+
# Set environment variables for testing
153+
export CLAUDE_CODE_USE_OUATH_CREDENTIALS=true
154+
export QWEN_CODE_USE_OUATH_CREDENTIALS=true
155+
export RUN_LIVE_OAUTH_TESTS=true
156+
157+
echo "Running OAuth integration tests..."
158+
if go test -v ./tests/integration/oauth_integration_test.go 2>&1 | tail -15; then
159+
report_test "OAuth integration tests" "pass"
160+
else
161+
report_test "OAuth integration tests" "fail"
162+
fi
163+
164+
echo ""
165+
echo -e "${BLUE}5. Testing Provider Creation with OAuth${NC}"
166+
echo "----------------------------------------"
167+
168+
# Test provider creation by running a specific test
169+
if go test -v -run TestOAuthClaudeProviderIntegration ./tests/integration/oauth_integration_test.go 2>&1 | grep -q "PASS"; then
170+
echo "Claude OAuth provider creation: PASS"
171+
CLAUDE_RESULT="pass"
172+
else
173+
echo "Claude OAuth provider creation: FAIL or SKIP"
174+
CLAUDE_RESULT="skip"
175+
fi
176+
177+
if go test -v -run TestOAuthQwenProviderIntegration ./tests/integration/oauth_integration_test.go 2>&1 | grep -q "PASS"; then
178+
echo "Qwen OAuth provider creation: PASS"
179+
QWEN_RESULT="pass"
180+
else
181+
echo "Qwen OAuth provider creation: FAIL or SKIP"
182+
QWEN_RESULT="skip"
183+
fi
184+
185+
if [ "$CLAUDE_RESULT" == "pass" ] || [ "$QWEN_RESULT" == "pass" ]; then
186+
report_test "OAuth provider creation" "pass" "At least one provider created successfully"
187+
else
188+
report_test "OAuth provider creation" "skip" "No OAuth providers available"
189+
fi
190+
191+
echo ""
192+
echo -e "${BLUE}======================================${NC}"
193+
echo -e "${BLUE} Challenge Summary ${NC}"
194+
echo -e "${BLUE}======================================${NC}"
195+
echo ""
196+
echo -e "Total Tests: $TOTAL_TESTS"
197+
echo -e "${GREEN}Passed: $PASSED_TESTS${NC}"
198+
echo -e "${YELLOW}Skipped: $SKIPPED_TESTS${NC}"
199+
echo -e "${RED}Failed: $FAILED_TESTS${NC}"
200+
echo ""
201+
202+
if [ $FAILED_TESTS -eq 0 ]; then
203+
echo -e "${GREEN}OAuth Credentials Challenge: PASSED${NC}"
204+
exit 0
205+
else
206+
echo -e "${RED}OAuth Credentials Challenge: FAILED${NC}"
207+
exit 1
208+
fi

0 commit comments

Comments
 (0)