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 {
|
pub fn stop(self: *TestWSServer) void {
|
||||||
self.shutdown.store(true, .release);
|
self.shutdown.store(true, .release);
|
||||||
if (self.listener) |socket| {
|
if (self.listener) |socket| {
|
||||||
posix.close(socket);
|
switch (@import("builtin").target.os.tag) {
|
||||||
self.listener = null;
|
.linux => std.posix.shutdown(socket, .recv) catch {},
|
||||||
|
else => std.posix.close(socket),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -309,7 +309,6 @@
|
|||||||
const state = await testing.async();
|
const state = await testing.async();
|
||||||
let received = [];
|
let received = [];
|
||||||
|
|
||||||
console.warn('last-test');
|
|
||||||
let ws = new WebSocket('ws://127.0.0.1:9584/');
|
let ws = new WebSocket('ws://127.0.0.1:9584/');
|
||||||
ws.binaryType = 'arraybuffer';
|
ws.binaryType = 'arraybuffer';
|
||||||
|
|
||||||
@@ -328,7 +327,6 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
await state.done(() => {
|
await state.done(() => {
|
||||||
console.warn('aaa');
|
|
||||||
// 1 marker byte + 8 bytes (2 x 4-byte int32)
|
// 1 marker byte + 8 bytes (2 x 4-byte int32)
|
||||||
testing.expectEqual([9], received);
|
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");
|
const testing = @import("../../../testing.zig");
|
||||||
test "WebApi: WebSocket" {
|
test "WebApi: WebSocket" {
|
||||||
// TEMP since we're currently limited to 10 concurrent connections
|
|
||||||
try testing.htmlRunner("net/websocket.html", .{});
|
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| {
|
if (test_ws_server_thread) |thread| {
|
||||||
thread.join();
|
thread.join();
|
||||||
}
|
}
|
||||||
if (test_ws_server) |*server| {
|
|
||||||
server.deinit();
|
|
||||||
}
|
|
||||||
|
|
||||||
@import("root").v8_peak_memory = test_browser.env.isolate.getHeapStatistics().total_physical_size;
|
@import("root").v8_peak_memory = test_browser.env.isolate.getHeapStatistics().total_physical_size;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user