83 lines
4.8 KiB
Bash
83 lines
4.8 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
BASE="http://127.0.0.1:18300"
|
|
ADMIN="test-admin-token"
|
|
DL="test-download-token"
|
|
|
|
echo "=== 1. ENV ==="
|
|
curl -s -H "Authorization: Bearer $ADMIN" "$BASE/api/env" | python3 -m json.tool | head -20
|
|
|
|
echo ""
|
|
echo "=== 2. SETTINGS ==="
|
|
curl -s -H "Authorization: Bearer $ADMIN" "$BASE/api/settings" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'status={d[\"status\"]}, appName={d[\"data\"].get(\"appName\")}')"
|
|
|
|
echo ""
|
|
echo "=== 3. CREATE SOURCE ==="
|
|
curl -s -X POST -H "Authorization: Bearer $ADMIN" -H "Content-Type: application/json" \
|
|
-d '{"name":"test-source","type":"local","content":"ss://aes-256-gcm:password123@1.2.3.4:8388#HK-Node1\nss://aes-256-gcm:password456@5.6.7.8:8388#US-Node2\ntrojan://pass@9.10.11.12:443?sni=example.com#JP-Node3","enabled":true}' \
|
|
"$BASE/api/sources" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'status={d[\"status\"]}, id={d.get(\"data\",{}).get(\"id\")}')"
|
|
|
|
echo ""
|
|
echo "=== 4. LIST SOURCES ==="
|
|
curl -s -H "Authorization: Bearer $ADMIN" "$BASE/api/sources" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'count={len(d[\"data\"])}, first={d[\"data\"][0][\"id\"] if d[\"data\"] else \"none\"}')"
|
|
|
|
echo ""
|
|
echo "=== 5. GET SOURCE ==="
|
|
curl -s -H "Authorization: Bearer $ADMIN" "$BASE/api/sources/test-source" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'status={d[\"status\"]}, type={d[\"data\"][\"type\"]}')"
|
|
|
|
echo ""
|
|
echo "=== 6. CREATE COLLECTION ==="
|
|
curl -s -X POST -H "Authorization: Bearer $ADMIN" -H "Content-Type: application/json" \
|
|
-d '{"name":"test-collection","sourceIds":["test-source"],"templateId":"default","enabled":true}' \
|
|
"$BASE/api/collections" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'status={d[\"status\"]}, id={d.get(\"data\",{}).get(\"id\")}')"
|
|
|
|
echo ""
|
|
echo "=== 7. LIST TEMPLATES ==="
|
|
curl -s -H "Authorization: Bearer $ADMIN" "$BASE/api/templates" | python3 -c "import sys,json; d=json.load(sys.stdin); [print(f' - {t[\"id\"]} ({t.get(\"target\",\"?\")}) readonly={t.get(\"readonly\",False)}') for t in d['data']]"
|
|
|
|
echo ""
|
|
echo "=== 8. DOWNLOAD SOURCE (mihomo) ==="
|
|
curl -s "$BASE/sources/test-source/$DL" | head -20
|
|
|
|
echo ""
|
|
echo "=== 9. DOWNLOAD SOURCE (json) ==="
|
|
curl -s "$BASE/sources/test-source/$DL?target=json" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'proxies count={len(d.get(\"proxies\",[]))}')"
|
|
|
|
echo ""
|
|
echo "=== 10. DOWNLOAD COLLECTION (mihomo) ==="
|
|
curl -s "$BASE/collections/test-collection/$DL" | head -20
|
|
|
|
echo ""
|
|
echo "=== 11. PREVIEW SOURCE ==="
|
|
curl -s -X POST -H "Authorization: Bearer $ADMIN" -H "Content-Type: application/json" \
|
|
-d '{"type":"local","content":"ss://aes-256-gcm:pass@1.2.3.4:8388#Test1\nss://aes-256-gcm:pass@5.6.7.8:8388#Test2","filters":[{"type":"include","pattern":"Test1"}]}' \
|
|
"$BASE/api/preview/source" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'status={d[\"status\"]}'); data=d.get('data',{}); print(f'original={len(data.get(\"original\",[]))}, processed={len(data.get(\"processed\",[]))}' if 'original' in data else f'nodes={data.get(\"nodes\")}')"
|
|
|
|
echo ""
|
|
echo "=== 12. PROXY PARSE ==="
|
|
curl -s -X POST -H "Authorization: Bearer $ADMIN" -H "Content-Type: application/json" \
|
|
-d '{"client":"mihomo","data":"ss://aes-256-gcm:pass@1.2.3.4:8388#Test1"}' \
|
|
"$BASE/api/proxy/parse" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'status={d[\"status\"]}, parsed={d[\"data\"].get(\"parsed\")}, emitted={d[\"data\"].get(\"emitted\")}') if d['status']=='success' else print(f'error: {d}')"
|
|
|
|
echo ""
|
|
echo "=== 13. RULE PARSE ==="
|
|
curl -s -X POST -H "Authorization: Bearer $ADMIN" -H "Content-Type: application/json" \
|
|
-d '{"client":"mihomo","data":"DOMAIN-SUFFIX,google.com,PROXY\nGEOIP,CN,DIRECT\nMATCH,PROXY"}' \
|
|
"$BASE/api/rule/parse" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'status={d[\"status\"]}, parsed={d[\"data\"].get(\"parsed\")}, emitted={d[\"data\"].get(\"emitted\")}') if d['status']=='success' else print(f'error: {d}')"
|
|
|
|
echo ""
|
|
echo "=== 14. DELETE SOURCE ==="
|
|
curl -s -X DELETE -H "Authorization: Bearer $ADMIN" "$BASE/api/sources/test-source" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'status={d[\"status\"]}')"
|
|
|
|
echo ""
|
|
echo "=== 15. RECYCLE BIN ==="
|
|
curl -s -H "Authorization: Bearer $ADMIN" "$BASE/api/recycle-bin" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'count={len(d[\"data\"])}'); [print(f' type={e.get(\"resourceType\")}, id={e.get(\"resourceId\")}') for e in d['data']]"
|
|
|
|
echo ""
|
|
echo "=== 16. EXPORT STORAGE ==="
|
|
curl -s -H "Authorization: Bearer $ADMIN" "$BASE/api/storage" | python3 -c "import sys,json; d=json.load(sys.stdin); print(f'sources={len(d.get(\"sources\",[]))}, collections={len(d.get(\"collections\",[]))}, templates={len(d.get(\"templates\",[]))}')"
|
|
|
|
echo ""
|
|
echo "=== ALL E2E TESTS DONE ==="
|