70 lines · 1.6 KB · Text
RawDownload
#!/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 } = process.env;if (!ZED_SERVER_URL) throw new Error("Missing env var `ZED_SERVER_URL`"); 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);  const minimizedPlan = fs.readFileSync(minPlanPath, "utf8");   console.log("minimized plan:\n", minimizedPlan);   const url = `${ZED_SERVER_URL}/api/randomized_test_failure`;  const body = {    seed: minimizedSeed,    plan: JSON.parse(minimizedPlan),    commit: commit,  };  await fetch(url, {    method: "POST",    headers: { "Content-Type": "application/json" },    body: JSON.stringify(body),  });   process.exit(1);} function randomU64() {  const bytes = randomBytes(8);  const hexString = bytes.reduce(    (string, byte) => string + byte.toString(16),    "",  );  return BigInt("0x" + hexString).toString(10);}