Retry QA server navigation
This commit is contained in:
@@ -1273,7 +1273,7 @@ try {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function setupBattle(page, battle) {
|
async function setupBattle(page, battle) {
|
||||||
await page.goto(targetUrl, { waitUntil: 'domcontentloaded' });
|
await gotoTargetPage(page);
|
||||||
await page.waitForFunction(() => window.__HEROS_GAME__ !== undefined && window.__HEROS_DEBUG__ !== undefined, undefined, { timeout: 90000 });
|
await page.waitForFunction(() => window.__HEROS_GAME__ !== undefined && window.__HEROS_DEBUG__ !== undefined, undefined, { timeout: 90000 });
|
||||||
await page.evaluate((selected) => {
|
await page.evaluate((selected) => {
|
||||||
const now = new Date().toISOString();
|
const now = new Date().toISOString();
|
||||||
@@ -1321,7 +1321,7 @@ async function setupCumulativeBattle(page, battle, firstBattle) {
|
|||||||
firstBattle && resumeCampaignSnapshot && campaignSnapshotPath && existsSync(campaignSnapshotPath)
|
firstBattle && resumeCampaignSnapshot && campaignSnapshotPath && existsSync(campaignSnapshotPath)
|
||||||
? await readFile(campaignSnapshotPath, 'utf8')
|
? await readFile(campaignSnapshotPath, 'utf8')
|
||||||
: undefined;
|
: undefined;
|
||||||
await page.goto(targetUrl, { waitUntil: 'domcontentloaded' });
|
await gotoTargetPage(page);
|
||||||
await page.waitForFunction(() => window.__HEROS_GAME__ !== undefined && window.__HEROS_DEBUG__ !== undefined, undefined, { timeout: 90000 });
|
await page.waitForFunction(() => window.__HEROS_GAME__ !== undefined && window.__HEROS_DEBUG__ !== undefined, undefined, { timeout: 90000 });
|
||||||
const preparation = await page.evaluate(
|
const preparation = await page.evaluate(
|
||||||
({ firstBattle, initialSnapshot, labels, protectedUnitIds, selected, slotKey, storageKey }) => {
|
({ firstBattle, initialSnapshot, labels, protectedUnitIds, selected, slotKey, storageKey }) => {
|
||||||
@@ -1454,6 +1454,38 @@ async function setupCumulativeBattle(page, battle, firstBattle) {
|
|||||||
return preparation;
|
return preparation;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function gotoTargetPage(page) {
|
||||||
|
let lastError;
|
||||||
|
for (let attempt = 0; attempt < 3; attempt += 1) {
|
||||||
|
try {
|
||||||
|
await page.goto(targetUrl, { waitUntil: 'domcontentloaded' });
|
||||||
|
return;
|
||||||
|
} catch (error) {
|
||||||
|
lastError = error;
|
||||||
|
if (!isServerConnectionError(error) || attempt === 2) {
|
||||||
|
throw error;
|
||||||
|
}
|
||||||
|
console.log(`QA server connection failed at ${targetUrl}; restarting local server and retrying (${attempt + 1}/2).`);
|
||||||
|
await restartLocalServer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw lastError;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function restartLocalServer() {
|
||||||
|
if (serverProcess) {
|
||||||
|
serverProcess.kill();
|
||||||
|
serverProcess = undefined;
|
||||||
|
await sleep(1000);
|
||||||
|
}
|
||||||
|
serverProcess = await ensureLocalServer(targetUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
function isServerConnectionError(error) {
|
||||||
|
const message = String(error?.message ?? error);
|
||||||
|
return message.includes('ERR_CONNECTION_REFUSED') || message.includes('ECONNREFUSED') || message.includes('ERR_CONNECTION_RESET');
|
||||||
|
}
|
||||||
|
|
||||||
async function normalizeRepresentativeBattleUnits(page, battle) {
|
async function normalizeRepresentativeBattleUnits(page, battle) {
|
||||||
await page.evaluate(
|
await page.evaluate(
|
||||||
({ no, selected, protectedUnitIds }) => {
|
({ no, selected, protectedUnitIds }) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user