healthcheck: split delete and login passes

This commit is contained in:
server
2026-04-14 12:56:46 +02:00
parent 354497ace6
commit 69066cc428
2 changed files with 84 additions and 35 deletions

View File

@@ -26,18 +26,29 @@ if ! id "${RUN_AS_USER}" >/dev/null 2>&1; then
exit 1
fi
LOGIN="smkhc$(date +%s)"
PASSWORD="$(openssl rand -hex 6)"
SOCIAL_ID="$(date +%s%N | tail -c 14)"
EMAIL="${LOGIN}@example.invalid"
CHARACTER_NAME="c${LOGIN}"
ACCOUNT_ID=""
DELETE_LOGIN="smkdel$(date +%s)"
DELETE_PASSWORD="$(openssl rand -hex 6)"
DELETE_SOCIAL_ID="$(date +%s%N | tail -c 14)"
DELETE_EMAIL="${DELETE_LOGIN}@example.invalid"
DELETE_CHARACTER_NAME="c${DELETE_LOGIN}"
DELETE_PRIVATE_CODE="${DELETE_SOCIAL_ID: -7}"
DELETE_ACCOUNT_ID=""
cleanup() {
if [[ -n "${ACCOUNT_ID}" ]]; then
FULL_LOGIN="smkfull$(date +%s)"
FULL_PASSWORD="$(openssl rand -hex 6)"
FULL_SOCIAL_ID="$(date +%s%N | tail -c 14)"
FULL_EMAIL="${FULL_LOGIN}@example.invalid"
FULL_CHARACTER_NAME="c${FULL_LOGIN}"
FULL_ACCOUNT_ID=""
cleanup_account() {
local account_id="$1"
local login="$2"
if [[ -n "${account_id}" ]]; then
mysql player >/dev/null 2>&1 <<SQL || true
CREATE TEMPORARY TABLE smoke_pids AS
SELECT id FROM player WHERE account_id = ${ACCOUNT_ID};
SELECT id FROM player WHERE account_id = ${account_id};
DELETE FROM item
WHERE owner_id IN (SELECT id FROM smoke_pids);
@@ -58,18 +69,21 @@ SQL
mysql player >/dev/null 2>&1 <<SQL || true
DELETE FROM player_index
WHERE id IN (
SELECT id FROM account.account WHERE login='${LOGIN}'
SELECT id FROM account.account WHERE login='${login}'
);
SQL
mysql account >/dev/null 2>&1 <<SQL || true
DELETE FROM account WHERE login='${LOGIN}';
DELETE FROM account WHERE login='${login}';
SQL
}
trap cleanup EXIT
create_account() {
local login="$1"
local password="$2"
local social_id="$3"
local email="$4"
ACCOUNT_ID="$(
mysql -N account <<SQL
INSERT INTO account (
login,
@@ -97,10 +111,10 @@ INSERT INTO account (
channel_company,
last_play
) VALUES (
'${LOGIN}',
PASSWORD('${PASSWORD}'),
'${SOCIAL_ID}',
'${EMAIL}',
'${login}',
PASSWORD('${password}'),
'${social_id}',
'${email}',
NOW(),
0,
'OK',
@@ -124,18 +138,43 @@ INSERT INTO account (
);
SELECT LAST_INSERT_ID();
SQL
)"
}
mysql player >/dev/null <<SQL
create_player_index() {
local account_id="$1"
mysql player >/dev/null <<SQL
INSERT INTO player_index (id, pid1, pid2, pid3, pid4, empire)
VALUES (${ACCOUNT_ID}, 0, 0, 0, 0, 1);
VALUES (${account_id}, 0, 0, 0, 0, 1);
SQL
}
echo "Running login healthcheck for temporary account ${LOGIN}"
sudo -iu "${RUN_AS_USER}" env METIN_LOGIN_SMOKE_PASSWORD="${PASSWORD}" \
"${SMOKE_BIN}" "${SERVER_HOST}" "${AUTH_PORT}" "${CHANNEL_PORT}" "${LOGIN}" \
cleanup() {
cleanup_account "${DELETE_ACCOUNT_ID}" "${DELETE_LOGIN}"
cleanup_account "${FULL_ACCOUNT_ID}" "${FULL_LOGIN}"
}
trap cleanup EXIT
DELETE_ACCOUNT_ID="$(create_account "${DELETE_LOGIN}" "${DELETE_PASSWORD}" "${DELETE_SOCIAL_ID}" "${DELETE_EMAIL}")"
create_player_index "${DELETE_ACCOUNT_ID}"
FULL_ACCOUNT_ID="$(create_account "${FULL_LOGIN}" "${FULL_PASSWORD}" "${FULL_SOCIAL_ID}" "${FULL_EMAIL}")"
create_player_index "${FULL_ACCOUNT_ID}"
echo "Running create/delete healthcheck for temporary account ${DELETE_LOGIN}"
sudo -iu "${RUN_AS_USER}" env METIN_LOGIN_SMOKE_PASSWORD="${DELETE_PASSWORD}" \
"${SMOKE_BIN}" "${SERVER_HOST}" "${AUTH_PORT}" "${CHANNEL_PORT}" "${DELETE_LOGIN}" \
--password-env=METIN_LOGIN_SMOKE_PASSWORD \
--create-character-name="${CHARACTER_NAME}" \
--create-character-name="${DELETE_CHARACTER_NAME}" \
--delete-private-code="${DELETE_PRIVATE_CODE}" \
--client-version="${CLIENT_VERSION}"
echo "Running full login healthcheck for temporary account ${FULL_LOGIN}"
sudo -iu "${RUN_AS_USER}" env METIN_LOGIN_SMOKE_PASSWORD="${FULL_PASSWORD}" \
"${SMOKE_BIN}" "${SERVER_HOST}" "${AUTH_PORT}" "${CHANNEL_PORT}" "${FULL_LOGIN}" \
--password-env=METIN_LOGIN_SMOKE_PASSWORD \
--create-character-name="${FULL_CHARACTER_NAME}" \
--client-version="${CLIENT_VERSION}" \
--mall-password="${MALL_PASSWORD}"