()
| 75 | } |
| 76 | |
| 77 | async function test() { |
| 78 | console.log("=== Very Large File Download Tests ===\n"); |
| 79 | console.log("Testing 1MB, 10MB, and 50MB downloads via local HTTP server."); |
| 80 | console.log("(Using VM's built-in rate limiting at 256KB/s)\n"); |
| 81 | |
| 82 | const PORT = 18080; |
| 83 | let server; |
| 84 | let vm; |
| 85 | let passed = 0; |
| 86 | let failed = 0; |
| 87 | |
| 88 | try { |
| 89 | // Start local test server |
| 90 | console.log("Starting local HTTP server..."); |
| 91 | server = await createTestServer(PORT); |
| 92 | |
| 93 | // Start VM with network - uses default 256KB/s rate limit |
| 94 | console.log("Starting VM..."); |
| 95 | vm = new AgentVM({ network: true, debug: false }); |
| 96 | await withTimeout(vm.start(), 15000); |
| 97 | console.log("VM Started with network enabled.\n"); |
| 98 | |
| 99 | // Test 1: Download 1MB file |
| 100 | console.log("Test 1: Download 1MB file"); |
| 101 | const size1mb = 1 * 1024 * 1024; |
| 102 | let start = Date.now(); |
| 103 | let res = await withTimeout( |
| 104 | vm.exec(`rm -f /tmp/*.bin; wget -q -O /tmp/1mb.bin http://192.168.127.1:${PORT}/bytes/${size1mb} && wc -c < /tmp/1mb.bin`), |
| 105 | 120000 // 2 minute timeout |
| 106 | ); |
| 107 | let elapsed = Date.now() - start; |
| 108 | let downloadedSize = parseInt(res.stdout.trim(), 10); |
| 109 | if (res.exitCode === 0 && downloadedSize === size1mb) { |
| 110 | const speedMbps = (size1mb / 1024 / 1024) / (elapsed / 1000); |
| 111 | console.log(` PASS (${elapsed}ms) - Downloaded ${downloadedSize} bytes (${speedMbps.toFixed(2)} MB/s)\n`); |
| 112 | passed++; |
| 113 | } else { |
| 114 | console.log(` FAIL (${elapsed}ms) - Expected ${size1mb} bytes, got: ${res.stdout.trim()}`); |
| 115 | console.log(` stderr: ${res.stderr}\n`); |
| 116 | failed++; |
| 117 | } |
| 118 | |
| 119 | // Test 2: Download 10MB file |
| 120 | console.log("Test 2: Download 10MB file"); |
| 121 | const size10mb = 10 * 1024 * 1024; |
| 122 | start = Date.now(); |
| 123 | res = await withTimeout( |
| 124 | vm.exec(`rm -f /tmp/1mb.bin; wget -q -O /tmp/10mb.bin http://192.168.127.1:${PORT}/bytes/${size10mb} && wc -c < /tmp/10mb.bin`), |
| 125 | 300000 // 5 minute timeout |
| 126 | ); |
| 127 | elapsed = Date.now() - start; |
| 128 | downloadedSize = parseInt(res.stdout.trim(), 10); |
| 129 | if (res.exitCode === 0 && downloadedSize === size10mb) { |
| 130 | const speedMbps = (size10mb / 1024 / 1024) / (elapsed / 1000); |
| 131 | console.log(` PASS (${elapsed}ms) - Downloaded ${downloadedSize} bytes (${speedMbps.toFixed(2)} MB/s)\n`); |
| 132 | passed++; |
| 133 | } else { |
| 134 | console.log(` FAIL (${elapsed}ms) - Expected ${size10mb} bytes, got: ${res.stdout.trim()}`); |
no test coverage detected