From 2ee60783b694b6a8555a6afbef21dc1f2ca1f8b9 Mon Sep 17 00:00:00 2001 From: Aldo Cortesi Date: Sat, 16 May 2015 11:31:53 +1200 Subject: websockets: client and server flavors, key and mask specification --- test/test_language_websocket.py | 53 ++++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 11 deletions(-) (limited to 'test/test_language_websocket.py') diff --git a/test/test_language_websocket.py b/test/test_language_websocket.py index 4b384f61..5e2ccb88 100644 --- a/test/test_language_websocket.py +++ b/test/test_language_websocket.py @@ -54,17 +54,48 @@ class TestWebsocketFrame: assert not frm.header.rsv2 assert not frm.header.rsv3 - def test_construction(self): - wf = parse_request("wf:c1") - frm = netlib.websockets.Frame.from_bytes(tutils.render(wf)) - assert wf.opcode.value == 1 == frm.header.opcode + def fr(self, spec, **kwargs): + settings = language.base.Settings(**kwargs) + wf = parse_request(spec) + return netlib.websockets.Frame.from_bytes(tutils.render(wf, settings)) - wf = parse_request("wf:cbinary") - frm = netlib.websockets.Frame.from_bytes(tutils.render(wf)) - assert wf.opcode.value == frm.header.opcode - assert wf.opcode.value == netlib.websockets.OPCODE.BINARY + def test_construction(self): + assert self.fr("wf:c1").header.opcode == 1 + assert self.fr("wf:c0").header.opcode == 0 + assert self.fr("wf:cbinary").header.opcode ==\ + netlib.websockets.OPCODE.BINARY + assert self.fr("wf:ctext").header.opcode ==\ + netlib.websockets.OPCODE.TEXT def test_auto_raw(self): - wf = parse_request("wf:b'foo':mask") - frm = netlib.websockets.Frame.from_bytes(tutils.render(wf)) - print frm.human_readable() + # Simple server frame + frm = self.fr("wf:b'foo'") + assert not frm.header.mask + assert not frm.header.masking_key + + # Simple client frame + frm = self.fr("wf:b'foo'", is_client=True) + assert frm.header.mask + assert frm.header.masking_key + frm = self.fr("wf:b'foo':k'abcd'", is_client=True) + assert frm.header.mask + assert frm.header.masking_key == 'abcd' + + # Server frame, mask explicitly set + frm = self.fr("wf:b'foo':mask") + assert frm.header.mask + assert frm.header.masking_key + frm = self.fr("wf:b'foo':k'abcd'") + assert frm.header.mask + assert frm.header.masking_key == 'abcd' + + # Client frame, mask explicitly unset + frm = self.fr("wf:b'foo':-mask", is_client=True) + assert not frm.header.mask + assert not frm.header.masking_key + + frm = self.fr("wf:b'foo':-mask:k'abcd'", is_client=True) + assert not frm.header.mask + # We're reading back a corrupted frame - the first 3 characters of the + # mask is mis-interpreted as the payload + assert frm.payload == "abc" -- cgit v1.2.3