11477Szelenkov@nginx.comimport struct 21158Szelenkov@nginx.comimport time 31477Szelenkov@nginx.com 41635Szelenkov@nginx.comimport pytest 5*2616Szelenkov@nginx.com 62491Szelenkov@nginx.comfrom unit.applications.lang.java import ApplicationJava 72491Szelenkov@nginx.comfrom unit.applications.websockets import ApplicationWebsocket 81158Szelenkov@nginx.com 92488Szelenkov@nginx.comprerequisites = {'modules': {'java': 'any'}} 102488Szelenkov@nginx.com 112491Szelenkov@nginx.comclient = ApplicationJava() 122491Szelenkov@nginx.comws = ApplicationWebsocket() 131158Szelenkov@nginx.com 141158Szelenkov@nginx.com 152491Szelenkov@nginx.com@pytest.fixture(autouse=True) 162491Szelenkov@nginx.comdef setup_method_fixture(skip_alert): 172491Szelenkov@nginx.com assert 'success' in client.conf( 182491Szelenkov@nginx.com {'http': {'websocket': {'keepalive_interval': 0}}}, 'settings' 192491Szelenkov@nginx.com ), 'clear keepalive_interval' 201158Szelenkov@nginx.com 212491Szelenkov@nginx.com skip_alert(r'socket close\(\d+\) failed') 221158Szelenkov@nginx.com 231158Szelenkov@nginx.com 242491Szelenkov@nginx.comdef close_connection(sock): 252491Szelenkov@nginx.com assert client.recvall(sock, read_timeout=0.1) == b'', 'empty soc' 261158Szelenkov@nginx.com 272491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, ws.serialize_close()) 281158Szelenkov@nginx.com 292491Szelenkov@nginx.com check_close(sock) 301158Szelenkov@nginx.com 311158Szelenkov@nginx.com 322491Szelenkov@nginx.comdef check_close(sock, code=1000, no_close=False, frame=None): 332491Szelenkov@nginx.com if frame is None: 342491Szelenkov@nginx.com frame = ws.frame_read(sock) 351158Szelenkov@nginx.com 362491Szelenkov@nginx.com assert frame['fin'], 'close fin' 372491Szelenkov@nginx.com assert frame['opcode'] == ws.OP_CLOSE, 'close opcode' 382491Szelenkov@nginx.com assert frame['code'] == code, 'close code' 391158Szelenkov@nginx.com 402491Szelenkov@nginx.com if not no_close: 411158Szelenkov@nginx.com sock.close() 421158Szelenkov@nginx.com 431158Szelenkov@nginx.com 442491Szelenkov@nginx.comdef check_frame(frame, fin, opcode, payload, decode=True): 452491Szelenkov@nginx.com if opcode == ws.OP_BINARY or not decode: 462491Szelenkov@nginx.com data = frame['data'] 472491Szelenkov@nginx.com else: 482491Szelenkov@nginx.com data = frame['data'].decode('utf-8') 491158Szelenkov@nginx.com 502491Szelenkov@nginx.com assert frame['fin'] == fin, 'fin' 512491Szelenkov@nginx.com assert frame['opcode'] == opcode, 'opcode' 522491Szelenkov@nginx.com assert data == payload, 'payload' 532491Szelenkov@nginx.com 542491Szelenkov@nginx.com 552491Szelenkov@nginx.comdef test_java_websockets_handshake(): 562491Szelenkov@nginx.com client.load('websockets_mirror') 572491Szelenkov@nginx.com 582491Szelenkov@nginx.com resp, sock, key = ws.upgrade() 592491Szelenkov@nginx.com sock.close() 601158Szelenkov@nginx.com 612491Szelenkov@nginx.com assert resp['status'] == 101, 'status' 622491Szelenkov@nginx.com assert resp['headers']['Upgrade'] == 'websocket', 'upgrade' 632491Szelenkov@nginx.com assert resp['headers']['Connection'] == 'Upgrade', 'connection' 642491Szelenkov@nginx.com assert resp['headers']['Sec-WebSocket-Accept'] == ws.accept(key), 'key' 651158Szelenkov@nginx.com 661158Szelenkov@nginx.com 672491Szelenkov@nginx.comdef test_java_websockets_mirror(): 682491Szelenkov@nginx.com client.load('websockets_mirror') 692491Szelenkov@nginx.com 702491Szelenkov@nginx.com message = 'blah' 711158Szelenkov@nginx.com 722491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 732491Szelenkov@nginx.com 742491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, message) 752491Szelenkov@nginx.com frame = ws.frame_read(sock) 761158Szelenkov@nginx.com 772491Szelenkov@nginx.com assert message == frame['data'].decode('utf-8'), 'mirror' 781158Szelenkov@nginx.com 792491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, message) 802491Szelenkov@nginx.com frame = ws.frame_read(sock) 812491Szelenkov@nginx.com 822491Szelenkov@nginx.com assert message == frame['data'].decode('utf-8'), 'mirror 2' 831158Szelenkov@nginx.com 842491Szelenkov@nginx.com sock.close() 852491Szelenkov@nginx.com 861158Szelenkov@nginx.com 872491Szelenkov@nginx.comdef test_java_websockets_no_mask(): 882491Szelenkov@nginx.com client.load('websockets_mirror') 892491Szelenkov@nginx.com 902491Szelenkov@nginx.com message = 'blah' 912491Szelenkov@nginx.com 922491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 931158Szelenkov@nginx.com 942491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, message, mask=False) 952491Szelenkov@nginx.com 962491Szelenkov@nginx.com frame = ws.frame_read(sock) 971158Szelenkov@nginx.com 982491Szelenkov@nginx.com assert frame['opcode'] == ws.OP_CLOSE, 'no mask opcode' 992491Szelenkov@nginx.com assert frame['code'] == 1002, 'no mask close code' 1001158Szelenkov@nginx.com 1012491Szelenkov@nginx.com sock.close() 1022491Szelenkov@nginx.com 1031158Szelenkov@nginx.com 1042491Szelenkov@nginx.comdef test_java_websockets_fragmentation(): 1052491Szelenkov@nginx.com client.load('websockets_mirror') 1062491Szelenkov@nginx.com 1072491Szelenkov@nginx.com message = 'blah' 1081158Szelenkov@nginx.com 1092491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 1101158Szelenkov@nginx.com 1112491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, message, fin=False) 1122491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, ' ', fin=False) 1132491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, message) 1141158Szelenkov@nginx.com 1152491Szelenkov@nginx.com frame = ws.frame_read(sock) 1162491Szelenkov@nginx.com 1172491Szelenkov@nginx.com assert f'{message} {message}' == frame['data'].decode( 1182491Szelenkov@nginx.com 'utf-8' 1192491Szelenkov@nginx.com ), 'mirror framing' 1201158Szelenkov@nginx.com 1212491Szelenkov@nginx.com sock.close() 1222491Szelenkov@nginx.com 1231158Szelenkov@nginx.com 1242491Szelenkov@nginx.comdef test_java_websockets_frame_fragmentation_invalid(): 1252491Szelenkov@nginx.com client.load('websockets_mirror') 1261158Szelenkov@nginx.com 1272491Szelenkov@nginx.com message = 'blah' 1282491Szelenkov@nginx.com 1292491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 1301158Szelenkov@nginx.com 1312491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, message, fin=False) 1321158Szelenkov@nginx.com 1332491Szelenkov@nginx.com frame = ws.frame_read(sock) 1341158Szelenkov@nginx.com 1352491Szelenkov@nginx.com frame.pop('data') 1362491Szelenkov@nginx.com assert frame == { 1372491Szelenkov@nginx.com 'fin': True, 1382491Szelenkov@nginx.com 'rsv1': False, 1392491Szelenkov@nginx.com 'rsv2': False, 1402491Szelenkov@nginx.com 'rsv3': False, 1412491Szelenkov@nginx.com 'opcode': ws.OP_CLOSE, 1422491Szelenkov@nginx.com 'mask': 0, 1432491Szelenkov@nginx.com 'code': 1002, 1442491Szelenkov@nginx.com 'reason': 'Fragmented control frame', 1452491Szelenkov@nginx.com }, 'close frame' 1461158Szelenkov@nginx.com 1472491Szelenkov@nginx.com sock.close() 1482491Szelenkov@nginx.com 1491158Szelenkov@nginx.com 1502491Szelenkov@nginx.comdef test_java_websockets_two_clients(): 1512491Szelenkov@nginx.com client.load('websockets_mirror') 1521158Szelenkov@nginx.com 1532491Szelenkov@nginx.com message1 = 'blah1' 1542491Szelenkov@nginx.com message2 = 'blah2' 1551158Szelenkov@nginx.com 1562491Szelenkov@nginx.com _, sock1, _ = ws.upgrade() 1572491Szelenkov@nginx.com _, sock2, _ = ws.upgrade() 1582491Szelenkov@nginx.com 1592491Szelenkov@nginx.com ws.frame_write(sock1, ws.OP_TEXT, message1) 1602491Szelenkov@nginx.com ws.frame_write(sock2, ws.OP_TEXT, message2) 1611158Szelenkov@nginx.com 1622491Szelenkov@nginx.com frame1 = ws.frame_read(sock1) 1632491Szelenkov@nginx.com frame2 = ws.frame_read(sock2) 1641158Szelenkov@nginx.com 1652491Szelenkov@nginx.com assert message1 == frame1['data'].decode('utf-8'), 'client 1' 1662491Szelenkov@nginx.com assert message2 == frame2['data'].decode('utf-8'), 'client 2' 1671158Szelenkov@nginx.com 1682491Szelenkov@nginx.com sock1.close() 1692491Szelenkov@nginx.com sock2.close() 1702491Szelenkov@nginx.com 1711158Szelenkov@nginx.com 1722491Szelenkov@nginx.com# FAIL https://tools.ietf.org/html/rfc6455#section-4.2.1 1732491Szelenkov@nginx.com@pytest.mark.skip('not yet') 1742491Szelenkov@nginx.comdef test_java_websockets_handshake_upgrade_absent(): 1752491Szelenkov@nginx.com client.load('websockets_mirror') 1761158Szelenkov@nginx.com 1772491Szelenkov@nginx.com resp = client.get( 1782491Szelenkov@nginx.com headers={ 1792491Szelenkov@nginx.com 'Host': 'localhost', 1802491Szelenkov@nginx.com 'Connection': 'Upgrade', 1812491Szelenkov@nginx.com 'Sec-WebSocket-Key': ws.key(), 1822491Szelenkov@nginx.com 'Sec-WebSocket-Protocol': 'chat', 1832491Szelenkov@nginx.com 'Sec-WebSocket-Version': 13, 1842491Szelenkov@nginx.com }, 1852491Szelenkov@nginx.com ) 1861158Szelenkov@nginx.com 1872491Szelenkov@nginx.com assert resp['status'] == 400, 'upgrade absent' 1881158Szelenkov@nginx.com 1891158Szelenkov@nginx.com 1902491Szelenkov@nginx.comdef test_java_websockets_handshake_case_insensitive(): 1912491Szelenkov@nginx.com client.load('websockets_mirror') 1921158Szelenkov@nginx.com 1932491Szelenkov@nginx.com resp, sock, _ = ws.upgrade( 1942491Szelenkov@nginx.com headers={ 1952491Szelenkov@nginx.com 'Host': 'localhost', 1962491Szelenkov@nginx.com 'Upgrade': 'WEBSOCKET', 1972491Szelenkov@nginx.com 'Connection': 'UPGRADE', 1982491Szelenkov@nginx.com 'Sec-WebSocket-Key': ws.key(), 1992491Szelenkov@nginx.com 'Sec-WebSocket-Protocol': 'chat', 2002491Szelenkov@nginx.com 'Sec-WebSocket-Version': 13, 2012491Szelenkov@nginx.com } 2022491Szelenkov@nginx.com ) 2032491Szelenkov@nginx.com sock.close() 2041158Szelenkov@nginx.com 2052491Szelenkov@nginx.com assert resp['status'] == 101, 'status' 2062491Szelenkov@nginx.com 2071158Szelenkov@nginx.com 2082491Szelenkov@nginx.com@pytest.mark.skip('not yet') 2092491Szelenkov@nginx.comdef test_java_websockets_handshake_connection_absent(): # FAIL 2102491Szelenkov@nginx.com client.load('websockets_mirror') 2111158Szelenkov@nginx.com 2122491Szelenkov@nginx.com resp = client.get( 2132491Szelenkov@nginx.com headers={ 2142491Szelenkov@nginx.com 'Host': 'localhost', 2152491Szelenkov@nginx.com 'Upgrade': 'websocket', 2162491Szelenkov@nginx.com 'Sec-WebSocket-Key': ws.key(), 2172491Szelenkov@nginx.com 'Sec-WebSocket-Protocol': 'chat', 2182491Szelenkov@nginx.com 'Sec-WebSocket-Version': 13, 2192491Szelenkov@nginx.com }, 2202491Szelenkov@nginx.com ) 2211158Szelenkov@nginx.com 2222491Szelenkov@nginx.com assert resp['status'] == 400, 'status' 2232491Szelenkov@nginx.com 2241158Szelenkov@nginx.com 2252491Szelenkov@nginx.comdef test_java_websockets_handshake_version_absent(): 2262491Szelenkov@nginx.com client.load('websockets_mirror') 2271158Szelenkov@nginx.com 2282491Szelenkov@nginx.com resp = client.get( 2292491Szelenkov@nginx.com headers={ 2302491Szelenkov@nginx.com 'Host': 'localhost', 2312491Szelenkov@nginx.com 'Upgrade': 'websocket', 2322491Szelenkov@nginx.com 'Connection': 'Upgrade', 2332491Szelenkov@nginx.com 'Sec-WebSocket-Key': ws.key(), 2342491Szelenkov@nginx.com 'Sec-WebSocket-Protocol': 'chat', 2352491Szelenkov@nginx.com }, 2362491Szelenkov@nginx.com ) 2371158Szelenkov@nginx.com 2382491Szelenkov@nginx.com assert resp['status'] == 426, 'status' 2392491Szelenkov@nginx.com 2401158Szelenkov@nginx.com 2412491Szelenkov@nginx.com@pytest.mark.skip('not yet') 2422491Szelenkov@nginx.comdef test_java_websockets_handshake_key_invalid(): 2432491Szelenkov@nginx.com client.load('websockets_mirror') 2441158Szelenkov@nginx.com 2452491Szelenkov@nginx.com resp = client.get( 2462491Szelenkov@nginx.com headers={ 2472491Szelenkov@nginx.com 'Host': 'localhost', 2482491Szelenkov@nginx.com 'Upgrade': 'websocket', 2492491Szelenkov@nginx.com 'Connection': 'Upgrade', 2502491Szelenkov@nginx.com 'Sec-WebSocket-Key': '!', 2512491Szelenkov@nginx.com 'Sec-WebSocket-Protocol': 'chat', 2522491Szelenkov@nginx.com 'Sec-WebSocket-Version': 13, 2532491Szelenkov@nginx.com }, 2542491Szelenkov@nginx.com ) 2551158Szelenkov@nginx.com 2562491Szelenkov@nginx.com assert resp['status'] == 400, 'key length' 2571158Szelenkov@nginx.com 2582491Szelenkov@nginx.com key = ws.key() 2592491Szelenkov@nginx.com resp = client.get( 2602491Szelenkov@nginx.com headers={ 2612491Szelenkov@nginx.com 'Host': 'localhost', 2622491Szelenkov@nginx.com 'Upgrade': 'websocket', 2632491Szelenkov@nginx.com 'Connection': 'Upgrade', 2642491Szelenkov@nginx.com 'Sec-WebSocket-Key': [key, key], 2652491Szelenkov@nginx.com 'Sec-WebSocket-Protocol': 'chat', 2662491Szelenkov@nginx.com 'Sec-WebSocket-Version': 13, 2672491Szelenkov@nginx.com }, 2682491Szelenkov@nginx.com ) 2691158Szelenkov@nginx.com 2702491Szelenkov@nginx.com assert ( 2712491Szelenkov@nginx.com resp['status'] == 400 2722491Szelenkov@nginx.com ), 'key double' # FAIL https://tools.ietf.org/html/rfc6455#section-11.3.1 2731158Szelenkov@nginx.com 2742491Szelenkov@nginx.com 2752491Szelenkov@nginx.comdef test_java_websockets_handshake_method_invalid(): 2762491Szelenkov@nginx.com client.load('websockets_mirror') 2771158Szelenkov@nginx.com 2782491Szelenkov@nginx.com resp = client.post( 2792491Szelenkov@nginx.com headers={ 2802491Szelenkov@nginx.com 'Host': 'localhost', 2812491Szelenkov@nginx.com 'Upgrade': 'websocket', 2822491Szelenkov@nginx.com 'Connection': 'Upgrade', 2832491Szelenkov@nginx.com 'Sec-WebSocket-Key': ws.key(), 2842491Szelenkov@nginx.com 'Sec-WebSocket-Protocol': 'chat', 2852491Szelenkov@nginx.com 'Sec-WebSocket-Version': 13, 2862491Szelenkov@nginx.com }, 2872491Szelenkov@nginx.com ) 2881158Szelenkov@nginx.com 2892491Szelenkov@nginx.com assert resp['status'] == 400, 'status' 2902491Szelenkov@nginx.com 2911158Szelenkov@nginx.com 2922491Szelenkov@nginx.comdef test_java_websockets_handshake_http_10(): 2932491Szelenkov@nginx.com client.load('websockets_mirror') 2941158Szelenkov@nginx.com 2952491Szelenkov@nginx.com resp = client.get( 2962491Szelenkov@nginx.com headers={ 2972491Szelenkov@nginx.com 'Host': 'localhost', 2982491Szelenkov@nginx.com 'Upgrade': 'websocket', 2992491Szelenkov@nginx.com 'Connection': 'Upgrade', 3002491Szelenkov@nginx.com 'Sec-WebSocket-Key': ws.key(), 3012491Szelenkov@nginx.com 'Sec-WebSocket-Protocol': 'chat', 3022491Szelenkov@nginx.com 'Sec-WebSocket-Version': 13, 3032491Szelenkov@nginx.com }, 3042491Szelenkov@nginx.com http_10=True, 3052491Szelenkov@nginx.com ) 3061158Szelenkov@nginx.com 3072491Szelenkov@nginx.com assert resp['status'] == 400, 'status' 3082491Szelenkov@nginx.com 3091158Szelenkov@nginx.com 3102491Szelenkov@nginx.comdef test_java_websockets_handshake_uri_invalid(): 3112491Szelenkov@nginx.com client.load('websockets_mirror') 3121158Szelenkov@nginx.com 3132491Szelenkov@nginx.com resp = client.get( 3142491Szelenkov@nginx.com headers={ 3152491Szelenkov@nginx.com 'Host': 'localhost', 3162491Szelenkov@nginx.com 'Upgrade': 'websocket', 3172491Szelenkov@nginx.com 'Connection': 'Upgrade', 3182491Szelenkov@nginx.com 'Sec-WebSocket-Key': ws.key(), 3192491Szelenkov@nginx.com 'Sec-WebSocket-Protocol': 'chat', 3202491Szelenkov@nginx.com 'Sec-WebSocket-Version': 13, 3212491Szelenkov@nginx.com }, 3222491Szelenkov@nginx.com url='!', 3232491Szelenkov@nginx.com ) 3241158Szelenkov@nginx.com 3252491Szelenkov@nginx.com assert resp['status'] == 400, 'status' 3262491Szelenkov@nginx.com 3271158Szelenkov@nginx.com 3282491Szelenkov@nginx.comdef test_java_websockets_protocol_absent(): 3292491Szelenkov@nginx.com client.load('websockets_mirror') 3301158Szelenkov@nginx.com 3312491Szelenkov@nginx.com key = ws.key() 3322491Szelenkov@nginx.com resp, sock, _ = ws.upgrade( 3332491Szelenkov@nginx.com headers={ 3342491Szelenkov@nginx.com 'Host': 'localhost', 3352491Szelenkov@nginx.com 'Upgrade': 'websocket', 3362491Szelenkov@nginx.com 'Connection': 'Upgrade', 3372491Szelenkov@nginx.com 'Sec-WebSocket-Key': key, 3382491Szelenkov@nginx.com 'Sec-WebSocket-Version': 13, 3392491Szelenkov@nginx.com } 3402491Szelenkov@nginx.com ) 3412491Szelenkov@nginx.com sock.close() 3421158Szelenkov@nginx.com 3432491Szelenkov@nginx.com assert resp['status'] == 101, 'status' 3442491Szelenkov@nginx.com assert resp['headers']['Upgrade'] == 'websocket', 'upgrade' 3452491Szelenkov@nginx.com assert resp['headers']['Connection'] == 'Upgrade', 'connection' 3462491Szelenkov@nginx.com assert resp['headers']['Sec-WebSocket-Accept'] == ws.accept(key), 'key' 3472491Szelenkov@nginx.com 3481158Szelenkov@nginx.com 3492491Szelenkov@nginx.com# autobahn-testsuite 3502491Szelenkov@nginx.com# 3512491Szelenkov@nginx.com# Some following tests fail because of Unit does not support UTF-8 3522491Szelenkov@nginx.com# validation for websocket frames. It should be implemented 3532491Szelenkov@nginx.com# by application, if necessary. 3542491Szelenkov@nginx.com 3551158Szelenkov@nginx.com 3562491Szelenkov@nginx.comdef test_java_websockets_1_1_1__1_1_8(): 3572491Szelenkov@nginx.com client.load('websockets_mirror') 3581158Szelenkov@nginx.com 3592491Szelenkov@nginx.com opcode = ws.OP_TEXT 3601158Szelenkov@nginx.com 3612491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 3622491Szelenkov@nginx.com 3632491Szelenkov@nginx.com def check_length(length, chopsize=None): 3642491Szelenkov@nginx.com payload = '*' * length 3652491Szelenkov@nginx.com 3662491Szelenkov@nginx.com ws.frame_write(sock, opcode, payload, chopsize=chopsize) 3671158Szelenkov@nginx.com 3682491Szelenkov@nginx.com frame = ws.message_read(sock) 3692491Szelenkov@nginx.com check_frame(frame, True, opcode, payload) 3701158Szelenkov@nginx.com 3712491Szelenkov@nginx.com check_length(0) # 1_1_1 3722491Szelenkov@nginx.com check_length(125) # 1_1_2 3732491Szelenkov@nginx.com check_length(126) # 1_1_3 3742491Szelenkov@nginx.com check_length(127) # 1_1_4 3752491Szelenkov@nginx.com check_length(128) # 1_1_5 3762491Szelenkov@nginx.com check_length(65535) # 1_1_6 3772491Szelenkov@nginx.com check_length(65536) # 1_1_7 3782491Szelenkov@nginx.com check_length(65536, chopsize=997) # 1_1_8 3791158Szelenkov@nginx.com 3802491Szelenkov@nginx.com close_connection(sock) 3812491Szelenkov@nginx.com 3821158Szelenkov@nginx.com 3832491Szelenkov@nginx.comdef test_java_websockets_1_2_1__1_2_8(): 3842491Szelenkov@nginx.com client.load('websockets_mirror') 3852491Szelenkov@nginx.com 3862491Szelenkov@nginx.com opcode = ws.OP_BINARY 3872491Szelenkov@nginx.com 3882491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 3891158Szelenkov@nginx.com 3902491Szelenkov@nginx.com def check_length(length, chopsize=None): 3912491Szelenkov@nginx.com payload = b'\xfe' * length 3921158Szelenkov@nginx.com 3932491Szelenkov@nginx.com ws.frame_write(sock, opcode, payload, chopsize=chopsize) 3942491Szelenkov@nginx.com 3952491Szelenkov@nginx.com frame = ws.message_read(sock) 3962491Szelenkov@nginx.com check_frame(frame, True, opcode, payload) 3971158Szelenkov@nginx.com 3982491Szelenkov@nginx.com check_length(0) # 1_2_1 3992491Szelenkov@nginx.com check_length(125) # 1_2_2 4002491Szelenkov@nginx.com check_length(126) # 1_2_3 4012491Szelenkov@nginx.com check_length(127) # 1_2_4 4022491Szelenkov@nginx.com check_length(128) # 1_2_5 4032491Szelenkov@nginx.com check_length(65535) # 1_2_6 4042491Szelenkov@nginx.com check_length(65536) # 1_2_7 4052491Szelenkov@nginx.com check_length(65536, chopsize=997) # 1_2_8 4061158Szelenkov@nginx.com 4072491Szelenkov@nginx.com close_connection(sock) 4082491Szelenkov@nginx.com 4091158Szelenkov@nginx.com 4102491Szelenkov@nginx.comdef test_java_websockets_2_1__2_6(): 4112491Szelenkov@nginx.com client.load('websockets_mirror') 4122491Szelenkov@nginx.com 4132491Szelenkov@nginx.com op_ping = ws.OP_PING 4142491Szelenkov@nginx.com op_pong = ws.OP_PONG 4151158Szelenkov@nginx.com 4162491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 4171158Szelenkov@nginx.com 4182491Szelenkov@nginx.com def check_ping(payload, chopsize=None, decode=True): 4192491Szelenkov@nginx.com ws.frame_write(sock, op_ping, payload, chopsize=chopsize) 4202491Szelenkov@nginx.com frame = ws.frame_read(sock) 4212491Szelenkov@nginx.com 4222491Szelenkov@nginx.com check_frame(frame, True, op_pong, payload, decode=decode) 4231158Szelenkov@nginx.com 4242491Szelenkov@nginx.com check_ping('') # 2_1 4252491Szelenkov@nginx.com check_ping('Hello, world!') # 2_2 4262491Szelenkov@nginx.com check_ping(b'\x00\xff\xfe\xfd\xfc\xfb\x00\xff', decode=False) # 2_3 4272491Szelenkov@nginx.com check_ping(b'\xfe' * 125, decode=False) # 2_4 4282491Szelenkov@nginx.com check_ping(b'\xfe' * 125, chopsize=1, decode=False) # 2_6 4292491Szelenkov@nginx.com 4302491Szelenkov@nginx.com close_connection(sock) 4312491Szelenkov@nginx.com 4322491Szelenkov@nginx.com # 2_5 4331158Szelenkov@nginx.com 4342491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 4352491Szelenkov@nginx.com 4362491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, b'\xfe' * 126) 4372491Szelenkov@nginx.com check_close(sock, 1002) 4381158Szelenkov@nginx.com 4391158Szelenkov@nginx.com 4402491Szelenkov@nginx.comdef test_java_websockets_2_7__2_9(): 4412491Szelenkov@nginx.com client.load('websockets_mirror') 4422491Szelenkov@nginx.com 4432491Szelenkov@nginx.com # 2_7 4441158Szelenkov@nginx.com 4452491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 4462491Szelenkov@nginx.com 4472491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PONG, '') 4482491Szelenkov@nginx.com assert client.recvall(sock, read_timeout=0.1) == b'', '2_7' 4491158Szelenkov@nginx.com 4502491Szelenkov@nginx.com # 2_8 4512491Szelenkov@nginx.com 4522491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PONG, 'unsolicited pong payload') 4532491Szelenkov@nginx.com assert client.recvall(sock, read_timeout=0.1) == b'', '2_8' 4541158Szelenkov@nginx.com 4552491Szelenkov@nginx.com # 2_9 4562491Szelenkov@nginx.com 4572491Szelenkov@nginx.com payload = 'ping payload' 4581158Szelenkov@nginx.com 4592491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PONG, 'unsolicited pong payload') 4602491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, payload) 4611158Szelenkov@nginx.com 4622491Szelenkov@nginx.com frame = ws.frame_read(sock) 4632491Szelenkov@nginx.com check_frame(frame, True, ws.OP_PONG, payload) 4642491Szelenkov@nginx.com 4652491Szelenkov@nginx.com close_connection(sock) 4662491Szelenkov@nginx.com 4671158Szelenkov@nginx.com 4682491Szelenkov@nginx.comdef test_java_websockets_2_10__2_11(): 4692491Szelenkov@nginx.com client.load('websockets_mirror') 4702491Szelenkov@nginx.com 4712491Szelenkov@nginx.com # 2_10 4722491Szelenkov@nginx.com 4732491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 4742491Szelenkov@nginx.com 4752491Szelenkov@nginx.com for i in range(0, 10): 4762491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, f'payload-{i}') 4772491Szelenkov@nginx.com 4782491Szelenkov@nginx.com for i in range(0, 10): 4792491Szelenkov@nginx.com frame = ws.frame_read(sock) 4802491Szelenkov@nginx.com check_frame(frame, True, ws.OP_PONG, f'payload-{i}') 4812491Szelenkov@nginx.com 4822491Szelenkov@nginx.com # 2_11 4832491Szelenkov@nginx.com 4842491Szelenkov@nginx.com for i in range(0, 10): 4852491Szelenkov@nginx.com opcode = ws.OP_PING 4862491Szelenkov@nginx.com ws.frame_write(sock, opcode, f'payload-{i}', chopsize=1) 4871158Szelenkov@nginx.com 4882491Szelenkov@nginx.com for i in range(0, 10): 4892491Szelenkov@nginx.com frame = ws.frame_read(sock) 4902491Szelenkov@nginx.com check_frame(frame, True, ws.OP_PONG, f'payload-{i}') 4912491Szelenkov@nginx.com 4922491Szelenkov@nginx.com close_connection(sock) 4932491Szelenkov@nginx.com 4942491Szelenkov@nginx.com 4952491Szelenkov@nginx.com@pytest.mark.skip('not yet') 4962491Szelenkov@nginx.comdef test_java_websockets_3_1__3_7(): 4972491Szelenkov@nginx.com client.load('websockets_mirror') 4981158Szelenkov@nginx.com 4992491Szelenkov@nginx.com payload = 'Hello, world!' 5001158Szelenkov@nginx.com 5012491Szelenkov@nginx.com # 3_1 5021158Szelenkov@nginx.com 5032491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 5041158Szelenkov@nginx.com 5052491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload, rsv1=True) 5062491Szelenkov@nginx.com check_close(sock, 1002) 5072491Szelenkov@nginx.com 5082491Szelenkov@nginx.com # 3_2 5091158Szelenkov@nginx.com 5102491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 5112491Szelenkov@nginx.com 5122491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload) 5132491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload, rsv2=True) 5142491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, '') 5152491Szelenkov@nginx.com 5162491Szelenkov@nginx.com frame = ws.frame_read(sock) 5172491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 5181158Szelenkov@nginx.com 5192491Szelenkov@nginx.com check_close(sock, 1002, no_close=True) 5202491Szelenkov@nginx.com 5212491Szelenkov@nginx.com assert client.recvall(sock, read_timeout=0.1) == b'', 'empty 3_2' 5222491Szelenkov@nginx.com sock.close() 5231158Szelenkov@nginx.com 5242491Szelenkov@nginx.com # 3_3 5251158Szelenkov@nginx.com 5262491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 5272491Szelenkov@nginx.com 5282491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload) 5291158Szelenkov@nginx.com 5302491Szelenkov@nginx.com frame = ws.frame_read(sock) 5312491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 5322491Szelenkov@nginx.com 5332491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload, rsv1=True, rsv2=True) 5342491Szelenkov@nginx.com 5352491Szelenkov@nginx.com check_close(sock, 1002, no_close=True) 5362491Szelenkov@nginx.com 5372491Szelenkov@nginx.com assert client.recvall(sock, read_timeout=0.1) == b'', 'empty 3_3' 5382491Szelenkov@nginx.com sock.close() 5391158Szelenkov@nginx.com 5402491Szelenkov@nginx.com # 3_4 5412491Szelenkov@nginx.com 5422491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 5431158Szelenkov@nginx.com 5442491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload, chopsize=1) 5452491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload, rsv3=True, chopsize=1) 5462491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, '') 5472491Szelenkov@nginx.com 5482491Szelenkov@nginx.com frame = ws.frame_read(sock) 5492491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 5502491Szelenkov@nginx.com 5512491Szelenkov@nginx.com check_close(sock, 1002, no_close=True) 5521158Szelenkov@nginx.com 5532491Szelenkov@nginx.com assert client.recvall(sock, read_timeout=0.1) == b'', 'empty 3_4' 5542491Szelenkov@nginx.com sock.close() 5552491Szelenkov@nginx.com 5562491Szelenkov@nginx.com # 3_5 5572491Szelenkov@nginx.com 5582491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 5591819Smax.romanov@nginx.com 5602491Szelenkov@nginx.com ws.frame_write( 5612491Szelenkov@nginx.com sock, 5622491Szelenkov@nginx.com ws.OP_BINARY, 5632491Szelenkov@nginx.com b'\x00\xff\xfe\xfd\xfc\xfb\x00\xff', 5642491Szelenkov@nginx.com rsv1=True, 5652491Szelenkov@nginx.com rsv3=True, 5662491Szelenkov@nginx.com ) 5671819Smax.romanov@nginx.com 5682491Szelenkov@nginx.com check_close(sock, 1002) 5692491Szelenkov@nginx.com 5702491Szelenkov@nginx.com # 3_6 5712491Szelenkov@nginx.com 5722491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 5731819Smax.romanov@nginx.com 5742491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, payload, rsv2=True, rsv3=True) 5752491Szelenkov@nginx.com 5762491Szelenkov@nginx.com check_close(sock, 1002) 5771158Szelenkov@nginx.com 5782491Szelenkov@nginx.com # 3_7 5791158Szelenkov@nginx.com 5802491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 5812491Szelenkov@nginx.com 5822491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, payload, rsv1=True, rsv2=True, rsv3=True) 5831158Szelenkov@nginx.com 5842491Szelenkov@nginx.com check_close(sock, 1002) 5852491Szelenkov@nginx.com 5862491Szelenkov@nginx.com 5872491Szelenkov@nginx.comdef test_java_websockets_4_1_1__4_2_5(): 5882491Szelenkov@nginx.com client.load('websockets_mirror') 5891158Szelenkov@nginx.com 5902491Szelenkov@nginx.com payload = 'Hello, world!' 5912491Szelenkov@nginx.com 5922491Szelenkov@nginx.com # 4_1_1 5932491Szelenkov@nginx.com 5942491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 5951158Szelenkov@nginx.com 5962491Szelenkov@nginx.com ws.frame_write(sock, 0x03, '') 5972491Szelenkov@nginx.com check_close(sock, 1002) 5982491Szelenkov@nginx.com 5992491Szelenkov@nginx.com # 4_1_2 6002491Szelenkov@nginx.com 6012491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 6022491Szelenkov@nginx.com 6032491Szelenkov@nginx.com ws.frame_write(sock, 0x04, 'reserved opcode payload') 6042491Szelenkov@nginx.com check_close(sock, 1002) 6051158Szelenkov@nginx.com 6062491Szelenkov@nginx.com # 4_1_3 6072491Szelenkov@nginx.com 6082491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 6092491Szelenkov@nginx.com 6102491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload) 6111158Szelenkov@nginx.com 6122491Szelenkov@nginx.com frame = ws.frame_read(sock) 6132491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 6141158Szelenkov@nginx.com 6152491Szelenkov@nginx.com ws.frame_write(sock, 0x05, '') 6162491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, '') 6171158Szelenkov@nginx.com 6182491Szelenkov@nginx.com check_close(sock, 1002) 6192491Szelenkov@nginx.com 6202491Szelenkov@nginx.com # 4_1_4 6211158Szelenkov@nginx.com 6222491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 6232491Szelenkov@nginx.com 6242491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload) 6252491Szelenkov@nginx.com 6262491Szelenkov@nginx.com frame = ws.frame_read(sock) 6272491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 6281158Szelenkov@nginx.com 6292491Szelenkov@nginx.com ws.frame_write(sock, 0x06, payload) 6302491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, '') 6312491Szelenkov@nginx.com 6322491Szelenkov@nginx.com check_close(sock, 1002) 6331158Szelenkov@nginx.com 6342491Szelenkov@nginx.com # 4_1_5 6351158Szelenkov@nginx.com 6362491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 6372491Szelenkov@nginx.com 6382491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload, chopsize=1) 6391158Szelenkov@nginx.com 6402491Szelenkov@nginx.com frame = ws.frame_read(sock) 6412491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 6422491Szelenkov@nginx.com 6432491Szelenkov@nginx.com ws.frame_write(sock, 0x07, payload, chopsize=1) 6442491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, '') 6452491Szelenkov@nginx.com 6462491Szelenkov@nginx.com check_close(sock, 1002) 6471158Szelenkov@nginx.com 6482491Szelenkov@nginx.com # 4_2_1 6492491Szelenkov@nginx.com 6502491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 6511158Szelenkov@nginx.com 6522491Szelenkov@nginx.com ws.frame_write(sock, 0x0B, '') 6532491Szelenkov@nginx.com check_close(sock, 1002) 6542491Szelenkov@nginx.com 6552491Szelenkov@nginx.com # 4_2_2 6562491Szelenkov@nginx.com 6572491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 6581158Szelenkov@nginx.com 6592491Szelenkov@nginx.com ws.frame_write(sock, 0x0C, 'reserved opcode payload') 6602491Szelenkov@nginx.com check_close(sock, 1002) 6611158Szelenkov@nginx.com 6622491Szelenkov@nginx.com # 4_2_3 6632491Szelenkov@nginx.com 6642491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 6652491Szelenkov@nginx.com 6662491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload) 6671158Szelenkov@nginx.com 6682491Szelenkov@nginx.com frame = ws.frame_read(sock) 6692491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 6702491Szelenkov@nginx.com 6712491Szelenkov@nginx.com ws.frame_write(sock, 0x0D, '') 6722491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, '') 6731158Szelenkov@nginx.com 6742491Szelenkov@nginx.com check_close(sock, 1002) 6752491Szelenkov@nginx.com 6762491Szelenkov@nginx.com # 4_2_4 6771158Szelenkov@nginx.com 6782491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 6792491Szelenkov@nginx.com 6802491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload) 6811158Szelenkov@nginx.com 6822491Szelenkov@nginx.com frame = ws.frame_read(sock) 6832491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 6842491Szelenkov@nginx.com 6852491Szelenkov@nginx.com ws.frame_write(sock, 0x0E, payload) 6862491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, '') 6872491Szelenkov@nginx.com 6882491Szelenkov@nginx.com check_close(sock, 1002) 6892491Szelenkov@nginx.com 6902491Szelenkov@nginx.com # 4_2_5 6911158Szelenkov@nginx.com 6922491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 6932491Szelenkov@nginx.com 6942491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload, chopsize=1) 6951158Szelenkov@nginx.com 6962491Szelenkov@nginx.com frame = ws.frame_read(sock) 6972491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 6982491Szelenkov@nginx.com 6992491Szelenkov@nginx.com ws.frame_write(sock, 0x0F, payload, chopsize=1) 7002491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, '') 7012491Szelenkov@nginx.com 7022491Szelenkov@nginx.com check_close(sock, 1002) 7032491Szelenkov@nginx.com 7041158Szelenkov@nginx.com 7052491Szelenkov@nginx.comdef test_java_websockets_5_1__5_20(): 7062491Szelenkov@nginx.com client.load('websockets_mirror') 7072491Szelenkov@nginx.com 7082491Szelenkov@nginx.com # 5_1 7091158Szelenkov@nginx.com 7102491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 7112491Szelenkov@nginx.com 7122491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, 'fragment1', fin=False) 7132491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment2', fin=True) 7142491Szelenkov@nginx.com check_close(sock, 1002) 7151158Szelenkov@nginx.com 7162491Szelenkov@nginx.com # 5_2 7171158Szelenkov@nginx.com 7182491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 7191158Szelenkov@nginx.com 7202491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PONG, 'fragment1', fin=False) 7212491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment2', fin=True) 7222491Szelenkov@nginx.com check_close(sock, 1002) 7231158Szelenkov@nginx.com 7242491Szelenkov@nginx.com # 5_3 7252491Szelenkov@nginx.com 7262491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 7271158Szelenkov@nginx.com 7282491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment1', fin=False) 7292491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment2', fin=True) 7301158Szelenkov@nginx.com 7312491Szelenkov@nginx.com frame = ws.frame_read(sock) 7322491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, 'fragment1fragment2') 7332491Szelenkov@nginx.com 7342491Szelenkov@nginx.com # 5_4 7351158Szelenkov@nginx.com 7362491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment1', fin=False) 7372491Szelenkov@nginx.com assert client.recvall(sock, read_timeout=0.1) == b'', '5_4' 7382491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment2', fin=True) 7391158Szelenkov@nginx.com 7402491Szelenkov@nginx.com frame = ws.frame_read(sock) 7412491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, 'fragment1fragment2') 7421158Szelenkov@nginx.com 7432491Szelenkov@nginx.com # 5_5 7442491Szelenkov@nginx.com 7452491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment1', fin=False, chopsize=1) 7462491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment2', fin=True, chopsize=1) 7471158Szelenkov@nginx.com 7482491Szelenkov@nginx.com frame = ws.frame_read(sock) 7492491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, 'fragment1fragment2') 7502491Szelenkov@nginx.com 7512491Szelenkov@nginx.com # 5_6 7522491Szelenkov@nginx.com 7532491Szelenkov@nginx.com ping_payload = 'ping payload' 7541158Szelenkov@nginx.com 7552491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment1', fin=False) 7562491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, ping_payload) 7572491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment2', fin=True) 7582491Szelenkov@nginx.com 7592491Szelenkov@nginx.com frame = ws.frame_read(sock) 7602491Szelenkov@nginx.com check_frame(frame, True, ws.OP_PONG, ping_payload) 7611158Szelenkov@nginx.com 7622491Szelenkov@nginx.com frame = ws.frame_read(sock) 7632491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, 'fragment1fragment2') 7641158Szelenkov@nginx.com 7652491Szelenkov@nginx.com # 5_7 7661158Szelenkov@nginx.com 7672491Szelenkov@nginx.com ping_payload = 'ping payload' 7681158Szelenkov@nginx.com 7692491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment1', fin=False) 7702491Szelenkov@nginx.com assert client.recvall(sock, read_timeout=0.1) == b'', '5_7' 7712491Szelenkov@nginx.com 7722491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, ping_payload) 7731158Szelenkov@nginx.com 7742491Szelenkov@nginx.com frame = ws.frame_read(sock) 7752491Szelenkov@nginx.com check_frame(frame, True, ws.OP_PONG, ping_payload) 7762491Szelenkov@nginx.com 7772491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment2', fin=True) 7781158Szelenkov@nginx.com 7792491Szelenkov@nginx.com frame = ws.frame_read(sock) 7802491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, 'fragment1fragment2') 7812491Szelenkov@nginx.com 7822491Szelenkov@nginx.com # 5_8 7831158Szelenkov@nginx.com 7842491Szelenkov@nginx.com ping_payload = 'ping payload' 7851158Szelenkov@nginx.com 7862491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment1', fin=False, chopsize=1) 7872491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, ping_payload, chopsize=1) 7882491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment2', fin=True, chopsize=1) 7891158Szelenkov@nginx.com 7902491Szelenkov@nginx.com frame = ws.frame_read(sock) 7912491Szelenkov@nginx.com check_frame(frame, True, ws.OP_PONG, ping_payload) 7921158Szelenkov@nginx.com 7932491Szelenkov@nginx.com frame = ws.frame_read(sock) 7942491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, 'fragment1fragment2') 7951158Szelenkov@nginx.com 7962491Szelenkov@nginx.com # 5_9 7971158Szelenkov@nginx.com 7982491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'non-continuation payload', fin=True) 7992491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'Hello, world!', fin=True) 8002491Szelenkov@nginx.com check_close(sock, 1002) 8012491Szelenkov@nginx.com 8022491Szelenkov@nginx.com # 5_10 8031158Szelenkov@nginx.com 8042491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 8051158Szelenkov@nginx.com 8062491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'non-continuation payload', fin=True) 8072491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'Hello, world!', fin=True) 8082491Szelenkov@nginx.com check_close(sock, 1002) 8092491Szelenkov@nginx.com 8102491Szelenkov@nginx.com # 5_11 8111158Szelenkov@nginx.com 8122491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 8132491Szelenkov@nginx.com 8142491Szelenkov@nginx.com ws.frame_write( 8152491Szelenkov@nginx.com sock, 8162491Szelenkov@nginx.com ws.OP_CONT, 8172491Szelenkov@nginx.com 'non-continuation payload', 8182491Szelenkov@nginx.com fin=True, 8192491Szelenkov@nginx.com chopsize=1, 8202491Szelenkov@nginx.com ) 8212491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'Hello, world!', fin=True, chopsize=1) 8222491Szelenkov@nginx.com check_close(sock, 1002) 8232491Szelenkov@nginx.com 8242491Szelenkov@nginx.com # 5_12 8252491Szelenkov@nginx.com 8262491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 8272491Szelenkov@nginx.com 8282491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'non-continuation payload', fin=False) 8292491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'Hello, world!', fin=True) 8302491Szelenkov@nginx.com check_close(sock, 1002) 8311158Szelenkov@nginx.com 8322491Szelenkov@nginx.com # 5_13 8332491Szelenkov@nginx.com 8342491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 8352491Szelenkov@nginx.com 8362491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'non-continuation payload', fin=False) 8372491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'Hello, world!', fin=True) 8382491Szelenkov@nginx.com check_close(sock, 1002) 8392491Szelenkov@nginx.com 8402491Szelenkov@nginx.com # 5_14 8412491Szelenkov@nginx.com 8422491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 8432491Szelenkov@nginx.com 8442491Szelenkov@nginx.com ws.frame_write( 8452491Szelenkov@nginx.com sock, 8462491Szelenkov@nginx.com ws.OP_CONT, 8472491Szelenkov@nginx.com 'non-continuation payload', 8482491Szelenkov@nginx.com fin=False, 8492491Szelenkov@nginx.com chopsize=1, 8502491Szelenkov@nginx.com ) 8512491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'Hello, world!', fin=True, chopsize=1) 8522491Szelenkov@nginx.com check_close(sock, 1002) 8531158Szelenkov@nginx.com 8542491Szelenkov@nginx.com # 5_15 8552491Szelenkov@nginx.com 8562491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 8571158Szelenkov@nginx.com 8582491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment1', fin=False) 8592491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment2', fin=True) 8602491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment3', fin=False) 8612491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment4', fin=True) 8621158Szelenkov@nginx.com 8632491Szelenkov@nginx.com frame = ws.frame_read(sock) 8642491Szelenkov@nginx.com 8652491Szelenkov@nginx.com if frame['opcode'] == ws.OP_TEXT: 8662491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, 'fragment1fragment2') 8672491Szelenkov@nginx.com frame = None 8681158Szelenkov@nginx.com 8692491Szelenkov@nginx.com check_close(sock, 1002, frame=frame) 8701158Szelenkov@nginx.com 8712491Szelenkov@nginx.com # 5_16 8722491Szelenkov@nginx.com 8732491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 8741158Szelenkov@nginx.com 8752491Szelenkov@nginx.com for _ in range(0, 2): 8762491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment1', fin=False) 8772491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment2', fin=False) 8782491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment3', fin=True) 8792491Szelenkov@nginx.com check_close(sock, 1002) 8801158Szelenkov@nginx.com 8812491Szelenkov@nginx.com # 5_17 8821158Szelenkov@nginx.com 8832491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 8841158Szelenkov@nginx.com 8852491Szelenkov@nginx.com for _ in range(0, 2): 8862491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment1', fin=True) 8872491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment2', fin=False) 8882491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment3', fin=True) 8892491Szelenkov@nginx.com check_close(sock, 1002) 8901158Szelenkov@nginx.com 8912491Szelenkov@nginx.com # 5_18 8922491Szelenkov@nginx.com 8932491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 8941158Szelenkov@nginx.com 8952491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment1', fin=False) 8962491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment2') 8972491Szelenkov@nginx.com check_close(sock, 1002) 8981158Szelenkov@nginx.com 8992491Szelenkov@nginx.com # 5_19 9002491Szelenkov@nginx.com 9012491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 9021158Szelenkov@nginx.com 9032491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment1', fin=False) 9042491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment2', fin=False) 9052491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, 'pongme 1!') 9061158Szelenkov@nginx.com 9072491Szelenkov@nginx.com time.sleep(1) 9081158Szelenkov@nginx.com 9092491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment3', fin=False) 9102491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment4', fin=False) 9112491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, 'pongme 2!') 9122491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment5') 9131158Szelenkov@nginx.com 9142491Szelenkov@nginx.com frame = ws.frame_read(sock) 9152491Szelenkov@nginx.com check_frame(frame, True, ws.OP_PONG, 'pongme 1!') 9161158Szelenkov@nginx.com 9172491Szelenkov@nginx.com frame = ws.frame_read(sock) 9182491Szelenkov@nginx.com check_frame(frame, True, ws.OP_PONG, 'pongme 2!') 9191158Szelenkov@nginx.com 9202491Szelenkov@nginx.com check_frame( 9212491Szelenkov@nginx.com ws.frame_read(sock), 9222491Szelenkov@nginx.com True, 9232491Szelenkov@nginx.com ws.OP_TEXT, 9242491Szelenkov@nginx.com 'fragment1fragment2fragment3fragment4fragment5', 9252491Szelenkov@nginx.com ) 9261158Szelenkov@nginx.com 9272491Szelenkov@nginx.com # 5_20 9281158Szelenkov@nginx.com 9292491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment1', fin=False) 9302491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment2', fin=False) 9312491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, 'pongme 1!') 9321158Szelenkov@nginx.com 9332491Szelenkov@nginx.com frame = ws.frame_read(sock) 9342491Szelenkov@nginx.com check_frame(frame, True, ws.OP_PONG, 'pongme 1!') 9352491Szelenkov@nginx.com 9362491Szelenkov@nginx.com time.sleep(1) 9371158Szelenkov@nginx.com 9382491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment3', fin=False) 9392491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment4', fin=False) 9402491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, 'pongme 2!') 9412491Szelenkov@nginx.com 9422491Szelenkov@nginx.com frame = ws.frame_read(sock) 9432491Szelenkov@nginx.com check_frame(frame, True, ws.OP_PONG, 'pongme 2!') 9442491Szelenkov@nginx.com 9452491Szelenkov@nginx.com assert client.recvall(sock, read_timeout=0.1) == b'', '5_20' 9462491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment5') 9471158Szelenkov@nginx.com 9482491Szelenkov@nginx.com check_frame( 9492491Szelenkov@nginx.com ws.frame_read(sock), 9502491Szelenkov@nginx.com True, 9512491Szelenkov@nginx.com ws.OP_TEXT, 9522491Szelenkov@nginx.com 'fragment1fragment2fragment3fragment4fragment5', 9532491Szelenkov@nginx.com ) 9541158Szelenkov@nginx.com 9552491Szelenkov@nginx.com close_connection(sock) 9561158Szelenkov@nginx.com 9571158Szelenkov@nginx.com 9582491Szelenkov@nginx.comdef test_java_websockets_6_1_1__6_4_4(): 9592491Szelenkov@nginx.com client.load('websockets_mirror') 9602491Szelenkov@nginx.com 9612491Szelenkov@nginx.com # 6_1_1 9621158Szelenkov@nginx.com 9632491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 9642491Szelenkov@nginx.com 9652491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, '') 9662491Szelenkov@nginx.com frame = ws.frame_read(sock, read_timeout=3) 9672491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, '') 9681158Szelenkov@nginx.com 9692491Szelenkov@nginx.com # 6_1_2 9702491Szelenkov@nginx.com 9712491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, '', fin=False) 9722491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, '', fin=False) 9732491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, '') 9741158Szelenkov@nginx.com 9752491Szelenkov@nginx.com frame = ws.frame_read(sock, read_timeout=3) 9762491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, '') 9771158Szelenkov@nginx.com 9782491Szelenkov@nginx.com # 6_1_3 9791158Szelenkov@nginx.com 9802491Szelenkov@nginx.com payload = 'middle frame payload' 9811158Szelenkov@nginx.com 9822491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, '', fin=False) 9832491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, payload, fin=False) 9842491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, '') 9851158Szelenkov@nginx.com 9862491Szelenkov@nginx.com frame = ws.frame_read(sock) 9872491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 9881158Szelenkov@nginx.com 9892491Szelenkov@nginx.com # 6_2_1 9901158Szelenkov@nginx.com 9912491Szelenkov@nginx.com payload = 'Hello-µ@ßöäüàá-UTF-8!!' 9922491Szelenkov@nginx.com 9932491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload) 9941158Szelenkov@nginx.com 9952491Szelenkov@nginx.com frame = ws.frame_read(sock) 9962491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 9971158Szelenkov@nginx.com 9982491Szelenkov@nginx.com # 6_2_2 9992491Szelenkov@nginx.com 10002491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload[:12], fin=False) 10012491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, payload[12:]) 10021158Szelenkov@nginx.com 10032491Szelenkov@nginx.com frame = ws.frame_read(sock) 10042491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 10052491Szelenkov@nginx.com 10062491Szelenkov@nginx.com # 6_2_3 10071158Szelenkov@nginx.com 10082491Szelenkov@nginx.com ws.message(sock, ws.OP_TEXT, payload, fragmention_size=1) 10091158Szelenkov@nginx.com 10102491Szelenkov@nginx.com frame = ws.frame_read(sock) 10112491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 10121158Szelenkov@nginx.com 10132491Szelenkov@nginx.com # 6_2_4 10142491Szelenkov@nginx.com 10152491Szelenkov@nginx.com payload = '\xce\xba\xe1\xbd\xb9\xcf\x83\xce\xbc\xce\xb5' 10162491Szelenkov@nginx.com 10172491Szelenkov@nginx.com ws.message(sock, ws.OP_TEXT, payload, fragmention_size=1) 10181158Szelenkov@nginx.com 10192491Szelenkov@nginx.com frame = ws.frame_read(sock) 10202491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 10211158Szelenkov@nginx.com 10222491Szelenkov@nginx.com close_connection(sock) 10232491Szelenkov@nginx.com 10241158Szelenkov@nginx.com 10252491Szelenkov@nginx.com# Unit does not support UTF-8 validation 10262491Szelenkov@nginx.com# 10272491Szelenkov@nginx.com# # 6_3_1 FAIL 10282491Szelenkov@nginx.com# 10292491Szelenkov@nginx.com# payload_1 = '\xce\xba\xe1\xbd\xb9\xcf\x83\xce\xbc\xce\xb5' 10302491Szelenkov@nginx.com# payload_2 = '\xed\xa0\x80' 10312491Szelenkov@nginx.com# payload_3 = '\x65\x64\x69\x74\x65\x64' 10322491Szelenkov@nginx.com# 10332491Szelenkov@nginx.com# payload = payload_1 + payload_2 + payload_3 10342491Szelenkov@nginx.com# 10352491Szelenkov@nginx.com# ws.message(sock, ws.OP_TEXT, payload) 10362491Szelenkov@nginx.com# check_close(sock, 1007) 10372491Szelenkov@nginx.com# 10382491Szelenkov@nginx.com# # 6_3_2 FAIL 10392491Szelenkov@nginx.com# 10402491Szelenkov@nginx.com# _, sock, _ = ws.upgrade() 10412491Szelenkov@nginx.com# 10422491Szelenkov@nginx.com# ws.message(sock, ws.OP_TEXT, payload, fragmention_size=1) 10432491Szelenkov@nginx.com# check_close(sock, 1007) 10442491Szelenkov@nginx.com# 10452491Szelenkov@nginx.com# # 6_4_1 ... 6_4_4 FAIL 10461158Szelenkov@nginx.com 10471158Szelenkov@nginx.com 10482491Szelenkov@nginx.comdef test_java_websockets_7_1_1__7_5_1(): 10492491Szelenkov@nginx.com client.load('websockets_mirror') 10502491Szelenkov@nginx.com 10512491Szelenkov@nginx.com # 7_1_1 10522491Szelenkov@nginx.com 10532491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 10542491Szelenkov@nginx.com 10552491Szelenkov@nginx.com payload = "Hello World!" 10562491Szelenkov@nginx.com 10572491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload) 10581158Szelenkov@nginx.com 10592491Szelenkov@nginx.com frame = ws.frame_read(sock) 10602491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 10612491Szelenkov@nginx.com 10622491Szelenkov@nginx.com close_connection(sock) 10631158Szelenkov@nginx.com 10642491Szelenkov@nginx.com # 7_1_2 10652491Szelenkov@nginx.com 10662491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 10672491Szelenkov@nginx.com 10682491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, ws.serialize_close()) 10692491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, ws.serialize_close()) 10701158Szelenkov@nginx.com 10712491Szelenkov@nginx.com check_close(sock) 10722491Szelenkov@nginx.com 10732491Szelenkov@nginx.com # 7_1_3 10742491Szelenkov@nginx.com 10752491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 10762491Szelenkov@nginx.com 10772491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, ws.serialize_close()) 10782491Szelenkov@nginx.com check_close(sock, no_close=True) 10792491Szelenkov@nginx.com 10802491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, '') 10812491Szelenkov@nginx.com assert client.recvall(sock, read_timeout=0.1) == b'', 'empty soc' 10822491Szelenkov@nginx.com 10832491Szelenkov@nginx.com sock.close() 10842491Szelenkov@nginx.com 10852491Szelenkov@nginx.com # 7_1_4 10862491Szelenkov@nginx.com 10872491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 10882491Szelenkov@nginx.com 10892491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, ws.serialize_close()) 10902491Szelenkov@nginx.com check_close(sock, no_close=True) 10911158Szelenkov@nginx.com 10922491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload) 10932491Szelenkov@nginx.com assert client.recvall(sock, read_timeout=0.1) == b'', 'empty soc' 10941158Szelenkov@nginx.com 10952491Szelenkov@nginx.com sock.close() 10962491Szelenkov@nginx.com 10972491Szelenkov@nginx.com # 7_1_5 10982491Szelenkov@nginx.com 10992491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 11001158Szelenkov@nginx.com 11012491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'fragment1', fin=False) 11022491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, ws.serialize_close()) 11032491Szelenkov@nginx.com check_close(sock, no_close=True) 11041158Szelenkov@nginx.com 11052491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CONT, 'fragment2') 11062491Szelenkov@nginx.com assert client.recvall(sock, read_timeout=0.1) == b'', 'empty soc' 11072491Szelenkov@nginx.com 11082491Szelenkov@nginx.com sock.close() 11092491Szelenkov@nginx.com 11102491Szelenkov@nginx.com # 7_1_6 11112491Szelenkov@nginx.com 11122491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 11131158Szelenkov@nginx.com 11142491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, 'BAsd7&jh23' * 26 * 2**10) 11152491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_TEXT, payload) 11162491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, ws.serialize_close()) 11171158Szelenkov@nginx.com 11182491Szelenkov@nginx.com client.recvall(sock, read_timeout=1) 11192491Szelenkov@nginx.com 11202491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_PING, '') 11212491Szelenkov@nginx.com assert client.recvall(sock, read_timeout=0.1) == b'', 'empty soc' 11221158Szelenkov@nginx.com 11232491Szelenkov@nginx.com sock.close() 11242491Szelenkov@nginx.com 11252491Szelenkov@nginx.com # 7_3_1 11261158Szelenkov@nginx.com 11272491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 11281158Szelenkov@nginx.com 11292491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, '') 11302491Szelenkov@nginx.com check_close(sock) 11312491Szelenkov@nginx.com 11322491Szelenkov@nginx.com # 7_3_2 11331158Szelenkov@nginx.com 11342491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 11351158Szelenkov@nginx.com 11362491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, 'a') 11372491Szelenkov@nginx.com check_close(sock, 1002) 11382491Szelenkov@nginx.com 11392491Szelenkov@nginx.com # 7_3_3 11402491Szelenkov@nginx.com 11412491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 11421158Szelenkov@nginx.com 11432491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, ws.serialize_close()) 11442491Szelenkov@nginx.com check_close(sock) 11452491Szelenkov@nginx.com 11462491Szelenkov@nginx.com # 7_3_4 11472491Szelenkov@nginx.com 11482491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 11491158Szelenkov@nginx.com 11502491Szelenkov@nginx.com payload = ws.serialize_close(reason='Hello World!') 11511158Szelenkov@nginx.com 11522491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, payload) 11532491Szelenkov@nginx.com check_close(sock) 11541158Szelenkov@nginx.com 11552491Szelenkov@nginx.com # 7_3_5 11561158Szelenkov@nginx.com 11572491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 11582491Szelenkov@nginx.com 11592491Szelenkov@nginx.com payload = ws.serialize_close(reason='*' * 123) 11601158Szelenkov@nginx.com 11612491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, payload) 11622491Szelenkov@nginx.com check_close(sock) 11631158Szelenkov@nginx.com 11642491Szelenkov@nginx.com # 7_3_6 11652491Szelenkov@nginx.com 11662491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 11672491Szelenkov@nginx.com 11682491Szelenkov@nginx.com payload = ws.serialize_close(reason='*' * 124) 11691158Szelenkov@nginx.com 11702491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, payload) 11712491Szelenkov@nginx.com check_close(sock, 1002) 11722491Szelenkov@nginx.com 11731158Szelenkov@nginx.com 11742491Szelenkov@nginx.com# # 7_5_1 FAIL Unit does not support UTF-8 validation 11752491Szelenkov@nginx.com# 11762491Szelenkov@nginx.com# _, sock, _ = ws.upgrade() 11772491Szelenkov@nginx.com# 11782491Szelenkov@nginx.com# payload = ws.serialize_close(reason = '\xce\xba\xe1\xbd\xb9\xcf' \ 11792491Szelenkov@nginx.com# '\x83\xce\xbc\xce\xb5\xed\xa0\x80\x65\x64\x69\x74\x65\x64') 11802491Szelenkov@nginx.com# 11812491Szelenkov@nginx.com# ws.frame_write(sock, ws.OP_CLOSE, payload) 11822491Szelenkov@nginx.com# check_close(sock, 1007) 11831158Szelenkov@nginx.com 11842491Szelenkov@nginx.com 11852491Szelenkov@nginx.comdef test_java_websockets_7_7_X__7_9_X(): 11862491Szelenkov@nginx.com client.load('websockets_mirror') 11871158Szelenkov@nginx.com 11882491Szelenkov@nginx.com valid_codes = [ 11892491Szelenkov@nginx.com 1000, 11902491Szelenkov@nginx.com 1001, 11912491Szelenkov@nginx.com 1002, 11922491Szelenkov@nginx.com 1003, 11932491Szelenkov@nginx.com 1007, 11942491Szelenkov@nginx.com 1008, 11952491Szelenkov@nginx.com 1009, 11962491Szelenkov@nginx.com 1010, 11972491Szelenkov@nginx.com 1011, 11982491Szelenkov@nginx.com 3000, 11992491Szelenkov@nginx.com 3999, 12002491Szelenkov@nginx.com 4000, 12012491Szelenkov@nginx.com 4999, 12022491Szelenkov@nginx.com ] 12031158Szelenkov@nginx.com 12042491Szelenkov@nginx.com invalid_codes = [0, 999, 1004, 1005, 1006, 1016, 1100, 2000, 2999] 12052491Szelenkov@nginx.com 12062491Szelenkov@nginx.com for code in valid_codes: 12072491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 12082491Szelenkov@nginx.com 12092491Szelenkov@nginx.com payload = ws.serialize_close(code=code) 12102491Szelenkov@nginx.com 12112491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, payload) 12122491Szelenkov@nginx.com check_close(sock, code=code) 12131158Szelenkov@nginx.com 12142491Szelenkov@nginx.com for code in invalid_codes: 12152491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 12162491Szelenkov@nginx.com 12172491Szelenkov@nginx.com payload = ws.serialize_close(code=code) 12182491Szelenkov@nginx.com 12192491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, payload) 12202491Szelenkov@nginx.com check_close(sock, 1002) 12212491Szelenkov@nginx.com 12222491Szelenkov@nginx.com 12232491Szelenkov@nginx.comdef test_java_websockets_7_13_1__7_13_2(): 12242491Szelenkov@nginx.com client.load('websockets_mirror') 12252491Szelenkov@nginx.com 12262491Szelenkov@nginx.com # 7_13_1 12271158Szelenkov@nginx.com 12282491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 12292491Szelenkov@nginx.com 12302491Szelenkov@nginx.com payload = ws.serialize_close(code=5000) 12312491Szelenkov@nginx.com 12322491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, payload) 12332491Szelenkov@nginx.com check_close(sock, 1002) 12341158Szelenkov@nginx.com 12352491Szelenkov@nginx.com # 7_13_2 12362491Szelenkov@nginx.com 12372491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 12382491Szelenkov@nginx.com 12392491Szelenkov@nginx.com payload = struct.pack('!I', 65536) + ''.encode('utf-8') 12402491Szelenkov@nginx.com 12412491Szelenkov@nginx.com ws.frame_write(sock, ws.OP_CLOSE, payload) 12422491Szelenkov@nginx.com check_close(sock, 1002) 12431158Szelenkov@nginx.com 12442491Szelenkov@nginx.com 12452491Szelenkov@nginx.comdef test_java_websockets_9_1_1__9_6_6(is_unsafe, system): 12462491Szelenkov@nginx.com if not is_unsafe: 12472491Szelenkov@nginx.com pytest.skip('unsafe, long run') 12482491Szelenkov@nginx.com 12492491Szelenkov@nginx.com client.load('websockets_mirror') 12502491Szelenkov@nginx.com 12512491Szelenkov@nginx.com assert 'success' in client.conf( 12522491Szelenkov@nginx.com { 12532491Szelenkov@nginx.com 'http': { 12542491Szelenkov@nginx.com 'websocket': { 12552491Szelenkov@nginx.com 'max_frame_size': 33554432, 12562491Szelenkov@nginx.com 'keepalive_interval': 0, 12572491Szelenkov@nginx.com } 12582491Szelenkov@nginx.com } 12592491Szelenkov@nginx.com }, 12602491Szelenkov@nginx.com 'settings', 12612491Szelenkov@nginx.com ), 'increase max_frame_size and keepalive_interval' 12621158Szelenkov@nginx.com 12632491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 12642491Szelenkov@nginx.com 12652491Szelenkov@nginx.com op_text = ws.OP_TEXT 12662491Szelenkov@nginx.com op_binary = ws.OP_BINARY 12671158Szelenkov@nginx.com 12682491Szelenkov@nginx.com def check_payload(opcode, length, chopsize=None): 12692491Szelenkov@nginx.com if opcode == ws.OP_TEXT: 12702491Szelenkov@nginx.com payload = '*' * length 12712491Szelenkov@nginx.com else: 12722491Szelenkov@nginx.com payload = b'*' * length 12732491Szelenkov@nginx.com 12742491Szelenkov@nginx.com ws.frame_write(sock, opcode, payload, chopsize=chopsize) 12752491Szelenkov@nginx.com frame = ws.frame_read(sock) 12762491Szelenkov@nginx.com check_frame(frame, True, opcode, payload) 12772491Szelenkov@nginx.com 12782491Szelenkov@nginx.com def check_message(opcode, f_size): 12792491Szelenkov@nginx.com if opcode == ws.OP_TEXT: 12802491Szelenkov@nginx.com payload = '*' * 4 * 2**20 12812491Szelenkov@nginx.com else: 12822491Szelenkov@nginx.com payload = b'*' * 4 * 2**20 12831158Szelenkov@nginx.com 12842491Szelenkov@nginx.com ws.message(sock, opcode, payload, fragmention_size=f_size) 12852491Szelenkov@nginx.com frame = ws.frame_read(sock, read_timeout=5) 12862491Szelenkov@nginx.com check_frame(frame, True, opcode, payload) 12871158Szelenkov@nginx.com 12882491Szelenkov@nginx.com check_payload(op_text, 64 * 2**10) # 9_1_1 12892491Szelenkov@nginx.com check_payload(op_text, 256 * 2**10) # 9_1_2 12902491Szelenkov@nginx.com check_payload(op_text, 2**20) # 9_1_3 12912491Szelenkov@nginx.com check_payload(op_text, 4 * 2**20) # 9_1_4 12922491Szelenkov@nginx.com check_payload(op_text, 8 * 2**20) # 9_1_5 12932491Szelenkov@nginx.com check_payload(op_text, 16 * 2**20) # 9_1_6 12942491Szelenkov@nginx.com 12952491Szelenkov@nginx.com check_payload(op_binary, 64 * 2**10) # 9_2_1 12962491Szelenkov@nginx.com check_payload(op_binary, 256 * 2**10) # 9_2_2 12972491Szelenkov@nginx.com check_payload(op_binary, 2**20) # 9_2_3 12982491Szelenkov@nginx.com check_payload(op_binary, 4 * 2**20) # 9_2_4 12992491Szelenkov@nginx.com check_payload(op_binary, 8 * 2**20) # 9_2_5 13002491Szelenkov@nginx.com check_payload(op_binary, 16 * 2**20) # 9_2_6 13011158Szelenkov@nginx.com 13022491Szelenkov@nginx.com if system not in ['Darwin', 'FreeBSD']: 13032491Szelenkov@nginx.com check_message(op_text, 64) # 9_3_1 13042491Szelenkov@nginx.com check_message(op_text, 256) # 9_3_2 13052491Szelenkov@nginx.com check_message(op_text, 2**10) # 9_3_3 13062491Szelenkov@nginx.com check_message(op_text, 4 * 2**10) # 9_3_4 13072491Szelenkov@nginx.com check_message(op_text, 16 * 2**10) # 9_3_5 13082491Szelenkov@nginx.com check_message(op_text, 64 * 2**10) # 9_3_6 13092491Szelenkov@nginx.com check_message(op_text, 256 * 2**10) # 9_3_7 13102491Szelenkov@nginx.com check_message(op_text, 2**20) # 9_3_8 13112491Szelenkov@nginx.com check_message(op_text, 4 * 2**20) # 9_3_9 13121158Szelenkov@nginx.com 13132491Szelenkov@nginx.com check_message(op_binary, 64) # 9_4_1 13142491Szelenkov@nginx.com check_message(op_binary, 256) # 9_4_2 13152491Szelenkov@nginx.com check_message(op_binary, 2**10) # 9_4_3 13162491Szelenkov@nginx.com check_message(op_binary, 4 * 2**10) # 9_4_4 13172491Szelenkov@nginx.com check_message(op_binary, 16 * 2**10) # 9_4_5 13182491Szelenkov@nginx.com check_message(op_binary, 64 * 2**10) # 9_4_6 13192491Szelenkov@nginx.com check_message(op_binary, 256 * 2**10) # 9_4_7 13202491Szelenkov@nginx.com check_message(op_binary, 2**20) # 9_4_8 13212491Szelenkov@nginx.com check_message(op_binary, 4 * 2**20) # 9_4_9 13221158Szelenkov@nginx.com 13232491Szelenkov@nginx.com check_payload(op_text, 2**20, chopsize=64) # 9_5_1 13242491Szelenkov@nginx.com check_payload(op_text, 2**20, chopsize=128) # 9_5_2 13252491Szelenkov@nginx.com check_payload(op_text, 2**20, chopsize=256) # 9_5_3 13262491Szelenkov@nginx.com check_payload(op_text, 2**20, chopsize=512) # 9_5_4 13272491Szelenkov@nginx.com check_payload(op_text, 2**20, chopsize=1024) # 9_5_5 13282491Szelenkov@nginx.com check_payload(op_text, 2**20, chopsize=2048) # 9_5_6 13291158Szelenkov@nginx.com 13302491Szelenkov@nginx.com check_payload(op_binary, 2**20, chopsize=64) # 9_6_1 13312491Szelenkov@nginx.com check_payload(op_binary, 2**20, chopsize=128) # 9_6_2 13322491Szelenkov@nginx.com check_payload(op_binary, 2**20, chopsize=256) # 9_6_3 13332491Szelenkov@nginx.com check_payload(op_binary, 2**20, chopsize=512) # 9_6_4 13342491Szelenkov@nginx.com check_payload(op_binary, 2**20, chopsize=1024) # 9_6_5 13352491Szelenkov@nginx.com check_payload(op_binary, 2**20, chopsize=2048) # 9_6_6 13361158Szelenkov@nginx.com 13372491Szelenkov@nginx.com close_connection(sock) 13381158Szelenkov@nginx.com 13392491Szelenkov@nginx.com 13402491Szelenkov@nginx.comdef test_java_websockets_10_1_1(): 13412491Szelenkov@nginx.com client.load('websockets_mirror') 13421158Szelenkov@nginx.com 13432491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 13442491Szelenkov@nginx.com 13452491Szelenkov@nginx.com payload = '*' * 65536 13462491Szelenkov@nginx.com 13472491Szelenkov@nginx.com ws.message(sock, ws.OP_TEXT, payload, fragmention_size=1300) 13481158Szelenkov@nginx.com 13492491Szelenkov@nginx.com frame = ws.message_read(sock) 13502491Szelenkov@nginx.com check_frame(frame, True, ws.OP_TEXT, payload) 13511158Szelenkov@nginx.com 13522491Szelenkov@nginx.com close_connection(sock) 13532491Szelenkov@nginx.com 13541158Szelenkov@nginx.com 13552491Szelenkov@nginx.com# settings 13562491Szelenkov@nginx.com 13571158Szelenkov@nginx.com 13582491Szelenkov@nginx.comdef test_java_websockets_max_frame_size(): 13592491Szelenkov@nginx.com client.load('websockets_mirror') 13602491Szelenkov@nginx.com 13612491Szelenkov@nginx.com assert 'success' in client.conf( 13622491Szelenkov@nginx.com {'http': {'websocket': {'max_frame_size': 100}}}, 'settings' 13632491Szelenkov@nginx.com ), 'configure max_frame_size' 13641158Szelenkov@nginx.com 13652491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 13661158Szelenkov@nginx.com 13672491Szelenkov@nginx.com payload = '*' * 94 13682491Szelenkov@nginx.com opcode = ws.OP_TEXT 13692491Szelenkov@nginx.com 13702491Szelenkov@nginx.com ws.frame_write(sock, opcode, payload) # frame length is 100 13711158Szelenkov@nginx.com 13722491Szelenkov@nginx.com frame = ws.frame_read(sock) 13732491Szelenkov@nginx.com check_frame(frame, True, opcode, payload) 13741158Szelenkov@nginx.com 13752491Szelenkov@nginx.com payload = '*' * 95 13762491Szelenkov@nginx.com 13772491Szelenkov@nginx.com ws.frame_write(sock, opcode, payload) # frame length is 101 13782491Szelenkov@nginx.com check_close(sock, 1009) # 1009 - CLOSE_TOO_LARGE 13792491Szelenkov@nginx.com 13801158Szelenkov@nginx.com 13812491Szelenkov@nginx.comdef test_java_websockets_read_timeout(): 13822491Szelenkov@nginx.com client.load('websockets_mirror') 13831158Szelenkov@nginx.com 13842491Szelenkov@nginx.com assert 'success' in client.conf( 13852491Szelenkov@nginx.com {'http': {'websocket': {'read_timeout': 5}}}, 'settings' 13862491Szelenkov@nginx.com ), 'configure read_timeout' 13871158Szelenkov@nginx.com 13882491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 13892491Szelenkov@nginx.com 13902491Szelenkov@nginx.com frame = ws.frame_to_send(ws.OP_TEXT, 'blah') 13912491Szelenkov@nginx.com sock.sendall(frame[:2]) 13921158Szelenkov@nginx.com 13932491Szelenkov@nginx.com time.sleep(2) 13942491Szelenkov@nginx.com 13952491Szelenkov@nginx.com check_close(sock, 1001) # 1001 - CLOSE_GOING_AWAY 13962491Szelenkov@nginx.com 13971158Szelenkov@nginx.com 13982491Szelenkov@nginx.comdef test_java_websockets_keepalive_interval(): 13992491Szelenkov@nginx.com client.load('websockets_mirror') 14002491Szelenkov@nginx.com 14012491Szelenkov@nginx.com assert 'success' in client.conf( 14022491Szelenkov@nginx.com {'http': {'websocket': {'keepalive_interval': 5}}}, 'settings' 14032491Szelenkov@nginx.com ), 'configure keepalive_interval' 14041158Szelenkov@nginx.com 14052491Szelenkov@nginx.com _, sock, _ = ws.upgrade() 14061158Szelenkov@nginx.com 14072491Szelenkov@nginx.com frame = ws.frame_to_send(ws.OP_TEXT, 'blah') 14082491Szelenkov@nginx.com sock.sendall(frame[:2]) 14091158Szelenkov@nginx.com 14102491Szelenkov@nginx.com time.sleep(2) 14111158Szelenkov@nginx.com 14122491Szelenkov@nginx.com frame = ws.frame_read(sock) 14132491Szelenkov@nginx.com check_frame(frame, True, ws.OP_PING, '') # PING frame 14142491Szelenkov@nginx.com 14152491Szelenkov@nginx.com sock.close() 1416