68 lines
1.9 KiB
HTML
68 lines
1.9 KiB
HTML
<!DOCTYPE html>
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="/resources/test-only-api.js"></script>
|
|
<script>
|
|
'use strict';
|
|
|
|
promise_test(async () => {
|
|
const kPacket = "I'm a netcat. Meow-meow!"
|
|
|
|
const serverSocket = new TCPServerSocket("127.0.0.1");
|
|
const { localPort } = await serverSocket.opened;
|
|
|
|
const clientSocket = new TCPSocket("127.0.0.1", localPort);
|
|
const acceptedSocket = await (async () => {
|
|
const { readable } = await serverSocket.opened;
|
|
const reader = readable.getReader();
|
|
const { value: acceptedSocket, done } = await reader.read();
|
|
assert_false(done);
|
|
reader.releaseLock();
|
|
return acceptedSocket;
|
|
})();
|
|
|
|
const encoder = new TextEncoder();
|
|
const decoder = new TextDecoder();
|
|
|
|
const readPacket = async socket => {
|
|
const { readable } = await socket.opened;
|
|
const reader = readable.getReader();
|
|
let result = "";
|
|
while (result.length < kPacket.length) {
|
|
const { value, done } = await reader.read();
|
|
assert_false(done);
|
|
result += decoder.decode(value);
|
|
}
|
|
assert_equals(result, kPacket);
|
|
reader.releaseLock();
|
|
};
|
|
|
|
const sendPacket = async socket => {
|
|
const { writable } = await socket.opened;
|
|
const writer = writable.getWriter();
|
|
await writer.ready;
|
|
await writer.write(encoder.encode(kPacket));
|
|
writer.releaseLock();
|
|
};
|
|
|
|
const acceptedSocketEcho = (async () => {
|
|
await readPacket(acceptedSocket);
|
|
await sendPacket(acceptedSocket);
|
|
})();
|
|
|
|
const clientSocketSend = (async () => {
|
|
await sendPacket(clientSocket);
|
|
})();
|
|
|
|
const clientSocketReceive = (async () => {
|
|
await readPacket(clientSocket);
|
|
})();
|
|
|
|
await clientSocketReceive;
|
|
|
|
await clientSocket.close();
|
|
await acceptedSocket.close();
|
|
await serverSocket.close();
|
|
|
|
}, 'TCPSocket exchanges packets with TCPServerSocket');
|
|
</script>
|