()
| 1 | const { AgentVM } = require('../../src/index'); |
| 2 | |
| 3 | async function test() { |
| 4 | console.log("=== Network Race Condition Repro ===\n"); |
| 5 | |
| 6 | const vm = new AgentVM({ network: true, debug: true }); |
| 7 | |
| 8 | try { |
| 9 | await vm.start(); |
| 10 | console.log("VM Started.\n"); |
| 11 | |
| 12 | const ITERATIONS = 2; |
| 13 | let failures = 0; |
| 14 | let successes = 0; |
| 15 | |
| 16 | console.log(`Starting ${ITERATIONS} requests...`); |
| 17 | |
| 18 | for (let i = 0; i < ITERATIONS; i++) { |
| 19 | console.log(`\n--- Request ${i+1}/${ITERATIONS} ---`); |
| 20 | |
| 21 | // Use curl with HTTPS for google.com |
| 22 | const cmd = `curl -sL https://www.google.com/`; |
| 23 | |
| 24 | try { |
| 25 | // Timeout of 30s per request for HTTPS/TLS |
| 26 | const res = await Promise.race([ |
| 27 | vm.exec(cmd), |
| 28 | new Promise((_, r) => setTimeout(() => r(new Error('Timeout')), 30000)) |
| 29 | ]); |
| 30 | |
| 31 | if (res.exitCode === 0 && (res.stdout.includes('<html') || res.stdout.includes('<!doctype'))) { |
| 32 | successes++; |
| 33 | } else { |
| 34 | failures++; |
| 35 | console.log(`\nFailed iter ${i}: exit=${res.exitCode} stderr=${res.stderr} stdout=${res.stdout}`); |
| 36 | } |
| 37 | } catch (err) { |
| 38 | failures++; |
| 39 | console.log(`\nFailed iter ${i}: ${err.message}`); |
| 40 | } |
| 41 | |
| 42 | // Small delay to be polite to the server, but fast enough to trigger races if they are internal |
| 43 | await new Promise(r => setTimeout(r, 100)); |
| 44 | } |
| 45 | |
| 46 | console.log(`\n\nResults: ${successes} passed, ${failures} failed.`); |
| 47 | |
| 48 | if (failures > 0) { |
| 49 | console.log("BUG REPRODUCED: Intermittent failures detected."); |
| 50 | process.exit(1); |
| 51 | } else { |
| 52 | console.log("No failures detected. Bug might be rarer or conditions not met."); |
| 53 | } |
| 54 | |
| 55 | } catch (e) { |
| 56 | console.error("\nTEST FAILED (Global):", e); |
| 57 | process.exit(1); |
| 58 | } finally { |
| 59 | await vm.stop(); |
| 60 | } |
no test coverage detected