diff --git a/tests/websocket.html b/tests/websocket.html index f63bc3b..00cca12 100644 --- a/tests/websocket.html +++ b/tests/websocket.html @@ -133,13 +133,9 @@ function installBlock(title, type) { class Client { - constructor(type, pingSerializer, getSerializer, setSerializer, pubSerializer, subSerializer) { + constructor(type, serializer) { this.type = type; - this.pingSerializer = pingSerializer; - this.getSerializer = getSerializer; - this.setSerializer = setSerializer; - this.pubSerializer = pubSerializer; - this.subSerializer = subSerializer; + this.serializer = serializer; this.ws = null; this.connected = false; this.subscribed = false; @@ -169,31 +165,31 @@ class Client { $(`${this.type}-btn-ping`).addEventListener('click', event => { event.preventDefault(); - const serialized = this.pingSerializer(); + const serialized = this.serializer(['PING']); this.send(serialized); }); $(`${this.type}-btn-set`).addEventListener('click', event => { event.preventDefault(); - const serialized = this.setSerializer($(`${this.type}-set-key`).value, $(`${this.type}-set-value`).value); + const serialized = this.serializer(['SET', $(`${this.type}-set-key`).value, $(`${this.type}-set-value`).value]); this.send(serialized); }); $(`${this.type}-btn-get`).addEventListener('click', event => { event.preventDefault(); - const serialized = this.getSerializer($(`${this.type}-get-key`).value); + const serialized = this.serializer(['GET', $(`${this.type}-get-key`).value]); this.send(serialized); }); $(`${this.type}-btn-pub`).addEventListener('click', event => { event.preventDefault(); - const serialized = this.pubSerializer($(`${this.type}-pub-channel`).value, $(`${this.type}-pub-message`).value); + const serialized = this.serializer(['PUBLISH', $(`${this.type}-pub-channel`).value, $(`${this.type}-pub-message`).value]); this.send(serialized); }); $(`${this.type}-btn-sub`).addEventListener('click', event => { event.preventDefault(); - const serialized = this.subSerializer($(`${this.type}-sub-channel`).value); + const serialized = this.serializer(['SUBSCRIBE', $(`${this.type}-sub-channel`).value]); try { this.send(serialized); this.subscribed = true; @@ -254,23 +250,21 @@ class Client { } } +function serializeRaw(args) { + let raw = `*${args.length}\r\n`; + for (let i = 0; i < args.length; i++) { + raw += `$${args[i].length}\r\n`; + raw += `${args[i]}\r\n`; + } + return raw; +} + addEventListener("DOMContentLoaded", () => { installBlock('JSON', 'json'); installBlock('Raw', 'raw'); - const jsonClient = new Client('json', - () => JSON.stringify(['PING']), - (key) => JSON.stringify(['GET', key]), - (key, value) => JSON.stringify(['SET', key, value]), - (channel, message) => JSON.stringify(['PUBLISH', channel, message]), - (channel) => JSON.stringify(['SUBSCRIBE', channel])); - - const rawClient = new Client('raw', - () => '*1\r\n$4\r\nPING\r\n', - (key) => `*2\r\n$3\r\nGET\r\n$${key.length}\r\n${key}\r\n`, - (key, value) => `*3\r\n$3\r\nSET\r\n$${key.length}\r\n${key}\r\n$${value.length}\r\n${value}\r\n`, - (channel, message) => `*3\r\n$7\r\nPUBLISH\r\n$${channel.length}\r\n${channel}\r\n$${message.length}\r\n${message}\r\n`, - (channel) => `*2\r\n$9\r\nSUBSCRIBE\r\n$${channel.length}\r\n${channel}\r\n`); + const jsonClient = new Client('json', JSON.stringify); + const rawClient = new Client('raw', serializeRaw); }); diff --git a/tests/ws-tests.py b/tests/ws-tests.py index dadd0f7..5e6c62c 100755 --- a/tests/ws-tests.py +++ b/tests/ws-tests.py @@ -10,9 +10,12 @@ from websocket import create_connection host = os.getenv('WEBDIS_HOST', '127.0.0.1') port = int(os.getenv('WEBDIS_PORT', 7379)) +def connect(format): + return create_connection(f'ws://{host}:{port}/.{format}') + class TestWebdis(unittest.TestCase): def setUp(self) -> None: - self.ws = create_connection(f'ws://{host}:{port}/.{self.format()}') + self.ws = connect(self.format()) def tearDown(self) -> None: self.ws.close() @@ -95,8 +98,8 @@ class TestRaw(TestWebdis): @unittest.skipIf(os.getenv('PUBSUB') != '1', "pub-sub test fail due to invalid ordering") class TestPubSub(unittest.TestCase): def setUp(self): - self.publisher = create_connection(f'ws://{host}:{port}/.json') - self.subscriber = create_connection(f'ws://{host}:{port}/.json') + self.publisher = connect('json') + self.subscriber = connect('json') def tearDown(self): self.publisher.close()