2023-04-18 01:34:23 +03:00
|
|
|
#!/usr/bin/env node --redirect-warnings=/dev/null
|
|
|
|
|
|
|
|
const fs = require('fs')
|
|
|
|
const {randomBytes} = require('crypto')
|
|
|
|
const {execFileSync} = require('child_process')
|
|
|
|
const {minimizeTestPlan, buildTests, runTests} = require('./randomized-test-minimize');
|
|
|
|
|
|
|
|
const {ZED_SERVER_URL, ZED_CLIENT_SECRET_TOKEN} = process.env
|
|
|
|
if (!ZED_SERVER_URL) throw new Error('Missing env var `ZED_SERVER_URL`')
|
|
|
|
if (!ZED_CLIENT_SECRET_TOKEN) throw new Error('Missing env var `ZED_CLIENT_SECRET_TOKEN`')
|
|
|
|
|
|
|
|
main()
|
|
|
|
|
|
|
|
async function main() {
|
|
|
|
buildTests()
|
|
|
|
|
|
|
|
const seed = randomU64();
|
|
|
|
const commit = execFileSync(
|
|
|
|
'git',
|
|
|
|
['rev-parse', 'HEAD'],
|
|
|
|
{encoding: 'utf8'}
|
|
|
|
).trim()
|
|
|
|
|
|
|
|
console.log("commit:", commit)
|
|
|
|
console.log("starting seed:", seed)
|
|
|
|
|
|
|
|
const planPath = 'target/test-plan.json'
|
|
|
|
const minPlanPath = 'target/test-plan.min.json'
|
|
|
|
const failingSeed = runTests({
|
|
|
|
SEED: seed,
|
|
|
|
SAVE_PLAN: planPath,
|
|
|
|
ITERATIONS: 50000,
|
|
|
|
OPERATIONS: 200,
|
|
|
|
})
|
|
|
|
|
|
|
|
if (!failingSeed) {
|
|
|
|
console.log("tests passed")
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
console.log("found failure at seed", failingSeed)
|
|
|
|
const minimizedSeed = minimizeTestPlan(planPath, minPlanPath)
|
2023-04-18 02:35:54 +03:00
|
|
|
const minimizedPlan = fs.readFileSync(minPlanPath, 'utf8')
|
|
|
|
|
|
|
|
console.log("minimized plan:\n", minimizedPlan)
|
2023-04-18 01:34:23 +03:00
|
|
|
|
|
|
|
const url = `${ZED_SERVER_URL}/api/randomized_test_failure`
|
|
|
|
const body = {
|
|
|
|
seed: minimizedSeed,
|
|
|
|
token: ZED_CLIENT_SECRET_TOKEN,
|
2023-04-18 02:35:54 +03:00
|
|
|
plan: JSON.parse(minimizedPlan),
|
2023-04-18 01:34:23 +03:00
|
|
|
commit: commit,
|
|
|
|
}
|
|
|
|
await fetch(url, {
|
|
|
|
method: 'POST',
|
|
|
|
headers: {"Content-Type": "application/json"},
|
|
|
|
body: JSON.stringify(body)
|
|
|
|
})
|
2023-04-19 04:41:33 +03:00
|
|
|
|
|
|
|
process.exit(1)
|
2023-04-18 01:34:23 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
function randomU64() {
|
|
|
|
const bytes = randomBytes(8)
|
|
|
|
const hexString = bytes.reduce(((string, byte) => string + byte.toString(16)), '')
|
|
|
|
return BigInt('0x' + hexString).toString(10)
|
|
|
|
}
|