-
Notifications
You must be signed in to change notification settings - Fork 47
Expand file tree
/
Copy pathtest-docker.sh
More file actions
207 lines (168 loc) · 5.41 KB
/
test-docker.sh
File metadata and controls
207 lines (168 loc) · 5.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#!/usr/bin/env bash
# test-docker.sh — 在 Docker 中测试 cac PR#4 的所有 test plan 项
set -euo pipefail
PASS=0
FAIL=0
TESTS=()
_pass() { PASS=$((PASS+1)); TESTS+=("✅ $1"); echo "✅ PASS: $1"; }
_fail() { FAIL=$((FAIL+1)); TESTS+=("❌ $1: $2"); echo "❌ FAIL: $1 — $2"; }
echo "========================================="
echo " cac PR#4 Test Suite (Docker)"
echo "========================================="
echo
EXPECTED_VERSION=$(python3 -c 'import json; print(json.load(open("package.json"))["version"])')
# --- 准备:创建 mock claude ---
mkdir -p /usr/local/bin
cat > /usr/local/bin/claude << 'MOCK'
#!/usr/bin/env bash
echo "mock claude $*"
MOCK
chmod +x /usr/local/bin/claude
# 确保 HOME 有 shell rc 文件
touch ~/.bashrc
##############################################
# Test 1: cac setup 自动写入 PATH
##############################################
echo "--- Test 1: cac setup 自动写入 PATH ---"
cac setup 2>&1 || true
if grep -q '# >>> cac' ~/.bashrc 2>/dev/null; then
_pass "cac setup 自动写入 PATH 到 ~/.bashrc"
else
_fail "cac setup 自动写入 PATH" "~/.bashrc 中未找到 cac PATH 标记块"
fi
# 验证标记块格式正确
if grep -q '# <<< cac' ~/.bashrc 2>/dev/null; then
_pass "PATH 标记块格式正确(有开闭标记)"
else
_fail "PATH 标记块格式" "缺少闭合标记 <<< cac"
fi
# 验证 ~/.cac 目录已创建
if [[ -d "$HOME/.cac" ]]; then
_pass "~/.cac 目录已创建"
else
_fail "~/.cac 目录" "目录未创建"
fi
# 验证 wrapper 已生成
if [[ -f "$HOME/.cac/bin/claude" ]]; then
_pass "claude wrapper 已生成"
else
_fail "claude wrapper" "未找到 ~/.cac/bin/claude"
fi
echo
##############################################
# Test 2: cac setup 重复执行(幂等性)
##############################################
echo "--- Test 2: cac setup 重复执行 ---"
count_before=$(grep -c '# >>> cac' ~/.bashrc 2>/dev/null || echo 0)
cac setup 2>&1 || true
count_after=$(grep -c '# >>> cac' ~/.bashrc 2>/dev/null || echo 0)
if [[ "$count_before" == "$count_after" ]]; then
_pass "cac setup 幂等 — 不会重复写入 PATH"
else
_fail "cac setup 幂等性" "PATH 被重复写入(before=$count_before, after=$count_after)"
fi
echo
##############################################
# Test 3: cac -v 版本信息
##############################################
echo "--- Test 3: cac -v ---"
version_output=$(cac -v 2>&1)
if echo "$version_output" | grep -Eq "cac.*${EXPECTED_VERSION//./\\.}"; then
_pass "cac -v 显示版本号 $EXPECTED_VERSION"
else
_fail "cac -v 版本号" "输出: $version_output"
fi
if echo "$version_output" | grep -q '安装方式'; then
_pass "cac -v 显示安装方式"
else
_fail "cac -v 安装方式" "输出中无安装方式信息"
fi
echo
##############################################
# Test 4: cac --version(别名)
##############################################
echo "--- Test 4: cac --version ---"
version_output2=$(cac --version 2>&1)
if echo "$version_output2" | grep -q 'cac.*1\.0\.0'; then
_pass "cac --version 也能正常工作"
else
_fail "cac --version" "输出: $version_output2"
fi
echo
##############################################
# Test 5: cac delete 清理数据
##############################################
echo "--- Test 5: cac delete ---"
cac delete 2>&1 || true
if [[ ! -d "$HOME/.cac" ]]; then
_pass "cac delete 已删除 ~/.cac"
else
_fail "cac delete" "~/.cac 目录仍存在"
fi
if ! grep -q '# >>> cac' ~/.bashrc 2>/dev/null; then
_pass "cac delete 已移除 ~/.bashrc 中的 PATH 配置"
else
_fail "cac delete PATH 清理" "~/.bashrc 中仍存在 cac PATH"
fi
echo
##############################################
# Test 6: cac delete 重复执行(幂等性)
##############################################
echo "--- Test 6: cac delete 重复执行 ---"
delete_output=$(cac delete 2>&1)
delete_exit=$?
if [[ $delete_exit -eq 0 ]]; then
_pass "cac delete 重复执行不报错"
else
_fail "cac delete 幂等性" "退出码: $delete_exit"
fi
if echo "$delete_output" | grep -q '不存在'; then
_pass "cac delete 重复执行提示已清理"
else
_fail "cac delete 幂等提示" "输出: $delete_output"
fi
echo
##############################################
# Test 7: cac help 包含新命令
##############################################
echo "--- Test 7: cac help ---"
help_output=$(cac help 2>&1)
if echo "$help_output" | grep -q 'delete'; then
_pass "cac help 包含 delete 命令"
else
_fail "cac help" "未显示 delete 命令"
fi
if echo "$help_output" | grep -q '\-v'; then
_pass "cac help 包含 -v 命令"
else
_fail "cac help" "未显示 -v 命令"
fi
echo
##############################################
# Test 8: cac uninstall(delete 别名)
##############################################
echo "--- Test 8: cac uninstall ---"
# 先重新 setup
cac setup 2>&1 || true
uninstall_output=$(cac uninstall 2>&1)
if [[ ! -d "$HOME/.cac" ]]; then
_pass "cac uninstall 也能正常卸载"
else
_fail "cac uninstall" "~/.cac 目录仍存在"
fi
echo
##############################################
# 汇总
##############################################
echo
echo "========================================="
echo " 测试结果: $PASS 通过, $FAIL 失败"
echo "========================================="
for t in "${TESTS[@]}"; do
echo " $t"
done
echo
if [[ $FAIL -gt 0 ]]; then
exit 1
fi
echo "所有测试通过!"