aboutsummaryrefslogtreecommitdiffstats
path: root/test/test_language_websocket.py
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2015-05-16 11:31:53 +1200
committerAldo Cortesi <aldo@nullcube.com>2015-05-16 11:31:53 +1200
commit2ee60783b694b6a8555a6afbef21dc1f2ca1f8b9 (patch)
treedb69f9cff1ff0611b507f55c133994076166af6e /test/test_language_websocket.py
parentd66dedc6e7bdc201cd4d3fa5f04c9636a8ad57f4 (diff)
downloadmitmproxy-2ee60783b694b6a8555a6afbef21dc1f2ca1f8b9.tar.gz
mitmproxy-2ee60783b694b6a8555a6afbef21dc1f2ca1f8b9.tar.bz2
mitmproxy-2ee60783b694b6a8555a6afbef21dc1f2ca1f8b9.zip
websockets: client and server flavors, key and mask specification
Diffstat (limited to 'test/test_language_websocket.py')
-rw-r--r--test/test_language_websocket.py53
1 files changed, 42 insertions, 11 deletions
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"