58 lines
1.9 KiB
HTML
58 lines
1.9 KiB
HTML
<!doctype html>
|
|
<title>WebSockets: Serialized connection attempts</title>
|
|
<meta name="timeout" content="long">
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="../constants.sub.js"></script>
|
|
<meta name="variant" content="?default">
|
|
<meta name="variant" content="?wss">
|
|
<div id="log"></div>
|
|
<script>
|
|
async_test(function(t) {
|
|
const paths = ['/invalid1', '/invalid2', '/invalid3', '/echo']; // /echo is valid
|
|
let currentTestIndex = 0;
|
|
let isPreviousConnectionClosed = true;
|
|
|
|
function testNextPath() {
|
|
if (currentTestIndex < paths.length) {
|
|
t.step(function() {
|
|
assert_true(isPreviousConnectionClosed, "Previous connection should be closed before attempting a new one");
|
|
isPreviousConnectionClosed = false;
|
|
|
|
const path = paths[currentTestIndex];
|
|
const ws = new WebSocket(SCHEME_DOMAIN_PORT + path);
|
|
|
|
ws.onclose = t.step_func(function(e) {
|
|
if (path !== '/echo') {
|
|
assert_false(e.wasClean, "Connection should fail uncleanly for path: " + path);
|
|
} else {
|
|
assert_true(e.wasClean, "Connection to /echo should close cleanly");
|
|
}
|
|
isPreviousConnectionClosed = true;
|
|
currentTestIndex++;
|
|
t.step_timeout(testNextPath, 0); // Schedule the next test
|
|
});
|
|
|
|
ws.onopen = t.step_func(function() {
|
|
if (path === '/echo') {
|
|
assert_true(true, "Connection to /echo should succeed");
|
|
ws.close();
|
|
} else {
|
|
t.unreached_func("Invalid path should not succeed");
|
|
}
|
|
});
|
|
|
|
ws.onerror = t.step_func(function() {
|
|
if (path === '/echo') {
|
|
t.unreached_func("Connection to /echo should not encounter an error");
|
|
} // otherwise failure is expected
|
|
});
|
|
});
|
|
} else {
|
|
t.done();
|
|
}
|
|
}
|
|
|
|
testNextPath();
|
|
});
|
|
</script>
|