| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166 |
- <!DOCTYPE html>
- <html>
- <meta charset="UTF-8" />
- <head>
- <title>LibreSpeed - Multiple Instance Test</title>
- <style>
- body { font-family: Arial, sans-serif; margin: 20px; }
- .test-container {
- border: 2px solid #333;
- padding: 15px;
- margin: 20px 0;
- border-radius: 5px;
- }
- .test-container h2 { margin-top: 0; }
- button {
- padding: 10px 20px;
- font-size: 16px;
- cursor: pointer;
- margin-right: 10px;
- }
- .results {
- margin-top: 10px;
- font-family: monospace;
- background: #f0f0f0;
- padding: 10px;
- border-radius: 3px;
- }
- .status {
- font-weight: bold;
- margin: 5px 0;
- }
- </style>
- </head>
- <script type="text/javascript" src="speedtest.js"></script>
- <body>
- <h1>LibreSpeed - Multiple Instance Test</h1>
- <p>This page tests running multiple Speedtest instances sequentially and simultaneously.</p>
- <div class="test-container">
- <h2>Test Instance 1</h2>
- <button id="start1">Start Test 1</button>
- <button id="abort1">Abort Test 1</button>
- <div class="results">
- <div class="status">Status: <span id="status1">Not started</span></div>
- <div>Download: <span id="download1">-</span> Mbit/s</div>
- <div>Upload: <span id="upload1">-</span> Mbit/s</div>
- <div>Ping: <span id="ping1">-</span> ms</div>
- <div>Jitter: <span id="jitter1">-</span> ms</div>
- <div>IP: <span id="ip1">-</span></div>
- </div>
- </div>
- <div class="test-container">
- <h2>Test Instance 2</h2>
- <button id="start2">Start Test 2</button>
- <button id="abort2">Abort Test 2</button>
- <div class="results">
- <div class="status">Status: <span id="status2">Not started</span></div>
- <div>Download: <span id="download2">-</span> Mbit/s</div>
- <div>Upload: <span id="upload2">-</span> Mbit/s</div>
- <div>Ping: <span id="ping2">-</span> ms</div>
- <div>Jitter: <span id="jitter2">-</span> ms</div>
- <div>IP: <span id="ip2">-</span></div>
- </div>
- </div>
- <div style="margin-top: 20px;">
- <h3>Instructions:</h3>
- <ol>
- <li>Click "Start Test 1" and wait for it to complete</li>
- <li>Then click "Start Test 2" - it should work correctly without strange values</li>
- <li>You can also run both tests simultaneously</li>
- <li>You can run each test multiple times</li>
- </ol>
- </div>
- <script type="text/javascript">
- // Create two independent Speedtest instances
- var s1 = new Speedtest();
- var s2 = new Speedtest();
- // Setup Test Instance 1
- s1.onupdate = function (data) {
- document.getElementById('status1').textContent = getStatusText(data.testState);
- document.getElementById('download1').textContent = data.dlStatus || '-';
- document.getElementById('upload1').textContent = data.ulStatus || '-';
- document.getElementById('ping1').textContent = data.pingStatus || '-';
- document.getElementById('jitter1').textContent = data.jitterStatus || '-';
- document.getElementById('ip1').textContent = data.clientIp || '-';
- };
- s1.onend = function (aborted) {
- document.getElementById('status1').textContent = aborted ? 'Aborted' : 'Completed';
- console.log('Test 1 ended. Aborted:', aborted);
- };
- // Setup Test Instance 2
- s2.onupdate = function (data) {
- document.getElementById('status2').textContent = getStatusText(data.testState);
- document.getElementById('download2').textContent = data.dlStatus || '-';
- document.getElementById('upload2').textContent = data.ulStatus || '-';
- document.getElementById('ping2').textContent = data.pingStatus || '-';
- document.getElementById('jitter2').textContent = data.jitterStatus || '-';
- document.getElementById('ip2').textContent = data.clientIp || '-';
- };
- s2.onend = function (aborted) {
- document.getElementById('status2').textContent = aborted ? 'Aborted' : 'Completed';
- console.log('Test 2 ended. Aborted:', aborted);
- };
- // Helper function to convert testState to readable text
- function getStatusText(state) {
- switch(state) {
- case -1: return 'Not started';
- case 0: return 'Starting...';
- case 1: return 'Download test';
- case 2: return 'Ping + Jitter test';
- case 3: return 'Upload test';
- case 4: return 'Completed';
- case 5: return 'Aborted';
- default: return 'Unknown (' + state + ')';
- }
- }
- // Button handlers
- document.getElementById('start1').addEventListener('click', function() {
- try {
- console.log('Starting Test 1');
- s1.start();
- } catch(e) {
- alert('Error starting Test 1: ' + e);
- console.error('Error starting Test 1:', e);
- }
- });
- document.getElementById('abort1').addEventListener('click', function() {
- try {
- s1.abort();
- } catch(e) {
- alert('Error aborting Test 1: ' + e);
- }
- });
- document.getElementById('start2').addEventListener('click', function() {
- try {
- console.log('Starting Test 2');
- s2.start();
- } catch(e) {
- alert('Error starting Test 2: ' + e);
- console.error('Error starting Test 2:', e);
- }
- });
- document.getElementById('abort2').addEventListener('click', function() {
- try {
- s2.abort();
- } catch(e) {
- alert('Error aborting Test 2: ' + e);
- }
- });
- </script>
- <a href="https://github.com/librespeed/speedtest">LibreSpeed Source Code</a>
- </body>
- </html>
|