def test_transport(self): url = base_url + '/000/' + str(uuid.uuid4()) r = GET_async(url + '/eventsource') self.assertEqual(r.status, 200) self.assertEqual(r['Content-Type'], 'text/event-stream; charset=UTF-8') # As EventSource is requested using GET we must be very # carefull not to allow it being cached. self.verify_not_cached(r) self.verify_cookie(r) # The transport must first send a new line prelude, due to a # bug in Opera. self.assertEqual(r.read(), '\r\n') self.assertEqual(r.read(), 'data: o\r\n\r\n') r1 = POST(url + '/xhr_send', body='["x"]') self.assertFalse(r1.body) self.assertEqual(r1.status, 204) self.assertEqual(r.read(), 'data: a["x"]\r\n\r\n') # This protocol doesn't allow binary data and we need to # specially treat leading space, new lines and things like # \x00. But, now the protocol json-encodes everything, so # there is no way to trigger this case. r1 = POST(url + '/xhr_send', body=r'[" \u0000\n\r "]') self.assertFalse(r1.body) self.assertEqual(r1.status, 204) self.assertEqual(r.read(), 'data: a[" \\u0000\\n\\r "]\r\n\r\n') r.close()
def test_headersSanity(self): for version in ['7', '8', '13']: url = base_url.split(':',1)[1] + \ '/000/' + str(uuid.uuid4()) + '/websocket' ws_url = 'ws:' + url http_url = 'http:' + url origin = '/'.join(http_url.split('/')[:3]) h = {'Upgrade': 'websocket', 'Connection': 'Upgrade', 'Sec-WebSocket-Version': version, 'Sec-WebSocket-Origin': 'http://asd', 'Sec-WebSocket-Key': 'x3JJHMbDL1EzLkh9GBhXDw==', } r = GET_async(http_url, headers=h) self.assertEqual(r.status, 101) self.assertEqual(r['sec-websocket-accept'], 'HSmrc0sMlYUkAGmm5OPpG2HaGWk=') self.assertEqual(r['connection'].lower(), 'upgrade') self.assertEqual(r['upgrade'].lower(), 'websocket') self.assertFalse(r['content-length']) r.close()
def test_headersSanity(self): url = base_url.split(':',1)[1] + \ '/000/' + str(uuid.uuid4()) + '/websocket' ws_url = 'ws:' + url http_url = 'http:' + url origin = '/'.join(http_url.split('/')[:3]) h = {'Upgrade': 'WebSocket', 'Connection': 'Upgrade', 'Origin': origin, 'Sec-WebSocket-Key1': '4 @1 46546xW%0l 1 5', 'Sec-WebSocket-Key2': '12998 5 Y3 1 .P00' } r = GET_async(http_url, headers=h) self.assertEqual(r.status, 101) self.assertEqual(r['sec-websocket-location'], ws_url) self.assertEqual(r['connection'].lower(), 'upgrade') self.assertEqual(r['upgrade'].lower(), 'websocket') self.assertEqual(r['sec-websocket-origin'], origin) self.assertFalse(r['content-length']) r.close()
def test_firefox_602_connection_header(self): url = base_url.split(':',1)[1] + \ '/000/' + str(uuid.uuid4()) + '/websocket' ws_url = 'ws:' + url http_url = 'http:' + url origin = '/'.join(http_url.split('/')[:3]) h = {'Upgrade': 'websocket', 'Connection': 'keep-alive, Upgrade', 'Sec-WebSocket-Version': '7', 'Sec-WebSocket-Origin': 'http://asd', 'Sec-WebSocket-Key': 'x3JJHMbDL1EzLkh9GBhXDw==', } r = GET_async(http_url, headers=h) self.assertEqual(r.status, 101)
def test_transport(self): url = base_url + '/000/' + str(uuid.uuid4()) r = GET_async(url + '/htmlfile?c=%63allback') self.assertEqual(r.status, 200) self.assertEqual(r['Content-Type'], 'text/html; charset=UTF-8') # As HtmlFile is requested using GET we must be very careful # not to allow it being cached. self.verify_not_cached(r) self.verify_cookie(r) d = r.read() self.assertEqual(d.strip(), self.head % ('callback',)) self.assertGreater(len(d), 1024) self.assertEqual(r.read(), '<script>\np("o");\n</script>\r\n') r1 = POST(url + '/xhr_send', body='["x"]') self.assertFalse(r1.body) self.assertEqual(r1.status, 204) self.assertEqual(r.read(), '<script>\np("a[\\"x\\"]");\n</script>\r\n') r.close()