mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-04-02 10:19:17 +00:00
try to improve test ws shutdown, merge ws tests
This commit is contained in:
@@ -31,18 +31,13 @@ pub fn init() TestWSServer {
|
||||
};
|
||||
}
|
||||
|
||||
pub fn deinit(self: *TestWSServer) void {
|
||||
if (self.listener) |socket| {
|
||||
posix.close(socket);
|
||||
self.listener = null;
|
||||
}
|
||||
}
|
||||
|
||||
pub fn stop(self: *TestWSServer) void {
|
||||
self.shutdown.store(true, .release);
|
||||
if (self.listener) |socket| {
|
||||
posix.close(socket);
|
||||
self.listener = null;
|
||||
switch (@import("builtin").target.os.tag) {
|
||||
.linux => std.posix.shutdown(socket, .recv) catch {},
|
||||
else => std.posix.close(socket),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -309,7 +309,6 @@
|
||||
const state = await testing.async();
|
||||
let received = [];
|
||||
|
||||
console.warn('last-test');
|
||||
let ws = new WebSocket('ws://127.0.0.1:9584/');
|
||||
ws.binaryType = 'arraybuffer';
|
||||
|
||||
@@ -328,7 +327,6 @@
|
||||
});
|
||||
|
||||
await state.done(() => {
|
||||
console.warn('aaa');
|
||||
// 1 marker byte + 8 bytes (2 x 4-byte int32)
|
||||
testing.expectEqual([9], received);
|
||||
});
|
||||
|
||||
@@ -1,233 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<script src="../testing.js"></script>
|
||||
|
||||
<script id=binary_arraybuffer type=module>
|
||||
{
|
||||
const state = await testing.async();
|
||||
let received = [];
|
||||
|
||||
let ws = new WebSocket('ws://127.0.0.1:9584/');
|
||||
ws.binaryType = 'arraybuffer';
|
||||
|
||||
ws.addEventListener('open', () => {
|
||||
const buffer = new ArrayBuffer(4);
|
||||
const view = new Uint8Array(buffer);
|
||||
view[0] = 10;
|
||||
view[1] = 20;
|
||||
view[2] = 30;
|
||||
view[3] = 40;
|
||||
ws.send(buffer);
|
||||
});
|
||||
|
||||
ws.addEventListener('message', (e) => {
|
||||
const arr = new Uint8Array(e.data);
|
||||
received.push(arr.length);
|
||||
received.push(arr[1]); // First byte of our data (after 0xEE marker)
|
||||
received.push(arr[4]); // Last byte of our data
|
||||
ws.close();
|
||||
});
|
||||
|
||||
ws.addEventListener('close', () => {
|
||||
state.resolve();
|
||||
});
|
||||
|
||||
await state.done(() => {
|
||||
testing.expectEqual([5, 10, 40], received);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<script id=binary_int32array type=module>
|
||||
{
|
||||
const state = await testing.async();
|
||||
let received = [];
|
||||
|
||||
let ws = new WebSocket('ws://127.0.0.1:9584/');
|
||||
ws.binaryType = 'arraybuffer';
|
||||
|
||||
ws.addEventListener('open', () => {
|
||||
const arr = new Int32Array([0x01020304, 0x05060708]);
|
||||
ws.send(arr);
|
||||
});
|
||||
|
||||
ws.addEventListener('message', (e) => {
|
||||
received.push(e.data.byteLength);
|
||||
ws.close();
|
||||
});
|
||||
|
||||
ws.addEventListener('close', () => {
|
||||
state.resolve();
|
||||
});
|
||||
|
||||
await state.done(() => {
|
||||
// 1 marker byte + 8 bytes (2 x 4-byte int32)
|
||||
testing.expectEqual([9], received);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<script id=binary_int32array22 type=module>
|
||||
{
|
||||
const state = await testing.async();
|
||||
let received = [];
|
||||
|
||||
console.warn('last-test');
|
||||
let ws = new WebSocket('ws://127.0.0.1:9584/');
|
||||
ws.binaryType = 'arraybuffer';
|
||||
|
||||
ws.addEventListener('open', () => {
|
||||
const arr = new Int32Array([0x01020304, 0x05060708]);
|
||||
ws.send(arr);
|
||||
});
|
||||
|
||||
ws.addEventListener('message', (e) => {
|
||||
received.push(e.data.byteLength);
|
||||
ws.close();
|
||||
});
|
||||
|
||||
ws.addEventListener('close', () => {
|
||||
state.resolve();
|
||||
});
|
||||
|
||||
await state.done(() => {
|
||||
console.warn('aaa');
|
||||
// 1 marker byte + 8 bytes (2 x 4-byte int32)
|
||||
testing.expectEqual([9], received);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<script id=binary_blob type=module>
|
||||
{
|
||||
const state = await testing.async();
|
||||
let received = [];
|
||||
|
||||
let ws = new WebSocket('ws://127.0.0.1:9584/');
|
||||
ws.binaryType = 'arraybuffer';
|
||||
|
||||
ws.addEventListener('open', () => {
|
||||
const blob = new Blob(['hello'], { type: 'text/plain' });
|
||||
ws.send(blob);
|
||||
});
|
||||
|
||||
ws.addEventListener('message', (e) => {
|
||||
const arr = new Uint8Array(e.data);
|
||||
received.push(arr.length);
|
||||
received.push(arr[0]); // 0xEE marker
|
||||
// 'h' = 104, 'e' = 101, 'l' = 108
|
||||
received.push(arr[1]); // 'h'
|
||||
received.push(arr[2]); // 'e'
|
||||
ws.close();
|
||||
});
|
||||
|
||||
ws.addEventListener('close', () => {
|
||||
state.resolve();
|
||||
});
|
||||
|
||||
await state.done(() => {
|
||||
testing.expectEqual([6, 0xEE, 104, 101], received);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<script id=server_close type=module>
|
||||
{
|
||||
const state = await testing.async();
|
||||
let received = [];
|
||||
|
||||
let ws = new WebSocket('ws://127.0.0.1:9584/');
|
||||
|
||||
ws.addEventListener('open', () => {
|
||||
ws.send('close:1001:going away');
|
||||
});
|
||||
|
||||
ws.addEventListener('close', (e) => {
|
||||
received.push(e.code);
|
||||
received.push(e.reason);
|
||||
received.push(e.wasClean);
|
||||
state.resolve();
|
||||
});
|
||||
|
||||
await state.done(() => {
|
||||
testing.expectEqual([1001, 'going away', true], received);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<script id=force_close type=module>
|
||||
{
|
||||
const state = await testing.async();
|
||||
let received = [];
|
||||
|
||||
let ws = new WebSocket('ws://127.0.0.1:9584/');
|
||||
|
||||
ws.addEventListener('open', () => {
|
||||
ws.send('force-close');
|
||||
});
|
||||
|
||||
ws.addEventListener('close', (e) => {
|
||||
received.push('closed');
|
||||
received.push(e.wasClean);
|
||||
state.resolve();
|
||||
});
|
||||
|
||||
ws.addEventListener('error', () => {
|
||||
received.push('error');
|
||||
});
|
||||
|
||||
await state.done(() => {
|
||||
// Connection was not cleanly closed
|
||||
testing.expectEqual(['closed', false], received);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<script id=ready_state type=module>
|
||||
{
|
||||
const state = await testing.async();
|
||||
let states = [];
|
||||
|
||||
let ws = new WebSocket('ws://127.0.0.1:9584/');
|
||||
states.push(ws.readyState); // CONNECTING = 0
|
||||
|
||||
ws.addEventListener('open', () => {
|
||||
states.push(ws.readyState); // OPEN = 1
|
||||
ws.close();
|
||||
states.push(ws.readyState); // CLOSING = 2
|
||||
});
|
||||
|
||||
ws.addEventListener('close', () => {
|
||||
states.push(ws.readyState); // CLOSED = 3
|
||||
state.resolve();
|
||||
});
|
||||
|
||||
await state.done(() => {
|
||||
testing.expectEqual([0, 1, 2, 3], states);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<script id=buffered_amount type=module>
|
||||
{
|
||||
const state = await testing.async();
|
||||
let results = [];
|
||||
|
||||
let ws = new WebSocket('ws://127.0.0.1:9584/');
|
||||
|
||||
ws.addEventListener('open', () => {
|
||||
results.push(ws.bufferedAmount); // Should be 0 initially
|
||||
ws.send('test');
|
||||
// bufferedAmount might be non-zero right after send
|
||||
// but will go to 0 after message is sent
|
||||
ws.close();
|
||||
});
|
||||
|
||||
ws.addEventListener('close', () => {
|
||||
state.resolve();
|
||||
});
|
||||
|
||||
await state.done(() => {
|
||||
testing.expectEqual([0], results);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
@@ -1,77 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<script src="../testing.js"></script>
|
||||
|
||||
<script id=handler_properties type=module>
|
||||
{
|
||||
const state = await testing.async();
|
||||
let received = [];
|
||||
|
||||
let ws = new WebSocket('ws://127.0.0.1:9584/');
|
||||
|
||||
ws.onopen = () => {
|
||||
ws.send('handler-test');
|
||||
};
|
||||
|
||||
ws.onmessage = (e) => {
|
||||
received.push(e.data);
|
||||
ws.close();
|
||||
};
|
||||
|
||||
ws.onclose = () => {
|
||||
received.push('closed');
|
||||
state.resolve();
|
||||
};
|
||||
|
||||
await state.done(() => {
|
||||
testing.expectEqual(['echo-handler-test', 'closed'], received);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<script id=binary_type type=module>
|
||||
{
|
||||
const state = await testing.async();
|
||||
let results = [];
|
||||
|
||||
let ws = new WebSocket('ws://127.0.0.1:9584/');
|
||||
|
||||
ws.addEventListener('open', () => {
|
||||
results.push(ws.binaryType); // Default is 'blob'
|
||||
ws.binaryType = 'arraybuffer';
|
||||
results.push(ws.binaryType);
|
||||
ws.binaryType = 'blob';
|
||||
results.push(ws.binaryType);
|
||||
ws.close();
|
||||
});
|
||||
|
||||
ws.addEventListener('close', () => {
|
||||
state.resolve();
|
||||
});
|
||||
|
||||
await state.done(() => {
|
||||
testing.expectEqual(['blob', 'arraybuffer', 'blob'], results);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
<script id=url_property type=module>
|
||||
{
|
||||
const state = await testing.async();
|
||||
let result = null;
|
||||
|
||||
let ws = new WebSocket('ws://127.0.0.1:9584/path');
|
||||
|
||||
ws.addEventListener('open', () => {
|
||||
result = ws.url;
|
||||
ws.close();
|
||||
});
|
||||
|
||||
ws.addEventListener('close', () => {
|
||||
state.resolve();
|
||||
});
|
||||
|
||||
await state.done(() => {
|
||||
testing.expectEqual('ws://127.0.0.1:9584/path', result);
|
||||
});
|
||||
}
|
||||
</script>
|
||||
@@ -693,8 +693,5 @@ pub const JsApi = struct {
|
||||
|
||||
const testing = @import("../../../testing.zig");
|
||||
test "WebApi: WebSocket" {
|
||||
// TEMP since we're currently limited to 10 concurrent connections
|
||||
try testing.htmlRunner("net/websocket.html", .{});
|
||||
try testing.htmlRunner("net/websocket2.html", .{});
|
||||
try testing.htmlRunner("net/websocket3.html", .{});
|
||||
}
|
||||
|
||||
@@ -556,9 +556,6 @@ test "tests:afterAll" {
|
||||
if (test_ws_server_thread) |thread| {
|
||||
thread.join();
|
||||
}
|
||||
if (test_ws_server) |*server| {
|
||||
server.deinit();
|
||||
}
|
||||
|
||||
@import("root").v8_peak_memory = test_browser.env.isolate.getHeapStatistics().total_physical_size;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user