fix(provision): reconcile channel pricing and hosted access
This commit is contained in:
@@ -59,6 +59,10 @@ run_test_real_host_acceptance_after_import_hook() {
|
||||
set -euo pipefail
|
||||
url=""
|
||||
for arg in "$@"; do
|
||||
if [[ "$arg" == *'***'* ]]; then
|
||||
echo "unexpected redacted auth placeholder in curl args: $*" >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ "$arg" == http://* || "$arg" == https://* ]]; then
|
||||
url="$arg"
|
||||
fi
|
||||
@@ -68,6 +72,9 @@ done
|
||||
exit 1
|
||||
}
|
||||
case "$url" in
|
||||
*/api/hosts)
|
||||
printf '%s\n' '{"host_id":"test-host"}'
|
||||
;;
|
||||
*/api/hosts/test-host)
|
||||
printf '%s\n' '{"host_id":"test-host"}'
|
||||
;;
|
||||
@@ -118,6 +125,8 @@ EOF
|
||||
PACK_PATH="/tmp/openai-pack" \
|
||||
PROVIDER_ID="deepseek" \
|
||||
HOST_API_KEY="host-key" \
|
||||
REMOTE_PG_CONTAINER="fresh-pg" \
|
||||
REMOTE_REDIS_CONTAINER="fresh-redis" \
|
||||
MODE="partial" \
|
||||
ACCESS_MODE="subscription" \
|
||||
ACCESS_API_KEY="user-key" \
|
||||
@@ -143,13 +152,96 @@ run_test_import_remote43_provider_subscription_prep() {
|
||||
psql_sql="$artifact_dir/prep.sql"
|
||||
mkdir -p "$fakebin"
|
||||
|
||||
cat > "$fakebin/curl" <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
headers_file=""
|
||||
body_file=""
|
||||
url=""
|
||||
prev=""
|
||||
for arg in "$@"; do
|
||||
if [[ "$arg" == *'***'* ]]; then
|
||||
echo "unexpected redacted auth placeholder in curl args: $*" >&2
|
||||
exit 1
|
||||
fi
|
||||
case "$prev" in
|
||||
-D)
|
||||
headers_file="$arg"
|
||||
prev=""
|
||||
continue
|
||||
;;
|
||||
-o)
|
||||
body_file="$arg"
|
||||
prev=""
|
||||
continue
|
||||
;;
|
||||
esac
|
||||
case "$arg" in
|
||||
-D|-o)
|
||||
prev="$arg"
|
||||
continue
|
||||
;;
|
||||
http://*|https://*)
|
||||
url="$arg"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
write_headers() {
|
||||
[[ -n "$headers_file" ]] && printf '%s\n' 'HTTP/1.1 200 OK' > "$headers_file"
|
||||
}
|
||||
|
||||
write_body() {
|
||||
local body="$1"
|
||||
if [[ -n "$body_file" ]]; then
|
||||
printf '%s\n' "$body" > "$body_file"
|
||||
else
|
||||
printf '%s\n' "$body"
|
||||
fi
|
||||
}
|
||||
|
||||
case "$url" in
|
||||
*/api/hosts)
|
||||
write_body '{"host_id":"remote43-current-host"}'
|
||||
;;
|
||||
*/api/providers/deepseek/import)
|
||||
write_headers
|
||||
write_body '{"batch_id":123,"batch_status":"partially_succeeded","access_status":"broken","provider_status":"ready","accepted_keys_count":1,"group":{"id":"7","name":"DeepSeek 默认分组"}}'
|
||||
;;
|
||||
*/api/import-batches/123)
|
||||
write_body '{"managed_resources":[{"ResourceType":"group","HostResourceID":"7","ResourceName":"DeepSeek 默认分组"}]}'
|
||||
;;
|
||||
*/api/providers/deepseek/status)
|
||||
write_body '{"status":"ready"}'
|
||||
;;
|
||||
*/api/providers/deepseek/access/status)
|
||||
write_body '{"latest_access_status":"subscription_ready"}'
|
||||
;;
|
||||
*/api/providers/deepseek/access/preview)
|
||||
write_body '{"available":true}'
|
||||
;;
|
||||
*)
|
||||
echo "unexpected curl url: $url" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
EOF
|
||||
chmod +x "$fakebin/curl"
|
||||
|
||||
cat > "$fakebin/ssh" <<'EOF'
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
log_dir="${FAKE_REMOTE_LOG_DIR:?missing FAKE_REMOTE_LOG_DIR}"
|
||||
cmd="${*: -1}"
|
||||
printf '%s\n' "$cmd" >> "$log_dir/ssh-log.txt"
|
||||
if [[ "$cmd" == *'***'* ]]; then
|
||||
echo "unexpected redacted auth placeholder in ssh command: $cmd" >&2
|
||||
exit 1
|
||||
fi
|
||||
case "$cmd" in
|
||||
*"/api/v1/auth/login"*)
|
||||
printf '%s\n' 'host-bearer-token'
|
||||
;;
|
||||
*"grep ^SUB2API_CRM_ADMIN_TOKEN="*)
|
||||
printf '%s\n' 'crm-token'
|
||||
;;
|
||||
@@ -210,10 +302,10 @@ case "$cmd" in
|
||||
*"/api/providers/deepseek/reconcile"*)
|
||||
printf '%s\n' '{"status":"in_sync"}'
|
||||
;;
|
||||
*"sudo -n docker exec -i sub2api-relaymgr-pg psql -U sub2api -d sub2api -At -F ''"*)
|
||||
*"sudo -n docker exec -i fresh-pg psql -U sub2api -d sub2api -At -F ''"*)
|
||||
printf '%s\n' '{"group_id":7,"subscription":{"status":"active"},"key":{"group_id":7}}'
|
||||
;;
|
||||
*"sudo -n docker exec -i sub2api-relaymgr-pg psql -U sub2api -d sub2api"*)
|
||||
*"sudo -n docker exec -i fresh-pg psql -U sub2api -d sub2api"*)
|
||||
CMD="$cmd" LOG_DIR="$log_dir" python3 - <<'PY'
|
||||
import base64, os, re, pathlib, sys
|
||||
cmd = os.environ['CMD']
|
||||
@@ -222,18 +314,24 @@ match = re.search(r"printf '%s' '([^']+)' \| base64 -d", cmd)
|
||||
if not match:
|
||||
raise SystemExit(f'failed to extract base64 payload from: {cmd}')
|
||||
sql = base64.b64decode(match.group(1)).decode()
|
||||
log_dir.joinpath('prep.sql').write_text(sql, encoding='utf-8')
|
||||
if "select id from users where email like 'relay-sub-%@sub2api.local' and not exists" in sql:
|
||||
print('')
|
||||
elif "select k.key from users u join api_keys k on k.user_id=u.id" in sql and "not exists" in sql:
|
||||
print('')
|
||||
elif "UPDATE users" in sql and "INSERT INTO user_subscriptions" in sql:
|
||||
log_dir.joinpath('prep.sql').write_text(sql, encoding='utf-8')
|
||||
print('')
|
||||
elif "INSERT INTO users" in sql and "INSERT INTO api_keys" in sql:
|
||||
log_dir.joinpath('create-user.sql').write_text(sql, encoding='utf-8')
|
||||
print('84\tuser-key-fresh')
|
||||
elif "SELECT json_build_object(" in sql:
|
||||
log_dir.joinpath('group-state.sql').write_text(sql, encoding='utf-8')
|
||||
print('{"group_id":7,"subscription":{"status":"active"},"key":{"group_id":7}}')
|
||||
else:
|
||||
print('')
|
||||
PY
|
||||
;;
|
||||
*"sudo -n docker exec sub2api-relaymgr-redis redis-cli DEL apikey:auth:"*" billing:balance:"*" billing:sub:"*":7"*)
|
||||
*"sudo -n docker exec fresh-redis redis-cli DEL apikey:auth:"*" billing:balance:"*" billing:sub:"*":7"*)
|
||||
printf '%s\n' '3'
|
||||
;;
|
||||
*)
|
||||
@@ -254,6 +352,8 @@ EOF
|
||||
ROOT="$artifact_dir/root" \
|
||||
ART="$artifact_dir/run" \
|
||||
PACK_PATH="/tmp/openai-pack" \
|
||||
REMOTE_PG_CONTAINER="fresh-pg" \
|
||||
REMOTE_REDIS_CONTAINER="fresh-redis" \
|
||||
UPSTREAM_KEY="upstream-test-key" \
|
||||
SUBSCRIPTION_DAYS=30 \
|
||||
MIN_BALANCE=10 \
|
||||
@@ -274,7 +374,10 @@ EOF
|
||||
assert_contains "$invalidation_log" "auth_cache_key=apikey:auth:"
|
||||
assert_contains "$invalidation_log" "balance_cache_key=billing:balance:84"
|
||||
assert_contains "$invalidation_log" "subscription_cache_key=billing:sub:84:7"
|
||||
local models_body chat_body
|
||||
local subscription_state models_body chat_body
|
||||
subscription_state="$(cat "$artifact_dir/run/08-subscription-group-state.json")"
|
||||
assert_contains "$subscription_state" '"group_id":7'
|
||||
assert_contains "$subscription_state" '"status":"active"'
|
||||
models_body="$(cat "$artifact_dir/run/10-models.body.json")"
|
||||
chat_body="$(cat "$artifact_dir/run/12-chat.body.json")"
|
||||
assert_contains "$models_body" '"id":"gpt-4"'
|
||||
|
||||
Reference in New Issue
Block a user