Preview: Runner-Schutzschalter 503 als Server ausgelastet durchreichen
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
b3cf78c82a
commit
cd9a6e0cf1
2 files changed
+18
-3
No files matched your search
@@ -11,7 +11,7 @@ import { startFakeAppwrite } from './helpers/fakeAppwrite.js'
|
||||
let aw, runner, gitea, app, base, tmp, cfg, envLib, logs
|
||||
const key = crypto.randomBytes(32)
|
||||
const SHA = 'c'.repeat(40)
|
||||
const rs = { calls: [], slow: false, result: 'static' }
|
||||
const rs = { calls: [], busy: false, slow: false, result: 'static' }
|
||||
|
||||
before(async () => {
|
||||
const seed = [
|
||||
@@ -30,6 +30,7 @@ before(async () => {
|
||||
let raw = ''
|
||||
req.on('data', (c) => (raw += c))
|
||||
req.on('end', () => {
|
||||
if (rs.busy && (req.url === '/jobs/build' || req.url.endsWith('/start'))) { res.statusCode = 503; res.setHeader('Content-Type', 'application/json'); return res.end(JSON.stringify({ error: 'Server ausgelastet' })) }
|
||||
rs.calls.push({ method: req.method, url: req.url, body: raw ? JSON.parse(raw) : null })
|
||||
res.setHeader('Content-Type', 'application/json')
|
||||
if (req.method === 'POST' && req.url === '/jobs/build') return res.end(JSON.stringify({ runId: 'run-x' }))
|
||||
@@ -87,7 +88,7 @@ after(async () => {
|
||||
await fs.rm(tmp, { recursive: true, force: true })
|
||||
})
|
||||
|
||||
beforeEach(() => { rs.slow = false; rs.result = 'static'; rs.calls = []; cfg.previewRunner.enabled = true; process.env.PREVIEW_ENV_KEY = key.toString('base64') })
|
||||
beforeEach(() => { rs.busy = false; rs.slow = false; rs.result = 'static'; rs.calls = []; cfg.previewRunner.enabled = true; process.env.PREVIEW_ENV_KEY = key.toString('base64') })
|
||||
|
||||
const call = (method, p, body, jwt = 'jwt-admin') =>
|
||||
fetch(`${base}${p}`, {
|
||||
@@ -273,3 +274,12 @@ test('dev/start ohne gespeicherten Stand: 409; dev/stop ändert failed nicht', a
|
||||
const r = await call('POST', '/pns/preview/dev/stop')
|
||||
assert.equal((await r.json()).state, 'failed')
|
||||
})
|
||||
|
||||
test('Runner-Schutzschalter 503: rebuild und dev/start melden Server ausgelastet', async () => {
|
||||
rs.busy = true
|
||||
for (const p of ['/pe/preview/rebuild', '/pw/preview/dev/start']) {
|
||||
const r = await call('POST', p)
|
||||
assert.equal(r.status, 503, p)
|
||||
assert.deepEqual(await r.json(), { error: 'Server ausgelastet, versuche es gleich noch mal' })
|
||||
}
|
||||
})
|
||||
Reference in new issue
Block a user