diff --git a/.idea/hornbeam.iml b/.idea/hornbeam.iml index fc9fd51..533c47b 100644 --- a/.idea/hornbeam.iml +++ b/.idea/hornbeam.iml @@ -2,6 +2,7 @@ <module type="CPP_MODULE" version="4"> <component name="NewModuleRootManager"> <content url="file://$MODULE_DIR$"> + <sourceFolder url="file://$MODULE_DIR$/hornbeam-autobahn-client/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/hornbeam-client/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/hornbeam/src" isTestSource="false" /> <excludeFolder url="file://$MODULE_DIR$/target" /> diff --git a/Cargo.lock b/Cargo.lock index 717564f..2d2a6bf 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -166,6 +166,16 @@ dependencies = [ "url", ] +[[package]] +name = "hornbeam-autobahn-client" +version = "0.1.0" +dependencies = [ + "hornbeam", + "log", + "simple_logger", + "url", +] + [[package]] name = "hornbeam-client" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 0f3942c..ef355d7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,5 +1,6 @@ [workspace] members = [ "hornbeam", - "hornbeam-client" + "hornbeam-client", + "hornbeam-autobahn-client" ] \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_1_1.html b/autobahn/client/hornbeam_case_1_1_1.html new file mode 100644 index 0000000..990c329 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_1.html @@ -0,0 +1,302 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.1.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:38:30.222Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message with payload 0.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with empty payload). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=1&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 8ZtQuhZ+cqD1Hxn3OR5eag== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 6/FuWzHFfbTbG8SmcvS+0N6nHec=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>182</td><td>1</td><td>182</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>196</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>212</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d31266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a</pre> + <pre class="wirelog_rx_octets"> 206c6f63616c686f73743a393030 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8100</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 803ba5ab54</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=3362613561623534</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 888275d8a7437630</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3735643861373433</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_1_1.json b/autobahn/client/hornbeam_case_1_1_1.json new file mode 100644 index 0000000..7e5fea8 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_1.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 1, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message with payload 0.", + "droppedByMe": true, + "duration": 45, + "expectation": "Receive echo'ed text message (with empty payload). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=1&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 8ZtQuhZ+cqD1Hxn3OR5eag==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 6/FuWzHFfbTbG8SmcvS+0N6nHec=\r\n\r\n", + "id": "1.1.1", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "5": 1, + "8": 1, + "182": 1 + }, + "started": "2023-08-10T21:38:30.222Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "2": 1, + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 182, + "474554202f72756e436173653f636173653d31266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a393030 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8100" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 5, + "803ba5ab54" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 1, + true, + 0, + true, + "3ba5ab54" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "888275d8a7437630" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "75d8a743" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_1_2.html b/autobahn/client/hornbeam_case_1_1_2.html new file mode 100644 index 0000000..26759af --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_2.html @@ -0,0 +1,306 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.1.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:34:43.235Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 125.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'**************************************************************** ...', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'**************************************************************** ...', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=2&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: z9WNHgj87M/bz1gEBIfM9w== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: xr25gFQ1HcbkgsC49GEGtwX4eNg=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>130</td><td>1</td><td>130</td></tr> + <tr class="stats_row"><td>182</td><td>1</td><td>182</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>321</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>127</td><td>1</td><td>127</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>337</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d32266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a</pre> + <pre class="wirelog_rx_octets"> 206c6f63616c686f73743a393030 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=125, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> **************************************************************** ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 817d2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: fd4c51ae14667b843e667b843e667b843e667b843e667b843e667b843e667b843e667b843e667b843e667b843e667b843e66</pre> + <pre class="wirelog_rx_octets"> 7b843e667b843e667b843e667b84 ...</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=125, MASKED=True, MASK=3463353161653134</pre> + <pre class="wirelog_rx_frame"> **************************************************************** ...</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88825b87ba07586f</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3562383762613037</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_1_2.json b/autobahn/client/hornbeam_case_1_1_2.json new file mode 100644 index 0000000..3aef244 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_2.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 2, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message message with payload of length 125.", + "droppedByMe": true, + "duration": 46, + "expectation": "Receive echo'ed text message (with payload as sent). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "**************************************************************** ...", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=2&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: z9WNHgj87M/bz1gEBIfM9w==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: xr25gFQ1HcbkgsC49GEGtwX4eNg=\r\n\r\n", + "id": "1.1.2", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "**************************************************************** ...", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "130": 1, + "182": 1 + }, + "started": "2023-08-10T21:34:43.235Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "127": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 182, + "474554202f72756e436173653f636173653d32266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a393030 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 125, + "**************************************************************** ..." + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 127, + "817d2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 130, + "fd4c51ae14667b843e667b843e667b843e667b843e667b843e667b843e667b843e667b843e667b843e667b843e667b843e667b843e667b843e667b843e667b84 ..." + ] + ], + [ + "RF", + [ + 125, + "**************************************************************** ..." + ], + 1, + true, + 0, + true, + "4c51ae14" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88825b87ba07586f" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "5b87ba07" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_1_3.html b/autobahn/client/hornbeam_case_1_1_3.html new file mode 100644 index 0000000..7c25480 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_3.html @@ -0,0 +1,306 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.1.3</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:34:43.283Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 126.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'**************************************************************** ...', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'**************************************************************** ...', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=3&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 3YgMuloJHqB8ZoG0MkfNSA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: xFLA1XfeNs2NduUjI4BV+dw4gFY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>133</td><td>1</td><td>133</td></tr> + <tr class="stats_row"><td>182</td><td>1</td><td>182</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>324</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>130</td><td>1</td><td>130</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>340</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d33266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a</pre> + <pre class="wirelog_rx_octets"> 206c6f63616c686f73743a393030 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=126, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> **************************************************************** ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 817e007e2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: fe007e98b0778cb29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5d</pre> + <pre class="wirelog_rx_octets"> a6b29a5da6b29a5da6b29a5da6b2 ...</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=126, MASKED=True, MASK=3938623037373863</pre> + <pre class="wirelog_rx_frame"> **************************************************************** ...</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88826d09e5a56ee1</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3664303965356135</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_1_3.json b/autobahn/client/hornbeam_case_1_1_3.json new file mode 100644 index 0000000..86d8ac8 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_3.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 3, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message message with payload of length 126.", + "droppedByMe": true, + "duration": 46, + "expectation": "Receive echo'ed text message (with payload as sent). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "**************************************************************** ...", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=3&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 3YgMuloJHqB8ZoG0MkfNSA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: xFLA1XfeNs2NduUjI4BV+dw4gFY=\r\n\r\n", + "id": "1.1.3", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "**************************************************************** ...", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "133": 1, + "182": 1 + }, + "started": "2023-08-10T21:34:43.283Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "130": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 182, + "474554202f72756e436173653f636173653d33266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a393030 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 126, + "**************************************************************** ..." + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 130, + "817e007e2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 133, + "fe007e98b0778cb29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b29a5da6b2 ..." + ] + ], + [ + "RF", + [ + 126, + "**************************************************************** ..." + ], + 1, + true, + 0, + true, + "98b0778c" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88826d09e5a56ee1" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "6d09e5a5" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_1_4.html b/autobahn/client/hornbeam_case_1_1_4.html new file mode 100644 index 0000000..4b29f8f --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_4.html @@ -0,0 +1,306 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.1.4</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:34:43.331Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 127.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'**************************************************************** ...', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'**************************************************************** ...', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=4&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 7qUQcEnYyx14uAGDAhqnMQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: sdMPywW+tFcgMLMoNeY1iQBnEvU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>134</td><td>1</td><td>134</td></tr> + <tr class="stats_row"><td>182</td><td>1</td><td>182</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>325</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>131</td><td>1</td><td>131</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>341</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d34266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a</pre> + <pre class="wirelog_rx_octets"> 206c6f63616c686f73743a393030 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=127, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> **************************************************************** ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 817e007f2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: fe007f58b21d2372983709729837097298370972983709729837097298370972983709729837097298370972983709729837</pre> + <pre class="wirelog_rx_octets"> 0972983709729837097298370972 ...</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=127, MASKED=True, MASK=3538623231643233</pre> + <pre class="wirelog_rx_frame"> **************************************************************** ...</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88820faf18040c47</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3066616631383034</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_1_4.json b/autobahn/client/hornbeam_case_1_1_4.json new file mode 100644 index 0000000..4db8892 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_4.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 4, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message message with payload of length 127.", + "droppedByMe": true, + "duration": 46, + "expectation": "Receive echo'ed text message (with payload as sent). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "**************************************************************** ...", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=4&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 7qUQcEnYyx14uAGDAhqnMQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: sdMPywW+tFcgMLMoNeY1iQBnEvU=\r\n\r\n", + "id": "1.1.4", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "**************************************************************** ...", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "134": 1, + "182": 1 + }, + "started": "2023-08-10T21:34:43.331Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "131": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 182, + "474554202f72756e436173653f636173653d34266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a393030 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 127, + "**************************************************************** ..." + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 131, + "817e007f2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 134, + "fe007f58b21d23729837097298370972983709729837097298370972983709729837097298370972983709729837097298370972983709729837097298370972 ..." + ] + ], + [ + "RF", + [ + 127, + "**************************************************************** ..." + ], + 1, + true, + 0, + true, + "58b21d23" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88820faf18040c47" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "0faf1804" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_1_5.html b/autobahn/client/hornbeam_case_1_1_5.html new file mode 100644 index 0000000..3ac69e7 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_5.html @@ -0,0 +1,306 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.1.5</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:34:43.379Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 128.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'**************************************************************** ...', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'**************************************************************** ...', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=5&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: NwPkac3M2WPburkjigHm+g== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: lP2AK1KUHLsHtfaNIIoki1TmLxg=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>135</td><td>1</td><td>135</td></tr> + <tr class="stats_row"><td>182</td><td>1</td><td>182</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>326</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>132</td><td>1</td><td>132</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>342</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d35266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a</pre> + <pre class="wirelog_rx_octets"> 206c6f63616c686f73743a393030 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=128, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> **************************************************************** ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 817e00802a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: fe008035b8ee9e1f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4</pre> + <pre class="wirelog_rx_octets"> b41f92c4b41f92c4b41f92c4b41f ...</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=128, MASKED=True, MASK=3335623865653965</pre> + <pre class="wirelog_rx_frame"> **************************************************************** ...</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882723b8a3671d3</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3732336238613336</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_1_5.json b/autobahn/client/hornbeam_case_1_1_5.json new file mode 100644 index 0000000..bda0640 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_5.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 5, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message message with payload of length 128.", + "droppedByMe": true, + "duration": 45, + "expectation": "Receive echo'ed text message (with payload as sent). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "**************************************************************** ...", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=5&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: NwPkac3M2WPburkjigHm+g==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: lP2AK1KUHLsHtfaNIIoki1TmLxg=\r\n\r\n", + "id": "1.1.5", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "**************************************************************** ...", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "135": 1, + "182": 1 + }, + "started": "2023-08-10T21:34:43.379Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "132": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 182, + "474554202f72756e436173653f636173653d35266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a393030 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 128, + "**************************************************************** ..." + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 132, + "817e00802a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 135, + "fe008035b8ee9e1f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f92c4b41f ..." + ] + ], + [ + "RF", + [ + 128, + "**************************************************************** ..." + ], + 1, + true, + 0, + true, + "35b8ee9e" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882723b8a3671d3" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "723b8a36" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_1_6.html b/autobahn/client/hornbeam_case_1_1_6.html new file mode 100644 index 0000000..a5bfaba --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_6.html @@ -0,0 +1,310 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.1.6</b></span> : Pass - <span style="font-size: 0.9em;"><b>210</b> ms @ 2023-08-10T21:34:43.426Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 65535.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'**************************************************************** ...', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'**************************************************************** ...', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=6&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: ZM6TVytTdjXs3llnUx5qEw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 1HLcgk5SGTFkjbhW65IrwMwW1zE=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>182</td><td>1</td><td>182</td></tr> + <tr class="stats_row"><td>13033</td><td>1</td><td>13033</td></tr> + <tr class="stats_row"><td>23550</td><td>1</td><td>23550</td></tr> + <tr class="stats_row"><td>28960</td><td>1</td><td>28960</td></tr> + <tr class="stats_total"><td>Total</td><td>5</td><td>65733</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>65539</td><td>1</td><td>65539</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>65749</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d36266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a</pre> + <pre class="wirelog_rx_octets"> 206c6f63616c686f73743a393030 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=65535, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> **************************************************************** ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 817effff2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 10.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81feffffb4829f1b9ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8</pre> + <pre class="wirelog_rx_octets"> b5319ea8b5319ea8b5319ea8b531 ...</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: a8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5</pre> + <pre class="wirelog_rx_octets"> 319ea8b5319ea8b5319ea8b5319e ...</pre> + <pre class="wirelog_rx_octets">007 RX OCTETS: a8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5</pre> + <pre class="wirelog_rx_octets"> 319ea8b5319ea8b5319ea8b5319e ...</pre> + <pre class="wirelog_rx_frame">008 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=65535, MASKED=True, MASK=6234383239663162</pre> + <pre class="wirelog_rx_frame"> **************************************************************** ...</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 88823299620f3171</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3332393936323066</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_1_6.json b/autobahn/client/hornbeam_case_1_1_6.json new file mode 100644 index 0000000..0d87355 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_6.json @@ -0,0 +1,193 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 6, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message message with payload of length 65535.", + "droppedByMe": true, + "duration": 210, + "expectation": "Receive echo'ed text message (with payload as sent). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "**************************************************************** ...", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=6&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: ZM6TVytTdjXs3llnUx5qEw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 1HLcgk5SGTFkjbhW65IrwMwW1zE=\r\n\r\n", + "id": "1.1.6", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "**************************************************************** ...", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "182": 1, + "13033": 1, + "23550": 1, + "28960": 1 + }, + "started": "2023-08-10T21:34:43.426Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1, + "65539": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 182, + "474554202f72756e436173653f636173653d36266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a393030 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 65535, + "**************************************************************** ..." + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 65539, + "817effff2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + false + ], + [ + "KL", + 10 + ], + [ + "RO", + [ + 13033, + "81feffffb4829f1b9ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b531 ..." + ] + ], + [ + "RO", + [ + 28960, + "a8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319e ..." + ] + ], + [ + "RO", + [ + 23550, + "a8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319ea8b5319e ..." + ] + ], + [ + "RF", + [ + 65535, + "**************************************************************** ..." + ], + 1, + true, + 0, + true, + "b4829f1b" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88823299620f3171" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "3299620f" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_1_7.html b/autobahn/client/hornbeam_case_1_1_7.html new file mode 100644 index 0000000..cd4a4b9 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_7.html @@ -0,0 +1,310 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.1.7</b></span> : Pass - <span style="font-size: 0.9em;"><b>186</b> ms @ 2023-08-10T21:34:43.638Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 65536.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'**************************************************************** ...', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'**************************************************************** ...', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=7&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: AbPJWedI0oLNOsKRJoc2PQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: N+DShn5P4aUt4MNL7fnAzfiy2Po=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>182</td><td>1</td><td>182</td></tr> + <tr class="stats_row"><td>13033</td><td>1</td><td>13033</td></tr> + <tr class="stats_row"><td>23557</td><td>1</td><td>23557</td></tr> + <tr class="stats_row"><td>28960</td><td>1</td><td>28960</td></tr> + <tr class="stats_total"><td>Total</td><td>5</td><td>65740</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>65546</td><td>1</td><td>65546</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>65756</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d37266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a</pre> + <pre class="wirelog_rx_octets"> 206c6f63616c686f73743a393030 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=65536, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> **************************************************************** ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 817f00000000000100002a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 10.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81ff0000000000010000a6e097e68ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc</pre> + <pre class="wirelog_rx_octets"> 8ccabdcc8ccabdcc8ccabdcc8cca ...</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: cc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8c</pre> + <pre class="wirelog_rx_octets"> cabdcc8ccabdcc8ccabdcc8ccabd ...</pre> + <pre class="wirelog_rx_octets">007 RX OCTETS: cc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8c</pre> + <pre class="wirelog_rx_octets"> cabdcc8ccabdcc8ccabdcc8ccabd ...</pre> + <pre class="wirelog_rx_frame">008 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=65536, MASKED=True, MASK=6136653039376536</pre> + <pre class="wirelog_rx_frame"> **************************************************************** ...</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 88826cd234956f3a</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3663643233343935</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_1_7.json b/autobahn/client/hornbeam_case_1_1_7.json new file mode 100644 index 0000000..be35265 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_7.json @@ -0,0 +1,193 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 7, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message message with payload of length 65536.", + "droppedByMe": true, + "duration": 186, + "expectation": "Receive echo'ed text message (with payload as sent). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "**************************************************************** ...", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=7&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: AbPJWedI0oLNOsKRJoc2PQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: N+DShn5P4aUt4MNL7fnAzfiy2Po=\r\n\r\n", + "id": "1.1.7", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "**************************************************************** ...", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "182": 1, + "13033": 1, + "23557": 1, + "28960": 1 + }, + "started": "2023-08-10T21:34:43.638Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1, + "65546": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 182, + "474554202f72756e436173653f636173653d37266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a393030 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 65536, + "**************************************************************** ..." + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 65546, + "817f00000000000100002a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + false + ], + [ + "KL", + 10 + ], + [ + "RO", + [ + 13033, + "81ff0000000000010000a6e097e68ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8cca ..." + ] + ], + [ + "RO", + [ + 28960, + "cc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabd ..." + ] + ], + [ + "RO", + [ + 23557, + "cc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabdcc8ccabd ..." + ] + ], + [ + "RF", + [ + 65536, + "**************************************************************** ..." + ], + 1, + true, + 0, + true, + "a6e097e6" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88826cd234956f3a" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "6cd23495" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_1_8.html b/autobahn/client/hornbeam_case_1_1_8.html new file mode 100644 index 0000000..93681da --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_8.html @@ -0,0 +1,441 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.1.8</b></span> : Pass - <span style="font-size: 0.9em;"><b>221</b> ms @ 2023-08-10T21:34:43.826Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 65536. Sent out data in chops of 997 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'**************************************************************** ...', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'**************************************************************** ...', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=8&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: rKgzB4gJ/1oEs5OPpeVyMA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: yw9ejA/ixcRClqjYTn/8gZQs6qQ=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>182</td><td>1</td><td>182</td></tr> + <tr class="stats_row"><td>13033</td><td>1</td><td>13033</td></tr> + <tr class="stats_row"><td>23557</td><td>1</td><td>23557</td></tr> + <tr class="stats_row"><td>28960</td><td>1</td><td>28960</td></tr> + <tr class="stats_total"><td>Total</td><td>5</td><td>65740</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>741</td><td>1</td><td>741</td></tr> + <tr class="stats_row"><td>997</td><td>65</td><td>64805</td></tr> + <tr class="stats_total"><td>Total</td><td>68</td><td>65756</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d38266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a</pre> + <pre class="wirelog_rx_octets"> 206c6f63616c686f73743a393030 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=65536, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=997, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> **************************************************************** ...</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 817f00000000000100002a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 10.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">005 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">006 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">007 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">008 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">009 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">010 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">011 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">012 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">013 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">014 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">015 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">016 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">017 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">018 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">019 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">020 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">021 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">022 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">023 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">024 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">025 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">026 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">027 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">028 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">029 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">030 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">031 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">032 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">033 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">034 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">035 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">036 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">037 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">038 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">039 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">040 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">041 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">042 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">043 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">044 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">045 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">046 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">047 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">048 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">049 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">050 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">051 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">052 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">053 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">054 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">055 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">056 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">057 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">058 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">059 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">060 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">061 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">062 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">063 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">064 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">065 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">066 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">067 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">068 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets_sync">069 TX OCTETS: 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets_sync"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_rx_octets">070 RX OCTETS: 81ff00000000000100006a3999064013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c</pre> + <pre class="wirelog_rx_octets"> 4013b32c4013b32c4013b32c4013 ...</pre> + <pre class="wirelog_rx_octets">071 RX OCTETS: 2c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c40</pre> + <pre class="wirelog_rx_octets"> 13b32c4013b32c4013b32c4013b3 ...</pre> + <pre class="wirelog_rx_octets">072 RX OCTETS: 2c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c40</pre> + <pre class="wirelog_rx_octets"> 13b32c4013b32c4013b32c4013b3 ...</pre> + <pre class="wirelog_rx_frame">073 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=65536, MASKED=True, MASK=3661333939393036</pre> + <pre class="wirelog_rx_frame"> **************************************************************** ...</pre> + <pre class="wirelog_tx_frame">074 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">075 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">076 RX OCTETS: 88821bb9ac2a1851</pre> + <pre class="wirelog_rx_frame">077 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3162623961633261</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">078 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_1_8.json b/autobahn/client/hornbeam_case_1_1_8.json new file mode 100644 index 0000000..af56cf6 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_1_8.json @@ -0,0 +1,714 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 8, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message message with payload of length 65536. Sent out data in chops of 997 octets.", + "droppedByMe": true, + "duration": 221, + "expectation": "Receive echo'ed text message (with payload as sent). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "**************************************************************** ...", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=8&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: rKgzB4gJ/1oEs5OPpeVyMA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: yw9ejA/ixcRClqjYTn/8gZQs6qQ=\r\n\r\n", + "id": "1.1.8", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "**************************************************************** ...", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "182": 1, + "13033": 1, + "23557": 1, + "28960": 1 + }, + "started": "2023-08-10T21:34:43.826Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1, + "741": 1, + "997": 65 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 182, + "474554202f72756e436173653f636173653d38266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a393030 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 65536, + "**************************************************************** ..." + ], + 1, + true, + 0, + null, + null, + 997, + false + ], + [ + "TO", + [ + 997, + "817f00000000000100002a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "KL", + 10 + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 997, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "TO", + [ + 741, + "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + true + ], + [ + "RO", + [ + 13033, + "81ff00000000000100006a3999064013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013 ..." + ] + ], + [ + "RO", + [ + 28960, + "2c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b3 ..." + ] + ], + [ + "RO", + [ + 23557, + "2c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b32c4013b3 ..." + ] + ], + [ + "RF", + [ + 65536, + "**************************************************************** ..." + ], + 1, + true, + 0, + true, + "6a399906" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88821bb9ac2a1851" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "1bb9ac2a" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_2_1.html b/autobahn/client/hornbeam_case_1_2_1.html new file mode 100644 index 0000000..f67914d --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_1.html @@ -0,0 +1,302 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.2.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>50</b> ms @ 2023-08-10T21:50:14.264Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message with payload 0.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with empty payload). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'', True)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'', True)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=9&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: fufORqKLRWBkchTEpZ//fw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: si3gyJPybvxZaPWvLfV4hGqXc6I=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>182</td><td>1</td><td>182</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>196</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>212</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d39266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a</pre> + <pre class="wirelog_rx_octets"> 206c6f63616c686f73743a393030 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8200</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 82</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 80835c4ea0</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=3833356334656130</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882b0fa3880b312</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6230666133383830</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_2_1.json b/autobahn/client/hornbeam_case_1_2_1.json new file mode 100644 index 0000000..11a0c93 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_1.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 9, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send binary message with payload 0.", + "droppedByMe": true, + "duration": 50, + "expectation": "Receive echo'ed binary message (with empty payload). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "", + true + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=9&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: fufORqKLRWBkchTEpZ//fw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: si3gyJPybvxZaPWvLfV4hGqXc6I=\r\n\r\n", + "id": "1.2.1", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "", + true + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "2": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "5": 1, + "8": 1, + "182": 1 + }, + "started": "2023-08-10T21:50:14.264Z", + "trafficStats": null, + "txFrameStats": { + "2": 1, + "8": 1 + }, + "txOctetStats": { + "2": 1, + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 182, + "474554202f72756e436173653f636173653d39266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a393030 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 2, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8200" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "82" + ] + ], + [ + "RO", + [ + 5, + "80835c4ea0" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 2, + true, + 0, + true, + "835c4ea0" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882b0fa3880b312" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "b0fa3880" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_2_2.html b/autobahn/client/hornbeam_case_1_2_2.html new file mode 100644 index 0000000..cbef4fb --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_2.html @@ -0,0 +1,308 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.2.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:50:01.474Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 125.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...', True)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...', True)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=10&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: oiyDZcPSYQdiZO4iY0jD/g== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: Mp2byzQvJa8YPCvDUKdFAbyYC0A=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>130</td><td>1</td><td>130</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>322</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>127</td><td>1</td><td>127</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>337</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3130266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=125, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 827dfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 82</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: fdd78216df297ce821297ce821297ce821297ce821297ce821297ce821297ce821297ce821297ce821297ce821297ce82129</pre> + <pre class="wirelog_rx_octets"> 7ce821297ce821297ce821297ce8 ...</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=125, MASKED=True, MASK=6437383231366466</pre> + <pre class="wirelog_rx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_rx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882d35fe008d0b7</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6433356665303038</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_2_2.json b/autobahn/client/hornbeam_case_1_2_2.json new file mode 100644 index 0000000..fa0f490 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_2.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 10, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send binary message message with payload of length 125.", + "droppedByMe": true, + "duration": 45, + "expectation": "Receive echo'ed binary message (with payload as sent). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...", + true + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=10&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: oiyDZcPSYQdiZO4iY0jD/g==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: Mp2byzQvJa8YPCvDUKdFAbyYC0A=\r\n\r\n", + "id": "1.2.2", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...", + true + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "2": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "130": 1, + "183": 1 + }, + "started": "2023-08-10T21:50:01.474Z", + "trafficStats": null, + "txFrameStats": { + "2": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "127": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3130266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 125, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 2, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 127, + "827dfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "82" + ] + ], + [ + "RO", + [ + 130, + "fdd78216df297ce821297ce821297ce821297ce821297ce821297ce821297ce821297ce821297ce821297ce821297ce821297ce821297ce821297ce821297ce8 ..." + ] + ], + [ + "RF", + [ + 125, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 2, + true, + 0, + true, + "d78216df" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882d35fe008d0b7" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "d35fe008" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_2_3.html b/autobahn/client/hornbeam_case_1_2_3.html new file mode 100644 index 0000000..d5335e9 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_3.html @@ -0,0 +1,309 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.2.3</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:50:15.981Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 126.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...', True)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...', True)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=11&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: HIiWGgjeSsuymeVEOakkGg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: mJvzE42uquhrnSXJ2AEL3sb+zv4=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>2</td><td>2</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>133</td><td>1</td><td>133</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>5</td><td>325</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>130</td><td>1</td><td>130</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>340</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3131266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=126, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 827e007efefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 82</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: fe007e74ca70108a348eee8a348eee8a348eee8a348eee8a348eee8a348eee8a348eee8a348eee8a348eee8a348eee8a348e</pre> + <pre class="wirelog_rx_octets"> ee8a348eee8a348eee8a348eee8a ...</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=126, MASKED=True, MASK=3734636137303130</pre> + <pre class="wirelog_rx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_rx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 8271fd267d7215</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3731666432363764</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_2_3.json b/autobahn/client/hornbeam_case_1_2_3.json new file mode 100644 index 0000000..f684e40 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_3.json @@ -0,0 +1,192 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 11, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send binary message message with payload of length 126.", + "droppedByMe": true, + "duration": 46, + "expectation": "Receive echo'ed binary message (with payload as sent). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...", + true + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=11&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: HIiWGgjeSsuymeVEOakkGg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: mJvzE42uquhrnSXJ2AEL3sb+zv4=\r\n\r\n", + "id": "1.2.3", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...", + true + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "2": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 2, + "7": 1, + "133": 1, + "183": 1 + }, + "started": "2023-08-10T21:50:15.981Z", + "trafficStats": null, + "txFrameStats": { + "2": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "130": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3131266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 126, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 2, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 130, + "827e007efefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "82" + ] + ], + [ + "RO", + [ + 133, + "fe007e74ca70108a348eee8a348eee8a348eee8a348eee8a348eee8a348eee8a348eee8a348eee8a348eee8a348eee8a348eee8a348eee8a348eee8a348eee8a ..." + ] + ], + [ + "RF", + [ + 126, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 2, + true, + 0, + true, + "74ca7010" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 1, + "88" + ] + ], + [ + "RO", + [ + 7, + "8271fd267d7215" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "71fd267d" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_2_4.html b/autobahn/client/hornbeam_case_1_2_4.html new file mode 100644 index 0000000..69590a7 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_4.html @@ -0,0 +1,308 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.2.4</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:50:17.419Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 127.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...', True)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...', True)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=12&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: x9sGt7Ra7Cgp1MhR/r1GZQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: nuarYDdk2rGNFBnLkjXiaa2FsTs=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>134</td><td>1</td><td>134</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>326</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>131</td><td>1</td><td>131</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>341</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3132266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=127, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 827e007ffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 82</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: fe007f0b971d2ef569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3</pre> + <pre class="wirelog_rx_octets"> d0f569e3d0f569e3d0f569e3d0f5 ...</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=127, MASKED=True, MASK=3062393731643265</pre> + <pre class="wirelog_rx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_rx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 888274556dde77bd</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3734353536646465</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_2_4.json b/autobahn/client/hornbeam_case_1_2_4.json new file mode 100644 index 0000000..18ff822 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_4.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 12, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send binary message message with payload of length 127.", + "droppedByMe": true, + "duration": 45, + "expectation": "Receive echo'ed binary message (with payload as sent). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...", + true + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=12&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: x9sGt7Ra7Cgp1MhR/r1GZQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: nuarYDdk2rGNFBnLkjXiaa2FsTs=\r\n\r\n", + "id": "1.2.4", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...", + true + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "2": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "134": 1, + "183": 1 + }, + "started": "2023-08-10T21:50:17.419Z", + "trafficStats": null, + "txFrameStats": { + "2": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "131": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3132266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 127, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 2, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 131, + "827e007ffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "82" + ] + ], + [ + "RO", + [ + 134, + "fe007f0b971d2ef569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f569e3d0f5 ..." + ] + ], + [ + "RF", + [ + 127, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 2, + true, + 0, + true, + "0b971d2e" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "888274556dde77bd" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "74556dde" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_2_5.html b/autobahn/client/hornbeam_case_1_2_5.html new file mode 100644 index 0000000..02403a5 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_5.html @@ -0,0 +1,308 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.2.5</b></span> : Pass - <span style="font-size: 0.9em;"><b>47</b> ms @ 2023-08-10T21:50:18.645Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 128.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...', True)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...', True)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=13&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: sSxXOg9j8EtrgbU9pPdKMQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: CcQCqtOjUoSmMzWfNXYKrtfZU0o=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>135</td><td>1</td><td>135</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>327</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>132</td><td>1</td><td>132</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>342</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3133266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=128, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 827e0080fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 82</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: fe0080dd20fa3423de04ca23de04ca23de04ca23de04ca23de04ca23de04ca23de04ca23de04ca23de04ca23de04ca23de04</pre> + <pre class="wirelog_rx_octets"> ca23de04ca23de04ca23de04ca23 ...</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=128, MASKED=True, MASK=6464323066613334</pre> + <pre class="wirelog_rx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_rx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882ab89565ea861</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6162383935363565</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_2_5.json b/autobahn/client/hornbeam_case_1_2_5.json new file mode 100644 index 0000000..3405a5b --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_5.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 13, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send binary message message with payload of length 128.", + "droppedByMe": true, + "duration": 47, + "expectation": "Receive echo'ed binary message (with payload as sent). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...", + true + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=13&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: sSxXOg9j8EtrgbU9pPdKMQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: CcQCqtOjUoSmMzWfNXYKrtfZU0o=\r\n\r\n", + "id": "1.2.5", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...", + true + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "2": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "135": 1, + "183": 1 + }, + "started": "2023-08-10T21:50:18.645Z", + "trafficStats": null, + "txFrameStats": { + "2": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "132": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3133266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 128, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 2, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 132, + "827e0080fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "82" + ] + ], + [ + "RO", + [ + 135, + "fe0080dd20fa3423de04ca23de04ca23de04ca23de04ca23de04ca23de04ca23de04ca23de04ca23de04ca23de04ca23de04ca23de04ca23de04ca23de04ca23 ..." + ] + ], + [ + "RF", + [ + 128, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 2, + true, + 0, + true, + "dd20fa34" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882ab89565ea861" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "ab89565e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_2_6.html b/autobahn/client/hornbeam_case_1_2_6.html new file mode 100644 index 0000000..16a5793 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_6.html @@ -0,0 +1,313 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.2.6</b></span> : Pass - <span style="font-size: 0.9em;"><b>697</b> ms @ 2023-08-10T21:50:19.986Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 65535.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...', True)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...', True)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=14&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: e2QrAiPgcBmXVRkkeh9d/A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: dLZOCuHohoAAQIJkfAG0mxz4uy0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>2</td><td>2</td></tr> + <tr class="stats_row"><td>3</td><td>1</td><td>3</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_row"><td>65535</td><td>1</td><td>65535</td></tr> + <tr class="stats_total"><td>Total</td><td>7</td><td>65734</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>65539</td><td>1</td><td>65539</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>65749</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3134266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=65535, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 827efffffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 10.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 82</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: feffff</pre> + <pre class="wirelog_rx_octets">007 RX OCTETS: 075c9f68</pre> + <pre class="wirelog_rx_octets">008 RX OCTETS: f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a2</pre> + <pre class="wirelog_rx_octets"> 6196f9a26196f9a26196f9a26196 ...</pre> + <pre class="wirelog_rx_frame">009 RX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=65535, MASKED=True, MASK=3037356339663638</pre> + <pre class="wirelog_rx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_rx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_frame">010 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">011 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">012 RX OCTETS: 88</pre> + <pre class="wirelog_rx_octets">013 RX OCTETS: 82d7f1a1a7d419</pre> + <pre class="wirelog_rx_frame">014 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6437663161316137</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">015 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_2_6.json b/autobahn/client/hornbeam_case_1_2_6.json new file mode 100644 index 0000000..47618a0 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_6.json @@ -0,0 +1,208 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 14, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send binary message message with payload of length 65535.", + "droppedByMe": true, + "duration": 697, + "expectation": "Receive echo'ed binary message (with payload as sent). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...", + true + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=14&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: e2QrAiPgcBmXVRkkeh9d/A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: dLZOCuHohoAAQIJkfAG0mxz4uy0=\r\n\r\n", + "id": "1.2.6", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...", + true + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "2": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 2, + "3": 1, + "4": 1, + "7": 1, + "183": 1, + "65535": 1 + }, + "started": "2023-08-10T21:50:19.986Z", + "trafficStats": null, + "txFrameStats": { + "2": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1, + "65539": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3134266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 65535, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 2, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 65539, + "827efffffefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + false + ], + [ + "KL", + 10 + ], + [ + "RO", + [ + 1, + "82" + ] + ], + [ + "RO", + [ + 3, + "feffff" + ] + ], + [ + "RO", + [ + 4, + "075c9f68" + ] + ], + [ + "RO", + [ + 65535, + "f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196f9a26196 ..." + ] + ], + [ + "RF", + [ + 65535, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 2, + true, + 0, + true, + "075c9f68" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 1, + "88" + ] + ], + [ + "RO", + [ + 7, + "82d7f1a1a7d419" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "d7f1a1a7" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_2_7.html b/autobahn/client/hornbeam_case_1_2_7.html new file mode 100644 index 0000000..eab69e9 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_7.html @@ -0,0 +1,316 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.2.7</b></span> : Pass - <span style="font-size: 0.9em;"><b>395</b> ms @ 2023-08-10T21:50:25.996Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 65536.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...', True)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...', True)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=15&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: iYAXal+ZimcI1/tBfycLbA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 3CImKonfnvV1KiqXyURmVcycPi0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_row"><td>14480</td><td>1</td><td>14480</td></tr> + <tr class="stats_row"><td>22100</td><td>1</td><td>22100</td></tr> + <tr class="stats_row"><td>28960</td><td>1</td><td>28960</td></tr> + <tr class="stats_total"><td>Total</td><td>7</td><td>65741</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>65546</td><td>1</td><td>65546</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>65756</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3135266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=65536, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 827f0000000000010000fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 10.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 82</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: ff0000000000010000</pre> + <pre class="wirelog_rx_octets">007 RX OCTETS: b04d7f9f4eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb3</pre> + <pre class="wirelog_rx_octets"> 81614eb381614eb381614eb38161 ...</pre> + <pre class="wirelog_rx_octets">008 RX OCTETS: 4eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb3</pre> + <pre class="wirelog_rx_octets"> 81614eb381614eb381614eb38161 ...</pre> + <pre class="wirelog_rx_octets">009 RX OCTETS: 4eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb3</pre> + <pre class="wirelog_rx_octets"> 81614eb381614eb381614eb38161 ...</pre> + <pre class="wirelog_rx_frame">010 RX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=65536, MASKED=True, MASK=6230346437663966</pre> + <pre class="wirelog_rx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_rx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_frame">011 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">012 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">013 RX OCTETS: 88822f7294632c9a</pre> + <pre class="wirelog_rx_frame">014 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3266373239343633</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">015 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_2_7.json b/autobahn/client/hornbeam_case_1_2_7.json new file mode 100644 index 0000000..f9e0257 --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_7.json @@ -0,0 +1,209 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 15, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send binary message message with payload of length 65536.", + "droppedByMe": true, + "duration": 395, + "expectation": "Receive echo'ed binary message (with payload as sent). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...", + true + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=15&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: iYAXal+ZimcI1/tBfycLbA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 3CImKonfnvV1KiqXyURmVcycPi0=\r\n\r\n", + "id": "1.2.7", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...", + true + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "2": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "183": 1, + "14480": 1, + "22100": 1, + "28960": 1 + }, + "started": "2023-08-10T21:50:25.996Z", + "trafficStats": null, + "txFrameStats": { + "2": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1, + "65546": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3135266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 65536, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 2, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 65546, + "827f0000000000010000fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + false + ], + [ + "KL", + 10 + ], + [ + "RO", + [ + 1, + "82" + ] + ], + [ + "RO", + [ + 9, + "ff0000000000010000" + ] + ], + [ + "RO", + [ + 14480, + "b04d7f9f4eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb38161 ..." + ] + ], + [ + "RO", + [ + 28960, + "4eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb38161 ..." + ] + ], + [ + "RO", + [ + 22100, + "4eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb381614eb38161 ..." + ] + ], + [ + "RF", + [ + 65536, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 2, + true, + 0, + true, + "b04d7f9f" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88822f7294632c9a" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "2f729463" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_1_2_8.html b/autobahn/client/hornbeam_case_1_2_8.html new file mode 100644 index 0000000..8760b9b --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_8.html @@ -0,0 +1,444 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 1.2.8</b></span> : Pass - <span style="font-size: 0.9em;"><b>602</b> ms @ 2023-08-10T21:50:27.791Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 65536. Sent out data in chops of 997 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent). Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...', True)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...', True)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=16&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: g5kh38oUi1Haxhu7GBEYdQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 1rSbC+g816LUKhwMvCE+Wx9wpMY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>2</td><td>2</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_row"><td>65536</td><td>1</td><td>65536</td></tr> + <tr class="stats_total"><td>Total</td><td>7</td><td>65741</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>741</td><td>1</td><td>741</td></tr> + <tr class="stats_row"><td>997</td><td>65</td><td>64805</td></tr> + <tr class="stats_total"><td>Total</td><td>68</td><td>65756</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3136266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=65536, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=997, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_frame_sync"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 827f0000000000010000fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 10.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">005 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">006 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">007 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">008 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">009 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">010 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">011 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">012 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">013 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">014 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">015 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">016 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">017 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">018 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">019 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">020 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">021 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">022 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">023 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">024 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">025 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">026 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">027 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">028 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">029 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">030 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">031 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">032 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">033 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">034 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">035 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">036 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">037 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">038 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">039 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">040 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">041 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">042 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">043 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">044 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">045 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">046 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">047 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">048 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">049 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">050 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">051 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">052 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">053 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">054 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">055 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">056 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">057 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">058 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">059 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">060 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">061 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">062 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">063 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">064 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">065 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">066 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">067 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">068 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">069 TX OCTETS: fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets_sync"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_rx_octets">070 RX OCTETS: 82</pre> + <pre class="wirelog_rx_octets">071 RX OCTETS: ff0000000000010000</pre> + <pre class="wirelog_rx_octets">072 RX OCTETS: 5e5b0afda0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5</pre> + <pre class="wirelog_rx_octets"> f403a0a5f403a0a5f403a0a5f403 ...</pre> + <pre class="wirelog_rx_octets">073 RX OCTETS: a0a5f403</pre> + <pre class="wirelog_rx_frame">074 RX FRAME : OPCODE=2, FIN=True, RSV=0, PAYLOAD-LEN=65536, MASKED=True, MASK=3565356230616664</pre> + <pre class="wirelog_rx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_rx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_frame">075 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">076 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">077 RX OCTETS: 88</pre> + <pre class="wirelog_rx_octets">078 RX OCTETS: 82a8c15babab29</pre> + <pre class="wirelog_rx_frame">079 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6138633135626162</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">080 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_1_2_8.json b/autobahn/client/hornbeam_case_1_2_8.json new file mode 100644 index 0000000..787d76b --- /dev/null +++ b/autobahn/client/hornbeam_case_1_2_8.json @@ -0,0 +1,729 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 16, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send binary message message with payload of length 65536. Sent out data in chops of 997 octets.", + "droppedByMe": true, + "duration": 602, + "expectation": "Receive echo'ed binary message (with payload as sent). Clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...", + true + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=16&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: g5kh38oUi1Haxhu7GBEYdQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 1rSbC+g816LUKhwMvCE+Wx9wpMY=\r\n\r\n", + "id": "1.2.8", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...", + true + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "2": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 2, + "4": 1, + "7": 1, + "9": 1, + "183": 1, + "65536": 1 + }, + "started": "2023-08-10T21:50:27.791Z", + "trafficStats": null, + "txFrameStats": { + "2": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1, + "741": 1, + "997": 65 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3136266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 65536, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 2, + true, + 0, + null, + null, + 997, + false + ], + [ + "TO", + [ + 997, + "827f0000000000010000fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "KL", + 10 + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 997, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "TO", + [ + 741, + "fefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + true + ], + [ + "RO", + [ + 1, + "82" + ] + ], + [ + "RO", + [ + 9, + "ff0000000000010000" + ] + ], + [ + "RO", + [ + 65536, + "5e5b0afda0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403a0a5f403 ..." + ] + ], + [ + "RO", + [ + 4, + "a0a5f403" + ] + ], + [ + "RF", + [ + 65536, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 2, + true, + 0, + true, + "5e5b0afd" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 1, + "88" + ] + ], + [ + "RO", + [ + 7, + "82a8c15babab29" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "a8c15bab" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_2_1.html b/autobahn/client/hornbeam_case_2_1.html new file mode 100644 index 0000000..9a7c111 --- /dev/null +++ b/autobahn/client/hornbeam_case_2_1.html @@ -0,0 +1,294 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 2.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>1003</b> ms @ 2023-08-10T21:34:46.065Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send ping without payload.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Pong (with empty payload) is sent in reply to Ping. Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('pong', u'')]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=17&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: vj/We7f3hyDFhuUh6scgUw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: SqLhgDY51qpJMDSXNu171gLf3Sk=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>189</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>2</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3137266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8900</pre> + <pre class="wirelog_kill_after">004 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_kill_after">005 CLOSING CONNECTION</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8800</pre> + <pre class="wirelog_rx_octets">008 RX OCTETS: 888040a9ed6e</pre> + <pre class="wirelog_rx_frame">009 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=3430613965643665</pre> + <pre class="wirelog_tcp_closed_by_me">010 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_2_1.json b/autobahn/client/hornbeam_case_2_1.json new file mode 100644 index 0000000..b435162 --- /dev/null +++ b/autobahn/client/hornbeam_case_2_1.json @@ -0,0 +1,151 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 17, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send ping without payload.", + "droppedByMe": true, + "duration": 1003, + "expectation": "Pong (with empty payload) is sent in reply to Ping. Clean close with normal code.", + "expected": { + "OK": [ + [ + "pong", + "" + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=17&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: vj/We7f3hyDFhuUh6scgUw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: SqLhgDY51qpJMDSXNu171gLf3Sk=\r\n\r\n", + "id": "2.1", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "6": 1, + "183": 1 + }, + "started": "2023-08-10T21:34:46.065Z", + "trafficStats": null, + "txFrameStats": { + "8": 1, + "9": 1 + }, + "txOctetStats": { + "2": 2, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3137266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8900" + ], + false + ], + [ + "TI", + 1 + ], + [ + "TIE" + ], + [ + "TF", + [ + 0, + "" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8800" + ], + false + ], + [ + "RO", + [ + 6, + "888040a9ed6e" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 8, + true, + 0, + true, + "40a9ed6e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_2_10.html b/autobahn/client/hornbeam_case_2_10.html new file mode 100644 index 0000000..511c59b --- /dev/null +++ b/autobahn/client/hornbeam_case_2_10.html @@ -0,0 +1,323 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 2.10</b></span> : Fail - <span style="font-size: 0.9em;"><b>3004</b> ms @ 2023-08-10T21:34:54.113Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 10 Pings with payload.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Pongs for our Pings with all the payloads. Note: This is not required by the Spec .. but we check for this behaviour anyway. Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('pong', u'payload-0'), ('pong', u'payload-1'), ('pong', u'payload-2'), ('pong', u'payload-3'), ('pong', u'payload-4'), ('pong', u'payload-5'), ('pong', u'payload-6'), ('pong', u'payload-7'), ('pong', u'payload-8'), ('pong', u'payload-9')]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=26&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Kow5QeQcvdvFtugq1BH2mQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 8POiMXTKXGfiexlm6d8hoA/tDfI=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>189</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>11</td><td>10</td><td>110</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>12</td><td>318</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>10</td></tr> + <tr class="stats_total"><td>Total</td><td>11</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3236266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> payload-0</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 89097061796c6f61642d30</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> payload-1</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 89097061796c6f61642d31</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> payload-2</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 89097061796c6f61642d32</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> payload-3</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 89097061796c6f61642d33</pre> + <pre class="wirelog_tx_frame">010 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> payload-4</pre> + <pre class="wirelog_tx_octets">011 TX OCTETS: 89097061796c6f61642d34</pre> + <pre class="wirelog_tx_frame">012 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> payload-5</pre> + <pre class="wirelog_tx_octets">013 TX OCTETS: 89097061796c6f61642d35</pre> + <pre class="wirelog_tx_frame">014 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> payload-6</pre> + <pre class="wirelog_tx_octets">015 TX OCTETS: 89097061796c6f61642d36</pre> + <pre class="wirelog_tx_frame">016 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> payload-7</pre> + <pre class="wirelog_tx_octets">017 TX OCTETS: 89097061796c6f61642d37</pre> + <pre class="wirelog_tx_frame">018 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> payload-8</pre> + <pre class="wirelog_tx_octets">019 TX OCTETS: 89097061796c6f61642d38</pre> + <pre class="wirelog_tx_frame">020 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> payload-9</pre> + <pre class="wirelog_tx_octets">021 TX OCTETS: 89097061796c6f61642d39</pre> + <pre class="wirelog_kill_after">022 CLOSE CONNECTION AFTER 3.000000 sec</pre> + <pre class="wirelog_kill_after">023 CLOSING CONNECTION</pre> + <pre class="wirelog_tx_frame">024 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">025 TX OCTETS: 8800</pre> + <pre class="wirelog_rx_octets">026 RX OCTETS: 8880239c02a4</pre> + <pre class="wirelog_rx_frame">027 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=3233396330326134</pre> + <pre class="wirelog_tcp_closed_by_me">028 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_2_10.json b/autobahn/client/hornbeam_case_2_10.json new file mode 100644 index 0000000..d40d977 --- /dev/null +++ b/autobahn/client/hornbeam_case_2_10.json @@ -0,0 +1,386 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 26, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send 10 Pings with payload.", + "droppedByMe": true, + "duration": 3004, + "expectation": "Pongs for our Pings with all the payloads. Note: This is not required by the Spec .. but we check for this behaviour anyway. Clean close with normal code.", + "expected": { + "OK": [ + [ + "pong", + "payload-0" + ], + [ + "pong", + "payload-1" + ], + [ + "pong", + "payload-2" + ], + [ + "pong", + "payload-3" + ], + [ + "pong", + "payload-4" + ], + [ + "pong", + "payload-5" + ], + [ + "pong", + "payload-6" + ], + [ + "pong", + "payload-7" + ], + [ + "pong", + "payload-8" + ], + [ + "pong", + "payload-9" + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=26&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Kow5QeQcvdvFtugq1BH2mQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 8POiMXTKXGfiexlm6d8hoA/tDfI=\r\n\r\n", + "id": "2.10", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "6": 1, + "183": 1 + }, + "started": "2023-08-10T21:34:54.113Z", + "trafficStats": null, + "txFrameStats": { + "8": 1, + "9": 10 + }, + "txOctetStats": { + "2": 1, + "11": 10, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3236266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "payload-0" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "89097061796c6f61642d30" + ], + false + ], + [ + "TF", + [ + 9, + "payload-1" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "89097061796c6f61642d31" + ], + false + ], + [ + "TF", + [ + 9, + "payload-2" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "89097061796c6f61642d32" + ], + false + ], + [ + "TF", + [ + 9, + "payload-3" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "89097061796c6f61642d33" + ], + false + ], + [ + "TF", + [ + 9, + "payload-4" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "89097061796c6f61642d34" + ], + false + ], + [ + "TF", + [ + 9, + "payload-5" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "89097061796c6f61642d35" + ], + false + ], + [ + "TF", + [ + 9, + "payload-6" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "89097061796c6f61642d36" + ], + false + ], + [ + "TF", + [ + 9, + "payload-7" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "89097061796c6f61642d37" + ], + false + ], + [ + "TF", + [ + 9, + "payload-8" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "89097061796c6f61642d38" + ], + false + ], + [ + "TF", + [ + 9, + "payload-9" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "89097061796c6f61642d39" + ], + false + ], + [ + "TI", + 3 + ], + [ + "TIE" + ], + [ + "TF", + [ + 0, + "" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8800" + ], + false + ], + [ + "RO", + [ + 6, + "8880239c02a4" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 8, + true, + 0, + true, + "239c02a4" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_2_11.html b/autobahn/client/hornbeam_case_2_11.html new file mode 100644 index 0000000..ad805fc --- /dev/null +++ b/autobahn/client/hornbeam_case_2_11.html @@ -0,0 +1,423 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 2.11</b></span> : Fail - <span style="font-size: 0.9em;"><b>3004</b> ms @ 2023-08-10T21:34:57.118Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 10 Pings with payload. Send out octets in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Pongs for our Pings with all the payloads. Note: This is not required by the Spec .. but we check for this behaviour anyway. Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('pong', u'payload-0'), ('pong', u'payload-1'), ('pong', u'payload-2'), ('pong', u'payload-3'), ('pong', u'payload-4'), ('pong', u'payload-5'), ('pong', u'payload-6'), ('pong', u'payload-7'), ('pong', u'payload-8'), ('pong', u'payload-9')]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=27&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: CqDP2JS6VLKQiqPDk1rmtg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 1s+Zltac/uOyGZTv+nnKnxCHRvI=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>189</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>110</td><td>110</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>112</td><td>318</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>10</td></tr> + <tr class="stats_total"><td>Total</td><td>11</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3237266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> payload-0</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 89</pre> + <pre class="wirelog_tx_frame_sync">004 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> payload-1</pre> + <pre class="wirelog_tx_frame_sync">005 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> payload-2</pre> + <pre class="wirelog_tx_frame_sync">006 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> payload-3</pre> + <pre class="wirelog_tx_frame_sync">007 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> payload-4</pre> + <pre class="wirelog_tx_frame_sync">008 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> payload-5</pre> + <pre class="wirelog_tx_frame_sync">009 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> payload-6</pre> + <pre class="wirelog_tx_frame_sync">010 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> payload-7</pre> + <pre class="wirelog_tx_frame_sync">011 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> payload-8</pre> + <pre class="wirelog_tx_frame_sync">012 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> payload-9</pre> + <pre class="wirelog_kill_after">013 CLOSE CONNECTION AFTER 3.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">014 TX OCTETS: 09</pre> + <pre class="wirelog_tx_octets_sync">015 TX OCTETS: 70</pre> + <pre class="wirelog_tx_octets_sync">016 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">017 TX OCTETS: 79</pre> + <pre class="wirelog_tx_octets_sync">018 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">019 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">020 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">021 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">022 TX OCTETS: 2d</pre> + <pre class="wirelog_tx_octets_sync">023 TX OCTETS: 30</pre> + <pre class="wirelog_tx_octets_sync">024 TX OCTETS: 89</pre> + <pre class="wirelog_tx_octets_sync">025 TX OCTETS: 09</pre> + <pre class="wirelog_tx_octets_sync">026 TX OCTETS: 70</pre> + <pre class="wirelog_tx_octets_sync">027 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">028 TX OCTETS: 79</pre> + <pre class="wirelog_tx_octets_sync">029 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">030 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">031 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">032 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">033 TX OCTETS: 2d</pre> + <pre class="wirelog_tx_octets_sync">034 TX OCTETS: 31</pre> + <pre class="wirelog_tx_octets_sync">035 TX OCTETS: 89</pre> + <pre class="wirelog_tx_octets_sync">036 TX OCTETS: 09</pre> + <pre class="wirelog_tx_octets_sync">037 TX OCTETS: 70</pre> + <pre class="wirelog_tx_octets_sync">038 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">039 TX OCTETS: 79</pre> + <pre class="wirelog_tx_octets_sync">040 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">041 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">042 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">043 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">044 TX OCTETS: 2d</pre> + <pre class="wirelog_tx_octets_sync">045 TX OCTETS: 32</pre> + <pre class="wirelog_tx_octets_sync">046 TX OCTETS: 89</pre> + <pre class="wirelog_tx_octets_sync">047 TX OCTETS: 09</pre> + <pre class="wirelog_tx_octets_sync">048 TX OCTETS: 70</pre> + <pre class="wirelog_tx_octets_sync">049 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">050 TX OCTETS: 79</pre> + <pre class="wirelog_tx_octets_sync">051 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">052 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">053 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">054 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">055 TX OCTETS: 2d</pre> + <pre class="wirelog_tx_octets_sync">056 TX OCTETS: 33</pre> + <pre class="wirelog_tx_octets_sync">057 TX OCTETS: 89</pre> + <pre class="wirelog_tx_octets_sync">058 TX OCTETS: 09</pre> + <pre class="wirelog_tx_octets_sync">059 TX OCTETS: 70</pre> + <pre class="wirelog_tx_octets_sync">060 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">061 TX OCTETS: 79</pre> + <pre class="wirelog_tx_octets_sync">062 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">063 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">064 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">065 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">066 TX OCTETS: 2d</pre> + <pre class="wirelog_tx_octets_sync">067 TX OCTETS: 34</pre> + <pre class="wirelog_tx_octets_sync">068 TX OCTETS: 89</pre> + <pre class="wirelog_tx_octets_sync">069 TX OCTETS: 09</pre> + <pre class="wirelog_tx_octets_sync">070 TX OCTETS: 70</pre> + <pre class="wirelog_tx_octets_sync">071 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">072 TX OCTETS: 79</pre> + <pre class="wirelog_tx_octets_sync">073 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">074 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">075 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">076 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">077 TX OCTETS: 2d</pre> + <pre class="wirelog_tx_octets_sync">078 TX OCTETS: 35</pre> + <pre class="wirelog_tx_octets_sync">079 TX OCTETS: 89</pre> + <pre class="wirelog_tx_octets_sync">080 TX OCTETS: 09</pre> + <pre class="wirelog_tx_octets_sync">081 TX OCTETS: 70</pre> + <pre class="wirelog_tx_octets_sync">082 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">083 TX OCTETS: 79</pre> + <pre class="wirelog_tx_octets_sync">084 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">085 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">086 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">087 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">088 TX OCTETS: 2d</pre> + <pre class="wirelog_tx_octets_sync">089 TX OCTETS: 36</pre> + <pre class="wirelog_tx_octets_sync">090 TX OCTETS: 89</pre> + <pre class="wirelog_tx_octets_sync">091 TX OCTETS: 09</pre> + <pre class="wirelog_tx_octets_sync">092 TX OCTETS: 70</pre> + <pre class="wirelog_tx_octets_sync">093 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">094 TX OCTETS: 79</pre> + <pre class="wirelog_tx_octets_sync">095 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">096 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">097 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">098 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">099 TX OCTETS: 2d</pre> + <pre class="wirelog_tx_octets_sync">100 TX OCTETS: 37</pre> + <pre class="wirelog_tx_octets_sync">101 TX OCTETS: 89</pre> + <pre class="wirelog_tx_octets_sync">102 TX OCTETS: 09</pre> + <pre class="wirelog_tx_octets_sync">103 TX OCTETS: 70</pre> + <pre class="wirelog_tx_octets_sync">104 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">105 TX OCTETS: 79</pre> + <pre class="wirelog_tx_octets_sync">106 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">107 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">108 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">109 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">110 TX OCTETS: 2d</pre> + <pre class="wirelog_tx_octets_sync">111 TX OCTETS: 38</pre> + <pre class="wirelog_tx_octets_sync">112 TX OCTETS: 89</pre> + <pre class="wirelog_tx_octets_sync">113 TX OCTETS: 09</pre> + <pre class="wirelog_tx_octets_sync">114 TX OCTETS: 70</pre> + <pre class="wirelog_tx_octets_sync">115 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">116 TX OCTETS: 79</pre> + <pre class="wirelog_tx_octets_sync">117 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">118 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">119 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">120 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">121 TX OCTETS: 2d</pre> + <pre class="wirelog_tx_octets_sync">122 TX OCTETS: 39</pre> + <pre class="wirelog_kill_after">123 CLOSING CONNECTION</pre> + <pre class="wirelog_tx_frame">124 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">125 TX OCTETS: 8800</pre> + <pre class="wirelog_rx_octets">126 RX OCTETS: 8880ac1cf067</pre> + <pre class="wirelog_rx_frame">127 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=6163316366303637</pre> + <pre class="wirelog_tcp_closed_by_me">128 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_2_11.json b/autobahn/client/hornbeam_case_2_11.json new file mode 100644 index 0000000..e860f4f --- /dev/null +++ b/autobahn/client/hornbeam_case_2_11.json @@ -0,0 +1,1186 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 27, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send 10 Pings with payload. Send out octets in octet-wise chops.", + "droppedByMe": true, + "duration": 3004, + "expectation": "Pongs for our Pings with all the payloads. Note: This is not required by the Spec .. but we check for this behaviour anyway. Clean close with normal code.", + "expected": { + "OK": [ + [ + "pong", + "payload-0" + ], + [ + "pong", + "payload-1" + ], + [ + "pong", + "payload-2" + ], + [ + "pong", + "payload-3" + ], + [ + "pong", + "payload-4" + ], + [ + "pong", + "payload-5" + ], + [ + "pong", + "payload-6" + ], + [ + "pong", + "payload-7" + ], + [ + "pong", + "payload-8" + ], + [ + "pong", + "payload-9" + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=27&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: CqDP2JS6VLKQiqPDk1rmtg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 1s+Zltac/uOyGZTv+nnKnxCHRvI=\r\n\r\n", + "id": "2.11", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "6": 1, + "183": 1 + }, + "started": "2023-08-10T21:34:57.118Z", + "trafficStats": null, + "txFrameStats": { + "8": 1, + "9": 10 + }, + "txOctetStats": { + "1": 110, + "2": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3237266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "payload-0" + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "TO", + [ + 1, + "89" + ], + true + ], + [ + "TF", + [ + 9, + "payload-1" + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "TF", + [ + 9, + "payload-2" + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "TF", + [ + 9, + "payload-3" + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "TF", + [ + 9, + "payload-4" + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "TF", + [ + 9, + "payload-5" + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "TF", + [ + 9, + "payload-6" + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "TF", + [ + 9, + "payload-7" + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "TF", + [ + 9, + "payload-8" + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "TF", + [ + 9, + "payload-9" + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "TI", + 3 + ], + [ + "TO", + [ + 1, + "09" + ], + true + ], + [ + "TO", + [ + 1, + "70" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "79" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "2d" + ], + true + ], + [ + "TO", + [ + 1, + "30" + ], + true + ], + [ + "TO", + [ + 1, + "89" + ], + true + ], + [ + "TO", + [ + 1, + "09" + ], + true + ], + [ + "TO", + [ + 1, + "70" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "79" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "2d" + ], + true + ], + [ + "TO", + [ + 1, + "31" + ], + true + ], + [ + "TO", + [ + 1, + "89" + ], + true + ], + [ + "TO", + [ + 1, + "09" + ], + true + ], + [ + "TO", + [ + 1, + "70" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "79" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "2d" + ], + true + ], + [ + "TO", + [ + 1, + "32" + ], + true + ], + [ + "TO", + [ + 1, + "89" + ], + true + ], + [ + "TO", + [ + 1, + "09" + ], + true + ], + [ + "TO", + [ + 1, + "70" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "79" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "2d" + ], + true + ], + [ + "TO", + [ + 1, + "33" + ], + true + ], + [ + "TO", + [ + 1, + "89" + ], + true + ], + [ + "TO", + [ + 1, + "09" + ], + true + ], + [ + "TO", + [ + 1, + "70" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "79" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "2d" + ], + true + ], + [ + "TO", + [ + 1, + "34" + ], + true + ], + [ + "TO", + [ + 1, + "89" + ], + true + ], + [ + "TO", + [ + 1, + "09" + ], + true + ], + [ + "TO", + [ + 1, + "70" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "79" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "2d" + ], + true + ], + [ + "TO", + [ + 1, + "35" + ], + true + ], + [ + "TO", + [ + 1, + "89" + ], + true + ], + [ + "TO", + [ + 1, + "09" + ], + true + ], + [ + "TO", + [ + 1, + "70" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "79" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "2d" + ], + true + ], + [ + "TO", + [ + 1, + "36" + ], + true + ], + [ + "TO", + [ + 1, + "89" + ], + true + ], + [ + "TO", + [ + 1, + "09" + ], + true + ], + [ + "TO", + [ + 1, + "70" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "79" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "2d" + ], + true + ], + [ + "TO", + [ + 1, + "37" + ], + true + ], + [ + "TO", + [ + 1, + "89" + ], + true + ], + [ + "TO", + [ + 1, + "09" + ], + true + ], + [ + "TO", + [ + 1, + "70" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "79" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "2d" + ], + true + ], + [ + "TO", + [ + 1, + "38" + ], + true + ], + [ + "TO", + [ + 1, + "89" + ], + true + ], + [ + "TO", + [ + 1, + "09" + ], + true + ], + [ + "TO", + [ + 1, + "70" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "79" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "2d" + ], + true + ], + [ + "TO", + [ + 1, + "39" + ], + true + ], + [ + "TIE" + ], + [ + "TF", + [ + 0, + "" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8800" + ], + false + ], + [ + "RO", + [ + 6, + "8880ac1cf067" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 8, + true, + 0, + true, + "ac1cf067" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_2_2.html b/autobahn/client/hornbeam_case_2_2.html new file mode 100644 index 0000000..f87c16e --- /dev/null +++ b/autobahn/client/hornbeam_case_2_2.html @@ -0,0 +1,296 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 2.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>1003</b> ms @ 2023-08-10T21:34:47.070Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send ping with small text payload.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Pong with payload echo'ed is sent in reply to Ping. Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('pong', u'Hello, world!')]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=18&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: +3B8o21xS/5WvytvxYQMmg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 9xZBt2h2Nlh2TTHydTCGDDbBw8s=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>189</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>15</td><td>1</td><td>15</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>223</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3138266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 890d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_kill_after">004 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_kill_after">005 CLOSING CONNECTION</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8800</pre> + <pre class="wirelog_rx_octets">008 RX OCTETS: 8880cb2a0e77</pre> + <pre class="wirelog_rx_frame">009 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=6362326130653737</pre> + <pre class="wirelog_tcp_closed_by_me">010 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_2_2.json b/autobahn/client/hornbeam_case_2_2.json new file mode 100644 index 0000000..f8be748 --- /dev/null +++ b/autobahn/client/hornbeam_case_2_2.json @@ -0,0 +1,152 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 18, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send ping with small text payload.", + "droppedByMe": true, + "duration": 1003, + "expectation": "Pong with payload echo'ed is sent in reply to Ping. Clean close with normal code.", + "expected": { + "OK": [ + [ + "pong", + "Hello, world!" + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=18&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: +3B8o21xS/5WvytvxYQMmg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 9xZBt2h2Nlh2TTHydTCGDDbBw8s=\r\n\r\n", + "id": "2.2", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "6": 1, + "183": 1 + }, + "started": "2023-08-10T21:34:47.070Z", + "trafficStats": null, + "txFrameStats": { + "8": 1, + "9": 1 + }, + "txOctetStats": { + "2": 1, + "15": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3138266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 15, + "890d48656c6c6f2c20776f726c6421" + ], + false + ], + [ + "TI", + 1 + ], + [ + "TIE" + ], + [ + "TF", + [ + 0, + "" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8800" + ], + false + ], + [ + "RO", + [ + 6, + "8880cb2a0e77" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 8, + true, + 0, + true, + "cb2a0e77" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_2_3.html b/autobahn/client/hornbeam_case_2_3.html new file mode 100644 index 0000000..a3586f2 --- /dev/null +++ b/autobahn/client/hornbeam_case_2_3.html @@ -0,0 +1,296 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 2.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>1003</b> ms @ 2023-08-10T21:34:48.075Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send ping with small binary (non UTF-8) payload.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Pong with payload echo'ed is sent in reply to Ping. Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('pong', '0x00fffefdfcfb00ff')]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=19&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: vvhmRaFay8Xz4hu76hdlMA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: uV22gjd/ZxhuS7M+yqyM2grIvFE=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>189</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>10</td><td>1</td><td>10</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>218</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3139266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=8, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x00fffefdfcfb00ff</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 890800fffefdfcfb00ff</pre> + <pre class="wirelog_kill_after">004 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_kill_after">005 CLOSING CONNECTION</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8800</pre> + <pre class="wirelog_rx_octets">008 RX OCTETS: 88803726da1b</pre> + <pre class="wirelog_rx_frame">009 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=3337323664613162</pre> + <pre class="wirelog_tcp_closed_by_me">010 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_2_3.json b/autobahn/client/hornbeam_case_2_3.json new file mode 100644 index 0000000..d8606c6 --- /dev/null +++ b/autobahn/client/hornbeam_case_2_3.json @@ -0,0 +1,152 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 19, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send ping with small binary (non UTF-8) payload.", + "droppedByMe": true, + "duration": 1003, + "expectation": "Pong with payload echo'ed is sent in reply to Ping. Clean close with normal code.", + "expected": { + "OK": [ + [ + "pong", + "0x00fffefdfcfb00ff" + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=19&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: vvhmRaFay8Xz4hu76hdlMA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: uV22gjd/ZxhuS7M+yqyM2grIvFE=\r\n\r\n", + "id": "2.3", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "6": 1, + "183": 1 + }, + "started": "2023-08-10T21:34:48.075Z", + "trafficStats": null, + "txFrameStats": { + "8": 1, + "9": 1 + }, + "txOctetStats": { + "2": 1, + "10": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3139266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 8, + "0x00fffefdfcfb00ff" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 10, + "890800fffefdfcfb00ff" + ], + false + ], + [ + "TI", + 1 + ], + [ + "TIE" + ], + [ + "TF", + [ + 0, + "" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8800" + ], + false + ], + [ + "RO", + [ + 6, + "88803726da1b" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 8, + true, + 0, + true, + "3726da1b" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_2_4.html b/autobahn/client/hornbeam_case_2_4.html new file mode 100644 index 0000000..2529b92 --- /dev/null +++ b/autobahn/client/hornbeam_case_2_4.html @@ -0,0 +1,298 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 2.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>1003</b> ms @ 2023-08-10T21:34:49.081Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send ping with binary payload of 125 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Pong with payload echo'ed is sent in reply to Ping. Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('pong', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...')]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=20&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: yGdig6lW7KovBm07y6ihdA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 7qE4+GStoWBAiDOUstVGKZ5Or6Q=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>189</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>127</td><td>1</td><td>127</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>335</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3230266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=125, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 897dfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_kill_after">004 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_kill_after">005 CLOSING CONNECTION</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8800</pre> + <pre class="wirelog_rx_octets">008 RX OCTETS: 8880d584bfe7</pre> + <pre class="wirelog_rx_frame">009 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=6435383462666537</pre> + <pre class="wirelog_tcp_closed_by_me">010 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_2_4.json b/autobahn/client/hornbeam_case_2_4.json new file mode 100644 index 0000000..faa49e1 --- /dev/null +++ b/autobahn/client/hornbeam_case_2_4.json @@ -0,0 +1,152 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 20, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send ping with binary payload of 125 octets.", + "droppedByMe": true, + "duration": 1003, + "expectation": "Pong with payload echo'ed is sent in reply to Ping. Clean close with normal code.", + "expected": { + "OK": [ + [ + "pong", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=20&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: yGdig6lW7KovBm07y6ihdA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 7qE4+GStoWBAiDOUstVGKZ5Or6Q=\r\n\r\n", + "id": "2.4", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "6": 1, + "183": 1 + }, + "started": "2023-08-10T21:34:49.081Z", + "trafficStats": null, + "txFrameStats": { + "8": 1, + "9": 1 + }, + "txOctetStats": { + "2": 1, + "127": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3230266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 125, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 127, + "897dfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + false + ], + [ + "TI", + 1 + ], + [ + "TIE" + ], + [ + "TF", + [ + 0, + "" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8800" + ], + false + ], + [ + "RO", + [ + 6, + "8880d584bfe7" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 8, + true, + 0, + true, + "d584bfe7" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_2_5.html b/autobahn/client/hornbeam_case_2_5.html new file mode 100644 index 0000000..9d616ee --- /dev/null +++ b/autobahn/client/hornbeam_case_2_5.html @@ -0,0 +1,300 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 2.5</b></span> : Pass - <span style="font-size: 0.9em;"><b>1003</b> ms @ 2023-08-10T21:34:50.086Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send ping with binary payload of 126 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Connection is failed immediately (1002/Protocol Error), since control frames are only allowed to have payload up to and including 125 octets..</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=21&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 5e0gG5mCIev1qcA6hHXz1Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: xhrE7D+ZfluuL2AdymQ0xHg1BCI=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>130</td><td>1</td><td>130</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>350</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3231266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=126, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_frame"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 897e007efefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_octets"> fefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_kill_after">005 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">008 RX OCTETS: 888cc04e44e0c3a7038fa92023c081392599</pre> + <pre class="wirelog_rx_frame">009 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6330346534346530</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">010 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_2_5.json b/autobahn/client/hornbeam_case_2_5.json new file mode 100644 index 0000000..c796f80 --- /dev/null +++ b/autobahn/client/hornbeam_case_2_5.json @@ -0,0 +1,147 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "FAILED", + "case": 21, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send ping with binary payload of 126 octets.", + "droppedByMe": true, + "duration": 1003, + "expectation": "Connection is failed immediately (1002/Protocol Error), since control frames are only allowed to have payload up to and including 125 octets..", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=21&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 5e0gG5mCIev1qcA6hHXz1Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: xhrE7D+ZfluuL2AdymQ0xHg1BCI=\r\n\r\n", + "id": "2.5", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "18": 1, + "183": 1 + }, + "started": "2023-08-10T21:34:50.086Z", + "trafficStats": null, + "txFrameStats": { + "8": 1, + "9": 1 + }, + "txOctetStats": { + "14": 1, + "130": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3231266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 126, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 130, + "897e007efefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + false + ], + [ + "KL", + 1 + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cc04e44e0c3a7038fa92023c081392599" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "c04e44e0" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_2_6.html b/autobahn/client/hornbeam_case_2_6.html new file mode 100644 index 0000000..e7d80b1 --- /dev/null +++ b/autobahn/client/hornbeam_case_2_6.html @@ -0,0 +1,423 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 2.6</b></span> : Fail - <span style="font-size: 0.9em;"><b>2003</b> ms @ 2023-08-10T21:34:51.092Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send ping with binary payload of 125 octets, send in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Pong with payload echo'ed is sent in reply to Ping. Implementations must be TCP clean. Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('pong', '0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ...')]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=22&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: DcA1OU4m1cAZjXEWecDtuw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: IGGc7B6DozJE0Dw2ABEeABGvDAE=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>189</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>127</td><td>127</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>129</td><td>335</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3232266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=125, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> 0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe</pre> + <pre class="wirelog_tx_frame_sync"> fefefefefefefefefefefefefefefe ...</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 89</pre> + <pre class="wirelog_kill_after">004 CLOSE CONNECTION AFTER 2.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">005 TX OCTETS: 7d</pre> + <pre class="wirelog_tx_octets_sync">006 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">007 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">008 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">009 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">010 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">011 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">012 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">013 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">014 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">015 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">016 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">017 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">018 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">019 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">020 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">021 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">022 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">023 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">024 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">025 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">026 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">027 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">028 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">029 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">030 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">031 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">032 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">033 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">034 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">035 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">036 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">037 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">038 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">039 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">040 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">041 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">042 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">043 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">044 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">045 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">046 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">047 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">048 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">049 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">050 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">051 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">052 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">053 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">054 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">055 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">056 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">057 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">058 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">059 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">060 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">061 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">062 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">063 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">064 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">065 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">066 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">067 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">068 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">069 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">070 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">071 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">072 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">073 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">074 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">075 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">076 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">077 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">078 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">079 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">080 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">081 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">082 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">083 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">084 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">085 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">086 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">087 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">088 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">089 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">090 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">091 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">092 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">093 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">094 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">095 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">096 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">097 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">098 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">099 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">100 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">101 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">102 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">103 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">104 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">105 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">106 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">107 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">108 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">109 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">110 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">111 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">112 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">113 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">114 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">115 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">116 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">117 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">118 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">119 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">120 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">121 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">122 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">123 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">124 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">125 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">126 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">127 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">128 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">129 TX OCTETS: fe</pre> + <pre class="wirelog_tx_octets_sync">130 TX OCTETS: fe</pre> + <pre class="wirelog_kill_after">131 CLOSING CONNECTION</pre> + <pre class="wirelog_tx_frame">132 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">133 TX OCTETS: 8800</pre> + <pre class="wirelog_rx_octets">134 RX OCTETS: 88806b342ca2</pre> + <pre class="wirelog_rx_frame">135 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=3662333432636132</pre> + <pre class="wirelog_tcp_closed_by_me">136 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_2_6.json b/autobahn/client/hornbeam_case_2_6.json new file mode 100644 index 0000000..048b76b --- /dev/null +++ b/autobahn/client/hornbeam_case_2_6.json @@ -0,0 +1,1160 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 22, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send ping with binary payload of 125 octets, send in octet-wise chops.", + "droppedByMe": true, + "duration": 2003, + "expectation": "Pong with payload echo'ed is sent in reply to Ping. Implementations must be TCP clean. Clean close with normal code.", + "expected": { + "OK": [ + [ + "pong", + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=22&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: DcA1OU4m1cAZjXEWecDtuw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: IGGc7B6DozJE0Dw2ABEeABGvDAE=\r\n\r\n", + "id": "2.6", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "6": 1, + "183": 1 + }, + "started": "2023-08-10T21:34:51.092Z", + "trafficStats": null, + "txFrameStats": { + "8": 1, + "9": 1 + }, + "txOctetStats": { + "1": 127, + "2": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3232266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 125, + "0xfefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefefe ..." + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "TO", + [ + 1, + "89" + ], + true + ], + [ + "TI", + 2 + ], + [ + "TO", + [ + 1, + "7d" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TO", + [ + 1, + "fe" + ], + true + ], + [ + "TIE" + ], + [ + "TF", + [ + 0, + "" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8800" + ], + false + ], + [ + "RO", + [ + 6, + "88806b342ca2" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 8, + true, + 0, + true, + "6b342ca2" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_2_7.html b/autobahn/client/hornbeam_case_2_7.html new file mode 100644 index 0000000..2d1fb61 --- /dev/null +++ b/autobahn/client/hornbeam_case_2_7.html @@ -0,0 +1,296 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 2.7</b></span> : Pass - <span style="font-size: 0.9em;"><b>3</b> ms @ 2023-08-10T21:34:53.097Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unsolicited pong without payload. Verify nothing is received. Clean close with normal code.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Nothing.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=23&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: k9hZRgTq8LMYYNbFsjTeyA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 3iSPcTDjJFI0jzdMThDt4gPL+30=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>191</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>212</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>10</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3233266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=10, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8a00</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 880203e8</pre> + <pre class="wirelog_kill_after">006 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">007 RX OCTETS: 888217709e8e1498</pre> + <pre class="wirelog_rx_frame">008 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3137373039653865</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">009 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_2_7.json b/autobahn/client/hornbeam_case_2_7.json new file mode 100644 index 0000000..9e30587 --- /dev/null +++ b/autobahn/client/hornbeam_case_2_7.json @@ -0,0 +1,144 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 23, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send unsolicited pong without payload. Verify nothing is received. Clean close with normal code.", + "droppedByMe": true, + "duration": 3, + "expectation": "Nothing.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=23&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: k9hZRgTq8LMYYNbFsjTeyA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 3iSPcTDjJFI0jzdMThDt4gPL+30=\r\n\r\n", + "id": "2.7", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "183": 1 + }, + "started": "2023-08-10T21:34:53.097Z", + "trafficStats": null, + "txFrameStats": { + "8": 1, + "10": 1 + }, + "txOctetStats": { + "2": 1, + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3233266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 10, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8a00" + ], + false + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "TI", + 1 + ], + [ + "RO", + [ + 8, + "888217709e8e1498" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "17709e8e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_2_8.html b/autobahn/client/hornbeam_case_2_8.html new file mode 100644 index 0000000..b3fc6cd --- /dev/null +++ b/autobahn/client/hornbeam_case_2_8.html @@ -0,0 +1,297 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 2.8</b></span> : Pass - <span style="font-size: 0.9em;"><b>3</b> ms @ 2023-08-10T21:34:53.103Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unsolicited pong with payload. Verify nothing is received. Clean close with normal code.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Nothing.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=24&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: CpEyXVX27jPVH6YCytoR5g== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: yubR+3HPQpXiYBilu0s4YmRzwR4=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>191</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>26</td><td>1</td><td>26</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>236</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>10</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3234266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=10, FIN=True, RSV=0, PAYLOAD-LEN=24, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> unsolicited pong payload</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8a18756e736f6c69636974656420706f6e67207061796c6f6164</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 880203e8</pre> + <pre class="wirelog_kill_after">006 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">007 RX OCTETS: 888247169f8f44fe</pre> + <pre class="wirelog_rx_frame">008 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3437313639663866</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">009 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_2_8.json b/autobahn/client/hornbeam_case_2_8.json new file mode 100644 index 0000000..b1f617d --- /dev/null +++ b/autobahn/client/hornbeam_case_2_8.json @@ -0,0 +1,144 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 24, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send unsolicited pong with payload. Verify nothing is received. Clean close with normal code.", + "droppedByMe": true, + "duration": 3, + "expectation": "Nothing.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=24&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: CpEyXVX27jPVH6YCytoR5g==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: yubR+3HPQpXiYBilu0s4YmRzwR4=\r\n\r\n", + "id": "2.8", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "183": 1 + }, + "started": "2023-08-10T21:34:53.103Z", + "trafficStats": null, + "txFrameStats": { + "8": 1, + "10": 1 + }, + "txOctetStats": { + "4": 1, + "26": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3234266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 24, + "unsolicited pong payload" + ], + 10, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 26, + "8a18756e736f6c69636974656420706f6e67207061796c6f6164" + ], + false + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "TI", + 1 + ], + [ + "RO", + [ + 8, + "888247169f8f44fe" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "47169f8f" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_2_9.html b/autobahn/client/hornbeam_case_2_9.html new file mode 100644 index 0000000..41e1b1f --- /dev/null +++ b/autobahn/client/hornbeam_case_2_9.html @@ -0,0 +1,301 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 2.9</b></span> : Fail - <span style="font-size: 0.9em;"><b>1003</b> ms @ 2023-08-10T21:34:53.108Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unsolicited pong with payload. Send ping with payload. Verify pong for ping is received.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Nothing in reply to own Pong, but Pong with payload echo'ed in reply to Ping. Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('pong', u'ping payload')]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=25&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: d6Fz5tXUtgzaqNpXlrj9lQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: RoZ709KxSsD6veNx2bx/IdGQJ9Y=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>189</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>26</td><td>1</td><td>26</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>248</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_row"><td>10</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3235266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=10, FIN=True, RSV=0, PAYLOAD-LEN=24, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> unsolicited pong payload</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8a18756e736f6c69636974656420706f6e67207061796c6f6164</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> ping payload</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 890c70696e67207061796c6f6164</pre> + <pre class="wirelog_kill_after">006 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_kill_after">007 CLOSING CONNECTION</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 8800</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88803a2ab7dd</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=3361326162376464</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_2_9.json b/autobahn/client/hornbeam_case_2_9.json new file mode 100644 index 0000000..e1a02a7 --- /dev/null +++ b/autobahn/client/hornbeam_case_2_9.json @@ -0,0 +1,176 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 25, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send unsolicited pong with payload. Send ping with payload. Verify pong for ping is received.", + "droppedByMe": true, + "duration": 1003, + "expectation": "Nothing in reply to own Pong, but Pong with payload echo'ed in reply to Ping. Clean close with normal code.", + "expected": { + "OK": [ + [ + "pong", + "ping payload" + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=25&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: d6Fz5tXUtgzaqNpXlrj9lQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: RoZ709KxSsD6veNx2bx/IdGQJ9Y=\r\n\r\n", + "id": "2.9", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "6": 1, + "183": 1 + }, + "started": "2023-08-10T21:34:53.108Z", + "trafficStats": null, + "txFrameStats": { + "8": 1, + "9": 1, + "10": 1 + }, + "txOctetStats": { + "2": 1, + "14": 1, + "26": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3235266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 24, + "unsolicited pong payload" + ], + 10, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 26, + "8a18756e736f6c69636974656420706f6e67207061796c6f6164" + ], + false + ], + [ + "TF", + [ + 12, + "ping payload" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "890c70696e67207061796c6f6164" + ], + false + ], + [ + "TI", + 1 + ], + [ + "TIE" + ], + [ + "TF", + [ + 0, + "" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8800" + ], + false + ], + [ + "RO", + [ + 6, + "88803a2ab7dd" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 8, + true, + 0, + true, + "3a2ab7dd" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_3_1.html b/autobahn/client/hornbeam_case_3_1.html new file mode 100644 index 0000000..74b2bc5 --- /dev/null +++ b/autobahn/client/hornbeam_case_3_1.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 3.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>1002</b> ms @ 2023-08-10T21:35:00.124Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message with <b>RSV = 1</b>.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately (1002/protocol error), since RSV must be 0, when no extension defining RSV meaning has been negotiated.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'Hello, world!', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=28&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: YqgNkj69EEVgGWrwmU/d3A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: /Zh8XfVWYBfrEnsfL1FtLsEd5L0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>2</td><td>36</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>220</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>15</td><td>1</td><td>15</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>235</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3238266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=1, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 910d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8dd346f2b89b239ed4bc6ad2cfbc349edcf2</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=6433343666326238</pre> + <pre class="wirelog_rx_frame"> Hello, world!</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888ca1234c13a2ca0b7cc84d2b33e0542d6a</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6131323334633133</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_3_1.json b/autobahn/client/hornbeam_case_3_1.json new file mode 100644 index 0000000..242d326 --- /dev/null +++ b/autobahn/client/hornbeam_case_3_1.json @@ -0,0 +1,181 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 28, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send small text message with <b>RSV = 1</b>.", + "droppedByMe": true, + "duration": 1002, + "expectation": "The connection is failed immediately (1002/protocol error), since RSV must be 0, when no extension defining RSV meaning has been negotiated.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=28&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: YqgNkj69EEVgGWrwmU/d3A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: /Zh8XfVWYBfrEnsfL1FtLsEd5L0=\r\n\r\n", + "id": "3.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "Hello, world!", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 2, + "183": 1 + }, + "started": "2023-08-10T21:35:00.124Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "14": 1, + "15": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3238266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 1, + null, + null, + null, + false + ], + [ + "TO", + [ + 15, + "910d48656c6c6f2c20776f726c6421" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 18, + "8dd346f2b89b239ed4bc6ad2cfbc349edcf2" + ] + ], + [ + "RF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + true, + "d346f2b8" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888ca1234c13a2ca0b7cc84d2b33e0542d6a" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "a1234c13" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_3_2.html b/autobahn/client/hornbeam_case_3_2.html new file mode 100644 index 0000000..53e5ddc --- /dev/null +++ b/autobahn/client/hornbeam_case_3_2.html @@ -0,0 +1,314 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 3.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>1003</b> ms @ 2023-08-10T21:35:01.128Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send again with <b>RSV = 2</b>, then send Ping.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since RSV must be 0, when no extension defining RSV meaning has been negotiated. The Pong is not received.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'Hello, world!', False)], 'NON-STRICT': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'Hello, world!', False), ('message', u'Hello, world!', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=29&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: TF1XyW3Pz2T5tqUGE4Qn2Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: w5easVyCDxSPHhF9wVyfT8Ca6Vc=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>37</td><td>1</td><td>37</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>239</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>15</td><td>2</td><td>30</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>5</td><td>252</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3239266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=1, FIN=True, RSV=2, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: a10d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8900</pre> + <pre class="wirelog_kill_after">008 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">009 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8d0c120c99447760f5633e2cee636060fd2d818dddcc68f495a90498b2e04883b2be0490fc</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=3063313230633939</pre> + <pre class="wirelog_rx_frame"> Hello, world!</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=6464636336386634</pre> + <pre class="wirelog_rx_frame"> Hello, world!</pre> + <pre class="wirelog_kill_after">013 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">014 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">015 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">016 RX OCTETS: 888c53f4cde9501d8a863a9aaac91283ac90</pre> + <pre class="wirelog_rx_frame">017 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3533663463646539</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">018 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_3_2.json b/autobahn/client/hornbeam_case_3_2.json new file mode 100644 index 0000000..9b2d800 --- /dev/null +++ b/autobahn/client/hornbeam_case_3_2.json @@ -0,0 +1,252 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 29, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send small text message, then send again with <b>RSV = 2</b>, then send Ping.", + "droppedByMe": true, + "duration": 1003, + "expectation": "Echo for first message is received, but then connection is failed immediately, since RSV must be 0, when no extension defining RSV meaning has been negotiated. The Pong is not received.", + "expected": { + "NON-STRICT": [], + "OK": [ + [ + "message", + "Hello, world!", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=29&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: TF1XyW3Pz2T5tqUGE4Qn2Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: w5easVyCDxSPHhF9wVyfT8Ca6Vc=\r\n\r\n", + "id": "3.2", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "Hello, world!", + false + ], + [ + "message", + "Hello, world!", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 2, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "37": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:01.128Z", + "trafficStats": null, + "txFrameStats": { + "1": 2, + "8": 1, + "9": 1 + }, + "txOctetStats": { + "2": 1, + "14": 1, + "15": 2, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3239266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 15, + "810d48656c6c6f2c20776f726c6421" + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 2, + null, + null, + null, + false + ], + [ + "TO", + [ + 15, + "a10d48656c6c6f2c20776f726c6421" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8900" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 37, + "8d0c120c99447760f5633e2cee636060fd2d818dddcc68f495a90498b2e04883b2be0490fc" + ] + ], + [ + "RF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + true, + "0c120c99" + ], + [ + "RF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + true, + "ddcc68f4" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c53f4cde9501d8a863a9aaac91283ac90" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "53f4cde9" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_3_3.html b/autobahn/client/hornbeam_case_3_3.html new file mode 100644 index 0000000..788ba10 --- /dev/null +++ b/autobahn/client/hornbeam_case_3_3.html @@ -0,0 +1,314 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 3.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>1002</b> ms @ 2023-08-10T21:35:02.133Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send again with <b>RSV = 3</b>, then send Ping. Octets are sent in frame-wise chops. Octets are sent in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since RSV must be 0, when no extension defining RSV meaning has been negotiated. The Pong is not received.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'Hello, world!', False)], 'NON-STRICT': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'Hello, world!', False), ('message', u'Hello, world!', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=30&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 8gjTePJbHbHRcTw6bJbE9w== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: WLUK+R5JIm/apAZOOiJaoMSQJi8=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>37</td><td>1</td><td>37</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>239</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>15</td><td>2</td><td>30</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>5</td><td>252</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3330266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_tx_frame_sync"> Hello, world!</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 810d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_tx_frame_sync">004 TX FRAME : OPCODE=1, FIN=True, RSV=3, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_tx_frame_sync"> Hello, world!</pre> + <pre class="wirelog_tx_frame_sync">005 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_kill_after">006 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">007 TX OCTETS: b10d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_tx_octets_sync">008 TX OCTETS: 8900</pre> + <pre class="wirelog_rx_octets">009 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8dbdee7e1af58b1276d2c25e6dd29c127e9c818d765789f13e32e59d197ba9861925e59557</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=6264656537653161</pre> + <pre class="wirelog_rx_frame"> Hello, world!</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=3736353738396631</pre> + <pre class="wirelog_rx_frame"> Hello, world!</pre> + <pre class="wirelog_kill_after">013 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">014 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">015 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">016 RX OCTETS: 888cb673cf56b59a8839df1da876f704ae2f</pre> + <pre class="wirelog_rx_frame">017 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6236373363663536</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">018 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_3_3.json b/autobahn/client/hornbeam_case_3_3.json new file mode 100644 index 0000000..c50d1c4 --- /dev/null +++ b/autobahn/client/hornbeam_case_3_3.json @@ -0,0 +1,252 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 30, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send small text message, then send again with <b>RSV = 3</b>, then send Ping. Octets are sent in frame-wise chops. Octets are sent in octet-wise chops.", + "droppedByMe": true, + "duration": 1002, + "expectation": "Echo for first message is received, but then connection is failed immediately, since RSV must be 0, when no extension defining RSV meaning has been negotiated. The Pong is not received.", + "expected": { + "NON-STRICT": [], + "OK": [ + [ + "message", + "Hello, world!", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=30&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 8gjTePJbHbHRcTw6bJbE9w==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: WLUK+R5JIm/apAZOOiJaoMSQJi8=\r\n\r\n", + "id": "3.3", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "Hello, world!", + false + ], + [ + "message", + "Hello, world!", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 2, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "37": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:02.133Z", + "trafficStats": null, + "txFrameStats": { + "1": 2, + "8": 1, + "9": 1 + }, + "txOctetStats": { + "2": 1, + "14": 1, + "15": 2, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3330266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + null, + true + ], + [ + "TO", + [ + 15, + "810d48656c6c6f2c20776f726c6421" + ], + true + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 3, + null, + null, + null, + true + ], + [ + "TF", + [ + 0, + "" + ], + 9, + true, + 0, + null, + null, + null, + true + ], + [ + "KL", + 1 + ], + [ + "TO", + [ + 15, + "b10d48656c6c6f2c20776f726c6421" + ], + true + ], + [ + "TO", + [ + 2, + "8900" + ], + true + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 37, + "8dbdee7e1af58b1276d2c25e6dd29c127e9c818d765789f13e32e59d197ba9861925e59557" + ] + ], + [ + "RF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + true, + "bdee7e1a" + ], + [ + "RF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + true, + "765789f1" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cb673cf56b59a8839df1da876f704ae2f" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "b673cf56" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_3_4.html b/autobahn/client/hornbeam_case_3_4.html new file mode 100644 index 0000000..129561f --- /dev/null +++ b/autobahn/client/hornbeam_case_3_4.html @@ -0,0 +1,341 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 3.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>1003</b> ms @ 2023-08-10T21:35:03.137Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send again with <b>RSV = 4</b>, then send Ping. Octets are sent in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since RSV must be 0, when no extension defining RSV meaning has been negotiated. The Pong is not received.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'Hello, world!', False)], 'NON-STRICT': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'Hello, world!', False), ('message', u'Hello, world!', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=31&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: dp7WZ5wnC4rHMJA/tgLGIA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: aAmnsEzsNUfy3nF7aRQkEA8xrMU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>19</td><td>2</td><td>38</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>239</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>32</td><td>32</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>34</td><td>252</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3331266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> Hello, world!</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 81</pre> + <pre class="wirelog_tx_frame_sync">004 TX FRAME : OPCODE=1, FIN=True, RSV=4, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> Hello, world!</pre> + <pre class="wirelog_tx_frame_sync">005 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_kill_after">006 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">007 TX OCTETS: 0d</pre> + <pre class="wirelog_tx_octets_sync">008 TX OCTETS: 48</pre> + <pre class="wirelog_tx_octets_sync">009 TX OCTETS: 65</pre> + <pre class="wirelog_tx_octets_sync">010 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">011 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">012 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">013 TX OCTETS: 2c</pre> + <pre class="wirelog_tx_octets_sync">014 TX OCTETS: 20</pre> + <pre class="wirelog_tx_octets_sync">015 TX OCTETS: 77</pre> + <pre class="wirelog_tx_octets_sync">016 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">017 TX OCTETS: 72</pre> + <pre class="wirelog_tx_octets_sync">018 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">019 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">020 TX OCTETS: 21</pre> + <pre class="wirelog_tx_octets_sync">021 TX OCTETS: c1</pre> + <pre class="wirelog_tx_octets_sync">022 TX OCTETS: 0d</pre> + <pre class="wirelog_tx_octets_sync">023 TX OCTETS: 48</pre> + <pre class="wirelog_tx_octets_sync">024 TX OCTETS: 65</pre> + <pre class="wirelog_rx_octets">025 RX OCTETS: 818dc37157f18b143b9dac5d7786ac033b95e2</pre> + <pre class="wirelog_rx_frame">026 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=6333373135376631</pre> + <pre class="wirelog_rx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets_sync">027 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">028 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">029 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">030 TX OCTETS: 2c</pre> + <pre class="wirelog_tx_octets_sync">031 TX OCTETS: 20</pre> + <pre class="wirelog_tx_octets_sync">032 TX OCTETS: 77</pre> + <pre class="wirelog_tx_octets_sync">033 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">034 TX OCTETS: 72</pre> + <pre class="wirelog_tx_octets_sync">035 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">036 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">037 TX OCTETS: 21</pre> + <pre class="wirelog_tx_octets_sync">038 TX OCTETS: 89</pre> + <pre class="wirelog_tx_octets_sync">039 TX OCTETS: 00</pre> + <pre class="wirelog_rx_octets">040 RX OCTETS: 818d6b2ff793234a9bff0403d7e4045d9bf74a</pre> + <pre class="wirelog_rx_frame">041 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=3662326666373933</pre> + <pre class="wirelog_rx_frame"> Hello, world!</pre> + <pre class="wirelog_kill_after">042 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">043 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">044 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">045 RX OCTETS: 888c8188e4608261a30fe8e68340c0ff8519</pre> + <pre class="wirelog_rx_frame">046 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3831383865343630</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">047 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_3_4.json b/autobahn/client/hornbeam_case_3_4.json new file mode 100644 index 0000000..baf6660 --- /dev/null +++ b/autobahn/client/hornbeam_case_3_4.json @@ -0,0 +1,482 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 31, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send small text message, then send again with <b>RSV = 4</b>, then send Ping. Octets are sent in octet-wise chops.", + "droppedByMe": true, + "duration": 1003, + "expectation": "Echo for first message is received, but then connection is failed immediately, since RSV must be 0, when no extension defining RSV meaning has been negotiated. The Pong is not received.", + "expected": { + "NON-STRICT": [], + "OK": [ + [ + "message", + "Hello, world!", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=31&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: dp7WZ5wnC4rHMJA/tgLGIA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: aAmnsEzsNUfy3nF7aRQkEA8xrMU=\r\n\r\n", + "id": "3.4", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "Hello, world!", + false + ], + [ + "message", + "Hello, world!", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 2, + "8": 1 + }, + "rxOctetStats": { + "18": 1, + "19": 2, + "183": 1 + }, + "started": "2023-08-10T21:35:03.137Z", + "trafficStats": null, + "txFrameStats": { + "1": 2, + "8": 1, + "9": 1 + }, + "txOctetStats": { + "1": 32, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3331266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + 1, + false + ], + [ + "TO", + [ + 1, + "81" + ], + true + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 4, + null, + null, + 1, + false + ], + [ + "TF", + [ + 0, + "" + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "KL", + 1 + ], + [ + "TO", + [ + 1, + "0d" + ], + true + ], + [ + "TO", + [ + 1, + "48" + ], + true + ], + [ + "TO", + [ + 1, + "65" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "2c" + ], + true + ], + [ + "TO", + [ + 1, + "20" + ], + true + ], + [ + "TO", + [ + 1, + "77" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "72" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "21" + ], + true + ], + [ + "TO", + [ + 1, + "c1" + ], + true + ], + [ + "TO", + [ + 1, + "0d" + ], + true + ], + [ + "TO", + [ + 1, + "48" + ], + true + ], + [ + "TO", + [ + 1, + "65" + ], + true + ], + [ + "RO", + [ + 19, + "818dc37157f18b143b9dac5d7786ac033b95e2" + ] + ], + [ + "RF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + true, + "c37157f1" + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "2c" + ], + true + ], + [ + "TO", + [ + 1, + "20" + ], + true + ], + [ + "TO", + [ + 1, + "77" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "72" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "21" + ], + true + ], + [ + "TO", + [ + 1, + "89" + ], + true + ], + [ + "TO", + [ + 1, + "00" + ], + true + ], + [ + "RO", + [ + 19, + "818d6b2ff793234a9bff0403d7e4045d9bf74a" + ] + ], + [ + "RF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + true, + "6b2ff793" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c8188e4608261a30fe8e68340c0ff8519" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "8188e460" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_3_5.html b/autobahn/client/hornbeam_case_3_5.html new file mode 100644 index 0000000..d09303b --- /dev/null +++ b/autobahn/client/hornbeam_case_3_5.html @@ -0,0 +1,300 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 3.5</b></span> : Pass - <span style="font-size: 0.9em;"><b>44</b> ms @ 2023-08-10T21:35:04.142Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small binary message with <b>RSV = 5</b>.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since RSV must be 0.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=32&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 9ohr07Qn6Jkv6/ut8EcTuA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: VhvsmDR99sZALI27wmyJWEpiEiM=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1007</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">encountered invalid UTF-8 while processing text message at payload octet index 1</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>13</td><td>1</td><td>13</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>197</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>10</td><td>1</td><td>10</td></tr> + <tr class="stats_row"><td>84</td><td>1</td><td>84</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>300</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3332266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=2, FIN=True, RSV=5, PAYLOAD-LEN=8, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x00fffefdfcfb00ff</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: d20800fffefdfcfb00ff</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 88975aec3497a512c96ba1eccb</pre> + <pre class="wirelog_tx_frame">007 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=82, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03ef656e636f756e746572656420696e76616c6964205554462d38207768696c652070726f63657373696e672074657874</pre> + <pre class="wirelog_tx_frame"> 206d65737361676520617420706179 ...</pre> + <pre class="wirelog_tx_octets">008 TX OCTETS: 885203ef656e636f756e746572656420696e76616c6964205554462d38207768696c652070726f63657373696e6720746578</pre> + <pre class="wirelog_tx_octets"> 74206d6573736167652061742070 ...</pre> + <pre class="wirelog_rx_frame">009 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=3937356165633334</pre> + <pre class="wirelog_tcp_closed_by_me">010 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_3_5.json b/autobahn/client/hornbeam_case_3_5.json new file mode 100644 index 0000000..f966525 --- /dev/null +++ b/autobahn/client/hornbeam_case_3_5.json @@ -0,0 +1,152 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "FAILED", + "case": 32, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send small binary message with <b>RSV = 5</b>.", + "droppedByMe": true, + "duration": 44, + "expectation": "The connection is failed immediately, since RSV must be 0.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=32&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 9ohr07Qn6Jkv6/ut8EcTuA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: VhvsmDR99sZALI27wmyJWEpiEiM=\r\n\r\n", + "id": "3.5", + "isServer": true, + "localCloseCode": 1007, + "localCloseReason": "encountered invalid UTF-8 while processing text message at payload octet index 1", + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "13": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:04.142Z", + "trafficStats": null, + "txFrameStats": { + "2": 1, + "8": 1 + }, + "txOctetStats": { + "10": 1, + "84": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3332266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 8, + "0x00fffefdfcfb00ff" + ], + 2, + true, + 5, + null, + null, + null, + false + ], + [ + "TO", + [ + 10, + "d20800fffefdfcfb00ff" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 13, + "88975aec3497a512c96ba1eccb" + ] + ], + [ + "TF", + [ + 82, + "0x03ef656e636f756e746572656420696e76616c6964205554462d38207768696c652070726f63657373696e672074657874206d65737361676520617420706179 ..." + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 84, + "885203ef656e636f756e746572656420696e76616c6964205554462d38207768696c652070726f63657373696e672074657874206d6573736167652061742070 ..." + ], + false + ], + [ + "RF", + [ + 0, + "" + ], + 1, + true, + 0, + true, + "975aec34" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_3_6.html b/autobahn/client/hornbeam_case_3_6.html new file mode 100644 index 0000000..433d4ab --- /dev/null +++ b/autobahn/client/hornbeam_case_3_6.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 3.6</b></span> : Fail - <span style="font-size: 0.9em;"><b>1003</b> ms @ 2023-08-10T21:35:04.189Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send Ping with <b>RSV = 6</b>.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since RSV must be 0.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'Hello, world!', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=33&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: RZzLsvFUxrEPiln/rPHU6Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 1L2jKUaU3MFErrAUFw1xqVRembo=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>2</td><td>36</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>220</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>15</td><td>1</td><td>15</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>235</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3333266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=2, FIN=True, RSV=6, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: e20d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8dc660bfe08e05d38ca94c9f97a912d384e7</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=6336363062666530</pre> + <pre class="wirelog_rx_frame"> Hello, world!</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cba213ad7b9c87db8d34f5df7fb565bae</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6261323133616437</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_3_6.json b/autobahn/client/hornbeam_case_3_6.json new file mode 100644 index 0000000..3031929 --- /dev/null +++ b/autobahn/client/hornbeam_case_3_6.json @@ -0,0 +1,181 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 33, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send Ping with <b>RSV = 6</b>.", + "droppedByMe": true, + "duration": 1003, + "expectation": "The connection is failed immediately, since RSV must be 0.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=33&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: RZzLsvFUxrEPiln/rPHU6Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 1L2jKUaU3MFErrAUFw1xqVRembo=\r\n\r\n", + "id": "3.6", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "Hello, world!", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 2, + "183": 1 + }, + "started": "2023-08-10T21:35:04.189Z", + "trafficStats": null, + "txFrameStats": { + "2": 1, + "8": 1 + }, + "txOctetStats": { + "14": 1, + "15": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3333266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 2, + true, + 6, + null, + null, + null, + false + ], + [ + "TO", + [ + 15, + "e20d48656c6c6f2c20776f726c6421" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 18, + "8dc660bfe08e05d38ca94c9f97a912d384e7" + ] + ], + [ + "RF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + true, + "c660bfe0" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cba213ad7b9c87db8d34f5df7fb565bae" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "ba213ad7" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_3_7.html b/autobahn/client/hornbeam_case_3_7.html new file mode 100644 index 0000000..3430c67 --- /dev/null +++ b/autobahn/client/hornbeam_case_3_7.html @@ -0,0 +1,294 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 3.7</b></span> : Pass - <span style="font-size: 0.9em;"><b>3</b> ms @ 2023-08-10T21:35:05.194Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send Close with <b>RSV = 7</b>.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since RSV must be 0.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=34&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: CZDLv2QuYZH/hFwktO2kEA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: N+I+7rmN3soZJAZVf8TlVrki3hk=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>189</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>212</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>2</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3334266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=7, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: f800</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8880fd29fbf7</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=6664323966626637</pre> + <pre class="wirelog_tx_frame">007 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">008 TX OCTETS: 880203e8</pre> + <pre class="wirelog_tcp_closed_by_me">009 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_3_7.json b/autobahn/client/hornbeam_case_3_7.json new file mode 100644 index 0000000..bb29bcf --- /dev/null +++ b/autobahn/client/hornbeam_case_3_7.json @@ -0,0 +1,143 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 34, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send Close with <b>RSV = 7</b>.", + "droppedByMe": true, + "duration": 3, + "expectation": "The connection is failed immediately, since RSV must be 0.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=34&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: CZDLv2QuYZH/hFwktO2kEA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: N+I+7rmN3soZJAZVf8TlVrki3hk=\r\n\r\n", + "id": "3.7", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "6": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.194Z", + "trafficStats": null, + "txFrameStats": { + "8": 2 + }, + "txOctetStats": { + "2": 1, + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3334266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 8, + true, + 7, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "f800" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 6, + "8880fd29fbf7" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 8, + true, + 0, + true, + "fd29fbf7" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_4_1_1.html b/autobahn/client/hornbeam_case_4_1_1.html new file mode 100644 index 0000000..b297700 --- /dev/null +++ b/autobahn/client/hornbeam_case_4_1_1.html @@ -0,0 +1,286 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 4.1.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:05.199Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send frame with reserved non-control <b>Opcode = 3</b>.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=35&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: svks6Gtcfaz1a2Togfyemw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: BDxi/D4ZQa9ec6HPSTymWdgPeh0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>183</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>208</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>3</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3335266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=3, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8300</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tcp_closed_by_peer">005 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_4_1_1.json b/autobahn/client/hornbeam_case_4_1_1.json new file mode 100644 index 0000000..685a17d --- /dev/null +++ b/autobahn/client/hornbeam_case_4_1_1.json @@ -0,0 +1,98 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 35, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send frame with reserved non-control <b>Opcode = 3</b>.", + "droppedByMe": false, + "duration": 2, + "expectation": "The connection is failed immediately.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=35&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: svks6Gtcfaz1a2Togfyemw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: BDxi/D4ZQa9ec6HPSTymWdgPeh0=\r\n\r\n", + "id": "4.1.1", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "183": 1 + }, + "started": "2023-08-10T21:35:05.199Z", + "trafficStats": null, + "txFrameStats": { + "3": 1 + }, + "txOctetStats": { + "2": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3335266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 3, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8300" + ], + false + ], + [ + "KL", + 1 + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_4_1_2.html b/autobahn/client/hornbeam_case_4_1_2.html new file mode 100644 index 0000000..616133d --- /dev/null +++ b/autobahn/client/hornbeam_case_4_1_2.html @@ -0,0 +1,287 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 4.1.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:05.205Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send frame with reserved non-control <b>Opcode = 4</b> and non-empty payload.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=36&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: c/E5teCd22avk2hafenpqA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: UMxp3lzEfRYRiKcTI3RDNDFQxEQ=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>183</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>25</td><td>1</td><td>25</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>231</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>4</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3336266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=4, FIN=True, RSV=0, PAYLOAD-LEN=23, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> reserved opcode payload</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 84177265736572766564206f70636f6465207061796c6f6164</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tcp_closed_by_peer">005 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_4_1_2.json b/autobahn/client/hornbeam_case_4_1_2.json new file mode 100644 index 0000000..b278a2f --- /dev/null +++ b/autobahn/client/hornbeam_case_4_1_2.json @@ -0,0 +1,98 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 36, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send frame with reserved non-control <b>Opcode = 4</b> and non-empty payload.", + "droppedByMe": false, + "duration": 2, + "expectation": "The connection is failed immediately.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=36&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: c/E5teCd22avk2hafenpqA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: UMxp3lzEfRYRiKcTI3RDNDFQxEQ=\r\n\r\n", + "id": "4.1.2", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "183": 1 + }, + "started": "2023-08-10T21:35:05.205Z", + "trafficStats": null, + "txFrameStats": { + "4": 1 + }, + "txOctetStats": { + "25": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3336266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 23, + "reserved opcode payload" + ], + 4, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 25, + "84177265736572766564206f70636f6465207061796c6f6164" + ], + false + ], + [ + "KL", + 1 + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_4_1_3.html b/autobahn/client/hornbeam_case_4_1_3.html new file mode 100644 index 0000000..b645bb1 --- /dev/null +++ b/autobahn/client/hornbeam_case_4_1_3.html @@ -0,0 +1,299 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 4.1.3</b></span> : Pass - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:05.209Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send frame with reserved non-control <b>Opcode = 5</b>, then send Ping.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'Hello, world!', False)], 'NON-STRICT': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'Hello, world!', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=37&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: w+fAy01nPSrtcRfYnTrRVA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: KyK+SWnzaxPPEd7OoGDLA6jrCr8=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>19</td><td>1</td><td>19</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>2</td><td>4</td></tr> + <tr class="stats_row"><td>15</td><td>1</td><td>15</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>5</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3337266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=5, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 8500</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8900</pre> + <pre class="wirelog_kill_after">008 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">009 RX OCTETS: 818dce08f567866d990ba124d510a17a9903ef</pre> + <pre class="wirelog_rx_frame">010 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=6365303866353637</pre> + <pre class="wirelog_rx_frame"> Hello, world!</pre> + <pre class="wirelog_tcp_closed_by_peer">011 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_4_1_3.json b/autobahn/client/hornbeam_case_4_1_3.json new file mode 100644 index 0000000..4432c83 --- /dev/null +++ b/autobahn/client/hornbeam_case_4_1_3.json @@ -0,0 +1,180 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 37, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send small text message, then send frame with reserved non-control <b>Opcode = 5</b>, then send Ping.", + "droppedByMe": false, + "duration": 2, + "expectation": "Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.", + "expected": { + "NON-STRICT": [], + "OK": [ + [ + "message", + "Hello, world!", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=37&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: w+fAy01nPSrtcRfYnTrRVA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: KyK+SWnzaxPPEd7OoGDLA6jrCr8=\r\n\r\n", + "id": "4.1.3", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "Hello, world!", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "19": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.209Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "5": 1, + "9": 1 + }, + "txOctetStats": { + "2": 2, + "15": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3337266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 15, + "810d48656c6c6f2c20776f726c6421" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 5, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8500" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8900" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 19, + "818dce08f567866d990ba124d510a17a9903ef" + ] + ], + [ + "RF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + true, + "ce08f567" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_4_1_4.html b/autobahn/client/hornbeam_case_4_1_4.html new file mode 100644 index 0000000..83570f5 --- /dev/null +++ b/autobahn/client/hornbeam_case_4_1_4.html @@ -0,0 +1,300 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 4.1.4</b></span> : Pass - <span style="font-size: 0.9em;"><b>3</b> ms @ 2023-08-10T21:35:05.213Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send frame with reserved non-control <b>Opcode = 6</b> and non-empty payload, then send Ping.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'Hello, world!', False)], 'NON-STRICT': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'Hello, world!', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=38&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: H2Iup27g/uO87gswLW7L5w== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: WUAuTdZcoVR+C8AX2ZdMyZ5dlgI=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>19</td><td>1</td><td>19</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>15</td><td>2</td><td>30</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>238</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>6</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3338266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=6, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 860d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8900</pre> + <pre class="wirelog_kill_after">008 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">009 RX OCTETS: 818ddc20d0529445bc3eb30cf025b352bc36fd</pre> + <pre class="wirelog_rx_frame">010 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=6463323064303532</pre> + <pre class="wirelog_rx_frame"> Hello, world!</pre> + <pre class="wirelog_tcp_closed_by_peer">011 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_4_1_4.json b/autobahn/client/hornbeam_case_4_1_4.json new file mode 100644 index 0000000..f9196d0 --- /dev/null +++ b/autobahn/client/hornbeam_case_4_1_4.json @@ -0,0 +1,180 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 38, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send small text message, then send frame with reserved non-control <b>Opcode = 6</b> and non-empty payload, then send Ping.", + "droppedByMe": false, + "duration": 3, + "expectation": "Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.", + "expected": { + "NON-STRICT": [], + "OK": [ + [ + "message", + "Hello, world!", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=38&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: H2Iup27g/uO87gswLW7L5w==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: WUAuTdZcoVR+C8AX2ZdMyZ5dlgI=\r\n\r\n", + "id": "4.1.4", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "Hello, world!", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "19": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.213Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "6": 1, + "9": 1 + }, + "txOctetStats": { + "2": 1, + "15": 2, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3338266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 15, + "810d48656c6c6f2c20776f726c6421" + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 6, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 15, + "860d48656c6c6f2c20776f726c6421" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8900" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 19, + "818ddc20d0529445bc3eb30cf025b352bc36fd" + ] + ], + [ + "RF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + true, + "dc20d052" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_4_1_5.html b/autobahn/client/hornbeam_case_4_1_5.html new file mode 100644 index 0000000..44f4cb0 --- /dev/null +++ b/autobahn/client/hornbeam_case_4_1_5.html @@ -0,0 +1,317 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 4.1.5</b></span> : Pass - <span style="font-size: 0.9em;"><b>7</b> ms @ 2023-08-10T21:35:05.218Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send frame with reserved non-control <b>Opcode = 7</b> and non-empty payload, then send Ping.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'Hello, world!', False)], 'NON-STRICT': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'Hello, world!', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=39&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Pe6K4fXcdMVElcNFENckLw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: gsMylNBTCZwL2nGdnFLPieMhE+s=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>19</td><td>19</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>20</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>7</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3339266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> Hello, world!</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 81</pre> + <pre class="wirelog_tx_frame_sync">004 TX FRAME : OPCODE=7, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> Hello, world!</pre> + <pre class="wirelog_tx_frame_sync">005 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_kill_after">006 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">007 TX OCTETS: 0d</pre> + <pre class="wirelog_tx_octets_sync">008 TX OCTETS: 48</pre> + <pre class="wirelog_tx_octets_sync">009 TX OCTETS: 65</pre> + <pre class="wirelog_tx_octets_sync">010 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">011 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">012 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">013 TX OCTETS: 2c</pre> + <pre class="wirelog_tx_octets_sync">014 TX OCTETS: 20</pre> + <pre class="wirelog_tx_octets_sync">015 TX OCTETS: 77</pre> + <pre class="wirelog_tx_octets_sync">016 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">017 TX OCTETS: 72</pre> + <pre class="wirelog_tx_octets_sync">018 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">019 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">020 TX OCTETS: 21</pre> + <pre class="wirelog_tx_octets_sync">021 TX OCTETS: 87</pre> + <pre class="wirelog_rx_octets">022 RX OCTETS: 81</pre> + <pre class="wirelog_tx_octets_sync">023 TX OCTETS: 0d</pre> + <pre class="wirelog_rx_octets">024 RX OCTETS: 8d88584877c03d241be7746800e72a2413a9</pre> + <pre class="wirelog_rx_frame">025 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=3838353834383737</pre> + <pre class="wirelog_rx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets_sync">026 TX OCTETS: 48</pre> + <pre class="wirelog_tx_octets_sync">027 TX OCTETS: 65</pre> + <pre class="wirelog_tcp_closed_by_peer">028 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_4_1_5.json b/autobahn/client/hornbeam_case_4_1_5.json new file mode 100644 index 0000000..08b6b12 --- /dev/null +++ b/autobahn/client/hornbeam_case_4_1_5.json @@ -0,0 +1,315 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 39, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send small text message, then send frame with reserved non-control <b>Opcode = 7</b> and non-empty payload, then send Ping.", + "droppedByMe": false, + "duration": 7, + "expectation": "Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.", + "expected": { + "NON-STRICT": [], + "OK": [ + [ + "message", + "Hello, world!", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=39&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Pe6K4fXcdMVElcNFENckLw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: gsMylNBTCZwL2nGdnFLPieMhE+s=\r\n\r\n", + "id": "4.1.5", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "Hello, world!", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.218Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "7": 1, + "9": 1 + }, + "txOctetStats": { + "1": 19, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3339266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + 1, + false + ], + [ + "TO", + [ + 1, + "81" + ], + true + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 7, + true, + 0, + null, + null, + 1, + false + ], + [ + "TF", + [ + 0, + "" + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "KL", + 1 + ], + [ + "TO", + [ + 1, + "0d" + ], + true + ], + [ + "TO", + [ + 1, + "48" + ], + true + ], + [ + "TO", + [ + 1, + "65" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "2c" + ], + true + ], + [ + "TO", + [ + 1, + "20" + ], + true + ], + [ + "TO", + [ + 1, + "77" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "72" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "21" + ], + true + ], + [ + "TO", + [ + 1, + "87" + ], + true + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "TO", + [ + 1, + "0d" + ], + true + ], + [ + "RO", + [ + 18, + "8d88584877c03d241be7746800e72a2413a9" + ] + ], + [ + "RF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + true, + "88584877" + ], + [ + "TO", + [ + 1, + "48" + ], + true + ], + [ + "TO", + [ + 1, + "65" + ], + true + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_4_2_1.html b/autobahn/client/hornbeam_case_4_2_1.html new file mode 100644 index 0000000..a245b29 --- /dev/null +++ b/autobahn/client/hornbeam_case_4_2_1.html @@ -0,0 +1,286 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 4.2.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:05.226Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send frame with reserved control <b>Opcode = 11</b>.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=40&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: TnK86ikI/IYj5wEKeR1vlg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: EILsN2EhenOURYhvhnSjAzJaqIM=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>183</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>208</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>11</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3430266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=11, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8b00</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tcp_closed_by_peer">005 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_4_2_1.json b/autobahn/client/hornbeam_case_4_2_1.json new file mode 100644 index 0000000..5cb696f --- /dev/null +++ b/autobahn/client/hornbeam_case_4_2_1.json @@ -0,0 +1,98 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 40, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send frame with reserved control <b>Opcode = 11</b>.", + "droppedByMe": false, + "duration": 1, + "expectation": "The connection is failed immediately.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=40&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: TnK86ikI/IYj5wEKeR1vlg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: EILsN2EhenOURYhvhnSjAzJaqIM=\r\n\r\n", + "id": "4.2.1", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "183": 1 + }, + "started": "2023-08-10T21:35:05.226Z", + "trafficStats": null, + "txFrameStats": { + "11": 1 + }, + "txOctetStats": { + "2": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3430266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 11, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8b00" + ], + false + ], + [ + "KL", + 1 + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_4_2_2.html b/autobahn/client/hornbeam_case_4_2_2.html new file mode 100644 index 0000000..93e9c94 --- /dev/null +++ b/autobahn/client/hornbeam_case_4_2_2.html @@ -0,0 +1,287 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 4.2.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:05.229Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send frame with reserved control <b>Opcode = 12</b> and non-empty payload.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=41&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: ZDW2zsi0iTuX88ZZzv0abQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 39Lmrwo+GXyKpcWH+FfG2eGFtlE=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>183</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>25</td><td>1</td><td>25</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>231</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>12</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3431266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=12, FIN=True, RSV=0, PAYLOAD-LEN=23, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> reserved opcode payload</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8c177265736572766564206f70636f6465207061796c6f6164</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tcp_closed_by_peer">005 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_4_2_2.json b/autobahn/client/hornbeam_case_4_2_2.json new file mode 100644 index 0000000..493feae --- /dev/null +++ b/autobahn/client/hornbeam_case_4_2_2.json @@ -0,0 +1,98 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 41, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send frame with reserved control <b>Opcode = 12</b> and non-empty payload.", + "droppedByMe": false, + "duration": 1, + "expectation": "The connection is failed immediately.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=41&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: ZDW2zsi0iTuX88ZZzv0abQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 39Lmrwo+GXyKpcWH+FfG2eGFtlE=\r\n\r\n", + "id": "4.2.2", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "183": 1 + }, + "started": "2023-08-10T21:35:05.229Z", + "trafficStats": null, + "txFrameStats": { + "12": 1 + }, + "txOctetStats": { + "25": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3431266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 23, + "reserved opcode payload" + ], + 12, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 25, + "8c177265736572766564206f70636f6465207061796c6f6164" + ], + false + ], + [ + "KL", + 1 + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_4_2_3.html b/autobahn/client/hornbeam_case_4_2_3.html new file mode 100644 index 0000000..0a28c5b --- /dev/null +++ b/autobahn/client/hornbeam_case_4_2_3.html @@ -0,0 +1,299 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 4.2.3</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:05.231Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send frame with reserved control <b>Opcode = 13</b>, then send Ping.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'Hello, world!', False)], 'NON-STRICT': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'Hello, world!', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=42&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: BCFPNZN/In/JQcXsqju6Lg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: mXoDmCQsQz25V0XOihwZSGbe92Y=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>19</td><td>1</td><td>19</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>2</td><td>4</td></tr> + <tr class="stats_row"><td>15</td><td>1</td><td>15</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_row"><td>13</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3432266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=13, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 8d00</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8900</pre> + <pre class="wirelog_kill_after">008 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">009 RX OCTETS: 818dfe4ceb32b629875e9160cb45913e8756df</pre> + <pre class="wirelog_rx_frame">010 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=6665346365623332</pre> + <pre class="wirelog_rx_frame"> Hello, world!</pre> + <pre class="wirelog_tcp_closed_by_peer">011 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_4_2_3.json b/autobahn/client/hornbeam_case_4_2_3.json new file mode 100644 index 0000000..9208b2d --- /dev/null +++ b/autobahn/client/hornbeam_case_4_2_3.json @@ -0,0 +1,180 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 42, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send small text message, then send frame with reserved control <b>Opcode = 13</b>, then send Ping.", + "droppedByMe": false, + "duration": 1, + "expectation": "Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.", + "expected": { + "NON-STRICT": [], + "OK": [ + [ + "message", + "Hello, world!", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=42&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: BCFPNZN/In/JQcXsqju6Lg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: mXoDmCQsQz25V0XOihwZSGbe92Y=\r\n\r\n", + "id": "4.2.3", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "Hello, world!", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "19": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.231Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "9": 1, + "13": 1 + }, + "txOctetStats": { + "2": 2, + "15": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3432266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 15, + "810d48656c6c6f2c20776f726c6421" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 13, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8d00" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8900" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 19, + "818dfe4ceb32b629875e9160cb45913e8756df" + ] + ], + [ + "RF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + true, + "fe4ceb32" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_4_2_4.html b/autobahn/client/hornbeam_case_4_2_4.html new file mode 100644 index 0000000..69a99d1 --- /dev/null +++ b/autobahn/client/hornbeam_case_4_2_4.html @@ -0,0 +1,300 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 4.2.4</b></span> : Pass - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:05.233Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send frame with reserved control <b>Opcode = 14</b> and non-empty payload, then send Ping.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'Hello, world!', False)], 'NON-STRICT': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'Hello, world!', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=43&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: AadrbgfT47BDZov8x/IBQQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: d2bL6N2Y59ocglQ0GgsY0bPPb1M=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>19</td><td>1</td><td>19</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>15</td><td>2</td><td>30</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>238</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3433266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=14, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 8e0d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8900</pre> + <pre class="wirelog_kill_after">008 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">009 RX OCTETS: 818df93d2edfb15842b396110ea8964f42bbd8</pre> + <pre class="wirelog_rx_frame">010 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=6639336432656466</pre> + <pre class="wirelog_rx_frame"> Hello, world!</pre> + <pre class="wirelog_tcp_closed_by_peer">011 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_4_2_4.json b/autobahn/client/hornbeam_case_4_2_4.json new file mode 100644 index 0000000..b377120 --- /dev/null +++ b/autobahn/client/hornbeam_case_4_2_4.json @@ -0,0 +1,180 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 43, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send small text message, then send frame with reserved control <b>Opcode = 14</b> and non-empty payload, then send Ping.", + "droppedByMe": false, + "duration": 2, + "expectation": "Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.", + "expected": { + "NON-STRICT": [], + "OK": [ + [ + "message", + "Hello, world!", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=43&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: AadrbgfT47BDZov8x/IBQQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: d2bL6N2Y59ocglQ0GgsY0bPPb1M=\r\n\r\n", + "id": "4.2.4", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "Hello, world!", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "19": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.233Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "9": 1, + "14": 1 + }, + "txOctetStats": { + "2": 1, + "15": 2, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3433266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 15, + "810d48656c6c6f2c20776f726c6421" + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 14, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 15, + "8e0d48656c6c6f2c20776f726c6421" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8900" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 19, + "818df93d2edfb15842b396110ea8964f42bbd8" + ] + ], + [ + "RF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + true, + "f93d2edf" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_4_2_5.html b/autobahn/client/hornbeam_case_4_2_5.html new file mode 100644 index 0000000..98ff4ec --- /dev/null +++ b/autobahn/client/hornbeam_case_4_2_5.html @@ -0,0 +1,318 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 4.2.5</b></span> : Pass - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:05.236Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send frame with reserved control <b>Opcode = 15</b> and non-empty payload, then send Ping.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'Hello, world!', False)], 'NON-STRICT': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'Hello, world!', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=44&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 0EziuaAzyfZIG6rBvywqMA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: sNYEKUFFR+HT+DV8+L5PrmzKpmE=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>20</td><td>20</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>21</td><td>226</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_row"><td>15</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3434266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> Hello, world!</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 81</pre> + <pre class="wirelog_tx_frame_sync">004 TX FRAME : OPCODE=15, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> Hello, world!</pre> + <pre class="wirelog_tx_frame_sync">005 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_kill_after">006 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">007 TX OCTETS: 0d</pre> + <pre class="wirelog_tx_octets_sync">008 TX OCTETS: 48</pre> + <pre class="wirelog_tx_octets_sync">009 TX OCTETS: 65</pre> + <pre class="wirelog_tx_octets_sync">010 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">011 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">012 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">013 TX OCTETS: 2c</pre> + <pre class="wirelog_tx_octets_sync">014 TX OCTETS: 20</pre> + <pre class="wirelog_tx_octets_sync">015 TX OCTETS: 77</pre> + <pre class="wirelog_tx_octets_sync">016 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">017 TX OCTETS: 72</pre> + <pre class="wirelog_tx_octets_sync">018 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">019 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">020 TX OCTETS: 21</pre> + <pre class="wirelog_tx_octets_sync">021 TX OCTETS: 8f</pre> + <pre class="wirelog_tx_octets_sync">022 TX OCTETS: 0d</pre> + <pre class="wirelog_tx_octets_sync">023 TX OCTETS: 48</pre> + <pre class="wirelog_rx_octets">024 RX OCTETS: 81</pre> + <pre class="wirelog_tx_octets_sync">025 TX OCTETS: 65</pre> + <pre class="wirelog_rx_octets">026 RX OCTETS: 8d1fe05f045785336870cc7f73709233603e</pre> + <pre class="wirelog_rx_frame">027 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=3166653035663034</pre> + <pre class="wirelog_rx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets_sync">028 TX OCTETS: 6c</pre> + <pre class="wirelog_tcp_closed_by_peer">029 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_4_2_5.json b/autobahn/client/hornbeam_case_4_2_5.json new file mode 100644 index 0000000..1e9446b --- /dev/null +++ b/autobahn/client/hornbeam_case_4_2_5.json @@ -0,0 +1,323 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 44, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send small text message, then send frame with reserved control <b>Opcode = 15</b> and non-empty payload, then send Ping.", + "droppedByMe": false, + "duration": 2, + "expectation": "Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.", + "expected": { + "NON-STRICT": [], + "OK": [ + [ + "message", + "Hello, world!", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=44&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 0EziuaAzyfZIG6rBvywqMA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: sNYEKUFFR+HT+DV8+L5PrmzKpmE=\r\n\r\n", + "id": "4.2.5", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "Hello, world!", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.236Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "9": 1, + "15": 1 + }, + "txOctetStats": { + "1": 20, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3434266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + 1, + false + ], + [ + "TO", + [ + 1, + "81" + ], + true + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 15, + true, + 0, + null, + null, + 1, + false + ], + [ + "TF", + [ + 0, + "" + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "KL", + 1 + ], + [ + "TO", + [ + 1, + "0d" + ], + true + ], + [ + "TO", + [ + 1, + "48" + ], + true + ], + [ + "TO", + [ + 1, + "65" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "2c" + ], + true + ], + [ + "TO", + [ + 1, + "20" + ], + true + ], + [ + "TO", + [ + 1, + "77" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "72" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "21" + ], + true + ], + [ + "TO", + [ + 1, + "8f" + ], + true + ], + [ + "TO", + [ + 1, + "0d" + ], + true + ], + [ + "TO", + [ + 1, + "48" + ], + true + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "TO", + [ + 1, + "65" + ], + true + ], + [ + "RO", + [ + 18, + "8d1fe05f045785336870cc7f73709233603e" + ] + ], + [ + "RF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + true, + "1fe05f04" + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_1.html b/autobahn/client/hornbeam_case_5_1.html new file mode 100644 index 0000000..29cbb76 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_1.html @@ -0,0 +1,291 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:05.239Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send Ping fragmented into 2 fragments.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Connection is failed immediately, since control message MUST NOT be fragmented.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=45&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: QVBlPXz72YbdDCkBgeetWA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: XJCz+WUoaygpddANMI5shPj4fgo=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>183</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>11</td><td>2</td><td>22</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3435266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=9, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment1</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 0909667261676d656e7431</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment2</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 8009667261676d656e7432</pre> + <pre class="wirelog_kill_after">006 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tcp_closed_by_peer">007 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_1.json b/autobahn/client/hornbeam_case_5_1.json new file mode 100644 index 0000000..4e0d603 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_1.json @@ -0,0 +1,121 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 45, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send Ping fragmented into 2 fragments.", + "droppedByMe": false, + "duration": 1, + "expectation": "Connection is failed immediately, since control message MUST NOT be fragmented.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=45&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: QVBlPXz72YbdDCkBgeetWA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: XJCz+WUoaygpddANMI5shPj4fgo=\r\n\r\n", + "id": "5.1", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "183": 1 + }, + "started": "2023-08-10T21:35:05.239Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "9": 1 + }, + "txOctetStats": { + "11": 2, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3435266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 9, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0909667261676d656e7431" + ], + false + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8009667261676d656e7432" + ], + false + ], + [ + "KL", + 1 + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_10.html b/autobahn/client/hornbeam_case_5_10.html new file mode 100644 index 0000000..9517e29 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_10.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.10</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:05.273Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unfragmented Text Message after Continuation Frame with FIN = true, where there is nothing to continue, sent in per-frame chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=54&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 4/jVl7xj5m/V4HZrt89R8Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: ovZ+iK0w71hD/T62BUhcy3LMxp8=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>183</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>15</td><td>1</td><td>15</td></tr> + <tr class="stats_row"><td>26</td><td>1</td><td>26</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>247</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3534266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=24, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_tx_frame_sync"> non-continuation payload</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 80186e6f6e2d636f6e74696e756174696f6e207061796c6f6164</pre> + <pre class="wirelog_tx_frame_sync">004 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_tx_frame_sync"> Hello, world!</pre> + <pre class="wirelog_kill_after">005 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">006 TX OCTETS: 810d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_tcp_closed_by_peer">007 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_10.json b/autobahn/client/hornbeam_case_5_10.json new file mode 100644 index 0000000..6ed843a --- /dev/null +++ b/autobahn/client/hornbeam_case_5_10.json @@ -0,0 +1,122 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 54, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send unfragmented Text Message after Continuation Frame with FIN = true, where there is nothing to continue, sent in per-frame chops.", + "droppedByMe": false, + "duration": 1, + "expectation": "The connection is failed immediately, since there is no message to continue.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=54&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 4/jVl7xj5m/V4HZrt89R8Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: ovZ+iK0w71hD/T62BUhcy3LMxp8=\r\n\r\n", + "id": "5.10", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "183": 1 + }, + "started": "2023-08-10T21:35:05.273Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1 + }, + "txOctetStats": { + "15": 1, + "26": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3534266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 24, + "non-continuation payload" + ], + 0, + true, + 0, + null, + null, + null, + true + ], + [ + "TO", + [ + 26, + "80186e6f6e2d636f6e74696e756174696f6e207061796c6f6164" + ], + true + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + null, + true + ], + [ + "KL", + 1 + ], + [ + "TO", + [ + 15, + "810d48656c6c6f2c20776f726c6421" + ], + true + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_11.html b/autobahn/client/hornbeam_case_5_11.html new file mode 100644 index 0000000..4d703c8 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_11.html @@ -0,0 +1,320 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.11</b></span> : Pass - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:05.276Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unfragmented Text Message after Continuation Frame with FIN = true, where there is nothing to continue, sent in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=55&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: dvMm42Nksb9kmcdtMKSi1A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: LGq7tLjXYs2VgaH40TODLDkcekI=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>183</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>31</td><td>31</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>32</td><td>237</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3535266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=24, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> non-continuation payload</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 80</pre> + <pre class="wirelog_tx_frame_sync">004 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> Hello, world!</pre> + <pre class="wirelog_kill_after">005 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">006 TX OCTETS: 18</pre> + <pre class="wirelog_tx_octets_sync">007 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">008 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">009 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">010 TX OCTETS: 2d</pre> + <pre class="wirelog_tx_octets_sync">011 TX OCTETS: 63</pre> + <pre class="wirelog_tx_octets_sync">012 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">013 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">014 TX OCTETS: 74</pre> + <pre class="wirelog_tx_octets_sync">015 TX OCTETS: 69</pre> + <pre class="wirelog_tx_octets_sync">016 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">017 TX OCTETS: 75</pre> + <pre class="wirelog_tx_octets_sync">018 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">019 TX OCTETS: 74</pre> + <pre class="wirelog_tx_octets_sync">020 TX OCTETS: 69</pre> + <pre class="wirelog_tx_octets_sync">021 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">022 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">023 TX OCTETS: 20</pre> + <pre class="wirelog_tx_octets_sync">024 TX OCTETS: 70</pre> + <pre class="wirelog_tx_octets_sync">025 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">026 TX OCTETS: 79</pre> + <pre class="wirelog_tx_octets_sync">027 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">028 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">029 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">030 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">031 TX OCTETS: 81</pre> + <pre class="wirelog_tx_octets_sync">032 TX OCTETS: 0d</pre> + <pre class="wirelog_tx_octets_sync">033 TX OCTETS: 48</pre> + <pre class="wirelog_tx_octets_sync">034 TX OCTETS: 65</pre> + <pre class="wirelog_tx_octets_sync">035 TX OCTETS: 6c</pre> + <pre class="wirelog_tcp_closed_by_peer">036 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_11.json b/autobahn/client/hornbeam_case_5_11.json new file mode 100644 index 0000000..dbefe05 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_11.json @@ -0,0 +1,353 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 55, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send unfragmented Text Message after Continuation Frame with FIN = true, where there is nothing to continue, sent in octet-wise chops.", + "droppedByMe": false, + "duration": 2, + "expectation": "The connection is failed immediately, since there is no message to continue.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=55&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: dvMm42Nksb9kmcdtMKSi1A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: LGq7tLjXYs2VgaH40TODLDkcekI=\r\n\r\n", + "id": "5.11", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "183": 1 + }, + "started": "2023-08-10T21:35:05.276Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1 + }, + "txOctetStats": { + "1": 31, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3535266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 24, + "non-continuation payload" + ], + 0, + true, + 0, + null, + null, + 1, + false + ], + [ + "TO", + [ + 1, + "80" + ], + true + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + 1, + false + ], + [ + "KL", + 1 + ], + [ + "TO", + [ + 1, + "18" + ], + true + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "2d" + ], + true + ], + [ + "TO", + [ + 1, + "63" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "74" + ], + true + ], + [ + "TO", + [ + 1, + "69" + ], + true + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "75" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "74" + ], + true + ], + [ + "TO", + [ + 1, + "69" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "20" + ], + true + ], + [ + "TO", + [ + 1, + "70" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "79" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "81" + ], + true + ], + [ + "TO", + [ + 1, + "0d" + ], + true + ], + [ + "TO", + [ + 1, + "48" + ], + true + ], + [ + "TO", + [ + 1, + "65" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_12.html b/autobahn/client/hornbeam_case_5_12.html new file mode 100644 index 0000000..08532a9 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_12.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.12</b></span> : Pass - <span style="font-size: 0.9em;"><b>4</b> ms @ 2023-08-10T21:35:05.280Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unfragmented Text Message after Continuation Frame with FIN = false, where there is nothing to continue, sent in one chop.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=56&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 9v3N9QEKGhJsNLxMFlJo+A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: IdeJ4TJXQw4HFVdE86Qwn2D/1So=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>183</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>15</td><td>1</td><td>15</td></tr> + <tr class="stats_row"><td>26</td><td>1</td><td>26</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>247</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3536266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=24, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> non-continuation payload</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 00186e6f6e2d636f6e74696e756174696f6e207061796c6f6164</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 810d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_kill_after">006 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tcp_closed_by_peer">007 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_12.json b/autobahn/client/hornbeam_case_5_12.json new file mode 100644 index 0000000..e0dc769 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_12.json @@ -0,0 +1,122 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 56, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send unfragmented Text Message after Continuation Frame with FIN = false, where there is nothing to continue, sent in one chop.", + "droppedByMe": false, + "duration": 4, + "expectation": "The connection is failed immediately, since there is no message to continue.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=56&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 9v3N9QEKGhJsNLxMFlJo+A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: IdeJ4TJXQw4HFVdE86Qwn2D/1So=\r\n\r\n", + "id": "5.12", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "183": 1 + }, + "started": "2023-08-10T21:35:05.280Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1 + }, + "txOctetStats": { + "15": 1, + "26": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3536266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 24, + "non-continuation payload" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 26, + "00186e6f6e2d636f6e74696e756174696f6e207061796c6f6164" + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 15, + "810d48656c6c6f2c20776f726c6421" + ], + false + ], + [ + "KL", + 1 + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_13.html b/autobahn/client/hornbeam_case_5_13.html new file mode 100644 index 0000000..b6c03d1 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_13.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.13</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:05.286Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unfragmented Text Message after Continuation Frame with FIN = false, where there is nothing to continue, sent in per-frame chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=57&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: zPqLO+0d5p3sHzDbcCqTfA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: luj4vDPupPEdUpGDkXw9uAJWqd4=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>183</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>15</td><td>1</td><td>15</td></tr> + <tr class="stats_row"><td>26</td><td>1</td><td>26</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>247</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3537266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=24, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_tx_frame_sync"> non-continuation payload</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 00186e6f6e2d636f6e74696e756174696f6e207061796c6f6164</pre> + <pre class="wirelog_tx_frame_sync">004 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_tx_frame_sync"> Hello, world!</pre> + <pre class="wirelog_kill_after">005 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">006 TX OCTETS: 810d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_tcp_closed_by_peer">007 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_13.json b/autobahn/client/hornbeam_case_5_13.json new file mode 100644 index 0000000..adf4add --- /dev/null +++ b/autobahn/client/hornbeam_case_5_13.json @@ -0,0 +1,122 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 57, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send unfragmented Text Message after Continuation Frame with FIN = false, where there is nothing to continue, sent in per-frame chops.", + "droppedByMe": false, + "duration": 1, + "expectation": "The connection is failed immediately, since there is no message to continue.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=57&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: zPqLO+0d5p3sHzDbcCqTfA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: luj4vDPupPEdUpGDkXw9uAJWqd4=\r\n\r\n", + "id": "5.13", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "183": 1 + }, + "started": "2023-08-10T21:35:05.286Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1 + }, + "txOctetStats": { + "15": 1, + "26": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3537266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 24, + "non-continuation payload" + ], + 0, + false, + 0, + null, + null, + null, + true + ], + [ + "TO", + [ + 26, + "00186e6f6e2d636f6e74696e756174696f6e207061796c6f6164" + ], + true + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + null, + true + ], + [ + "KL", + 1 + ], + [ + "TO", + [ + 15, + "810d48656c6c6f2c20776f726c6421" + ], + true + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_14.html b/autobahn/client/hornbeam_case_5_14.html new file mode 100644 index 0000000..099a1fe --- /dev/null +++ b/autobahn/client/hornbeam_case_5_14.html @@ -0,0 +1,318 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.14</b></span> : Pass - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:05.288Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unfragmented Text Message after Continuation Frame with FIN = false, where there is nothing to continue, sent in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=58&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: iCpqLbjHkwPCEMgudsqS8Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: PwB5oOMi5HN3LmtfswrZViWchZQ=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>183</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>29</td><td>29</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>30</td><td>235</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3538266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=24, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> non-continuation payload</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 00</pre> + <pre class="wirelog_tx_frame_sync">004 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> Hello, world!</pre> + <pre class="wirelog_kill_after">005 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">006 TX OCTETS: 18</pre> + <pre class="wirelog_tx_octets_sync">007 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">008 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">009 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">010 TX OCTETS: 2d</pre> + <pre class="wirelog_tx_octets_sync">011 TX OCTETS: 63</pre> + <pre class="wirelog_tx_octets_sync">012 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">013 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">014 TX OCTETS: 74</pre> + <pre class="wirelog_tx_octets_sync">015 TX OCTETS: 69</pre> + <pre class="wirelog_tx_octets_sync">016 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">017 TX OCTETS: 75</pre> + <pre class="wirelog_tx_octets_sync">018 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">019 TX OCTETS: 74</pre> + <pre class="wirelog_tx_octets_sync">020 TX OCTETS: 69</pre> + <pre class="wirelog_tx_octets_sync">021 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">022 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">023 TX OCTETS: 20</pre> + <pre class="wirelog_tx_octets_sync">024 TX OCTETS: 70</pre> + <pre class="wirelog_tx_octets_sync">025 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">026 TX OCTETS: 79</pre> + <pre class="wirelog_tx_octets_sync">027 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">028 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">029 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">030 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">031 TX OCTETS: 81</pre> + <pre class="wirelog_tx_octets_sync">032 TX OCTETS: 0d</pre> + <pre class="wirelog_tx_octets_sync">033 TX OCTETS: 48</pre> + <pre class="wirelog_tcp_closed_by_peer">034 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_14.json b/autobahn/client/hornbeam_case_5_14.json new file mode 100644 index 0000000..2aef102 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_14.json @@ -0,0 +1,337 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 58, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send unfragmented Text Message after Continuation Frame with FIN = false, where there is nothing to continue, sent in octet-wise chops.", + "droppedByMe": false, + "duration": 2, + "expectation": "The connection is failed immediately, since there is no message to continue.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=58&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: iCpqLbjHkwPCEMgudsqS8Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: PwB5oOMi5HN3LmtfswrZViWchZQ=\r\n\r\n", + "id": "5.14", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "183": 1 + }, + "started": "2023-08-10T21:35:05.288Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1 + }, + "txOctetStats": { + "1": 29, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3538266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 24, + "non-continuation payload" + ], + 0, + false, + 0, + null, + null, + 1, + false + ], + [ + "TO", + [ + 1, + "00" + ], + true + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + 1, + false + ], + [ + "KL", + 1 + ], + [ + "TO", + [ + 1, + "18" + ], + true + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "2d" + ], + true + ], + [ + "TO", + [ + 1, + "63" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "74" + ], + true + ], + [ + "TO", + [ + 1, + "69" + ], + true + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "75" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "74" + ], + true + ], + [ + "TO", + [ + 1, + "69" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "20" + ], + true + ], + [ + "TO", + [ + 1, + "70" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "79" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "81" + ], + true + ], + [ + "TO", + [ + 1, + "0d" + ], + true + ], + [ + "TO", + [ + 1, + "48" + ], + true + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_15.html b/autobahn/client/hornbeam_case_5_15.html new file mode 100644 index 0000000..8c95860 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_15.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.15</b></span> : Fail - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:05.293Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments, then Continuation Frame with FIN = false where there is nothing to continue, then unfragmented Text Message, all sent in one chop.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'fragment1fragment2', False)], 'NON-STRICT': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'fragment1', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=59&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: y+F9MKWDZwCl0HIKH78pKg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: f0fadNuVRXMvOPIiXk4K2cft2os=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>198</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>11</td><td>4</td><td>44</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>5</td><td>250</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>2</td></tr> + <tr class="stats_row"><td>1</td><td>2</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3539266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment1</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 0109667261676d656e7431</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment2</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 8009667261676d656e7432</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment3</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 0009667261676d656e7433</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment4</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 8109667261676d656e7434</pre> + <pre class="wirelog_kill_after">010 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">012 RX OCTETS: 897c2cad361a5ecc511149c3424d</pre> + <pre class="wirelog_rx_frame">013 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3763326361643336</pre> + <pre class="wirelog_rx_frame"> fragment1</pre> + <pre class="wirelog_tcp_closed_by_peer">014 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_15.json b/autobahn/client/hornbeam_case_5_15.json new file mode 100644 index 0000000..0e4a32e --- /dev/null +++ b/autobahn/client/hornbeam_case_5_15.json @@ -0,0 +1,208 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 59, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send text Message fragmented into 2 fragments, then Continuation Frame with FIN = false where there is nothing to continue, then unfragmented Text Message, all sent in one chop.", + "droppedByMe": false, + "duration": 2, + "expectation": "The connection is failed immediately, since there is no message to continue.", + "expected": { + "NON-STRICT": [], + "OK": [ + [ + "message", + "fragment1fragment2", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=59&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: y+F9MKWDZwCl0HIKH78pKg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: f0fadNuVRXMvOPIiXk4K2cft2os=\r\n\r\n", + "id": "5.15", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "fragment1", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.293Z", + "trafficStats": null, + "txFrameStats": { + "0": 2, + "1": 2 + }, + "txOctetStats": { + "11": 4, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3539266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0109667261676d656e7431" + ], + false + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8009667261676d656e7432" + ], + false + ], + [ + "TF", + [ + 9, + "fragment3" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0009667261676d656e7433" + ], + false + ], + [ + "TF", + [ + 9, + "fragment4" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8109667261676d656e7434" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "897c2cad361a5ecc511149c3424d" + ] + ], + [ + "RF", + [ + 9, + "fragment1" + ], + 1, + true, + 0, + true, + "7c2cad36" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_16.html b/autobahn/client/hornbeam_case_5_16.html new file mode 100644 index 0000000..3f4ebcd --- /dev/null +++ b/autobahn/client/hornbeam_case_5_16.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.16</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:05.295Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Repeated 2x: Continuation Frame with FIN = false (where there is nothing to continue), then text Message fragmented into 2 fragments.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=60&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: zJ0l7LM3062uLXpKtuF4/A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: PCcKhTCN0ZU9qPMhB0JrlD6TKiU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>183</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>11</td><td>6</td><td>66</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>7</td><td>272</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>4</td></tr> + <tr class="stats_row"><td>1</td><td>2</td></tr> + <tr class="stats_total"><td>Total</td><td>6</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3630266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment1</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 0009667261676d656e7431</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment2</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 0109667261676d656e7432</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment3</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8009667261676d656e7433</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment1</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 0009667261676d656e7431</pre> + <pre class="wirelog_tx_frame">010 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment2</pre> + <pre class="wirelog_tx_octets">011 TX OCTETS: 0109667261676d656e7432</pre> + <pre class="wirelog_tx_frame">012 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment3</pre> + <pre class="wirelog_tx_octets">013 TX OCTETS: 8009667261676d656e7433</pre> + <pre class="wirelog_kill_after">014 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tcp_closed_by_peer">015 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_16.json b/autobahn/client/hornbeam_case_5_16.json new file mode 100644 index 0000000..4eebdef --- /dev/null +++ b/autobahn/client/hornbeam_case_5_16.json @@ -0,0 +1,209 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 60, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Repeated 2x: Continuation Frame with FIN = false (where there is nothing to continue), then text Message fragmented into 2 fragments.", + "droppedByMe": false, + "duration": 1, + "expectation": "The connection is failed immediately, since there is no message to continue.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=60&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: zJ0l7LM3062uLXpKtuF4/A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: PCcKhTCN0ZU9qPMhB0JrlD6TKiU=\r\n\r\n", + "id": "5.16", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "183": 1 + }, + "started": "2023-08-10T21:35:05.295Z", + "trafficStats": null, + "txFrameStats": { + "0": 4, + "1": 2 + }, + "txOctetStats": { + "11": 6, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3630266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0009667261676d656e7431" + ], + false + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0109667261676d656e7432" + ], + false + ], + [ + "TF", + [ + 9, + "fragment3" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8009667261676d656e7433" + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0009667261676d656e7431" + ], + false + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0109667261676d656e7432" + ], + false + ], + [ + "TF", + [ + 9, + "fragment3" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8009667261676d656e7433" + ], + false + ], + [ + "KL", + 1 + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_17.html b/autobahn/client/hornbeam_case_5_17.html new file mode 100644 index 0000000..e1e4438 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_17.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.17</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:05.298Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Repeated 2x: Continuation Frame with FIN = true (where there is nothing to continue), then text Message fragmented into 2 fragments.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=61&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: wGU51YvLjhH9MrFaQHGFfw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 7DWYl6VCZkse3i8pegyyDB/kIn0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>183</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>11</td><td>6</td><td>66</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>7</td><td>272</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>4</td></tr> + <tr class="stats_row"><td>1</td><td>2</td></tr> + <tr class="stats_total"><td>Total</td><td>6</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3631266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment1</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8009667261676d656e7431</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment2</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 0109667261676d656e7432</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment3</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8009667261676d656e7433</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment1</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 8009667261676d656e7431</pre> + <pre class="wirelog_tx_frame">010 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment2</pre> + <pre class="wirelog_tx_octets">011 TX OCTETS: 0109667261676d656e7432</pre> + <pre class="wirelog_tx_frame">012 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment3</pre> + <pre class="wirelog_tx_octets">013 TX OCTETS: 8009667261676d656e7433</pre> + <pre class="wirelog_kill_after">014 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tcp_closed_by_peer">015 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_17.json b/autobahn/client/hornbeam_case_5_17.json new file mode 100644 index 0000000..6af2800 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_17.json @@ -0,0 +1,209 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 61, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Repeated 2x: Continuation Frame with FIN = true (where there is nothing to continue), then text Message fragmented into 2 fragments.", + "droppedByMe": false, + "duration": 1, + "expectation": "The connection is failed immediately, since there is no message to continue.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=61&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: wGU51YvLjhH9MrFaQHGFfw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 7DWYl6VCZkse3i8pegyyDB/kIn0=\r\n\r\n", + "id": "5.17", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "183": 1 + }, + "started": "2023-08-10T21:35:05.298Z", + "trafficStats": null, + "txFrameStats": { + "0": 4, + "1": 2 + }, + "txOctetStats": { + "11": 6, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3631266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8009667261676d656e7431" + ], + false + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0109667261676d656e7432" + ], + false + ], + [ + "TF", + [ + 9, + "fragment3" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8009667261676d656e7433" + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8009667261676d656e7431" + ], + false + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0109667261676d656e7432" + ], + false + ], + [ + "TF", + [ + 9, + "fragment3" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8009667261676d656e7433" + ], + false + ], + [ + "KL", + 1 + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_18.html b/autobahn/client/hornbeam_case_5_18.html new file mode 100644 index 0000000..74a3edb --- /dev/null +++ b/autobahn/client/hornbeam_case_5_18.html @@ -0,0 +1,310 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.18</b></span> : Fail - <span style="font-size: 0.9em;"><b>1003</b> ms @ 2023-08-10T21:35:05.301Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments, with both frame opcodes set to text, sent in one chop.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since all data frames after the initial data frame must have opcode 0.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'fragment1', False), ('message', u'fragment2', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=62&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 772EjRxSyNGZwXRbYydBZg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: zwckq1sqZ/RK5p3onAoZ676d1bs=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>29</td><td>1</td><td>29</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>231</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>11</td><td>2</td><td>22</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>242</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3632266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment1</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 0109667261676d656e7431</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment2</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 8109667261676d656e7432</pre> + <pre class="wirelog_kill_after">006 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">007 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">008 RX OCTETS: 89de6d7655b81f1732b3081821ef8189b35bfcf0d5299d97de3e928481</pre> + <pre class="wirelog_rx_frame">009 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=6465366437363535</pre> + <pre class="wirelog_rx_frame"> fragment1</pre> + <pre class="wirelog_rx_frame">010 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=6233356266636630</pre> + <pre class="wirelog_rx_frame"> fragment2</pre> + <pre class="wirelog_kill_after">011 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">012 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">013 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">014 RX OCTETS: 888c9044701893ad3777f92a1738d1331161</pre> + <pre class="wirelog_rx_frame">015 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3930343437303138</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">016 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_18.json b/autobahn/client/hornbeam_case_5_18.json new file mode 100644 index 0000000..5f56d61 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_18.json @@ -0,0 +1,221 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 62, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text Message fragmented into 2 fragments, with both frame opcodes set to text, sent in one chop.", + "droppedByMe": true, + "duration": 1003, + "expectation": "The connection is failed immediately, since all data frames after the initial data frame must have opcode 0.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=62&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 772EjRxSyNGZwXRbYydBZg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: zwckq1sqZ/RK5p3onAoZ676d1bs=\r\n\r\n", + "id": "5.18", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "fragment1", + false + ], + [ + "message", + "fragment2", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 2, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "29": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.301Z", + "trafficStats": null, + "txFrameStats": { + "1": 2, + "8": 1 + }, + "txOctetStats": { + "11": 2, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3632266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0109667261676d656e7431" + ], + false + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8109667261676d656e7432" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 29, + "89de6d7655b81f1732b3081821ef8189b35bfcf0d5299d97de3e928481" + ] + ], + [ + "RF", + [ + 9, + "fragment1" + ], + 1, + true, + 0, + true, + "de6d7655" + ], + [ + "RF", + [ + 9, + "fragment2" + ], + 1, + true, + 0, + true, + "b35bfcf0" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c9044701893ad3777f92a1738d1331161" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "90447018" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_19.html b/autobahn/client/hornbeam_case_5_19.html new file mode 100644 index 0000000..d8aed01 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_19.html @@ -0,0 +1,307 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.19</b></span> : Fail - <span style="font-size: 0.9em;"><b>3</b> ms @ 2023-08-10T21:35:06.307Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>A fragmented text message is sent in multiple frames. After + sending the first 2 frames of the text message, a Ping is sent. Then we wait 1s, + then we send 2 more text fragments, another Ping and then the final text fragment. + Everything is legal.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The peer immediately answers the first Ping before + it has received the last text message fragment. The peer pong's back the Ping's + payload exactly, and echo's the payload of the fragmented message back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('pong', u'pongme 1!'), ('pong', u'pongme 2!'), ('message', u'fragment1fragment2fragment3fragment4fragment5', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'fragment1', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=63&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: lE4MKWYqZ/141sAC/vfzFA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: E59Rf2hwPndGs41abYrcdguNOUw=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>198</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>11</td><td>3</td><td>33</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>239</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3633266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment1</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 0109667261676d656e7431</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment2</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 0009667261676d656e7432</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> pongme 1!</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8909706f6e676d65203121</pre> + <pre class="wirelog_delay">008 DELAY 1.000000 sec for TAG None</pre> + <pre class="wirelog_rx_octets">009 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8939b2e50c5fc0846b54d78b7808</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3339623265353063</pre> + <pre class="wirelog_rx_frame"> fragment1</pre> + <pre class="wirelog_tcp_closed_by_peer">012 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_19.json b/autobahn/client/hornbeam_case_5_19.json new file mode 100644 index 0000000..36701fc --- /dev/null +++ b/autobahn/client/hornbeam_case_5_19.json @@ -0,0 +1,195 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 63, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "A fragmented text message is sent in multiple frames. After\n sending the first 2 frames of the text message, a Ping is sent. Then we wait 1s,\n then we send 2 more text fragments, another Ping and then the final text fragment.\n Everything is legal.", + "droppedByMe": false, + "duration": 3, + "expectation": "The peer immediately answers the first Ping before\n it has received the last text message fragment. The peer pong's back the Ping's\n payload exactly, and echo's the payload of the fragmented message back to us.", + "expected": { + "OK": [ + [ + "pong", + "pongme 1!" + ], + [ + "pong", + "pongme 2!" + ], + [ + "message", + "fragment1fragment2fragment3fragment4fragment5", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=63&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: lE4MKWYqZ/141sAC/vfzFA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: E59Rf2hwPndGs41abYrcdguNOUw=\r\n\r\n", + "id": "5.19", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "fragment1", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:06.307Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1, + "9": 1 + }, + "txOctetStats": { + "11": 3, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3633266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0109667261676d656e7431" + ], + false + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0009667261676d656e7432" + ], + false + ], + [ + "TF", + [ + 9, + "pongme 1!" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8909706f6e676d65203121" + ], + false + ], + [ + "CT", + 1, + null + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "8939b2e50c5fc0846b54d78b7808" + ] + ], + [ + "RF", + [ + 9, + "fragment1" + ], + 1, + true, + 0, + true, + "39b2e50c" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_2.html b/autobahn/client/hornbeam_case_5_2.html new file mode 100644 index 0000000..ee6922f --- /dev/null +++ b/autobahn/client/hornbeam_case_5_2.html @@ -0,0 +1,291 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:05.242Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send Pong fragmented into 2 fragments.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Connection is failed immediately, since control message MUST NOT be fragmented.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=46&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: RF77UDsDBmCOZscEdhL2Ag== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: wo8Jfl62sCavxiu+tqJfGNq4+7M=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>183</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>11</td><td>2</td><td>22</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>10</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3436266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=10, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment1</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 0a09667261676d656e7431</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment2</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 8009667261676d656e7432</pre> + <pre class="wirelog_kill_after">006 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tcp_closed_by_peer">007 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_2.json b/autobahn/client/hornbeam_case_5_2.json new file mode 100644 index 0000000..2bad7b7 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_2.json @@ -0,0 +1,121 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 46, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send Pong fragmented into 2 fragments.", + "droppedByMe": false, + "duration": 2, + "expectation": "Connection is failed immediately, since control message MUST NOT be fragmented.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=46&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: RF77UDsDBmCOZscEdhL2Ag==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: wo8Jfl62sCavxiu+tqJfGNq4+7M=\r\n\r\n", + "id": "5.2", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "183": 1 + }, + "started": "2023-08-10T21:35:05.242Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "10": 1 + }, + "txOctetStats": { + "11": 2, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3436266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 10, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0a09667261676d656e7431" + ], + false + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8009667261676d656e7432" + ], + false + ], + [ + "KL", + 1 + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_20.html b/autobahn/client/hornbeam_case_5_20.html new file mode 100644 index 0000000..a232d3b --- /dev/null +++ b/autobahn/client/hornbeam_case_5_20.html @@ -0,0 +1,300 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.20</b></span> : Fail - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:06.312Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Same as Case 5.19, but send all frames with SYNC = True. + Note, this does not change the octets sent in any way, only how the stream + is chopped up on the wire.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Same as Case 5.19. Implementations must be agnostic to how + octet stream is chopped up on wire (must be TCP clean).</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('pong', u'pongme 1!'), ('pong', u'pongme 2!'), ('message', u'fragment1fragment2fragment3fragment4fragment5', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=64&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: +4se/18MOLuuKeKThOii0A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: bXy5WU3CTi/9l8seKog21COFKjA=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>184</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>11</td><td>3</td><td>33</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>239</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3634266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_tx_frame_sync"> fragment1</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 0109667261676d656e7431</pre> + <pre class="wirelog_tx_frame_sync">004 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_tx_frame_sync"> fragment2</pre> + <pre class="wirelog_tx_frame_sync">005 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_tx_frame_sync"> pongme 1!</pre> + <pre class="wirelog_delay">006 DELAY 1.000000 sec for TAG None</pre> + <pre class="wirelog_tx_octets_sync">007 TX OCTETS: 0009667261676d656e7432</pre> + <pre class="wirelog_tx_octets_sync">008 TX OCTETS: 8909706f6e676d65203121</pre> + <pre class="wirelog_rx_octets">009 RX OCTETS: 81</pre> + <pre class="wirelog_tcp_closed_by_peer">010 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_20.json b/autobahn/client/hornbeam_case_5_20.json new file mode 100644 index 0000000..c98859e --- /dev/null +++ b/autobahn/client/hornbeam_case_5_20.json @@ -0,0 +1,167 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 64, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Same as Case 5.19, but send all frames with SYNC = True.\n Note, this does not change the octets sent in any way, only how the stream\n is chopped up on the wire.", + "droppedByMe": false, + "duration": 2, + "expectation": "Same as Case 5.19. Implementations must be agnostic to how\n octet stream is chopped up on wire (must be TCP clean).", + "expected": { + "OK": [ + [ + "pong", + "pongme 1!" + ], + [ + "pong", + "pongme 2!" + ], + [ + "message", + "fragment1fragment2fragment3fragment4fragment5", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=64&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: +4se/18MOLuuKeKThOii0A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: bXy5WU3CTi/9l8seKog21COFKjA=\r\n\r\n", + "id": "5.20", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": {}, + "rxOctetStats": { + "1": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:06.312Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1, + "9": 1 + }, + "txOctetStats": { + "11": 3, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3634266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 1, + false, + 0, + null, + null, + null, + true + ], + [ + "TO", + [ + 11, + "0109667261676d656e7431" + ], + true + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 0, + false, + 0, + null, + null, + null, + true + ], + [ + "TF", + [ + 9, + "pongme 1!" + ], + 9, + true, + 0, + null, + null, + null, + true + ], + [ + "CT", + 1, + null + ], + [ + "TO", + [ + 11, + "0009667261676d656e7432" + ], + true + ], + [ + "TO", + [ + 11, + "8909706f6e676d65203121" + ], + true + ], + [ + "RO", + [ + 1, + "81" + ] + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_3.html b/autobahn/client/hornbeam_case_5_3.html new file mode 100644 index 0000000..bcc50f9 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_3.html @@ -0,0 +1,298 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:05.246Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Message is processed and echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'fragment1fragment2', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'fragment1', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=47&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: NMad3XzkDOtgeZVCUTlIVA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: W4VEfI9hYFbSvuP5+s2ShCpFr0I=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>198</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>11</td><td>2</td><td>22</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3437266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment1</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 0109667261676d656e7431</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment2</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 8009667261676d656e7432</pre> + <pre class="wirelog_kill_after">006 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">007 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">008 RX OCTETS: 8958aac7e63ed8a68135cfa99269</pre> + <pre class="wirelog_rx_frame">009 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3538616163376536</pre> + <pre class="wirelog_rx_frame"> fragment1</pre> + <pre class="wirelog_tcp_closed_by_peer">010 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_3.json b/autobahn/client/hornbeam_case_5_3.json new file mode 100644 index 0000000..bde57fe --- /dev/null +++ b/autobahn/client/hornbeam_case_5_3.json @@ -0,0 +1,163 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 47, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send text Message fragmented into 2 fragments.", + "droppedByMe": false, + "duration": 1, + "expectation": "Message is processed and echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "fragment1fragment2", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=47&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: NMad3XzkDOtgeZVCUTlIVA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: W4VEfI9hYFbSvuP5+s2ShCpFr0I=\r\n\r\n", + "id": "5.3", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "fragment1", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.246Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1 + }, + "txOctetStats": { + "11": 2, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3437266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0109667261676d656e7431" + ], + false + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8009667261676d656e7432" + ], + false + ], + [ + "TI", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "8958aac7e63ed8a68135cfa99269" + ] + ], + [ + "RF", + [ + 9, + "fragment1" + ], + 1, + true, + 0, + true, + "58aac7e6" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_4.html b/autobahn/client/hornbeam_case_5_4.html new file mode 100644 index 0000000..827f3fc --- /dev/null +++ b/autobahn/client/hornbeam_case_5_4.html @@ -0,0 +1,296 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:05.249Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments, octets are sent in frame-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Message is processed and echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'fragment1fragment2', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'fragment1', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=48&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: jlwc35PgV0cR8w6CfzJ6VA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: LLBGsjU7OU2FMATbbu20o2mkEm0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>15</td><td>1</td><td>15</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>198</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>11</td><td>2</td><td>22</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3438266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_tx_frame_sync"> fragment1</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 0109667261676d656e7431</pre> + <pre class="wirelog_tx_frame_sync">004 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_tx_frame_sync"> fragment2</pre> + <pre class="wirelog_kill_after">005 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">006 TX OCTETS: 8009667261676d656e7432</pre> + <pre class="wirelog_rx_octets">007 RX OCTETS: 8189af9bcdb5c9e9acd2c2fea3c19e</pre> + <pre class="wirelog_rx_frame">008 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=6166396263646235</pre> + <pre class="wirelog_rx_frame"> fragment1</pre> + <pre class="wirelog_tcp_closed_by_peer">009 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_4.json b/autobahn/client/hornbeam_case_5_4.json new file mode 100644 index 0000000..9ccd086 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_4.json @@ -0,0 +1,155 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 48, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send text Message fragmented into 2 fragments, octets are sent in frame-wise chops.", + "droppedByMe": false, + "duration": 2, + "expectation": "Message is processed and echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "fragment1fragment2", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=48&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: jlwc35PgV0cR8w6CfzJ6VA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: LLBGsjU7OU2FMATbbu20o2mkEm0=\r\n\r\n", + "id": "5.4", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "fragment1", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "15": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.249Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1 + }, + "txOctetStats": { + "11": 2, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3438266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 1, + false, + 0, + null, + null, + null, + true + ], + [ + "TO", + [ + 11, + "0109667261676d656e7431" + ], + true + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 0, + true, + 0, + null, + null, + null, + true + ], + [ + "TI", + 1 + ], + [ + "TO", + [ + 11, + "8009667261676d656e7432" + ], + true + ], + [ + "RO", + [ + 15, + "8189af9bcdb5c9e9acd2c2fea3c19e" + ] + ], + [ + "RF", + [ + 9, + "fragment1" + ], + 1, + true, + 0, + true, + "af9bcdb5" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_5.html b/autobahn/client/hornbeam_case_5_5.html new file mode 100644 index 0000000..e1b768c --- /dev/null +++ b/autobahn/client/hornbeam_case_5_5.html @@ -0,0 +1,318 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.5</b></span> : Fail - <span style="font-size: 0.9em;"><b>3</b> ms @ 2023-08-10T21:35:05.256Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments, octets are sent in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Message is processed and echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'fragment1fragment2', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'fragment1', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=49&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: pGZL0Kt3SQxzygkjhyD/pg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: FP1REXVCCgVc9Ij1k7W05E64J1M=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>198</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>22</td><td>22</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>23</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3439266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> fragment1</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 01</pre> + <pre class="wirelog_tx_frame_sync">004 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> fragment2</pre> + <pre class="wirelog_kill_after">005 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">006 TX OCTETS: 09</pre> + <pre class="wirelog_tx_octets_sync">007 TX OCTETS: 66</pre> + <pre class="wirelog_tx_octets_sync">008 TX OCTETS: 72</pre> + <pre class="wirelog_tx_octets_sync">009 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">010 TX OCTETS: 67</pre> + <pre class="wirelog_tx_octets_sync">011 TX OCTETS: 6d</pre> + <pre class="wirelog_tx_octets_sync">012 TX OCTETS: 65</pre> + <pre class="wirelog_tx_octets_sync">013 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">014 TX OCTETS: 74</pre> + <pre class="wirelog_tx_octets_sync">015 TX OCTETS: 31</pre> + <pre class="wirelog_tx_octets_sync">016 TX OCTETS: 80</pre> + <pre class="wirelog_tx_octets_sync">017 TX OCTETS: 09</pre> + <pre class="wirelog_tx_octets_sync">018 TX OCTETS: 66</pre> + <pre class="wirelog_tx_octets_sync">019 TX OCTETS: 72</pre> + <pre class="wirelog_rx_octets">020 RX OCTETS: 81</pre> + <pre class="wirelog_tx_octets_sync">021 TX OCTETS: 61</pre> + <pre class="wirelog_rx_octets">022 RX OCTETS: 8926dbaa8040a9cbe74bbec4f417</pre> + <pre class="wirelog_rx_frame">023 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3236646261613830</pre> + <pre class="wirelog_rx_frame"> fragment1</pre> + <pre class="wirelog_tx_octets_sync">024 TX OCTETS: 67</pre> + <pre class="wirelog_tx_octets_sync">025 TX OCTETS: 6d</pre> + <pre class="wirelog_tx_octets_sync">026 TX OCTETS: 65</pre> + <pre class="wirelog_tx_octets_sync">027 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">028 TX OCTETS: 74</pre> + <pre class="wirelog_tx_octets_sync">029 TX OCTETS: 32</pre> + <pre class="wirelog_tcp_closed_by_peer">030 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_5.json b/autobahn/client/hornbeam_case_5_5.json new file mode 100644 index 0000000..329f5ed --- /dev/null +++ b/autobahn/client/hornbeam_case_5_5.json @@ -0,0 +1,323 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 49, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send text Message fragmented into 2 fragments, octets are sent in octet-wise chops.", + "droppedByMe": false, + "duration": 3, + "expectation": "Message is processed and echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "fragment1fragment2", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=49&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: pGZL0Kt3SQxzygkjhyD/pg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: FP1REXVCCgVc9Ij1k7W05E64J1M=\r\n\r\n", + "id": "5.5", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "fragment1", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.256Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1 + }, + "txOctetStats": { + "1": 22, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3439266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 1, + false, + 0, + null, + null, + 1, + false + ], + [ + "TO", + [ + 1, + "01" + ], + true + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 0, + true, + 0, + null, + null, + 1, + false + ], + [ + "TI", + 1 + ], + [ + "TO", + [ + 1, + "09" + ], + true + ], + [ + "TO", + [ + 1, + "66" + ], + true + ], + [ + "TO", + [ + 1, + "72" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "67" + ], + true + ], + [ + "TO", + [ + 1, + "6d" + ], + true + ], + [ + "TO", + [ + 1, + "65" + ], + true + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "74" + ], + true + ], + [ + "TO", + [ + 1, + "31" + ], + true + ], + [ + "TO", + [ + 1, + "80" + ], + true + ], + [ + "TO", + [ + 1, + "09" + ], + true + ], + [ + "TO", + [ + 1, + "66" + ], + true + ], + [ + "TO", + [ + 1, + "72" + ], + true + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "RO", + [ + 14, + "8926dbaa8040a9cbe74bbec4f417" + ] + ], + [ + "RF", + [ + 9, + "fragment1" + ], + 1, + true, + 0, + true, + "26dbaa80" + ], + [ + "TO", + [ + 1, + "67" + ], + true + ], + [ + "TO", + [ + 1, + "6d" + ], + true + ], + [ + "TO", + [ + 1, + "65" + ], + true + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "74" + ], + true + ], + [ + "TO", + [ + 1, + "32" + ], + true + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_6.html b/autobahn/client/hornbeam_case_5_6.html new file mode 100644 index 0000000..2b6940b --- /dev/null +++ b/autobahn/client/hornbeam_case_5_6.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.6</b></span> : Fail - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:05.261Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments, one ping with payload in-between.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>A pong is received, then the message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('pong', u'ping payload'), ('message', u'fragment1fragment2', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'fragment1', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=50&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: U+49PIxE9Q1Xd2j5GdioEw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: Neir5aFA9m6y4Tz8cT2uPy3kOss=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>198</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>11</td><td>2</td><td>22</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>242</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3530266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment1</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 0109667261676d656e7431</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> ping payload</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 890c70696e67207061796c6f6164</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment2</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8009667261676d656e7432</pre> + <pre class="wirelog_kill_after">008 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">009 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 89da959b39bce7fa5eb7f0f54deb</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=6461393539623339</pre> + <pre class="wirelog_rx_frame"> fragment1</pre> + <pre class="wirelog_tcp_closed_by_peer">012 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_6.json b/autobahn/client/hornbeam_case_5_6.json new file mode 100644 index 0000000..6e2d291 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_6.json @@ -0,0 +1,191 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 50, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send text Message fragmented into 2 fragments, one ping with payload in-between.", + "droppedByMe": false, + "duration": 2, + "expectation": "A pong is received, then the message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "pong", + "ping payload" + ], + [ + "message", + "fragment1fragment2", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=50&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: U+49PIxE9Q1Xd2j5GdioEw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: Neir5aFA9m6y4Tz8cT2uPy3kOss=\r\n\r\n", + "id": "5.6", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "fragment1", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.261Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1, + "9": 1 + }, + "txOctetStats": { + "11": 2, + "14": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3530266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0109667261676d656e7431" + ], + false + ], + [ + "TF", + [ + 12, + "ping payload" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "890c70696e67207061796c6f6164" + ], + false + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8009667261676d656e7432" + ], + false + ], + [ + "TI", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "89da959b39bce7fa5eb7f0f54deb" + ] + ], + [ + "RF", + [ + 9, + "fragment1" + ], + 1, + true, + 0, + true, + "da959b39" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_7.html b/autobahn/client/hornbeam_case_5_7.html new file mode 100644 index 0000000..edf4564 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_7.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.7</b></span> : Fail - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:05.264Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments, one ping with payload in-between. Octets are sent in frame-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>A pong is received, then the message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('pong', u'ping payload'), ('message', u'fragment1fragment2', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'fragment1', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=51&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: K+eTPiJDNook4ulgvG2AZQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: Xm8y2OcMPAb2IPTOAWsBwSCC7UU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>198</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>11</td><td>2</td><td>22</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>242</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3531266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_tx_frame_sync"> fragment1</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 0109667261676d656e7431</pre> + <pre class="wirelog_tx_frame_sync">004 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_tx_frame_sync"> ping payload</pre> + <pre class="wirelog_tx_frame_sync">005 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=True</pre> + <pre class="wirelog_tx_frame_sync"> fragment2</pre> + <pre class="wirelog_kill_after">006 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">007 TX OCTETS: 890c70696e67207061796c6f6164</pre> + <pre class="wirelog_tx_octets_sync">008 TX OCTETS: 8009667261676d656e7432</pre> + <pre class="wirelog_rx_octets">009 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 89669bc78000e9a6e70bfea9f457</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3636396263373830</pre> + <pre class="wirelog_rx_frame"> fragment1</pre> + <pre class="wirelog_tcp_closed_by_peer">012 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_7.json b/autobahn/client/hornbeam_case_5_7.json new file mode 100644 index 0000000..296c122 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_7.json @@ -0,0 +1,191 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 51, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send text Message fragmented into 2 fragments, one ping with payload in-between. Octets are sent in frame-wise chops.", + "droppedByMe": false, + "duration": 2, + "expectation": "A pong is received, then the message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "pong", + "ping payload" + ], + [ + "message", + "fragment1fragment2", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=51&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: K+eTPiJDNook4ulgvG2AZQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: Xm8y2OcMPAb2IPTOAWsBwSCC7UU=\r\n\r\n", + "id": "5.7", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "fragment1", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.264Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1, + "9": 1 + }, + "txOctetStats": { + "11": 2, + "14": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3531266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 1, + false, + 0, + null, + null, + null, + true + ], + [ + "TO", + [ + 11, + "0109667261676d656e7431" + ], + true + ], + [ + "TF", + [ + 12, + "ping payload" + ], + 9, + true, + 0, + null, + null, + null, + true + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 0, + true, + 0, + null, + null, + null, + true + ], + [ + "TI", + 1 + ], + [ + "TO", + [ + 14, + "890c70696e67207061796c6f6164" + ], + true + ], + [ + "TO", + [ + 11, + "8009667261676d656e7432" + ], + true + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "89669bc78000e9a6e70bfea9f457" + ] + ], + [ + "RF", + [ + 9, + "fragment1" + ], + 1, + true, + 0, + true, + "669bc780" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_8.html b/autobahn/client/hornbeam_case_5_8.html new file mode 100644 index 0000000..20fafb3 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_8.html @@ -0,0 +1,335 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.8</b></span> : Fail - <span style="font-size: 0.9em;"><b>3</b> ms @ 2023-08-10T21:35:05.267Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments, one ping with payload in-between. Octets are sent in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>A pong is received, then the message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('pong', u'ping payload'), ('message', u'fragment1fragment2', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'fragment1', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=52&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: +GNNGzLjF1nLy77IC5/9+A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: cpw7SjrmekNqr50GAmYZTzYiJ98=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>198</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>36</td><td>36</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>37</td><td>242</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3532266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame_sync">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> fragment1</pre> + <pre class="wirelog_tx_octets_sync">003 TX OCTETS: 01</pre> + <pre class="wirelog_tx_frame_sync">004 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> ping payload</pre> + <pre class="wirelog_tx_frame_sync">005 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=1, SYNC=False</pre> + <pre class="wirelog_tx_frame_sync"> fragment2</pre> + <pre class="wirelog_kill_after">006 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tx_octets_sync">007 TX OCTETS: 09</pre> + <pre class="wirelog_tx_octets_sync">008 TX OCTETS: 66</pre> + <pre class="wirelog_tx_octets_sync">009 TX OCTETS: 72</pre> + <pre class="wirelog_tx_octets_sync">010 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">011 TX OCTETS: 67</pre> + <pre class="wirelog_tx_octets_sync">012 TX OCTETS: 6d</pre> + <pre class="wirelog_tx_octets_sync">013 TX OCTETS: 65</pre> + <pre class="wirelog_tx_octets_sync">014 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">015 TX OCTETS: 74</pre> + <pre class="wirelog_tx_octets_sync">016 TX OCTETS: 31</pre> + <pre class="wirelog_tx_octets_sync">017 TX OCTETS: 89</pre> + <pre class="wirelog_tx_octets_sync">018 TX OCTETS: 0c</pre> + <pre class="wirelog_tx_octets_sync">019 TX OCTETS: 70</pre> + <pre class="wirelog_rx_octets">020 RX OCTETS: 81</pre> + <pre class="wirelog_tx_octets_sync">021 TX OCTETS: 69</pre> + <pre class="wirelog_rx_octets">022 RX OCTETS: 89a9f30ffbcf816e9cc496618f98</pre> + <pre class="wirelog_rx_frame">023 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=6139663330666662</pre> + <pre class="wirelog_rx_frame"> fragment1</pre> + <pre class="wirelog_tx_octets_sync">024 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">025 TX OCTETS: 67</pre> + <pre class="wirelog_tx_octets_sync">026 TX OCTETS: 20</pre> + <pre class="wirelog_tx_octets_sync">027 TX OCTETS: 70</pre> + <pre class="wirelog_tx_octets_sync">028 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">029 TX OCTETS: 79</pre> + <pre class="wirelog_tx_octets_sync">030 TX OCTETS: 6c</pre> + <pre class="wirelog_tx_octets_sync">031 TX OCTETS: 6f</pre> + <pre class="wirelog_tx_octets_sync">032 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">033 TX OCTETS: 64</pre> + <pre class="wirelog_tx_octets_sync">034 TX OCTETS: 80</pre> + <pre class="wirelog_tx_octets_sync">035 TX OCTETS: 09</pre> + <pre class="wirelog_tx_octets_sync">036 TX OCTETS: 66</pre> + <pre class="wirelog_tx_octets_sync">037 TX OCTETS: 72</pre> + <pre class="wirelog_tx_octets_sync">038 TX OCTETS: 61</pre> + <pre class="wirelog_tx_octets_sync">039 TX OCTETS: 67</pre> + <pre class="wirelog_tx_octets_sync">040 TX OCTETS: 6d</pre> + <pre class="wirelog_tx_octets_sync">041 TX OCTETS: 65</pre> + <pre class="wirelog_tx_octets_sync">042 TX OCTETS: 6e</pre> + <pre class="wirelog_tx_octets_sync">043 TX OCTETS: 74</pre> + <pre class="wirelog_tx_octets_sync">044 TX OCTETS: 32</pre> + <pre class="wirelog_tcp_closed_by_peer">045 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_8.json b/autobahn/client/hornbeam_case_5_8.json new file mode 100644 index 0000000..5d0e825 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_8.json @@ -0,0 +1,454 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 52, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send text Message fragmented into 2 fragments, one ping with payload in-between. Octets are sent in octet-wise chops.", + "droppedByMe": false, + "duration": 3, + "expectation": "A pong is received, then the message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "pong", + "ping payload" + ], + [ + "message", + "fragment1fragment2", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=52&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: +GNNGzLjF1nLy77IC5/9+A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: cpw7SjrmekNqr50GAmYZTzYiJ98=\r\n\r\n", + "id": "5.8", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "fragment1", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:05.267Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1, + "9": 1 + }, + "txOctetStats": { + "1": 36, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3532266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 1, + false, + 0, + null, + null, + 1, + false + ], + [ + "TO", + [ + 1, + "01" + ], + true + ], + [ + "TF", + [ + 12, + "ping payload" + ], + 9, + true, + 0, + null, + null, + 1, + false + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 0, + true, + 0, + null, + null, + 1, + false + ], + [ + "TI", + 1 + ], + [ + "TO", + [ + 1, + "09" + ], + true + ], + [ + "TO", + [ + 1, + "66" + ], + true + ], + [ + "TO", + [ + 1, + "72" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "67" + ], + true + ], + [ + "TO", + [ + 1, + "6d" + ], + true + ], + [ + "TO", + [ + 1, + "65" + ], + true + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "74" + ], + true + ], + [ + "TO", + [ + 1, + "31" + ], + true + ], + [ + "TO", + [ + 1, + "89" + ], + true + ], + [ + "TO", + [ + 1, + "0c" + ], + true + ], + [ + "TO", + [ + 1, + "70" + ], + true + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "TO", + [ + 1, + "69" + ], + true + ], + [ + "RO", + [ + 14, + "89a9f30ffbcf816e9cc496618f98" + ] + ], + [ + "RF", + [ + 9, + "fragment1" + ], + 1, + true, + 0, + true, + "a9f30ffb" + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "67" + ], + true + ], + [ + "TO", + [ + 1, + "20" + ], + true + ], + [ + "TO", + [ + 1, + "70" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "79" + ], + true + ], + [ + "TO", + [ + 1, + "6c" + ], + true + ], + [ + "TO", + [ + 1, + "6f" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "64" + ], + true + ], + [ + "TO", + [ + 1, + "80" + ], + true + ], + [ + "TO", + [ + 1, + "09" + ], + true + ], + [ + "TO", + [ + 1, + "66" + ], + true + ], + [ + "TO", + [ + 1, + "72" + ], + true + ], + [ + "TO", + [ + 1, + "61" + ], + true + ], + [ + "TO", + [ + 1, + "67" + ], + true + ], + [ + "TO", + [ + 1, + "6d" + ], + true + ], + [ + "TO", + [ + 1, + "65" + ], + true + ], + [ + "TO", + [ + 1, + "6e" + ], + true + ], + [ + "TO", + [ + 1, + "74" + ], + true + ], + [ + "TO", + [ + 1, + "32" + ], + true + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_5_9.html b/autobahn/client/hornbeam_case_5_9.html new file mode 100644 index 0000000..d45517e --- /dev/null +++ b/autobahn/client/hornbeam_case_5_9.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 5.9</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:05.271Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unfragmented Text Message after Continuation Frame with FIN = true, where there is nothing to continue, sent in one chop.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=53&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: y4Aq7CcG75pp8Cc7NmkAtg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: PPKi/yPpPJ0NlYxR4+SEvCGO7Ew=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>183</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>15</td><td>1</td><td>15</td></tr> + <tr class="stats_row"><td>26</td><td>1</td><td>26</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>247</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3533266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=24, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> non-continuation payload</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 80186e6f6e2d636f6e74696e756174696f6e207061796c6f6164</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello, world!</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 810d48656c6c6f2c20776f726c6421</pre> + <pre class="wirelog_kill_after">006 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_tcp_closed_by_peer">007 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_5_9.json b/autobahn/client/hornbeam_case_5_9.json new file mode 100644 index 0000000..2909321 --- /dev/null +++ b/autobahn/client/hornbeam_case_5_9.json @@ -0,0 +1,122 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 53, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send unfragmented Text Message after Continuation Frame with FIN = true, where there is nothing to continue, sent in one chop.", + "droppedByMe": false, + "duration": 1, + "expectation": "The connection is failed immediately, since there is no message to continue.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": false, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=53&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: y4Aq7CcG75pp8Cc7NmkAtg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: PPKi/yPpPJ0NlYxR4+SEvCGO7Ew=\r\n\r\n", + "id": "5.9", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "183": 1 + }, + "started": "2023-08-10T21:35:05.271Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1 + }, + "txOctetStats": { + "15": 1, + "26": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3533266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 24, + "non-continuation payload" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 26, + "80186e6f6e2d636f6e74696e756174696f6e207061796c6f6164" + ], + false + ], + [ + "TF", + [ + 13, + "Hello, world!" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 15, + "810d48656c6c6f2c20776f726c6421" + ], + false + ], + [ + "KL", + 1 + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_10_1.html b/autobahn/client/hornbeam_case_6_10_1.html new file mode 100644 index 0000000..7802f79 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_10_1.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.10.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:18.357Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf7bfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=104&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: V7Ft5nW1zy8V/5fVWA0xiA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: XZfArhwS2nSp7oYPdk+yWCH5DN4=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>17</td><td>1</td><td>17</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>220</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>226</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313034266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf7bfbfbf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f7bfbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8c781efe4897a143a7c7a311f7c5f141f5</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3738316566653438</pre> + <pre class="wirelog_rx_frame"> ����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cee5453cfedbd14a0873a34efaf2332b6</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6565353435336366</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_10_1.json b/autobahn/client/hornbeam_case_6_10_1.json new file mode 100644 index 0000000..69864a8 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_10_1.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 104, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf7bfbfbf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=104&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: V7Ft5nW1zy8V/5fVWA0xiA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: XZfArhwS2nSp7oYPdk+yWCH5DN4=\r\n\r\n", + "id": "6.10.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "17": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:18.357Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "6": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313034266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "0xf7bfbfbf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f7bfbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 17, + "8c781efe4897a143a7c7a311f7c5f141f5" + ] + ], + [ + "RF", + [ + 12, + "\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "781efe48" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cee5453cfedbd14a0873a34efaf2332b6" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "ee5453cf" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_10_2.html b/autobahn/client/hornbeam_case_6_10_2.html new file mode 100644 index 0000000..3377b4a --- /dev/null +++ b/autobahn/client/hornbeam_case_6_10_2.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.10.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:18.862Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfbbfbfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=105&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: jkE8RD7zAXxxC/gkJC/THg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: iszqPoZEz1njz0AqJC6PVPD5qDc=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>20</td><td>1</td><td>20</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>223</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>227</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313035266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=5, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfbbfbfbfbf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8105fbbfbfbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8f2b6e453cc4d1f8d394d3aa839681fa81c4d1f8</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=15, MASKED=True, MASK=3262366534353363</pre> + <pre class="wirelog_rx_frame"> �����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c548ec9a457678ecb3de0ae8415f9a8dd</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3534386563396134</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_10_2.json b/autobahn/client/hornbeam_case_6_10_2.json new file mode 100644 index 0000000..4414a98 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_10_2.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 105, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfbbfbfbfbf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=105&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: jkE8RD7zAXxxC/gkJC/THg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: iszqPoZEz1njz0AqJC6PVPD5qDc=\r\n\r\n", + "id": "6.10.2", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "20": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:18.862Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "7": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313035266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 5, + "0xfbbfbfbfbf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 7, + "8105fbbfbfbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 20, + "8f2b6e453cc4d1f8d394d3aa839681fa81c4d1f8" + ] + ], + [ + "RF", + [ + 15, + "\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "2b6e453c" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c548ec9a457678ecb3de0ae8415f9a8dd" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "548ec9a4" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_10_3.html b/autobahn/client/hornbeam_case_6_10_3.html new file mode 100644 index 0000000..f9b05d6 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_10_3.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.10.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:19.366Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfdbfbfbfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=106&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: DMmN+qIONZ52fZXHR/XhyQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 8NnkxY1puLHUACInzWvxPncA1Gw=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>23</td><td>1</td><td>23</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>226</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313036266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfdbfbfbfbfbf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106fdbfbfbfbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 92f33b99841c84246b4c86763b4ed426391c84246b4c86</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=18, MASKED=True, MASK=6633336239393834</pre> + <pre class="wirelog_rx_frame"> ������</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c238c1219206555764ae2753962fb7360</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3233386331323139</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_10_3.json b/autobahn/client/hornbeam_case_6_10_3.json new file mode 100644 index 0000000..d514698 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_10_3.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 106, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfdbfbfbfbfbf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=106&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: DMmN+qIONZ52fZXHR/XhyQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 8NnkxY1puLHUACInzWvxPncA1Gw=\r\n\r\n", + "id": "6.10.3", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "23": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:19.366Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313036266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "0xfdbfbfbfbfbf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106fdbfbfbfbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 23, + "92f33b99841c84246b4c86763b4ed426391c84246b4c86" + ] + ], + [ + "RF", + [ + 18, + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "f33b9984" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c238c1219206555764ae2753962fb7360" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "238c1219" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_11_1.html b/autobahn/client/hornbeam_case_6_11_1.html new file mode 100644 index 0000000..aa30cbb --- /dev/null +++ b/autobahn/client/hornbeam_case_6_11_1.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.11.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:19.872Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xed9fbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\ud7ff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ud7ff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=107&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: H0oKLa+3KJawYMD0NXOZ4Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: cGZJT6vaI6y2Miq2aZ8GChZsZfs=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>2</td><td>16</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>215</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313037266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103ed9fbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83cda740932038ff</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=6364613734303933</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882404164d443a9</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3430343136346434</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_11_1.json b/autobahn/client/hornbeam_case_6_11_1.json new file mode 100644 index 0000000..d5172d8 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_11_1.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 107, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xed9fbf", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud7ff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=107&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: H0oKLa+3KJawYMD0NXOZ4Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: cGZJT6vaI6y2Miq2aZ8GChZsZfs=\r\n\r\n", + "id": "6.11.1", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud7ff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 2, + "184": 1 + }, + "started": "2023-08-10T21:35:19.872Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "5": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313037266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\ud7ff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103ed9fbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83cda740932038ff" + ] + ], + [ + "RF", + [ + 3, + "\ud7ff" + ], + 1, + true, + 0, + true, + "cda74093" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882404164d443a9" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "404164d4" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_11_2.html b/autobahn/client/hornbeam_case_6_11_2.html new file mode 100644 index 0000000..b190f99 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_11_2.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.11.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:19.918Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xee8080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\ue000', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ue000', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=108&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: lZUGqwak7zwtuL8pswD2iw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: FPJk6BoiEdBBXmpXfB/9A0nWJEk=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>2</td><td>16</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>215</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313038266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103ee8080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83e0e8dc120e685c</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=6530653864633132</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88828a25b5d989cd</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3861323562356439</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_11_2.json b/autobahn/client/hornbeam_case_6_11_2.json new file mode 100644 index 0000000..aa3fc43 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_11_2.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 108, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xee8080", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ue000", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=108&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: lZUGqwak7zwtuL8pswD2iw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: FPJk6BoiEdBBXmpXfB/9A0nWJEk=\r\n\r\n", + "id": "6.11.2", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ue000", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 2, + "184": 1 + }, + "started": "2023-08-10T21:35:19.918Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "5": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313038266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\ue000" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103ee8080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83e0e8dc120e685c" + ] + ], + [ + "RF", + [ + 3, + "\ue000" + ], + 1, + true, + 0, + true, + "e0e8dc12" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88828a25b5d989cd" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "8a25b5d9" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_11_3.html b/autobahn/client/hornbeam_case_6_11_3.html new file mode 100644 index 0000000..9bc30bb --- /dev/null +++ b/autobahn/client/hornbeam_case_6_11_3.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.11.3</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:19.964Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbd</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\ufffd', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=109&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: CfHG481j/LYp25uBF29nsA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: +Aq/FuF2FcvgHTYSL2h/74qo8LM=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>2</td><td>16</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>215</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313039266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> �</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103efbfbd</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83b2cc7ae95d73c7</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=6232636337616539</pre> + <pre class="wirelog_rx_frame"> �</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882442d540b47c5</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3434326435343062</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_11_3.json b/autobahn/client/hornbeam_case_6_11_3.json new file mode 100644 index 0000000..da772aa --- /dev/null +++ b/autobahn/client/hornbeam_case_6_11_3.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 109, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbd", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ufffd", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=109&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: CfHG481j/LYp25uBF29nsA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: +Aq/FuF2FcvgHTYSL2h/74qo8LM=\r\n\r\n", + "id": "6.11.3", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ufffd", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 2, + "184": 1 + }, + "started": "2023-08-10T21:35:19.964Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "5": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313039266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\ufffd" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103efbfbd" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83b2cc7ae95d73c7" + ] + ], + [ + "RF", + [ + 3, + "\ufffd" + ], + 1, + true, + 0, + true, + "b2cc7ae9" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882442d540b47c5" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "442d540b" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_11_4.html b/autobahn/client/hornbeam_case_6_11_4.html new file mode 100644 index 0000000..c6afb1c --- /dev/null +++ b/autobahn/client/hornbeam_case_6_11_4.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.11.4</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:20.011Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf48fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0010ffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0010ffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=110&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: MCOJ9nEDCee1IaKoa7llEg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: zxLRY+e+UOBeKAXafr4EIZrhtYQ=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313130266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f48fbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84a2a95fcf5626e070</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6132613935666366</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88821d9b87361e73</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3164396238373336</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_11_4.json b/autobahn/client/hornbeam_case_6_11_4.json new file mode 100644 index 0000000..1d1b558 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_11_4.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 110, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf48fbfbf", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\udbff\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=110&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: MCOJ9nEDCee1IaKoa7llEg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: zxLRY+e+UOBeKAXafr4EIZrhtYQ=\r\n\r\n", + "id": "6.11.4", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\udbff\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:20.011Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313130266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\udbff\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f48fbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84a2a95fcf5626e070" + ] + ], + [ + "RF", + [ + 4, + "\udbff\udfff" + ], + 1, + true, + 0, + true, + "a2a95fcf" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88821d9b87361e73" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "1d9b8736" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_11_5.html b/autobahn/client/hornbeam_case_6_11_5.html new file mode 100644 index 0000000..47a7a62 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_11_5.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.11.5</b></span> : Fail - <span style="font-size: 0.9em;"><b>502</b> ms @ 2023-08-10T21:35:20.058Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf4908080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=111&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Pfm/jKCiEECAHS3PTaZR+w== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: c1xArClhy0qBrkyUwzzcDw3saRA=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>17</td><td>1</td><td>17</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>220</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>226</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313131266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf4908080</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f4908080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8c6230c6b78d8f7b58dd8d2908dfdf790a</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3632333063366237</pre> + <pre class="wirelog_rx_frame"> ����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c0f8c668d0c6521e266e201ad4efb07f4</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3066386336363864</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_11_5.json b/autobahn/client/hornbeam_case_6_11_5.json new file mode 100644 index 0000000..1d634c8 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_11_5.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 111, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf4908080", + "droppedByMe": true, + "duration": 502, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=111&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Pfm/jKCiEECAHS3PTaZR+w==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: c1xArClhy0qBrkyUwzzcDw3saRA=\r\n\r\n", + "id": "6.11.5", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "17": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:20.058Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "6": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313131266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "0xf4908080" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f4908080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 17, + "8c6230c6b78d8f7b58dd8d2908dfdf790a" + ] + ], + [ + "RF", + [ + 12, + "\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "6230c6b7" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c0f8c668d0c6521e266e201ad4efb07f4" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "0f8c668d" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_12_1.html b/autobahn/client/hornbeam_case_6_12_1.html new file mode 100644 index 0000000..2972ec6 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_1.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.12.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:20.562Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=112&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: R7eAVEwWVNxVeSI7YJWJWg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: gqmh/18By1EL93pA2LDmDnQc76s=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>211</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>3</td><td>1</td><td>3</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>223</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313132266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x80</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810180</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 835d11358bb2ae88</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=3564313133353862</pre> + <pre class="wirelog_rx_frame"> �</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888ce8a2171eeb4b507181cc703ea9d57667</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6538613231373165</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_12_1.json b/autobahn/client/hornbeam_case_6_12_1.json new file mode 100644 index 0000000..7ae99e7 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_1.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 112, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=112&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: R7eAVEwWVNxVeSI7YJWJWg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: gqmh/18By1EL93pA2LDmDnQc76s=\r\n\r\n", + "id": "6.12.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:20.562Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "3": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313132266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 1, + "0x80" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "810180" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "835d11358bb2ae88" + ] + ], + [ + "RF", + [ + 3, + "\ufffd" + ], + 1, + true, + 0, + true, + "5d11358b" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888ce8a2171eeb4b507181cc703ea9d57667" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "e8a2171e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_12_2.html b/autobahn/client/hornbeam_case_6_12_2.html new file mode 100644 index 0000000..03b49e7 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_2.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.12.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:21.067Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=113&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: VHFIEPX2SHQ3oEJt3Zi3sw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: HPYxYAiYiGWYzteg62F2X4xMrZY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>211</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>3</td><td>1</td><td>3</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>223</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313133266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xbf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8101bf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83e4d61e290b69a3</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=6534643631653239</pre> + <pre class="wirelog_rx_frame"> �</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888ccf1b67a8ccf220c7a67500888e6c06d1</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6366316236376138</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_12_2.json b/autobahn/client/hornbeam_case_6_12_2.json new file mode 100644 index 0000000..a276e79 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_2.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 113, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xbf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=113&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: VHFIEPX2SHQ3oEJt3Zi3sw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: HPYxYAiYiGWYzteg62F2X4xMrZY=\r\n\r\n", + "id": "6.12.2", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:21.067Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "3": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313133266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 1, + "0xbf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "8101bf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83e4d61e290b69a3" + ] + ], + [ + "RF", + [ + 3, + "\ufffd" + ], + 1, + true, + 0, + true, + "e4d61e29" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888ccf1b67a8ccf220c7a67500888e6c06d1" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "cf1b67a8" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_12_3.html b/autobahn/client/hornbeam_case_6_12_3.html new file mode 100644 index 0000000..f6aa09a --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_3.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.12.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:21.573Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=114&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: j2Zwa8Cu8f12ymzmHdkirQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: YO2oZGu9jsKq9NuhsQYhmjikgfE=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>11</td><td>1</td><td>11</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>214</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>224</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313134266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x80bf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810280bf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 860d16b27be2a90f94b2ab</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASKED=True, MASK=3064313662323762</pre> + <pre class="wirelog_rx_frame"> ��</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888ccd9032a0ce7975cfa4fe55808ce753d9</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6364393033326130</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_12_3.json b/autobahn/client/hornbeam_case_6_12_3.json new file mode 100644 index 0000000..2c70af1 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_3.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 114, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=114&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: j2Zwa8Cu8f12ymzmHdkirQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: YO2oZGu9jsKq9NuhsQYhmjikgfE=\r\n\r\n", + "id": "6.12.3", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "11": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:21.573Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313134266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x80bf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "810280bf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 11, + "860d16b27be2a90f94b2ab" + ] + ], + [ + "RF", + [ + 6, + "\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "0d16b27b" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888ccd9032a0ce7975cfa4fe55808ce753d9" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "cd9032a0" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_12_4.html b/autobahn/client/hornbeam_case_6_12_4.html new file mode 100644 index 0000000..de2f8e0 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_4.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.12.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:22.079Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf80</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=115&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 48SAajQpMC9ZS5loHVDGRw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: xgYrWvytIISThRepC704bcSaGaQ=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>217</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313135266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x80bf80</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810380bf80</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 89de1287e931ad3a0661af685663</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=6465313238376539</pre> + <pre class="wirelog_rx_frame"> ���</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cf7e79397f40ed4f89e89f4b7b690f2ee</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6637653739333937</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_12_4.json b/autobahn/client/hornbeam_case_6_12_4.json new file mode 100644 index 0000000..41c2c34 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_4.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 115, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf80", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=115&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 48SAajQpMC9ZS5loHVDGRw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: xgYrWvytIISThRepC704bcSaGaQ=\r\n\r\n", + "id": "6.12.4", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:22.079Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "5": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313135266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "0x80bf80" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "810380bf80" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "89de1287e931ad3a0661af685663" + ] + ], + [ + "RF", + [ + 9, + "\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "de1287e9" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cf7e79397f40ed4f89e89f4b7b690f2ee" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "f7e79397" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_12_5.html b/autobahn/client/hornbeam_case_6_12_5.html new file mode 100644 index 0000000..2881a55 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_5.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.12.5</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:22.584Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf80bf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=116&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: uoOdwVjH1u9BwuiMOiZQuQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: ivxBuYXqruwfOsCsiy8MBiGHc4w=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>17</td><td>1</td><td>17</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>220</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>226</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313136266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x80bf80bf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810480bf80bf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8c0ee0b77de15f0a92b15d58c2b30f08c0</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3065653062373764</pre> + <pre class="wirelog_rx_frame"> ����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888ccc96a02ccf7fe743a5f8c70c8de1c155</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6363393661303263</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_12_5.json b/autobahn/client/hornbeam_case_6_12_5.json new file mode 100644 index 0000000..8fae726 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_5.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 116, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf80bf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=116&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: uoOdwVjH1u9BwuiMOiZQuQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: ivxBuYXqruwfOsCsiy8MBiGHc4w=\r\n\r\n", + "id": "6.12.5", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "17": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:22.584Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "6": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313136266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "0x80bf80bf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "810480bf80bf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 17, + "8c0ee0b77de15f0a92b15d58c2b30f08c0" + ] + ], + [ + "RF", + [ + 12, + "\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "0ee0b77d" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888ccc96a02ccf7fe743a5f8c70c8de1c155" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "cc96a02c" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_12_6.html b/autobahn/client/hornbeam_case_6_12_6.html new file mode 100644 index 0000000..4579680 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_6.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.12.6</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:23.090Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf80bf80</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=117&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 7FcUan+6g2KYNpWCEno51g== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: UEB90PGPqChfVrjfkMRm6AkPOfg=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>20</td><td>1</td><td>20</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>223</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>227</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313137266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=5, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x80bf80bf80</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810580bf80bf80</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8f284c1289c7f3af6697f1fd3695a3ad34c7f3af</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=15, MASKED=True, MASK=3238346331323839</pre> + <pre class="wirelog_rx_frame"> �����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c0b6a99a70883dec86204fe874a1df8de</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3062366139396137</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_12_6.json b/autobahn/client/hornbeam_case_6_12_6.json new file mode 100644 index 0000000..1c3248b --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_6.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 117, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf80bf80", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=117&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 7FcUan+6g2KYNpWCEno51g==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: UEB90PGPqChfVrjfkMRm6AkPOfg=\r\n\r\n", + "id": "6.12.6", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "20": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:23.090Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "7": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313137266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 5, + "0x80bf80bf80" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 7, + "810580bf80bf80" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 20, + "8f284c1289c7f3af6697f1fd3695a3ad34c7f3af" + ] + ], + [ + "RF", + [ + 15, + "\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "284c1289" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c0b6a99a70883dec86204fe874a1df8de" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "0b6a99a7" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_12_7.html b/autobahn/client/hornbeam_case_6_12_7.html new file mode 100644 index 0000000..9720819 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_7.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.12.7</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:23.595Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf80bf80bf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=118&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 4JvdX+ZElo2yU7fQAnFkbQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: IETHWWcnRAXhLUJwABy38yPEO34=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>23</td><td>1</td><td>23</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>226</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313138266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x80bf80bf80bf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810680bf80bf80bf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 925ccc8ea1b373334ee371611ee123311cb373334ee371</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=18, MASKED=True, MASK=3563636338656131</pre> + <pre class="wirelog_rx_frame"> ������</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c3ff071003c19366f569e16207e871079</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3366663037313030</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_12_7.json b/autobahn/client/hornbeam_case_6_12_7.json new file mode 100644 index 0000000..126a6d2 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_7.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 118, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf80bf80bf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=118&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 4JvdX+ZElo2yU7fQAnFkbQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: IETHWWcnRAXhLUJwABy38yPEO34=\r\n\r\n", + "id": "6.12.7", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "23": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:23.595Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313138266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "0x80bf80bf80bf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "810680bf80bf80bf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 23, + "925ccc8ea1b373334ee371611ee123311cb373334ee371" + ] + ], + [ + "RF", + [ + 18, + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "5ccc8ea1" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c3ff071003c19366f569e16207e871079" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "3ff07100" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_12_8.html b/autobahn/client/hornbeam_case_6_12_8.html new file mode 100644 index 0000000..0f2a10b --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_8.html @@ -0,0 +1,309 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.12.8</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:24.102Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', '0xefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdef ...', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=119&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: NPW3AmE69fIRrLr0i8JuEQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: l0xHjKQVi4rPDJjwR3PMs18o4XU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_row"><td>196</td><td>1</td><td>196</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>399</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>65</td><td>1</td><td>65</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>285</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313139266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=63, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0</pre> + <pre class="wirelog_tx_frame"> b1b2b3b4b5b6b7b8b9babbbcbdbe ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 813f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeaf</pre> + <pre class="wirelog_tx_octets"> b0b1b2b3b4b5b6b7b8b9babbbcbd ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: fe00bd85ab42f36a14ff1c3a16ad4c3844fd4e6a14ff1c3a16ad4c3844fd4e6a14ff1c3a16ad4c3844fd4e6a14ff1c3a16ad</pre> + <pre class="wirelog_rx_octets"> 4c3844fd4e6a14ff1c3a16ad4c38 ...</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=189, MASKED=True, MASK=3835616234326633</pre> + <pre class="wirelog_rx_frame"> 0xefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdef</pre> + <pre class="wirelog_rx_frame"> bfbdefbfbdefbfbdefbfbdefbfbdef ...</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888ce458364ae7b171258d36516aa52f5733</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6534353833363461</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_12_8.json b/autobahn/client/hornbeam_case_6_12_8.json new file mode 100644 index 0000000..0b9b6c0 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_12_8.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 119, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbe", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=119&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: NPW3AmE69fIRrLr0i8JuEQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: l0xHjKQVi4rPDJjwR3PMs18o4XU=\r\n\r\n", + "id": "6.12.8", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "0xefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdef ...", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "184": 1, + "196": 1 + }, + "started": "2023-08-10T21:35:24.102Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "14": 1, + "65": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313139266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 63, + "0x808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbe ..." + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 65, + "813f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbd ..." + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 196, + "fe00bd85ab42f36a14ff1c3a16ad4c3844fd4e6a14ff1c3a16ad4c3844fd4e6a14ff1c3a16ad4c3844fd4e6a14ff1c3a16ad4c3844fd4e6a14ff1c3a16ad4c38 ..." + ] + ], + [ + "RF", + [ + 189, + "0xefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdef ..." + ], + 1, + true, + 0, + true, + "85ab42f3" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888ce458364ae7b171258d36516aa52f5733" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "e458364a" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_13_1.html b/autobahn/client/hornbeam_case_6_13_1.html new file mode 100644 index 0000000..ffe7c1e --- /dev/null +++ b/autobahn/client/hornbeam_case_6_13_1.html @@ -0,0 +1,308 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.13.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:24.607Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc020c120c220c320c420c520c620c720c820c920ca20cb20cc20cd20ce20cf20d020d120d220d320d420d520d620d720d820d920da20db20dc20dd20de20</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd ...', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=120&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: rSIPjMlFQhgtqd34SSJszg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: vnXcOkBILUfMS1btDeL8bfx1Q9Q=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>129</td><td>1</td><td>129</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>332</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>64</td><td>1</td><td>64</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>284</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313230266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=62, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xc020c120c220c320c420c520c620c720c820c920ca20cb20cc20cd20ce20cf20d020d120d220d320d420d520d620d720d8</pre> + <pre class="wirelog_tx_frame"> 20d920da20db20dc20dd20de20 ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 813ec020c120c220c320c420c520c620c720c820c920ca20cb20cc20cd20ce20cf20d020d120d220d320d420d520d620d720</pre> + <pre class="wirelog_tx_octets"> d820d920da20db20dc20dd20de20 ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: fc17a59c20f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f8</pre> + <pre class="wirelog_rx_octets"> 1a2100f81a2100f81a2100f81a21 ...</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=124, MASKED=True, MASK=3137613539633230</pre> + <pre class="wirelog_rx_frame"> � � � � � � � � � � � � � � � � ...</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cb4af129bb74655f4ddc175bbf5d873e2</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6234616631323962</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_13_1.json b/autobahn/client/hornbeam_case_6_13_1.json new file mode 100644 index 0000000..b63667e --- /dev/null +++ b/autobahn/client/hornbeam_case_6_13_1.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 120, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc020c120c220c320c420c520c620c720c820c920ca20cb20cc20cd20ce20cf20d020d120d220d320d420d520d620d720d820d920da20db20dc20dd20de20", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=120&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: rSIPjMlFQhgtqd34SSJszg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: vnXcOkBILUfMS1btDeL8bfx1Q9Q=\r\n\r\n", + "id": "6.13.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd ...", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "129": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:24.607Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "14": 1, + "64": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313230266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 62, + "0xc020c120c220c320c420c520c620c720c820c920ca20cb20cc20cd20ce20cf20d020d120d220d320d420d520d620d720d820d920da20db20dc20dd20de20 ..." + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 64, + "813ec020c120c220c320c420c520c620c720c820c920ca20cb20cc20cd20ce20cf20d020d120d220d320d420d520d620d720d820d920da20db20dc20dd20de20 ..." + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 129, + "fc17a59c20f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f81a2100f81a21 ..." + ] + ], + [ + "RF", + [ + 124, + "\ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd ..." + ], + 1, + true, + 0, + true, + "17a59c20" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cb4af129bb74655f4ddc175bbf5d873e2" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "b4af129b" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_13_2.html b/autobahn/client/hornbeam_case_6_13_2.html new file mode 100644 index 0000000..976a769 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_13_2.html @@ -0,0 +1,306 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.13.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:25.112Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe020e120e220e320e420e520e620e720e820e920ea20eb20ec20ed20ee20</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd ', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=121&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: NHdEAJxTzL5dpwK2AmM9Ig== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: yQoJh9HIG6Ls0rRMlJqGRIRRTKY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>65</td><td>1</td><td>65</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>268</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>32</td><td>1</td><td>32</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>252</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313231266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=30, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xe020e120e220e320e420e520e620e720e820e920ea20eb20ec20ed20ee20</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 811ee020e120e220e320e420e520e620e720e820e920ea20eb20ec20ed20ee20</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: bcd0f33cdb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f</pre> + <pre class="wirelog_rx_octets"> 4c81fb3f4c81fb3f4c81fb3f4c81 ...</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=60, MASKED=True, MASK=6430663333636462</pre> + <pre class="wirelog_rx_frame"> � � � � � � � � � � � � � � �</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c6b745c2e689d1b41021a3b0e2a033d57</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3662373435633265</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_13_2.json b/autobahn/client/hornbeam_case_6_13_2.json new file mode 100644 index 0000000..8808f58 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_13_2.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 121, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe020e120e220e320e420e520e620e720e820e920ea20eb20ec20ed20ee20", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=121&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: NHdEAJxTzL5dpwK2AmM9Ig==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: yQoJh9HIG6Ls0rRMlJqGRIRRTKY=\r\n\r\n", + "id": "6.13.2", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd ", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "65": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:25.112Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "14": 1, + "32": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313231266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 30, + "0xe020e120e220e320e420e520e620e720e820e920ea20eb20ec20ed20ee20" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 32, + "811ee020e120e220e320e420e520e620e720e820e920ea20eb20ec20ed20ee20" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 65, + "bcd0f33cdb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81fb3f4c81 ..." + ] + ], + [ + "RF", + [ + 60, + "\ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd " + ], + 1, + true, + 0, + true, + "d0f33cdb" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c6b745c2e689d1b41021a3b0e2a033d57" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "6b745c2e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_13_3.html b/autobahn/client/hornbeam_case_6_13_3.html new file mode 100644 index 0000000..dc51e74 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_13_3.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.13.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:25.618Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf020f120f220f320f420f520f620</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd ', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=122&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Ozrwmk1cEOPvIy11tyJC1g== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: fwD8nsah7Gk/88C17yqejQt4taM=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>33</td><td>1</td><td>33</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>236</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>16</td><td>1</td><td>16</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>236</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313232266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=14, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf020f120f220f320f420f520f620</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810ef020f120f220f320f420f520f620</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 9cff114ab010aef79010aef79010aef79010aef79010aef79010aef79010aef790</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=28, MASKED=True, MASK=6666313134616230</pre> + <pre class="wirelog_rx_frame"> � � � � � � �</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c779e855e7477c2311ef0e27e36e9e427</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3737396538353565</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_13_3.json b/autobahn/client/hornbeam_case_6_13_3.json new file mode 100644 index 0000000..bc10509 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_13_3.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 122, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf020f120f220f320f420f520f620", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=122&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Ozrwmk1cEOPvIy11tyJC1g==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: fwD8nsah7Gk/88C17yqejQt4taM=\r\n\r\n", + "id": "6.13.3", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd ", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "33": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:25.618Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "14": 1, + "16": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313232266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 14, + "0xf020f120f220f320f420f520f620" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 16, + "810ef020f120f220f320f420f520f620" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 33, + "9cff114ab010aef79010aef79010aef79010aef79010aef79010aef79010aef790" + ] + ], + [ + "RF", + [ + 28, + "\ufffd \ufffd \ufffd \ufffd \ufffd \ufffd \ufffd " + ], + 1, + true, + 0, + true, + "ff114ab0" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c779e855e7477c2311ef0e27e36e9e427" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "779e855e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_13_4.html b/autobahn/client/hornbeam_case_6_13_4.html new file mode 100644 index 0000000..2a9f8ac --- /dev/null +++ b/autobahn/client/hornbeam_case_6_13_4.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.13.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:26.124Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf820f920fa20</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd \ufffd \ufffd ', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=123&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: eCMBkJSTDNcvm0eJCyK/4Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: R6oZuLnl7s7MZxv2dENasITQ040=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>17</td><td>1</td><td>17</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>220</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313233266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf820f920fa20</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106f820f920fa20</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8ca0f19ff44f4e22d44f4e22d44f4e22d4</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6130663139666634</pre> + <pre class="wirelog_rx_frame"> � � �</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c733f25c970d662a61a5142e9324844b0</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3733336632356339</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_13_4.json b/autobahn/client/hornbeam_case_6_13_4.json new file mode 100644 index 0000000..0dd1244 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_13_4.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 123, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf820f920fa20", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=123&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: eCMBkJSTDNcvm0eJCyK/4Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: R6oZuLnl7s7MZxv2dENasITQ040=\r\n\r\n", + "id": "6.13.4", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd \ufffd \ufffd ", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "17": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:26.124Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313233266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "0xf820f920fa20" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106f820f920fa20" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 17, + "8ca0f19ff44f4e22d44f4e22d44f4e22d4" + ] + ], + [ + "RF", + [ + 12, + "\ufffd \ufffd \ufffd " + ], + 1, + true, + 0, + true, + "a0f19ff4" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c733f25c970d662a61a5142e9324844b0" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "733f25c9" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_13_5.html b/autobahn/client/hornbeam_case_6_13_5.html new file mode 100644 index 0000000..2e9ddb7 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_13_5.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.13.5</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:26.630Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc20</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd ', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=124&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: +JYXMmfgtrh8FO4J1HKyFA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: s+6nLcad3hxIhh51/ELlECcE+s8=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>212</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>224</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313234266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfc20</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8102fc20</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84e17db87b0ec2055b</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6531376462383762</pre> + <pre class="wirelog_rx_frame"> �</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c2716964724ffd1284e78f1676661f73e</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3237313639363437</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_13_5.json b/autobahn/client/hornbeam_case_6_13_5.json new file mode 100644 index 0000000..cafbe0c --- /dev/null +++ b/autobahn/client/hornbeam_case_6_13_5.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 124, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc20", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=124&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: +JYXMmfgtrh8FO4J1HKyFA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: s+6nLcad3hxIhh51/ELlECcE+s8=\r\n\r\n", + "id": "6.13.5", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd ", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "9": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:26.630Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313234266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0xfc20" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "8102fc20" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84e17db87b0ec2055b" + ] + ], + [ + "RF", + [ + 4, + "\ufffd " + ], + 1, + true, + 0, + true, + "e17db87b" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c2716964724ffd1284e78f1676661f73e" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "27169647" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_14_1.html b/autobahn/client/hornbeam_case_6_14_1.html new file mode 100644 index 0000000..df3512a --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_1.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.14.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>504</b> ms @ 2023-08-10T21:35:27.136Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc0</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=125&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: UqfPFISzWKA+NAxywFfALA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: XEgs1/144HsbRQEwGxQTHe5AVEA=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>211</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>3</td><td>1</td><td>3</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>223</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313235266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xc0</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8101c0</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8348220198a79dbc</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=3438323230313938</pre> + <pre class="wirelog_rx_frame"> �</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cda81f73bd968b054b3ef901b9bf69642</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6461383166373362</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_14_1.json b/autobahn/client/hornbeam_case_6_14_1.json new file mode 100644 index 0000000..10fc172 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_1.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 125, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc0", + "droppedByMe": true, + "duration": 504, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=125&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: UqfPFISzWKA+NAxywFfALA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: XEgs1/144HsbRQEwGxQTHe5AVEA=\r\n\r\n", + "id": "6.14.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:27.136Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "3": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313235266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 1, + "0xc0" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "8101c0" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "8348220198a79dbc" + ] + ], + [ + "RF", + [ + 3, + "\ufffd" + ], + 1, + true, + 0, + true, + "48220198" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cda81f73bd968b054b3ef901b9bf69642" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "da81f73b" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_14_10.html b/autobahn/client/hornbeam_case_6_14_10.html new file mode 100644 index 0000000..60f08eb --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_10.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.14.10</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:31.796Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfdbfbfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=134&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 48CB+aqrJB8/jQwUtU6LMA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: +a2+ywaeSu/++RIWvnBoV8i5YdI=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>20</td><td>1</td><td>20</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>223</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>227</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313334266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=5, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfdbfbfbfbf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8105fdbfbfbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8ff6466bfc19f9d61349fb84434ba9d44119f9d6</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=15, MASKED=True, MASK=6636343636626663</pre> + <pre class="wirelog_rx_frame"> �����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c02b9db4a01509c256bd7bc6a43ceba33</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3032623964623461</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_14_10.json b/autobahn/client/hornbeam_case_6_14_10.json new file mode 100644 index 0000000..24a7e41 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_10.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 134, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfdbfbfbfbf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=134&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 48CB+aqrJB8/jQwUtU6LMA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: +a2+ywaeSu/++RIWvnBoV8i5YdI=\r\n\r\n", + "id": "6.14.10", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "20": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:31.796Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "7": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313334266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 5, + "0xfdbfbfbfbf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 7, + "8105fdbfbfbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 20, + "8ff6466bfc19f9d61349fb84434ba9d44119f9d6" + ] + ], + [ + "RF", + [ + 15, + "\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "f6466bfc" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c02b9db4a01509c256bd7bc6a43ceba33" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "02b9db4a" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_14_2.html b/autobahn/client/hornbeam_case_6_14_2.html new file mode 100644 index 0000000..099706c --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_2.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.14.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:27.642Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=126&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: idyUbL0WEk93Ymi+9e26VA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 4VKoWBhmaDdZgt4qnWQKtfYbAPo=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>11</td><td>1</td><td>11</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>214</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>224</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313236266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xe080</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8102e080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 86eebf8830010035df5102</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASKED=True, MASK=6565626638383330</pre> + <pre class="wirelog_rx_frame"> ��</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c2f5919582cb05e3746377e786e2e7821</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3266353931393538</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_14_2.json b/autobahn/client/hornbeam_case_6_14_2.json new file mode 100644 index 0000000..0f7019d --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_2.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 126, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe080", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=126&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: idyUbL0WEk93Ymi+9e26VA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 4VKoWBhmaDdZgt4qnWQKtfYbAPo=\r\n\r\n", + "id": "6.14.2", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "11": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:27.642Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313236266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0xe080" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "8102e080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 11, + "86eebf8830010035df5102" + ] + ], + [ + "RF", + [ + 6, + "\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "eebf8830" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c2f5919582cb05e3746377e786e2e7821" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "2f591958" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_14_3.html b/autobahn/client/hornbeam_case_6_14_3.html new file mode 100644 index 0000000..4a580dc --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_3.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.14.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:28.148Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf08080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=127&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Ea5mMSPFSpNnhNeVMqW1zA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: ZIM70+jL2jOt06sXEhC76twlyRk=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>217</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313237266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf08080</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103f08080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8940c6264baf799ba4ff7bc9f4fd</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3430633632363462</pre> + <pre class="wirelog_rx_frame"> ���</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cc4d9ab67c730ec08adb7cc4785aeca1e</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6334643961623637</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_14_3.json b/autobahn/client/hornbeam_case_6_14_3.json new file mode 100644 index 0000000..9adbf54 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_3.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 127, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf08080", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=127&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Ea5mMSPFSpNnhNeVMqW1zA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: ZIM70+jL2jOt06sXEhC76twlyRk=\r\n\r\n", + "id": "6.14.3", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:28.148Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "5": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313237266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "0xf08080" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103f08080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "8940c6264baf799ba4ff7bc9f4fd" + ] + ], + [ + "RF", + [ + 9, + "\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "40c6264b" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cc4d9ab67c730ec08adb7cc4785aeca1e" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "c4d9ab67" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_14_4.html b/autobahn/client/hornbeam_case_6_14_4.html new file mode 100644 index 0000000..3a53756 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_4.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.14.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:28.653Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf8808080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=128&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: U+VuHO7Y4W8VXhZvQcZEKQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 65/937eUf/31J1o6mW6xhL4IbZI=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>17</td><td>1</td><td>17</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>220</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>226</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313238266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf8808080</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f8808080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8cc3c36a062c7cd7e97c7e85b97e2cd5bb</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6333633336613036</pre> + <pre class="wirelog_rx_frame"> ����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888ccfa95e6ccc401903a6c7394c8ede3f15</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6366613935653663</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_14_4.json b/autobahn/client/hornbeam_case_6_14_4.json new file mode 100644 index 0000000..c3ff28a --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_4.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 128, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf8808080", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=128&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: U+VuHO7Y4W8VXhZvQcZEKQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 65/937eUf/31J1o6mW6xhL4IbZI=\r\n\r\n", + "id": "6.14.4", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "17": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:28.653Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "6": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313238266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "0xf8808080" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f8808080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 17, + "8cc3c36a062c7cd7e97c7e85b97e2cd5bb" + ] + ], + [ + "RF", + [ + 12, + "\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "c3c36a06" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888ccfa95e6ccc401903a6c7394c8ede3f15" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "cfa95e6c" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_14_5.html b/autobahn/client/hornbeam_case_6_14_5.html new file mode 100644 index 0000000..2a51b33 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_5.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.14.5</b></span> : Fail - <span style="font-size: 0.9em;"><b>517</b> ms @ 2023-08-10T21:35:29.159Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc80808080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=129&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: aoiLzqmYzUhiThIJQCIzSA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: C0ZmLdSWcmKk6p+pwaTd0n8O6Dg=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>20</td><td>1</td><td>20</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>223</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>227</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313239266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=5, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfc80808080</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8105fc80808080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8f2ce0a15dc35f1cb2935d4ee2910f1ee0c35f1c</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=15, MASKED=True, MASK=3263653061313564</pre> + <pre class="wirelog_rx_frame"> �����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c9f774eea9c9e0985f61929cade002f93</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3966373734656561</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_14_5.json b/autobahn/client/hornbeam_case_6_14_5.json new file mode 100644 index 0000000..8103547 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_5.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 129, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc80808080", + "droppedByMe": true, + "duration": 517, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=129&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: aoiLzqmYzUhiThIJQCIzSA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: C0ZmLdSWcmKk6p+pwaTd0n8O6Dg=\r\n\r\n", + "id": "6.14.5", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "20": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:29.159Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "7": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313239266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 5, + "0xfc80808080" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 7, + "8105fc80808080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 20, + "8f2ce0a15dc35f1cb2935d4ee2910f1ee0c35f1c" + ] + ], + [ + "RF", + [ + 15, + "\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "2ce0a15d" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c9f774eea9c9e0985f61929cade002f93" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "9f774eea" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_14_6.html b/autobahn/client/hornbeam_case_6_14_6.html new file mode 100644 index 0000000..5d18337 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_6.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.14.6</b></span> : Fail - <span style="font-size: 0.9em;"><b>524</b> ms @ 2023-08-10T21:35:29.679Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xdf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=130&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 2eRbtmttZDKmsM+b9vGpsA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: QBC2vF9aFQwvWK2VrQVtnTpHV1o=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>211</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>3</td><td>1</td><td>3</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>223</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313330266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xdf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8101df</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8352c10428bd7eb9</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=3532633130343238</pre> + <pre class="wirelog_rx_frame"> �</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c6ea7c0f16d4e879e07c9a7d12fd0a188</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3665613763306631</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_14_6.json b/autobahn/client/hornbeam_case_6_14_6.json new file mode 100644 index 0000000..a470e44 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_6.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 130, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xdf", + "droppedByMe": true, + "duration": 524, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=130&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 2eRbtmttZDKmsM+b9vGpsA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: QBC2vF9aFQwvWK2VrQVtnTpHV1o=\r\n\r\n", + "id": "6.14.6", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:29.679Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "3": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313330266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 1, + "0xdf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "8101df" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "8352c10428bd7eb9" + ] + ], + [ + "RF", + [ + 3, + "\ufffd" + ], + 1, + true, + 0, + true, + "52c10428" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c6ea7c0f16d4e879e07c9a7d12fd0a188" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "6ea7c0f1" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_14_7.html b/autobahn/client/hornbeam_case_6_14_7.html new file mode 100644 index 0000000..fffbda8 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_7.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.14.7</b></span> : Fail - <span style="font-size: 0.9em;"><b>540</b> ms @ 2023-08-10T21:35:30.205Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xefbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=131&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 2ftZmoiEDfi0ySnbs3cQNA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: yGFsUrct/zzTEZK9Z76ntXoVcC0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>211</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>224</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313331266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xefbf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8102efbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83f4bc83631b033e</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=6634626338333633</pre> + <pre class="wirelog_rx_frame"> �</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cba1c2876b9f56f19d3724f56fb6b490f</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6261316332383736</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_14_7.json b/autobahn/client/hornbeam_case_6_14_7.json new file mode 100644 index 0000000..456fd9e --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_7.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 131, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xefbf", + "droppedByMe": true, + "duration": 540, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=131&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 2ftZmoiEDfi0ySnbs3cQNA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: yGFsUrct/zzTEZK9Z76ntXoVcC0=\r\n\r\n", + "id": "6.14.7", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:30.205Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313331266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0xefbf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "8102efbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83f4bc83631b033e" + ] + ], + [ + "RF", + [ + 3, + "\ufffd" + ], + 1, + true, + 0, + true, + "f4bc8363" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cba1c2876b9f56f19d3724f56fb6b490f" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "ba1c2876" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_14_8.html b/autobahn/client/hornbeam_case_6_14_8.html new file mode 100644 index 0000000..36e6fa6 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_8.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.14.8</b></span> : Fail - <span style="font-size: 0.9em;"><b>543</b> ms @ 2023-08-10T21:35:30.747Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf7bfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=132&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 3yDIALw6ucZBnVQESZGznw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: vUwzuCRIRkE8/G3At4BiHkDkUOc=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>15</td><td>1</td><td>15</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>217</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313332266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf7bfbf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103f7bfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 818966d2ef18896d52f7d96f00a7db</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3636643265663138</pre> + <pre class="wirelog_rx_frame"> ���</pre> + <pre class="wirelog_kill_after">007 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 888c42a643fd414f04922bc824dd03d12284</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3432613634336664</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_14_8.json b/autobahn/client/hornbeam_case_6_14_8.json new file mode 100644 index 0000000..610626c --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_8.json @@ -0,0 +1,175 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 132, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf7bfbf", + "droppedByMe": true, + "duration": 543, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=132&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 3yDIALw6ucZBnVQESZGznw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: vUwzuCRIRkE8/G3At4BiHkDkUOc=\r\n\r\n", + "id": "6.14.8", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "15": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:30.747Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "5": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313332266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "0xf7bfbf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103f7bfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 15, + "818966d2ef18896d52f7d96f00a7db" + ] + ], + [ + "RF", + [ + 9, + "\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "66d2ef18" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c42a643fd414f04922bc824dd03d12284" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "42a643fd" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_14_9.html b/autobahn/client/hornbeam_case_6_14_9.html new file mode 100644 index 0000000..8143a61 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_9.html @@ -0,0 +1,302 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.14.9</b></span> : Fail - <span style="font-size: 0.9em;"><b>502</b> ms @ 2023-08-10T21:35:31.291Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfbbfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=133&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: TJxVsSRB43mOPxl7R2xhtg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: PRhpIS90jNkpj+Lv2Ar9GQ5V7Ig=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>18</td><td>2</td><td>36</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>220</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>226</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313333266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfbbfbfbf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104fbbfbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 818c80b036b56f0f8b5a3f0dd90a3d5f8908</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3830623033366235</pre> + <pre class="wirelog_rx_frame"> ����</pre> + <pre class="wirelog_kill_after">007 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 888ce09cb717e375f07889f2d037a1ebd66e</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6530396362373137</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_14_9.json b/autobahn/client/hornbeam_case_6_14_9.json new file mode 100644 index 0000000..5c91242 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_14_9.json @@ -0,0 +1,174 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 133, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfbbfbfbf", + "droppedByMe": true, + "duration": 502, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=133&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: TJxVsSRB43mOPxl7R2xhtg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: PRhpIS90jNkpj+Lv2Ar9GQ5V7Ig=\r\n\r\n", + "id": "6.14.9", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "18": 2, + "184": 1 + }, + "started": "2023-08-10T21:35:31.291Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "6": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313333266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "0xfbbfbfbf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104fbbfbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 18, + "818c80b036b56f0f8b5a3f0dd90a3d5f8908" + ] + ], + [ + "RF", + [ + 12, + "\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "80b036b5" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888ce09cb717e375f07889f2d037a1ebd66e" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "e09cb717" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_15_1.html b/autobahn/client/hornbeam_case_6_15_1.html new file mode 100644 index 0000000..e03c39e --- /dev/null +++ b/autobahn/client/hornbeam_case_6_15_1.html @@ -0,0 +1,307 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.15.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>504</b> ms @ 2023-08-10T21:35:32.301Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc0e080f08080f8808080fc80808080dfefbff7bfbffbbfbfbffdbfbfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', '0xefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdef ...', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=135&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: mcAXcDP9oAVxXQExlysqrw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: DbjSZ+Q8+1upxqv9Oysl1natqsA=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>92</td><td>1</td><td>92</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>295</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>32</td><td>1</td><td>32</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>252</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313335266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=30, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xc0e080f08080f8808080fc80808080dfefbff7bfbffbbfbfbffdbfbfbfbf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 811ec0e080f08080f8808080fc80808080dfefbff7bfbffbbfbfbffdbfbfbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: d7aaaeeccf451151201513037017415372451151201513037017415372451151201513037017415372451151201513037017</pre> + <pre class="wirelog_rx_octets"> 4153724511512015130370174153 ...</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=87, MASKED=True, MASK=6161616565636366</pre> + <pre class="wirelog_rx_frame"> 0xefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdef</pre> + <pre class="wirelog_rx_frame"> bfbdefbfbdefbfbdefbfbdefbfbdef ...</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cd1b0ad04d259ea6bb8deca2490c7cc7d</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6431623061643034</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_15_1.json b/autobahn/client/hornbeam_case_6_15_1.json new file mode 100644 index 0000000..6817950 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_15_1.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 135, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc0e080f08080f8808080fc80808080dfefbff7bfbffbbfbfbffdbfbfbfbf", + "droppedByMe": true, + "duration": 504, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=135&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: mcAXcDP9oAVxXQExlysqrw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: DbjSZ+Q8+1upxqv9Oysl1natqsA=\r\n\r\n", + "id": "6.15.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "0xefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdef ...", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "92": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:32.301Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "14": 1, + "32": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313335266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 30, + "0xc0e080f08080f8808080fc80808080dfefbff7bfbffbbfbfbffdbfbfbfbf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 32, + "811ec0e080f08080f8808080fc80808080dfefbff7bfbffbbfbfbffdbfbfbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 92, + "d7aaaeeccf4511512015130370174153724511512015130370174153724511512015130370174153724511512015130370174153724511512015130370174153 ..." + ] + ], + [ + "RF", + [ + 87, + "0xefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdefbfbdef ..." + ], + 1, + true, + 0, + true, + "aaaeeccf" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cd1b0ad04d259ea6bb8deca2490c7cc7d" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "d1b0ad04" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_16_1.html b/autobahn/client/hornbeam_case_6_16_1.html new file mode 100644 index 0000000..c26277f --- /dev/null +++ b/autobahn/client/hornbeam_case_6_16_1.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.16.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:32.808Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=136&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 0jDL6IZ1WeG1hH+OJqR5mQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: HLLWEPQf60pP6cjICntXID438ZI=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>211</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>3</td><td>1</td><td>3</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>223</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313336266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfe</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8101fe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83abd27c1e446dc1</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=6162643237633165</pre> + <pre class="wirelog_rx_frame"> �</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cf59a86aff673c1c09cf4e18fb4ede7d6</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6635396138366166</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_16_1.json b/autobahn/client/hornbeam_case_6_16_1.json new file mode 100644 index 0000000..e96098b --- /dev/null +++ b/autobahn/client/hornbeam_case_6_16_1.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 136, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfe", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=136&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 0jDL6IZ1WeG1hH+OJqR5mQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: HLLWEPQf60pP6cjICntXID438ZI=\r\n\r\n", + "id": "6.16.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:32.808Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "3": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313336266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 1, + "0xfe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "8101fe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83abd27c1e446dc1" + ] + ], + [ + "RF", + [ + 3, + "\ufffd" + ], + 1, + true, + 0, + true, + "abd27c1e" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cf59a86aff673c1c09cf4e18fb4ede7d6" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "f59a86af" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_16_2.html b/autobahn/client/hornbeam_case_6_16_2.html new file mode 100644 index 0000000..38b2230 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_16_2.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.16.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:33.314Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xff</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=137&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Cyp3Qw4sDeXuirIrkVEQcg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 4ZERryYaDZuSqYxI5XNedGE/9e0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>211</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>3</td><td>1</td><td>3</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>223</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313337266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xff</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8101ff</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83bfad4ed45012f3</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=6266616434656434</pre> + <pre class="wirelog_rx_frame"> �</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cacd24935af3b0e5ac5bc2e15eda5284c</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6163643234393335</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_16_2.json b/autobahn/client/hornbeam_case_6_16_2.json new file mode 100644 index 0000000..0a521dd --- /dev/null +++ b/autobahn/client/hornbeam_case_6_16_2.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 137, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xff", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=137&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Cyp3Qw4sDeXuirIrkVEQcg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 4ZERryYaDZuSqYxI5XNedGE/9e0=\r\n\r\n", + "id": "6.16.2", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:33.314Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "3": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313337266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 1, + "0xff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "8101ff" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83bfad4ed45012f3" + ] + ], + [ + "RF", + [ + 3, + "\ufffd" + ], + 1, + true, + 0, + true, + "bfad4ed4" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cacd24935af3b0e5ac5bc2e15eda5284c" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "acd24935" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_16_3.html b/autobahn/client/hornbeam_case_6_16_3.html new file mode 100644 index 0000000..a276837 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_16_3.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.16.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>504</b> ms @ 2023-08-10T21:35:33.820Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfefeffff</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=138&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: d/ByIMeoQedbpL35bPv3kQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: i5NNeSPOQafDcG+TzCECoeAljww=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>17</td><td>1</td><td>17</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>220</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>226</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313338266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfefeffff</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104fefeffff</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8c21939afbce2c27149e2e75449c7c2546</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3231393339616662</pre> + <pre class="wirelog_rx_frame"> ����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cab768dd0a89fcabfc218eaf0ea01eca9</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6162373638646430</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_16_3.json b/autobahn/client/hornbeam_case_6_16_3.json new file mode 100644 index 0000000..7fd781a --- /dev/null +++ b/autobahn/client/hornbeam_case_6_16_3.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 138, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfefeffff", + "droppedByMe": true, + "duration": 504, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=138&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: d/ByIMeoQedbpL35bPv3kQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: i5NNeSPOQafDcG+TzCECoeAljww=\r\n\r\n", + "id": "6.16.3", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "17": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:33.820Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "6": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313338266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "0xfefeffff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104fefeffff" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 17, + "8c21939afbce2c27149e2e75449c7c2546" + ] + ], + [ + "RF", + [ + 12, + "\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "21939afb" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cab768dd0a89fcabfc218eaf0ea01eca9" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "ab768dd0" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_17_1.html b/autobahn/client/hornbeam_case_6_17_1.html new file mode 100644 index 0000000..a03d1e7 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_17_1.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.17.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:34.327Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc0af</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=139&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: CEdKOnc9FN9jJfAh4F0Nuw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 4wXnRezU5ZczrMwcjshj7qMrQ74=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>11</td><td>1</td><td>11</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>214</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>224</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313339266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xc0af</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8102c0af</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 867021c4149f9e79fbcf9c</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASKED=True, MASK=3730323163343134</pre> + <pre class="wirelog_rx_frame"> ��</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888ce99a5f86ea7318e980f438a6a8ed3eff</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6539396135663836</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_17_1.json b/autobahn/client/hornbeam_case_6_17_1.json new file mode 100644 index 0000000..ec2154a --- /dev/null +++ b/autobahn/client/hornbeam_case_6_17_1.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 139, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc0af", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=139&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: CEdKOnc9FN9jJfAh4F0Nuw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 4wXnRezU5ZczrMwcjshj7qMrQ74=\r\n\r\n", + "id": "6.17.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "11": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:34.327Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313339266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0xc0af" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "8102c0af" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 11, + "867021c4149f9e79fbcf9c" + ] + ], + [ + "RF", + [ + 6, + "\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "7021c414" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888ce99a5f86ea7318e980f438a6a8ed3eff" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "e99a5f86" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_17_2.html b/autobahn/client/hornbeam_case_6_17_2.html new file mode 100644 index 0000000..0e239d0 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_17_2.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.17.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:34.832Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe080af</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=140&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: pCVcG/cPf+AoRkFSEovCoA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: rP+WxxlzoedlI821pFRyzuYTZxk=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>217</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313430266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xe080af</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103e080af</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 89df25bb9b309a06746098542462</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=6466323562623962</pre> + <pre class="wirelog_rx_frame"> ���</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c4d656cb84e8c2bd7240b0b980c120dc1</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3464363536636238</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_17_2.json b/autobahn/client/hornbeam_case_6_17_2.json new file mode 100644 index 0000000..3936ea6 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_17_2.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 140, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe080af", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=140&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: pCVcG/cPf+AoRkFSEovCoA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: rP+WxxlzoedlI821pFRyzuYTZxk=\r\n\r\n", + "id": "6.17.2", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:34.832Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "5": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313430266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "0xe080af" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103e080af" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "89df25bb9b309a06746098542462" + ] + ], + [ + "RF", + [ + 9, + "\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "df25bb9b" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c4d656cb84e8c2bd7240b0b980c120dc1" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "4d656cb8" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_17_3.html b/autobahn/client/hornbeam_case_6_17_3.html new file mode 100644 index 0000000..fddbcf4 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_17_3.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.17.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:35.339Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf08080af</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=141&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: ytRGoMSeLhg6hiuKBZN7SQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: uhHHbD7prF0HH5qcBExgmyW+UJw=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>17</td><td>1</td><td>17</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>220</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>226</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313431266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf08080af</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f08080af</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8c7cdb61d89364dc37c3668e67c134de65</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3763646236316438</pre> + <pre class="wirelog_rx_frame"> ����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c1f040c421ced4b2d766a6b625e736d3b</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3166303430633432</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_17_3.json b/autobahn/client/hornbeam_case_6_17_3.json new file mode 100644 index 0000000..e1d5e82 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_17_3.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 141, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf08080af", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=141&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: ytRGoMSeLhg6hiuKBZN7SQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: uhHHbD7prF0HH5qcBExgmyW+UJw=\r\n\r\n", + "id": "6.17.3", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "17": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:35.339Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "6": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313431266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "0xf08080af" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f08080af" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 17, + "8c7cdb61d89364dc37c3668e67c134de65" + ] + ], + [ + "RF", + [ + 12, + "\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "7cdb61d8" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c1f040c421ced4b2d766a6b625e736d3b" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "1f040c42" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_17_4.html b/autobahn/client/hornbeam_case_6_17_4.html new file mode 100644 index 0000000..88b8304 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_17_4.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.17.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:35.844Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf8808080af</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=142&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: gnf7EEavyXf+bMuyAsFxgA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 8XQiPhK1DVr4iuXkcXBJ6LD0j2U=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>20</td><td>1</td><td>20</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>223</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>227</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313432266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=5, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf8808080af</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8105f8808080af</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8f8944385466fb85bb36f9d7eb34ab87e966fb85</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=15, MASKED=True, MASK=3839343433383534</pre> + <pre class="wirelog_rx_frame"> �����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cbddcb840be35ff2fd4b2df60fcabd939</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6264646362383430</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_17_4.json b/autobahn/client/hornbeam_case_6_17_4.json new file mode 100644 index 0000000..40d5592 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_17_4.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 142, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf8808080af", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=142&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: gnf7EEavyXf+bMuyAsFxgA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 8XQiPhK1DVr4iuXkcXBJ6LD0j2U=\r\n\r\n", + "id": "6.17.4", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "20": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:35.844Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "7": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313432266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 5, + "0xf8808080af" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 7, + "8105f8808080af" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 20, + "8f8944385466fb85bb36f9d7eb34ab87e966fb85" + ] + ], + [ + "RF", + [ + 15, + "\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "89443854" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cbddcb840be35ff2fd4b2df60fcabd939" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "bddcb840" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_17_5.html b/autobahn/client/hornbeam_case_6_17_5.html new file mode 100644 index 0000000..4eec983 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_17_5.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.17.5</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:36.351Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc80808080af</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=143&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: EUZ/wbK3f4OndZrDIr6wiw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: NPELMT/CmQXhoij2uv1Eco1bJns=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>23</td><td>1</td><td>23</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>226</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313433266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfc80808080af</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106fc80808080af</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 92a9be4dae4601f0411603a2111451f2134601f0411603</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=18, MASKED=True, MASK=6139626534646165</pre> + <pre class="wirelog_rx_frame"> ������</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cfba54453f84c033c92cb2373bad2252a</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6662613534343533</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_17_5.json b/autobahn/client/hornbeam_case_6_17_5.json new file mode 100644 index 0000000..50bd763 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_17_5.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 143, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc80808080af", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=143&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: EUZ/wbK3f4OndZrDIr6wiw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: NPELMT/CmQXhoij2uv1Eco1bJns=\r\n\r\n", + "id": "6.17.5", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "23": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:36.351Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313433266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "0xfc80808080af" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106fc80808080af" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 23, + "92a9be4dae4601f0411603a2111451f2134601f0411603" + ] + ], + [ + "RF", + [ + 18, + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "a9be4dae" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cfba54453f84c033c92cb2373bad2252a" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "fba54453" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_18_1.html b/autobahn/client/hornbeam_case_6_18_1.html new file mode 100644 index 0000000..4984b79 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_18_1.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.18.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:36.856Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc1bf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=144&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 6rtfZ7uM4TzLPBqfdfhUow== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: QtKQoZMj87+xR2JcSTBYgmlSxlQ=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>11</td><td>1</td><td>11</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>214</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>224</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313434266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xc1bf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8102c1bf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8680fad2c96f456f263f47</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASKED=True, MASK=3830666164326339</pre> + <pre class="wirelog_rx_frame"> ��</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c2da435202e4d724f44ca52006cd35459</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3264613433353230</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_18_1.json b/autobahn/client/hornbeam_case_6_18_1.json new file mode 100644 index 0000000..73e03d8 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_18_1.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 144, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc1bf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=144&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 6rtfZ7uM4TzLPBqfdfhUow==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: QtKQoZMj87+xR2JcSTBYgmlSxlQ=\r\n\r\n", + "id": "6.18.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "11": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:36.856Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313434266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0xc1bf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "8102c1bf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 11, + "8680fad2c96f456f263f47" + ] + ], + [ + "RF", + [ + 6, + "\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "80fad2c9" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c2da435202e4d724f44ca52006cd35459" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "2da43520" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_18_2.html b/autobahn/client/hornbeam_case_6_18_2.html new file mode 100644 index 0000000..626f7d2 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_18_2.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.18.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:37.361Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe09fbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=145&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: /5waYMsUbY3Z+6sfHkMaJA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: AE4sfnY1ovbO3qDjwMs4y5DCwBU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>217</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313435266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xe09fbf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103e09fbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 892d39e8edc28655029284075290</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3264333965386564</pre> + <pre class="wirelog_rx_frame"> ���</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c0cc8aebd0f21e9d265a6c99d4dbfcfc4</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3063633861656264</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_18_2.json b/autobahn/client/hornbeam_case_6_18_2.json new file mode 100644 index 0000000..c9929fa --- /dev/null +++ b/autobahn/client/hornbeam_case_6_18_2.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 145, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe09fbf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=145&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: /5waYMsUbY3Z+6sfHkMaJA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: AE4sfnY1ovbO3qDjwMs4y5DCwBU=\r\n\r\n", + "id": "6.18.2", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:37.361Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "5": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313435266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "0xe09fbf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103e09fbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "892d39e8edc28655029284075290" + ] + ], + [ + "RF", + [ + 9, + "\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "2d39e8ed" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c0cc8aebd0f21e9d265a6c99d4dbfcfc4" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "0cc8aebd" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_18_3.html b/autobahn/client/hornbeam_case_6_18_3.html new file mode 100644 index 0000000..6f3fb61 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_18_3.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.18.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>502</b> ms @ 2023-08-10T21:35:37.866Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf08fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=146&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 5dv0bHtwFWMzfyHzuU4jmw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: JfvJMTIkB23yVZt4DFXl84jVxWY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>17</td><td>1</td><td>17</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>220</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>226</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313436266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf08fbfbf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f08fbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8c163622f9f9899f16a98bcd46abd99d44</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3136333632326639</pre> + <pre class="wirelog_rx_frame"> ����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888ce3c5e6a0e02ca1cf8aab8180a2b287d9</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6533633565366130</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_18_3.json b/autobahn/client/hornbeam_case_6_18_3.json new file mode 100644 index 0000000..9452b31 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_18_3.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 146, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf08fbfbf", + "droppedByMe": true, + "duration": 502, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=146&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 5dv0bHtwFWMzfyHzuU4jmw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: JfvJMTIkB23yVZt4DFXl84jVxWY=\r\n\r\n", + "id": "6.18.3", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "17": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:37.866Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "6": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313436266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "0xf08fbfbf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f08fbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 17, + "8c163622f9f9899f16a98bcd46abd99d44" + ] + ], + [ + "RF", + [ + 12, + "\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "163622f9" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888ce3c5e6a0e02ca1cf8aab8180a2b287d9" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "e3c5e6a0" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_18_4.html b/autobahn/client/hornbeam_case_6_18_4.html new file mode 100644 index 0000000..931a511 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_18_4.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.18.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>502</b> ms @ 2023-08-10T21:35:38.371Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf887bfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=147&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: tCdYRapfdebBsCWJLPK/CQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 05i/Q0+sf6tRy1ZIJjsvWYRvZig=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>20</td><td>1</td><td>20</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>223</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>227</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313437266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=5, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf887bfbfbf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8105f887bfbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8f2e049251c1bb2fbe91b97dee93eb2decc1bb2f</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=15, MASKED=True, MASK=3265303439323531</pre> + <pre class="wirelog_rx_frame"> �����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c98b33b219b5a7c4ef1dd5c01d9c45a58</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3938623333623231</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_18_4.json b/autobahn/client/hornbeam_case_6_18_4.json new file mode 100644 index 0000000..f9ab967 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_18_4.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 147, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf887bfbfbf", + "droppedByMe": true, + "duration": 502, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=147&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: tCdYRapfdebBsCWJLPK/CQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 05i/Q0+sf6tRy1ZIJjsvWYRvZig=\r\n\r\n", + "id": "6.18.4", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "20": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:38.371Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "7": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313437266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 5, + "0xf887bfbfbf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 7, + "8105f887bfbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 20, + "8f2e049251c1bb2fbe91b97dee93eb2decc1bb2f" + ] + ], + [ + "RF", + [ + 15, + "\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "2e049251" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c98b33b219b5a7c4ef1dd5c01d9c45a58" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "98b33b21" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_18_5.html b/autobahn/client/hornbeam_case_6_18_5.html new file mode 100644 index 0000000..2bdf09f --- /dev/null +++ b/autobahn/client/hornbeam_case_6_18_5.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.18.5</b></span> : Fail - <span style="font-size: 0.9em;"><b>502</b> ms @ 2023-08-10T21:35:38.875Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc83bfbfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=148&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: I7jojcPK/xck3k+5tEbRaw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: u+bwfcm4Ei66iDzevwgQGS5R/Qg=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>23</td><td>1</td><td>23</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>226</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313438266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfc83bfbfbfbf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106fc83bfbfbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 92d9764b1e36c9f6f166cba4a16499f4a336c9f6f166cb</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=18, MASKED=True, MASK=6439373634623165</pre> + <pre class="wirelog_rx_frame"> ������</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cc3f1c9d1c0188ebeaa9faef18286a8a8</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6333663163396431</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_18_5.json b/autobahn/client/hornbeam_case_6_18_5.json new file mode 100644 index 0000000..e96bdee --- /dev/null +++ b/autobahn/client/hornbeam_case_6_18_5.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 148, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc83bfbfbfbf", + "droppedByMe": true, + "duration": 502, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=148&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: I7jojcPK/xck3k+5tEbRaw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: u+bwfcm4Ei66iDzevwgQGS5R/Qg=\r\n\r\n", + "id": "6.18.5", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "23": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:38.875Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313438266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "0xfc83bfbfbfbf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106fc83bfbfbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 23, + "92d9764b1e36c9f6f166cba4a16499f4a336c9f6f166cb" + ] + ], + [ + "RF", + [ + 18, + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "d9764b1e" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cc3f1c9d1c0188ebeaa9faef18286a8a8" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "c3f1c9d1" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_19_1.html b/autobahn/client/hornbeam_case_6_19_1.html new file mode 100644 index 0000000..c646fd6 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_19_1.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.19.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:39.378Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=149&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 5YOm9rVnBcd9H7OzlMdgPQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 5s3dqYj5EPAqmo7y0LgTZf1wY18=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>11</td><td>1</td><td>11</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>214</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>224</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313439266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xc080</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8102c080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 86e4719bac0bce26435bcc</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASKED=True, MASK=6534373139626163</pre> + <pre class="wirelog_rx_frame"> ��</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c144d9b0617a4dc697d23fc26553afa7f</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3134346439623036</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_19_1.json b/autobahn/client/hornbeam_case_6_19_1.json new file mode 100644 index 0000000..bd24577 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_19_1.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 149, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc080", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=149&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 5YOm9rVnBcd9H7OzlMdgPQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 5s3dqYj5EPAqmo7y0LgTZf1wY18=\r\n\r\n", + "id": "6.19.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "11": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:39.378Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313439266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0xc080" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "8102c080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 11, + "86e4719bac0bce26435bcc" + ] + ], + [ + "RF", + [ + 6, + "\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "e4719bac" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c144d9b0617a4dc697d23fc26553afa7f" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "144d9b06" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_19_2.html b/autobahn/client/hornbeam_case_6_19_2.html new file mode 100644 index 0000000..8e40a72 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_19_2.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.19.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:39.884Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe08080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=150&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 5Y8QLikla/CWukp6UcUrKQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: uoSpUXMj48y6WxtLSddBuhoZ1gk=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>217</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313530266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xe08080</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103e08080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 89857671bd6ac9cc523acb9e0238</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3835373637316264</pre> + <pre class="wirelog_rx_frame"> ���</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c15378f4816dec8277c59e8685440ee31</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3135333738663438</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_19_2.json b/autobahn/client/hornbeam_case_6_19_2.json new file mode 100644 index 0000000..01da09c --- /dev/null +++ b/autobahn/client/hornbeam_case_6_19_2.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 150, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe08080", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=150&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 5Y8QLikla/CWukp6UcUrKQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: uoSpUXMj48y6WxtLSddBuhoZ1gk=\r\n\r\n", + "id": "6.19.2", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:39.884Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "5": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313530266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "0xe08080" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103e08080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "89857671bd6ac9cc523acb9e0238" + ] + ], + [ + "RF", + [ + 9, + "\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "857671bd" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c15378f4816dec8277c59e8685440ee31" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "15378f48" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_19_3.html b/autobahn/client/hornbeam_case_6_19_3.html new file mode 100644 index 0000000..cc4ad33 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_19_3.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.19.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>502</b> ms @ 2023-08-10T21:35:40.389Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf0808080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=151&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: gL34PBSg5zXeGcf7uwGK4A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: i+Ci/fI0vwxsD1jRH10unGWegs4=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>17</td><td>1</td><td>17</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>220</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>226</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313531266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf0808080</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f0808080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8c5250e103bdef5ceceded0ebcefbf5ebe</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3532353065313033</pre> + <pre class="wirelog_rx_frame"> ����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cac8700dcaf6e47b3c5e967fcedf061a5</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6163383730306463</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_19_3.json b/autobahn/client/hornbeam_case_6_19_3.json new file mode 100644 index 0000000..0719432 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_19_3.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 151, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf0808080", + "droppedByMe": true, + "duration": 502, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=151&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: gL34PBSg5zXeGcf7uwGK4A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: i+Ci/fI0vwxsD1jRH10unGWegs4=\r\n\r\n", + "id": "6.19.3", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "17": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:40.389Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "6": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313531266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "0xf0808080" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f0808080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 17, + "8c5250e103bdef5ceceded0ebcefbf5ebe" + ] + ], + [ + "RF", + [ + 12, + "\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "5250e103" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cac8700dcaf6e47b3c5e967fcedf061a5" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "ac8700dc" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_19_4.html b/autobahn/client/hornbeam_case_6_19_4.html new file mode 100644 index 0000000..5a86655 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_19_4.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.19.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:40.892Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf880808080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=152&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: /4BHMyle3keNkkxApAsI7Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: p+Sn/011C5jypD8oYHcYYIX3tjU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>20</td><td>1</td><td>20</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>223</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>227</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313532266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=5, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf880808080</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8105f880808080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8f9bcc2f55747392ba2471c0ea262390e8747392</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=15, MASKED=True, MASK=3962636332663535</pre> + <pre class="wirelog_rx_frame"> �����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cff387de0fcd13a8f96561ac0be4f1c99</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6666333837646530</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_19_4.json b/autobahn/client/hornbeam_case_6_19_4.json new file mode 100644 index 0000000..2e097f4 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_19_4.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 152, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf880808080", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=152&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: /4BHMyle3keNkkxApAsI7Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: p+Sn/011C5jypD8oYHcYYIX3tjU=\r\n\r\n", + "id": "6.19.4", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "20": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:40.892Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "7": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313532266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 5, + "0xf880808080" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 7, + "8105f880808080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 20, + "8f9bcc2f55747392ba2471c0ea262390e8747392" + ] + ], + [ + "RF", + [ + 15, + "\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "9bcc2f55" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cff387de0fcd13a8f96561ac0be4f1c99" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "ff387de0" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_19_5.html b/autobahn/client/hornbeam_case_6_19_5.html new file mode 100644 index 0000000..5566afa --- /dev/null +++ b/autobahn/client/hornbeam_case_6_19_5.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.19.5</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:41.397Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc8080808080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=153&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 1mTrCAONuzkSVtDnPkQReg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: RxX/Z4nNu29LhZdwJNMHo82Kw6Q=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>23</td><td>1</td><td>23</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>226</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313533266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfc8080808080</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106fc8080808080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 92ee9679990129c476512b96265379c6240129c476512b</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=18, MASKED=True, MASK=6565393637393939</pre> + <pre class="wirelog_rx_frame"> ������</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c2addee942934a9fb43b389b46baa8fed</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3261646465653934</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_19_5.json b/autobahn/client/hornbeam_case_6_19_5.json new file mode 100644 index 0000000..c06ee24 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_19_5.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 153, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc8080808080", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=153&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 1mTrCAONuzkSVtDnPkQReg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: RxX/Z4nNu29LhZdwJNMHo82Kw6Q=\r\n\r\n", + "id": "6.19.5", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "23": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:41.397Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313533266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "0xfc8080808080" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106fc8080808080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 23, + "92ee9679990129c476512b96265379c6240129c476512b" + ] + ], + [ + "RF", + [ + 18, + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "ee967999" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c2addee942934a9fb43b389b46baa8fed" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "2addee94" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_1_1.html b/autobahn/client/hornbeam_case_6_1_1.html new file mode 100644 index 0000000..079ae85 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_1_1.html @@ -0,0 +1,302 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.1.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:06.316Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message of length 0.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>A message is echo'ed back to us (with empty payload).</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=65&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: wkTtoFepL0DX4RQ3wQRh1Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: BEbkeIjLvCALquPpJaAk5+lXCP0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>197</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>212</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3635266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8100</pre> + <pre class="wirelog_kill_after">004 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 80493535ab</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=3439333533356162</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88821108418b12e0</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3131303834313862</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_1_1.json b/autobahn/client/hornbeam_case_6_1_1.json new file mode 100644 index 0000000..e4db693 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_1_1.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 65, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message of length 0.", + "droppedByMe": true, + "duration": 45, + "expectation": "A message is echo'ed back to us (with empty payload).", + "expected": { + "OK": [ + [ + "message", + "", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=65&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: wkTtoFepL0DX4RQ3wQRh1Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: BEbkeIjLvCALquPpJaAk5+lXCP0=\r\n\r\n", + "id": "6.1.1", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "5": 1, + "8": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:06.316Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "2": 1, + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3635266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8100" + ], + false + ], + [ + "TI", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 5, + "80493535ab" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 1, + true, + 0, + true, + "493535ab" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88821108418b12e0" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "1108418b" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_1_2.html b/autobahn/client/hornbeam_case_6_1_2.html new file mode 100644 index 0000000..ca2fbe5 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_1_2.html @@ -0,0 +1,302 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.1.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>3</b> ms @ 2023-08-10T21:35:06.363Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented text message, 3 fragments each of length 0.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>A message is echo'ed back to us (with empty payload).</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The spec requires the connection to be failed cleanly here (UNCLEAN)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=66&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: BchGg7fRJXHzJIOSpGFVWg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: /rsnRWvo4iVY8/kyejB51QAvWJU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>189</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>3</td><td>6</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>5</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>2</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3636266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 0100</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 0000</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8000</pre> + <pre class="wirelog_kill_after">008 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">009 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 800bb52473</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=3062623532343733</pre> + <pre class="wirelog_tx_frame">012 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">013 TX OCTETS: 880203e8</pre> + <pre class="wirelog_tcp_closed_by_peer">014 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_1_2.json b/autobahn/client/hornbeam_case_6_1_2.json new file mode 100644 index 0000000..0ca3c37 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_1_2.json @@ -0,0 +1,209 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "UNCLEAN", + "case": 66, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send fragmented text message, 3 fragments each of length 0.", + "droppedByMe": false, + "duration": 3, + "expectation": "A message is echo'ed back to us (with empty payload).", + "expected": { + "OK": [ + [ + "message", + "", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=66&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: BchGg7fRJXHzJIOSpGFVWg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: /rsnRWvo4iVY8/kyejB51QAvWJU=\r\n\r\n", + "id": "6.1.2", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "The spec requires the connection to be failed cleanly here", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "5": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:06.363Z", + "trafficStats": null, + "txFrameStats": { + "0": 2, + "1": 1, + "8": 1 + }, + "txOctetStats": { + "2": 3, + "4": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3636266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "0100" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "0000" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8000" + ], + false + ], + [ + "TI", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 5, + "800bb52473" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 1, + true, + 0, + true, + "0bb52473" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_1_3.html b/autobahn/client/hornbeam_case_6_1_3.html new file mode 100644 index 0000000..c19b00b --- /dev/null +++ b/autobahn/client/hornbeam_case_6_1_3.html @@ -0,0 +1,299 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.1.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>3</b> ms @ 2023-08-10T21:35:06.368Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented text message, 3 fragments, first and last of length 0, middle non-empty.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>A message is echo'ed back to us (with payload = payload of middle fragment).</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'middle frame payload', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=67&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Krod0B+bF/zTtxh2jPdskQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: bGUD0BEFC6sPV3q2EZDxsHBTY/I=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>189</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>2</td><td>4</td></tr> + <tr class="stats_row"><td>22</td><td>1</td><td>22</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>232</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>2</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3637266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 0100</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=20, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> middle frame payload</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 00146d6964646c65206672616d65207061796c6f6164</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8000</pre> + <pre class="wirelog_kill_after">008 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">009 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 808d280333</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=3864323830333333</pre> + <pre class="wirelog_tcp_closed_by_peer">012 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_1_3.json b/autobahn/client/hornbeam_case_6_1_3.json new file mode 100644 index 0000000..df82f08 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_1_3.json @@ -0,0 +1,186 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 67, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send fragmented text message, 3 fragments, first and last of length 0, middle non-empty.", + "droppedByMe": false, + "duration": 3, + "expectation": "A message is echo'ed back to us (with payload = payload of middle fragment).", + "expected": { + "OK": [ + [ + "message", + "middle frame payload", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=67&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Krod0B+bF/zTtxh2jPdskQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: bGUD0BEFC6sPV3q2EZDxsHBTY/I=\r\n\r\n", + "id": "6.1.3", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "5": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:06.368Z", + "trafficStats": null, + "txFrameStats": { + "0": 2, + "1": 1 + }, + "txOctetStats": { + "2": 2, + "22": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3637266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "0100" + ], + false + ], + [ + "TF", + [ + 20, + "middle frame payload" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 22, + "00146d6964646c65206672616d65207061796c6f6164" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8000" + ], + false + ], + [ + "TI", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 5, + "808d280333" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 1, + true, + 0, + true, + "8d280333" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_20_1.html b/autobahn/client/hornbeam_case_6_20_1.html new file mode 100644 index 0000000..8ff677a --- /dev/null +++ b/autobahn/client/hornbeam_case_6_20_1.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.20.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>502</b> ms @ 2023-08-10T21:35:41.902Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xeda080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=154&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: H0m1Vc0fBPnJEh7c/UJEjg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: aGwT6si5EZcVGd8h5C60Tqu2BYY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>217</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313534266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> ���</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103eda080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8930d7603fdf68ddd08f6a8f808d</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3330643736303366</pre> + <pre class="wirelog_rx_frame"> ���</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c2351b01420b8f77b4a3fd7346226d16d</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3233353162303134</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_20_1.json b/autobahn/client/hornbeam_case_6_20_1.json new file mode 100644 index 0000000..53c5967 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_20_1.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 154, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xeda080", + "droppedByMe": true, + "duration": 502, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=154&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: H0m1Vc0fBPnJEh7c/UJEjg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: aGwT6si5EZcVGd8h5C60Tqu2BYY=\r\n\r\n", + "id": "6.20.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:41.902Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "5": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313534266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\ud800" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103eda080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "8930d7603fdf68ddd08f6a8f808d" + ] + ], + [ + "RF", + [ + 9, + "\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "30d7603f" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c2351b01420b8f77b4a3fd7346226d16d" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "2351b014" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_20_2.html b/autobahn/client/hornbeam_case_6_20_2.html new file mode 100644 index 0000000..87e1a28 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_20_2.html @@ -0,0 +1,307 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.20.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:42.405Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedadbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=155&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: QUuT4kTl3i8Js7ajOYC1wQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: Ex81XWyaiV59tSDFPoqFOoLlcV0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>12</td><td>1</td><td>12</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>5</td><td>217</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313535266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> ���</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103edadbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 89f26ae1d71dd55c384dd70e684f</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=6632366165316437</pre> + <pre class="wirelog_rx_frame"> ���</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c63a59482</pre> + <pre class="wirelog_rx_octets">012 RX OCTETS: 604cd3ed0acbf3a222d2f5fb</pre> + <pre class="wirelog_rx_frame">013 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3633613539343832</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">014 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_20_2.json b/autobahn/client/hornbeam_case_6_20_2.json new file mode 100644 index 0000000..31f5434 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_20_2.json @@ -0,0 +1,191 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 155, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedadbf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=155&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: QUuT4kTl3i8Js7ajOYC1wQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: Ex81XWyaiV59tSDFPoqFOoLlcV0=\r\n\r\n", + "id": "6.20.2", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "6": 1, + "12": 1, + "14": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:42.405Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "5": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313535266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\udb7f" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103edadbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "89f26ae1d71dd55c384dd70e684f" + ] + ], + [ + "RF", + [ + 9, + "\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "f26ae1d7" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 6, + "888c63a59482" + ] + ], + [ + "RO", + [ + 12, + "604cd3ed0acbf3a222d2f5fb" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "63a59482" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_20_3.html b/autobahn/client/hornbeam_case_6_20_3.html new file mode 100644 index 0000000..7b865cc --- /dev/null +++ b/autobahn/client/hornbeam_case_6_20_3.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.20.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>502</b> ms @ 2023-08-10T21:35:42.910Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedae80</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=156&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: DT4PcDj2efCS/7My4V9jsA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: a5fW39DmKK2ObGFMo/uUi3VfEIc=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>217</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313536266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> ���</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103edae80</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8957a87ac0b817c72fe815957fea</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3537613837616330</pre> + <pre class="wirelog_rx_frame"> ���</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c063871c505d136aa6f5616e5474f10bc</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3036333837316335</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_20_3.json b/autobahn/client/hornbeam_case_6_20_3.json new file mode 100644 index 0000000..0a3e467 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_20_3.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 156, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedae80", + "droppedByMe": true, + "duration": 502, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=156&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: DT4PcDj2efCS/7My4V9jsA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: a5fW39DmKK2ObGFMo/uUi3VfEIc=\r\n\r\n", + "id": "6.20.3", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:42.910Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "5": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313536266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\udb80" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103edae80" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "8957a87ac0b817c72fe815957fea" + ] + ], + [ + "RF", + [ + 9, + "\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "57a87ac0" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c063871c505d136aa6f5616e5474f10bc" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "063871c5" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_20_4.html b/autobahn/client/hornbeam_case_6_20_4.html new file mode 100644 index 0000000..e1c655b --- /dev/null +++ b/autobahn/client/hornbeam_case_6_20_4.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.20.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:43.414Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedafbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=157&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: tVH6RMBH4BEBv/AkkATEMA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 2LNIN8CiduTE2VX5OHBlPuyA1jc=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>217</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313537266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> ���</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103edafbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8960f0a8818f4f156edf4d473edd</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3630663061383831</pre> + <pre class="wirelog_rx_frame"> ���</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c7956d3cf7abf94a01038b4ef3821b2b6</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3739353664336366</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_20_4.json b/autobahn/client/hornbeam_case_6_20_4.json new file mode 100644 index 0000000..1e2d118 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_20_4.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 157, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedafbf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=157&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: tVH6RMBH4BEBv/AkkATEMA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 2LNIN8CiduTE2VX5OHBlPuyA1jc=\r\n\r\n", + "id": "6.20.4", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:43.414Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "5": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313537266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\udbff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103edafbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "8960f0a8818f4f156edf4d473edd" + ] + ], + [ + "RF", + [ + 9, + "\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "60f0a881" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c7956d3cf7abf94a01038b4ef3821b2b6" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "7956d3cf" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_20_5.html b/autobahn/client/hornbeam_case_6_20_5.html new file mode 100644 index 0000000..fb3b3a8 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_20_5.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.20.5</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:43.919Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedb080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=158&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: /A0R/1VDYva+ln+G8Epuqw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: OC6610wsOaUNteLs8bC/4dheLbU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>217</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313538266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> ���</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103edb080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 895415e52fbbaa58c0eba80a90e9</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3534313565353266</pre> + <pre class="wirelog_rx_frame"> ���</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cd6dfbf2dd536f842bfb1d80d97a8de54</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6436646662663264</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_20_5.json b/autobahn/client/hornbeam_case_6_20_5.json new file mode 100644 index 0000000..47a90fc --- /dev/null +++ b/autobahn/client/hornbeam_case_6_20_5.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 158, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedb080", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=158&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: /A0R/1VDYva+ln+G8Epuqw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: OC6610wsOaUNteLs8bC/4dheLbU=\r\n\r\n", + "id": "6.20.5", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:43.919Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "5": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313538266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\udc00" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103edb080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "895415e52fbbaa58c0eba80a90e9" + ] + ], + [ + "RF", + [ + 9, + "\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "5415e52f" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cd6dfbf2dd536f842bfb1d80d97a8de54" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "d6dfbf2d" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_20_6.html b/autobahn/client/hornbeam_case_6_20_6.html new file mode 100644 index 0000000..2f32e09 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_20_6.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.20.6</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:44.424Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedbe80</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=159&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: JyeFimO/G/adZl6uuqFuZw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: YcBguhRjHDQx9ASQPto3IOKq4Lo=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>217</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313539266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> ���</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103edbe80</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 89642947af8b96fa40db94a810d9</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3634323934376166</pre> + <pre class="wirelog_rx_frame"> ���</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c0201454101e8022e6b6f226143762438</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3032303134353431</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_20_6.json b/autobahn/client/hornbeam_case_6_20_6.json new file mode 100644 index 0000000..e2a2fc6 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_20_6.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 159, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedbe80", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=159&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: JyeFimO/G/adZl6uuqFuZw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: YcBguhRjHDQx9ASQPto3IOKq4Lo=\r\n\r\n", + "id": "6.20.6", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:44.424Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "5": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313539266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\udf80" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103edbe80" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "89642947af8b96fa40db94a810d9" + ] + ], + [ + "RF", + [ + 9, + "\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "642947af" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c0201454101e8022e6b6f226143762438" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "02014541" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_20_7.html b/autobahn/client/hornbeam_case_6_20_7.html new file mode 100644 index 0000000..206cfc4 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_20_7.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.20.7</b></span> : Fail - <span style="font-size: 0.9em;"><b>502</b> ms @ 2023-08-10T21:35:44.929Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=160&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: taIftvKWXH5Sy3RV+mbYNw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: vH1NMYO0LTEHIzyVy5CeENt3w94=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>217</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313630266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> ���</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103edbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 89a0bb80d44f043d3b1f066f6b1d</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=6130626238306434</pre> + <pre class="wirelog_rx_frame"> ���</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c3a84b989396dfee653eadea97bf3d8f0</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3361383462393839</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_20_7.json b/autobahn/client/hornbeam_case_6_20_7.json new file mode 100644 index 0000000..4c44658 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_20_7.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 160, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedbfbf", + "droppedByMe": true, + "duration": 502, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=160&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: taIftvKWXH5Sy3RV+mbYNw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: vH1NMYO0LTEHIzyVy5CeENt3w94=\r\n\r\n", + "id": "6.20.7", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "14": 1, + "18": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:44.929Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "5": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313630266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103edbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "89a0bb80d44f043d3b1f066f6b1d" + ] + ], + [ + "RF", + [ + 9, + "\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "a0bb80d4" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c3a84b989396dfee653eadea97bf3d8f0" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "3a84b989" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_21_1.html b/autobahn/client/hornbeam_case_6_21_1.html new file mode 100644 index 0000000..7b18d23 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_1.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.21.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>511</b> ms @ 2023-08-10T21:35:45.433Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xeda080edb080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=161&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: rfFfabEpE0efvsznFzCwBw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: iXgk/A/BJHw5mOkN+hzFgrRr2KQ=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>23</td><td>1</td><td>23</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>226</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313631266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 𐀀</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106eda080edb080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 92534fb100bcf00cefecf25ebfeea00ebdbcf00cefecf2</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=18, MASKED=True, MASK=3533346662313030</pre> + <pre class="wirelog_rx_frame"> ������</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c57cab3a65423f4c93ea4d48616bdd2df</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3537636162336136</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_21_1.json b/autobahn/client/hornbeam_case_6_21_1.json new file mode 100644 index 0000000..09b02e2 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_1.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 161, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xeda080edb080", + "droppedByMe": true, + "duration": 511, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=161&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: rfFfabEpE0efvsznFzCwBw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: iXgk/A/BJHw5mOkN+hzFgrRr2KQ=\r\n\r\n", + "id": "6.21.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "23": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:45.433Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313631266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "\ud800\udc00" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106eda080edb080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 23, + "92534fb100bcf00cefecf25ebfeea00ebdbcf00cefecf2" + ] + ], + [ + "RF", + [ + 18, + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "534fb100" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c57cab3a65423f4c93ea4d48616bdd2df" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "57cab3a6" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_21_2.html b/autobahn/client/hornbeam_case_6_21_2.html new file mode 100644 index 0000000..741f5fd --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_2.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.21.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:45.946Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xeda080edbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=162&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: gEJOiNSSvQCVJ6qVAfLq+Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: DksLjYlfNEBmh9JxVWieLfqZR/E=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>23</td><td>1</td><td>23</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>226</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313632266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106eda080edbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 9264c4b33a8b7b0ed5db795c85d92b0c878b7b0ed5db79</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=18, MASKED=True, MASK=3634633462333361</pre> + <pre class="wirelog_rx_frame"> ������</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888ccbd71e64c83e590ba2b979448aa07f1d</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6362643731653634</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_21_2.json b/autobahn/client/hornbeam_case_6_21_2.json new file mode 100644 index 0000000..558d109 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_2.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 162, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xeda080edbfbf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=162&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: gEJOiNSSvQCVJ6qVAfLq+Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: DksLjYlfNEBmh9JxVWieLfqZR/E=\r\n\r\n", + "id": "6.21.2", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "23": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:45.946Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313632266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "\ud800\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106eda080edbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 23, + "9264c4b33a8b7b0ed5db795c85d92b0c878b7b0ed5db79" + ] + ], + [ + "RF", + [ + 18, + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "64c4b33a" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888ccbd71e64c83e590ba2b979448aa07f1d" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "cbd71e64" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_21_3.html b/autobahn/client/hornbeam_case_6_21_3.html new file mode 100644 index 0000000..eac2af1 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_3.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.21.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>502</b> ms @ 2023-08-10T21:35:46.452Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedadbfedb080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=163&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: tawJro3usIg0PaoRknjteQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: iMKwDnsmXSDORvoEyBKRRj3ABfQ=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>23</td><td>1</td><td>23</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>226</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313633266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106edadbfedb080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 92d66d2e8539d2936a69d0c13a6b82913839d2936a69d0</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=18, MASKED=True, MASK=6436366432653835</pre> + <pre class="wirelog_rx_frame"> ������</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c104b6e5413a2293b79250974513c0f2d</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3130346236653534</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_21_3.json b/autobahn/client/hornbeam_case_6_21_3.json new file mode 100644 index 0000000..5f4c121 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_3.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 163, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedadbfedb080", + "droppedByMe": true, + "duration": 502, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=163&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: tawJro3usIg0PaoRknjteQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: iMKwDnsmXSDORvoEyBKRRj3ABfQ=\r\n\r\n", + "id": "6.21.3", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "23": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:46.452Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313633266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "\udb7f\udc00" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106edadbfedb080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 23, + "92d66d2e8539d2936a69d0c13a6b82913839d2936a69d0" + ] + ], + [ + "RF", + [ + 18, + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "d66d2e85" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c104b6e5413a2293b79250974513c0f2d" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "104b6e54" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_21_4.html b/autobahn/client/hornbeam_case_6_21_4.html new file mode 100644 index 0000000..43f0825 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_4.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.21.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>502</b> ms @ 2023-08-10T21:35:46.955Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedadbfedbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=164&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: nSJSMQQ3qG4O1hkYndvBPQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: yUxOA2XyUXp/c4TLOCHUI9HdGzo=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>23</td><td>1</td><td>23</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>226</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313634266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106edadbfedbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 92b134c9105e8b74ff0e8926af0cdb76ad5e8b74ff0e89</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=18, MASKED=True, MASK=6231333463393130</pre> + <pre class="wirelog_rx_frame"> ������</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c77f17f347418385b1e9f181436861e4d</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3737663137663334</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_21_4.json b/autobahn/client/hornbeam_case_6_21_4.json new file mode 100644 index 0000000..13406d3 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_4.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 164, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedadbfedbfbf", + "droppedByMe": true, + "duration": 502, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=164&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: nSJSMQQ3qG4O1hkYndvBPQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: yUxOA2XyUXp/c4TLOCHUI9HdGzo=\r\n\r\n", + "id": "6.21.4", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "23": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:46.955Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313634266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "\udb7f\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106edadbfedbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 23, + "92b134c9105e8b74ff0e8926af0cdb76ad5e8b74ff0e89" + ] + ], + [ + "RF", + [ + 18, + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "b134c910" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c77f17f347418385b1e9f181436861e4d" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "77f17f34" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_21_5.html b/autobahn/client/hornbeam_case_6_21_5.html new file mode 100644 index 0000000..a4077a8 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_5.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.21.5</b></span> : Fail - <span style="font-size: 0.9em;"><b>502</b> ms @ 2023-08-10T21:35:47.458Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedae80edb080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=165&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 1YOcllmJeM6na0xFu9uIzg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: BjzXlonHWpdJDcoPjf6gyMAkkDQ=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>23</td><td>1</td><td>23</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>226</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313635266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106edae80edb080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 9290f0426e7f4fff812f4dadd12d1ffdd37f4fff812f4d</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=18, MASKED=True, MASK=3930663034323665</pre> + <pre class="wirelog_rx_frame"> ������</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cad20fef1aec9b99ec44e99d1ec579f88</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6164323066656631</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_21_5.json b/autobahn/client/hornbeam_case_6_21_5.json new file mode 100644 index 0000000..fca2b42 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_5.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 165, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedae80edb080", + "droppedByMe": true, + "duration": 502, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=165&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 1YOcllmJeM6na0xFu9uIzg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: BjzXlonHWpdJDcoPjf6gyMAkkDQ=\r\n\r\n", + "id": "6.21.5", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "23": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:47.458Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313635266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "\udb80\udc00" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106edae80edb080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 23, + "9290f0426e7f4fff812f4dadd12d1ffdd37f4fff812f4d" + ] + ], + [ + "RF", + [ + 18, + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "90f0426e" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cad20fef1aec9b99ec44e99d1ec579f88" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "ad20fef1" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_21_6.html b/autobahn/client/hornbeam_case_6_21_6.html new file mode 100644 index 0000000..83ed492 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_6.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.21.6</b></span> : Fail - <span style="font-size: 0.9em;"><b>502</b> ms @ 2023-08-10T21:35:47.961Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedae80edbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=166&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Zu/e0gRrhPGpN53tVvWBdw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: XBq1q+u68Z4l103bemKvzb1ML0g=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>23</td><td>1</td><td>23</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>226</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313636266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106edae80edbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 9293e39ae17c5c270e2c5e755e2e0c255c7c5c270e2c5e</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=18, MASKED=True, MASK=3933653339616531</pre> + <pre class="wirelog_rx_frame"> ������</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cbdf5a8a1be1cefced49bcf81fc82c9d8</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6264663561386131</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_21_6.json b/autobahn/client/hornbeam_case_6_21_6.json new file mode 100644 index 0000000..f3d40d3 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_6.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 166, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedae80edbfbf", + "droppedByMe": true, + "duration": 502, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=166&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Zu/e0gRrhPGpN53tVvWBdw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: XBq1q+u68Z4l103bemKvzb1ML0g=\r\n\r\n", + "id": "6.21.6", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "23": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:47.961Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313636266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "\udb80\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106edae80edbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 23, + "9293e39ae17c5c270e2c5e755e2e0c255c7c5c270e2c5e" + ] + ], + [ + "RF", + [ + 18, + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "93e39ae1" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cbdf5a8a1be1cefced49bcf81fc82c9d8" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "bdf5a8a1" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_21_7.html b/autobahn/client/hornbeam_case_6_21_7.html new file mode 100644 index 0000000..6ba61e1 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_7.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.21.7</b></span> : Fail - <span style="font-size: 0.9em;"><b>502</b> ms @ 2023-08-10T21:35:48.466Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedafbfedb080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=167&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: dXN5QTqF3pAGZo7t2FkZ7w== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 3PLQUIdQntq7Kzx4t0jZ+i0Vn+U=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>23</td><td>1</td><td>23</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>226</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313637266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106edafbfedb080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 92f556beba1ae903554aeb510548b901071ae903554aeb</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=18, MASKED=True, MASK=6635353662656261</pre> + <pre class="wirelog_rx_frame"> ������</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c0d23722b0eca3544644d150b4c541352</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3064323337323262</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_21_7.json b/autobahn/client/hornbeam_case_6_21_7.json new file mode 100644 index 0000000..60ab78c --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_7.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 167, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedafbfedb080", + "droppedByMe": true, + "duration": 502, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=167&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: dXN5QTqF3pAGZo7t2FkZ7w==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 3PLQUIdQntq7Kzx4t0jZ+i0Vn+U=\r\n\r\n", + "id": "6.21.7", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "23": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:48.466Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313637266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "\udbff\udc00" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106edafbfedb080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 23, + "92f556beba1ae903554aeb510548b901071ae903554aeb" + ] + ], + [ + "RF", + [ + 18, + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "f556beba" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c0d23722b0eca3544644d150b4c541352" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "0d23722b" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_21_8.html b/autobahn/client/hornbeam_case_6_21_8.html new file mode 100644 index 0000000..3ad11c0 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_8.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.21.8</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:48.970Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedafbfedbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=168&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: XtBmEgC2ZDL+jv06YWOVpA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: tUVIzhtbkwyQbNRY9I9dTA15sXY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>23</td><td>1</td><td>23</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>226</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313638266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106edafbfedbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 92ae0f4b4d41b0f6a211b2a4f213e0f4f041b0f6a211b2</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=18, MASKED=True, MASK=6165306634623464</pre> + <pre class="wirelog_rx_frame"> ������</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c3e38889b3dd1cff45756efbb7f4fe9e2</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3365333838383962</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_21_8.json b/autobahn/client/hornbeam_case_6_21_8.json new file mode 100644 index 0000000..0dce437 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_21_8.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 168, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedafbfedbfbf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=168&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: XtBmEgC2ZDL+jv06YWOVpA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: tUVIzhtbkwyQbNRY9I9dTA15sXY=\r\n\r\n", + "id": "6.21.8", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "23": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:48.970Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313638266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "\udbff\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106edafbfedbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 23, + "92ae0f4b4d41b0f6a211b2a4f213e0f4f041b0f6a211b2" + ] + ], + [ + "RF", + [ + 18, + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "ae0f4b4d" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c3e38889b3dd1cff45756efbb7f4fe9e2" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "3e38889b" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_1.html b/autobahn/client/hornbeam_case_6_22_1.html new file mode 100644 index 0000000..7f45cfd --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_1.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>49</b> ms @ 2023-08-10T21:35:49.475Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\ufffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=169&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: vtnnbMeGUwtWHbpY7jLO/Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: +Z/zHCy/pofWzQvXAmJQ2ZS2KOo=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>2</td><td>16</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>215</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313639266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103efbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83997f2f0176c091</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=3939376632663031</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882e58dcc85e665</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6535386463633835</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_1.json b/autobahn/client/hornbeam_case_6_22_1.json new file mode 100644 index 0000000..2fba811 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_1.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 169, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbe", + "droppedByMe": true, + "duration": 49, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ufffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=169&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: vtnnbMeGUwtWHbpY7jLO/Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: +Z/zHCy/pofWzQvXAmJQ2ZS2KOo=\r\n\r\n", + "id": "6.22.1", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ufffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 2, + "184": 1 + }, + "started": "2023-08-10T21:35:49.475Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "5": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313639266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\ufffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103efbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83997f2f0176c091" + ] + ], + [ + "RF", + [ + 3, + "\ufffe" + ], + 1, + true, + 0, + true, + "997f2f01" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882e58dcc85e665" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "e58dcc85" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_10.html b/autobahn/client/hornbeam_case_6_22_10.html new file mode 100644 index 0000000..3e367cb --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_10.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.10</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:49.899Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf18fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0004ffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0004ffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=178&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: OTDwbLawdo9J5a+cX4Kacg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: mwAGUxmEs2eIyv1Zi6im7yjy9hk=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313738266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f18fbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84815e4da070d1f21f</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3831356534646130</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882e863fb4eeb8b</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6538363366623465</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_10.json b/autobahn/client/hornbeam_case_6_22_10.json new file mode 100644 index 0000000..8154cb8 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_10.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 178, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf18fbfbf", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud8ff\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=178&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: OTDwbLawdo9J5a+cX4Kacg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: mwAGUxmEs2eIyv1Zi6im7yjy9hk=\r\n\r\n", + "id": "6.22.10", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud8ff\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:49.899Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313738266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud8ff\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f18fbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84815e4da070d1f21f" + ] + ], + [ + "RF", + [ + 4, + "\ud8ff\udfff" + ], + 1, + true, + 0, + true, + "815e4da0" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882e863fb4eeb8b" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "e863fb4e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_11.html b/autobahn/client/hornbeam_case_6_22_11.html new file mode 100644 index 0000000..4a1aca9 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_11.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.11</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:49.946Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf19fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0005fffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0005fffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=179&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: eqfeA4Z4eWfvC1efT8xdrw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 6Q5OBPwzYUcBruE9EEBxqv++C78=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313739266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f19fbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84b2bd03704322bcce</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6232626430333730</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882b7150adeb4fd</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6237313530616465</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_11.json b/autobahn/client/hornbeam_case_6_22_11.json new file mode 100644 index 0000000..0499bb7 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_11.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 179, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf19fbfbe", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud93f\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=179&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: eqfeA4Z4eWfvC1efT8xdrw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 6Q5OBPwzYUcBruE9EEBxqv++C78=\r\n\r\n", + "id": "6.22.11", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud93f\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:49.946Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313739266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud93f\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f19fbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84b2bd03704322bcce" + ] + ], + [ + "RF", + [ + 4, + "\ud93f\udffe" + ], + 1, + true, + 0, + true, + "b2bd0370" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882b7150adeb4fd" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "b7150ade" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_12.html b/autobahn/client/hornbeam_case_6_22_12.html new file mode 100644 index 0000000..c39b394 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_12.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.12</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:49.992Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf19fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0005ffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0005ffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=180&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: RLEbv/KoGQ4I58jmh/d3TQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: OtbL3Z7fJwx5WKtJoAXvyy80tTU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313830266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f19fbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84c146633a30d9dc85</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6331343636333361</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882edf8c3eeee10</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6564663863336565</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_12.json b/autobahn/client/hornbeam_case_6_22_12.json new file mode 100644 index 0000000..3419260 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_12.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 180, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf19fbfbf", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud93f\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=180&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: RLEbv/KoGQ4I58jmh/d3TQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: OtbL3Z7fJwx5WKtJoAXvyy80tTU=\r\n\r\n", + "id": "6.22.12", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud93f\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:49.992Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313830266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud93f\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f19fbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84c146633a30d9dc85" + ] + ], + [ + "RF", + [ + 4, + "\ud93f\udfff" + ], + 1, + true, + 0, + true, + "c146633a" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882edf8c3eeee10" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "edf8c3ee" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_13.html b/autobahn/client/hornbeam_case_6_22_13.html new file mode 100644 index 0000000..0429790 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_13.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.13</b></span> : Pass - <span style="font-size: 0.9em;"><b>44</b> ms @ 2023-08-10T21:35:50.039Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf1afbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0006fffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0006fffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=181&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: XMEJdVHsKib1U5rVas8yIg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: knTyH2R0Z25AlBiRXVNCYyhCLA4=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313831266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f1afbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 849f32e74d6e9d58f3</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3966333265373464</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88822642801c25aa</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3236343238303163</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_13.json b/autobahn/client/hornbeam_case_6_22_13.json new file mode 100644 index 0000000..cf6ab9b --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_13.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 181, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf1afbfbe", + "droppedByMe": true, + "duration": 44, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud97f\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=181&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: XMEJdVHsKib1U5rVas8yIg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: knTyH2R0Z25AlBiRXVNCYyhCLA4=\r\n\r\n", + "id": "6.22.13", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud97f\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.039Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313831266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud97f\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f1afbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "849f32e74d6e9d58f3" + ] + ], + [ + "RF", + [ + 4, + "\ud97f\udffe" + ], + 1, + true, + 0, + true, + "9f32e74d" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88822642801c25aa" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "2642801c" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_14.html b/autobahn/client/hornbeam_case_6_22_14.html new file mode 100644 index 0000000..6dca9ec --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_14.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.14</b></span> : Pass - <span style="font-size: 0.9em;"><b>49</b> ms @ 2023-08-10T21:35:50.085Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf1afbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0006ffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0006ffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=182&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: NMiJHPp4IzVOfhPKG/U5aw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: CndoqO2Ppvodlj7ktu+/yb7s3kI=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313832266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f1afbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84f30f81bd02a03e02</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6633306638316264</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882145c158617b4</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3134356331353836</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_14.json b/autobahn/client/hornbeam_case_6_22_14.json new file mode 100644 index 0000000..c05e1e8 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_14.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 182, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf1afbfbf", + "droppedByMe": true, + "duration": 49, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud97f\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=182&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: NMiJHPp4IzVOfhPKG/U5aw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: CndoqO2Ppvodlj7ktu+/yb7s3kI=\r\n\r\n", + "id": "6.22.14", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud97f\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.085Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313832266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud97f\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f1afbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84f30f81bd02a03e02" + ] + ], + [ + "RF", + [ + 4, + "\ud97f\udfff" + ], + 1, + true, + 0, + true, + "f30f81bd" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882145c158617b4" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "145c1586" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_15.html b/autobahn/client/hornbeam_case_6_22_15.html new file mode 100644 index 0000000..a685871 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_15.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.15</b></span> : Pass - <span style="font-size: 0.9em;"><b>48</b> ms @ 2023-08-10T21:35:50.136Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf1bfbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0007fffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0007fffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=183&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: ufBHqXMlmH5NeY2YIMQ53A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: HmYZJwWlAcGFHoeQhw9ggkPMm3Y=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313833266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f1bfbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84ba5c8f604be330de</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6261356338663630</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882904103b493a9</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3930343130336234</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_15.json b/autobahn/client/hornbeam_case_6_22_15.json new file mode 100644 index 0000000..109e291 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_15.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 183, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf1bfbfbe", + "droppedByMe": true, + "duration": 48, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud9bf\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=183&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: ufBHqXMlmH5NeY2YIMQ53A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: HmYZJwWlAcGFHoeQhw9ggkPMm3Y=\r\n\r\n", + "id": "6.22.15", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud9bf\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.136Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313833266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud9bf\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f1bfbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84ba5c8f604be330de" + ] + ], + [ + "RF", + [ + 4, + "\ud9bf\udffe" + ], + 1, + true, + 0, + true, + "ba5c8f60" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882904103b493a9" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "904103b4" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_16.html b/autobahn/client/hornbeam_case_6_22_16.html new file mode 100644 index 0000000..d6d20c5 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_16.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.16</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:50.186Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf1bfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0007ffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0007ffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=184&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: jtsdpZv0fOI7M0MdRYdByQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: djiiiTR/0aINSJK+YDltNTSC45Q=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313834266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f1bfbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84fc1736c80da88977</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6663313733366338</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88828f3572d48cdd</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3866333537326434</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_16.json b/autobahn/client/hornbeam_case_6_22_16.json new file mode 100644 index 0000000..a517e8d --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_16.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 184, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf1bfbfbf", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud9bf\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=184&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: jtsdpZv0fOI7M0MdRYdByQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: djiiiTR/0aINSJK+YDltNTSC45Q=\r\n\r\n", + "id": "6.22.16", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud9bf\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.186Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313834266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud9bf\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f1bfbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84fc1736c80da88977" + ] + ], + [ + "RF", + [ + 4, + "\ud9bf\udfff" + ], + 1, + true, + 0, + true, + "fc1736c8" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88828f3572d48cdd" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "8f3572d4" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_17.html b/autobahn/client/hornbeam_case_6_22_17.html new file mode 100644 index 0000000..309afe1 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_17.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.17</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:50.232Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf28fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0008fffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0008fffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=185&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 8foQVbbDPmKv/iOHftroPQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: xYT8sR5ostmLILYp4x7BVjrTtRo=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313835266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f28fbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84fb66e8fd09e95743</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6662363665386664</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882a7ea001ea402</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6137656130303165</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_17.json b/autobahn/client/hornbeam_case_6_22_17.json new file mode 100644 index 0000000..888fc74 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_17.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 185, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf28fbfbe", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud9ff\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=185&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 8foQVbbDPmKv/iOHftroPQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: xYT8sR5ostmLILYp4x7BVjrTtRo=\r\n\r\n", + "id": "6.22.17", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud9ff\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.232Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313835266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud9ff\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f28fbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84fb66e8fd09e95743" + ] + ], + [ + "RF", + [ + 4, + "\ud9ff\udffe" + ], + 1, + true, + 0, + true, + "fb66e8fd" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882a7ea001ea402" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "a7ea001e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_18.html b/autobahn/client/hornbeam_case_6_22_18.html new file mode 100644 index 0000000..9cac2ea --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_18.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.18</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:50.278Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf28fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0008ffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0008ffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=186&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: CzlLLOMBga5IXJrpsTvExg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 6Tk1fPxhAf/dcncaSkSKz0Kmo2I=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313836266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f28fbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84b65f47d644d0f869</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6236356634376436</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88820eaaffbb0d42</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3065616166666262</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_18.json b/autobahn/client/hornbeam_case_6_22_18.json new file mode 100644 index 0000000..ef5fa65 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_18.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 186, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf28fbfbf", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud9ff\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=186&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: CzlLLOMBga5IXJrpsTvExg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 6Tk1fPxhAf/dcncaSkSKz0Kmo2I=\r\n\r\n", + "id": "6.22.18", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud9ff\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.278Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313836266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud9ff\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f28fbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84b65f47d644d0f869" + ] + ], + [ + "RF", + [ + 4, + "\ud9ff\udfff" + ], + 1, + true, + 0, + true, + "b65f47d6" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88820eaaffbb0d42" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "0eaaffbb" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_19.html b/autobahn/client/hornbeam_case_6_22_19.html new file mode 100644 index 0000000..ddf8984 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_19.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.19</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:50.325Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf29fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0009fffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0009fffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=187&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 0AL2mv6vhFC8FWu6V64V5Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: NGdgLtzk99zX70+nXnb/zlvef28=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313837266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f29fbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 844d43a77fbfdc18c1</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3464343361373766</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882d27ff569d197</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6432376666353639</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_19.json b/autobahn/client/hornbeam_case_6_22_19.json new file mode 100644 index 0000000..5e09c10 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_19.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 187, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf29fbfbe", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\uda3f\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=187&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 0AL2mv6vhFC8FWu6V64V5Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: NGdgLtzk99zX70+nXnb/zlvef28=\r\n\r\n", + "id": "6.22.19", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\uda3f\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.325Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313837266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\uda3f\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f29fbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "844d43a77fbfdc18c1" + ] + ], + [ + "RF", + [ + 4, + "\uda3f\udffe" + ], + 1, + true, + 0, + true, + "4d43a77f" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882d27ff569d197" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "d27ff569" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_2.html b/autobahn/client/hornbeam_case_6_22_2.html new file mode 100644 index 0000000..d1b19cf --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_2.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>44</b> ms @ 2023-08-10T21:35:49.526Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\uffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\uffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=170&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: f/ZqjLYp54wYcUTrag973A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 2q0qAp5F4JkvU0yQXWQ1rTbAecU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>2</td><td>16</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>215</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313730266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103efbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83224c05c4cdf3ba</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=3232346330356334</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882c8cc2ea2cb24</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6338636332656132</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_2.json b/autobahn/client/hornbeam_case_6_22_2.json new file mode 100644 index 0000000..c014cd2 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_2.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 170, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbf", + "droppedByMe": true, + "duration": 44, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\uffff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=170&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: f/ZqjLYp54wYcUTrag973A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 2q0qAp5F4JkvU0yQXWQ1rTbAecU=\r\n\r\n", + "id": "6.22.2", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\uffff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 2, + "184": 1 + }, + "started": "2023-08-10T21:35:49.526Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "5": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313730266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\uffff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103efbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83224c05c4cdf3ba" + ] + ], + [ + "RF", + [ + 3, + "\uffff" + ], + 1, + true, + 0, + true, + "224c05c4" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882c8cc2ea2cb24" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "c8cc2ea2" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_20.html b/autobahn/client/hornbeam_case_6_22_20.html new file mode 100644 index 0000000..191dc61 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_20.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.20</b></span> : Pass - <span style="font-size: 0.9em;"><b>44</b> ms @ 2023-08-10T21:35:50.372Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf29fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0009ffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0009ffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=188&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: OQdZHIeOjYRl+SwjOI2wsg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: TU7+unSmuULKpOCZ4WwttvK1FqE=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313838266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f29fbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84a8474c965ad8f329</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6138343734633936</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882598ab06c5a62</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3539386162303663</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_20.json b/autobahn/client/hornbeam_case_6_22_20.json new file mode 100644 index 0000000..eb393b6 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_20.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 188, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf29fbfbf", + "droppedByMe": true, + "duration": 44, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\uda3f\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=188&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: OQdZHIeOjYRl+SwjOI2wsg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: TU7+unSmuULKpOCZ4WwttvK1FqE=\r\n\r\n", + "id": "6.22.20", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\uda3f\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.372Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313838266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\uda3f\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f29fbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84a8474c965ad8f329" + ] + ], + [ + "RF", + [ + 4, + "\uda3f\udfff" + ], + 1, + true, + 0, + true, + "a8474c96" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882598ab06c5a62" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "598ab06c" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_21.html b/autobahn/client/hornbeam_case_6_22_21.html new file mode 100644 index 0000000..9e48df3 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_21.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.21</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:50.418Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf2afbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U000afffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U000afffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=189&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Csk4eXGH+uaL+ZrvRkaEpQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 1OYarAGbUYkBRjuS4Zf9Ys3LQNg=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313839266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f2afbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 843fe089e4cd4f365a</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3366653038396534</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882b1826111b26a</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6231383236313131</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_21.json b/autobahn/client/hornbeam_case_6_22_21.json new file mode 100644 index 0000000..0d06a77 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_21.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 189, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf2afbfbe", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\uda7f\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=189&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Csk4eXGH+uaL+ZrvRkaEpQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 1OYarAGbUYkBRjuS4Zf9Ys3LQNg=\r\n\r\n", + "id": "6.22.21", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\uda7f\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.418Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313839266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\uda7f\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f2afbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "843fe089e4cd4f365a" + ] + ], + [ + "RF", + [ + 4, + "\uda7f\udffe" + ], + 1, + true, + 0, + true, + "3fe089e4" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882b1826111b26a" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "b1826111" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_22.html b/autobahn/client/hornbeam_case_6_22_22.html new file mode 100644 index 0000000..e4c38c1 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_22.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.22</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:50.464Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf2afbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U000affff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U000affff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=190&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: ZJ0AeKhaYsMCySOfUYQZtA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: EfXjHmb9F6ad4378BY5sqiOL6VQ=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313930266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f2afbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 844212c91fb0bd76a0</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3432313263393166</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88823352254530ba</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3333353232353435</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_22.json b/autobahn/client/hornbeam_case_6_22_22.json new file mode 100644 index 0000000..b7eb9da --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_22.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 190, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf2afbfbf", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\uda7f\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=190&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: ZJ0AeKhaYsMCySOfUYQZtA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: EfXjHmb9F6ad4378BY5sqiOL6VQ=\r\n\r\n", + "id": "6.22.22", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\uda7f\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.464Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313930266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\uda7f\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f2afbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "844212c91fb0bd76a0" + ] + ], + [ + "RF", + [ + 4, + "\uda7f\udfff" + ], + 1, + true, + 0, + true, + "4212c91f" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88823352254530ba" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "33522545" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_23.html b/autobahn/client/hornbeam_case_6_22_23.html new file mode 100644 index 0000000..d771da9 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_23.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.23</b></span> : Pass - <span style="font-size: 0.9em;"><b>47</b> ms @ 2023-08-10T21:35:50.511Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf2bfbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U000bfffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U000bfffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=191&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: GvM/U0slgRgzJq6gwIXNfQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: BK0/Gks/jOXjlgd7y/6ieG2KoyI=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313931266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f2bfbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84ec0125a81ebe9a16</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6563303132356138</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882ddfda765de15</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6464666461373635</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_23.json b/autobahn/client/hornbeam_case_6_22_23.json new file mode 100644 index 0000000..648186a --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_23.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 191, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf2bfbfbe", + "droppedByMe": true, + "duration": 47, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\udabf\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=191&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: GvM/U0slgRgzJq6gwIXNfQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: BK0/Gks/jOXjlgd7y/6ieG2KoyI=\r\n\r\n", + "id": "6.22.23", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\udabf\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.511Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313931266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\udabf\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f2bfbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84ec0125a81ebe9a16" + ] + ], + [ + "RF", + [ + 4, + "\udabf\udffe" + ], + 1, + true, + 0, + true, + "ec0125a8" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882ddfda765de15" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "ddfda765" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_24.html b/autobahn/client/hornbeam_case_6_22_24.html new file mode 100644 index 0000000..0d0232e --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_24.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.24</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:50.562Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf2bfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U000bffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U000bffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=192&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: b2zA0npRS9Vf8yr0Rv5KpA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: /zeKZ+HiH/5qvAezLCc5wo2G9W0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313932266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f2bfbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84971b3fce65a48071</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3937316233666365</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882b6f2ebfeb51a</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6236663265626665</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_24.json b/autobahn/client/hornbeam_case_6_22_24.json new file mode 100644 index 0000000..8cf7d2f --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_24.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 192, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf2bfbfbf", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\udabf\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=192&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: b2zA0npRS9Vf8yr0Rv5KpA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: /zeKZ+HiH/5qvAezLCc5wo2G9W0=\r\n\r\n", + "id": "6.22.24", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\udabf\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.562Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313932266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\udabf\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f2bfbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84971b3fce65a48071" + ] + ], + [ + "RF", + [ + 4, + "\udabf\udfff" + ], + 1, + true, + 0, + true, + "971b3fce" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882b6f2ebfeb51a" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "b6f2ebfe" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_25.html b/autobahn/client/hornbeam_case_6_22_25.html new file mode 100644 index 0000000..538d358 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_25.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.25</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:50.609Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf38fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U000cfffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U000cfffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=193&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: /jQNw6Zkfz4YWO7Atq1Isw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: /nI3setjDUOCfwH21G8e6s7t7lo=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313933266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f38fbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 844aa34943b92cf6fd</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3461613334393433</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88820b13af7108fb</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3062313361663731</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_25.json b/autobahn/client/hornbeam_case_6_22_25.json new file mode 100644 index 0000000..5db551e --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_25.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 193, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf38fbfbe", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\udaff\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=193&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: /jQNw6Zkfz4YWO7Atq1Isw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: /nI3setjDUOCfwH21G8e6s7t7lo=\r\n\r\n", + "id": "6.22.25", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\udaff\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.609Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313933266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\udaff\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f38fbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "844aa34943b92cf6fd" + ] + ], + [ + "RF", + [ + 4, + "\udaff\udffe" + ], + 1, + true, + 0, + true, + "4aa34943" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88820b13af7108fb" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "0b13af71" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_26.html b/autobahn/client/hornbeam_case_6_22_26.html new file mode 100644 index 0000000..871effc --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_26.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.26</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:50.654Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf38fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U000cffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U000cffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=194&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: BnTN/x+G5bBxfe2xRy3okw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: TDdvK1bUil5hvu6VLuC6T0uH208=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313934266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f38fbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 848a26055179a9baee</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3861323630353531</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882fb696beff881</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6662363936626566</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_26.json b/autobahn/client/hornbeam_case_6_22_26.json new file mode 100644 index 0000000..9c32d9a --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_26.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 194, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf38fbfbf", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\udaff\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=194&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: BnTN/x+G5bBxfe2xRy3okw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: TDdvK1bUil5hvu6VLuC6T0uH208=\r\n\r\n", + "id": "6.22.26", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\udaff\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.654Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313934266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\udaff\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f38fbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "848a26055179a9baee" + ] + ], + [ + "RF", + [ + 4, + "\udaff\udfff" + ], + 1, + true, + 0, + true, + "8a260551" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882fb696beff881" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "fb696bef" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_27.html b/autobahn/client/hornbeam_case_6_22_27.html new file mode 100644 index 0000000..900eacf --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_27.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.27</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:50.702Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf39fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U000dfffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U000dfffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=195&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: lKbKArpf3YsP04jwBCNwtw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: VQ8+pfQcPr1VRuuH6a+LEqa6B8o=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313935266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f39fbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8406473be9f5d88457</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3036343733626539</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 888255e02a595608</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3535653032613539</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_27.json b/autobahn/client/hornbeam_case_6_22_27.json new file mode 100644 index 0000000..419b85f --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_27.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 195, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf39fbfbe", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\udb3f\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=195&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: lKbKArpf3YsP04jwBCNwtw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: VQ8+pfQcPr1VRuuH6a+LEqa6B8o=\r\n\r\n", + "id": "6.22.27", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\udb3f\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.702Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313935266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\udb3f\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f39fbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "8406473be9f5d88457" + ] + ], + [ + "RF", + [ + 4, + "\udb3f\udffe" + ], + 1, + true, + 0, + true, + "06473be9" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "888255e02a595608" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "55e02a59" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_28.html b/autobahn/client/hornbeam_case_6_22_28.html new file mode 100644 index 0000000..a1d23a1 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_28.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.28</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:50.748Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf39fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U000dffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U000dffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=196&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: QRij4hg4hYjAk51Vyo2jug== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: LFlFZviGSocG0MRW6oByrh7a28E=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313936266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f39fbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84f8eab41b0b750ba4</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6638656162343162</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88826da3c2766e4b</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3664613363323736</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_28.json b/autobahn/client/hornbeam_case_6_22_28.json new file mode 100644 index 0000000..debc435 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_28.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 196, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf39fbfbf", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\udb3f\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=196&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: QRij4hg4hYjAk51Vyo2jug==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: LFlFZviGSocG0MRW6oByrh7a28E=\r\n\r\n", + "id": "6.22.28", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\udb3f\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.748Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313936266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\udb3f\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f39fbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84f8eab41b0b750ba4" + ] + ], + [ + "RF", + [ + 4, + "\udb3f\udfff" + ], + 1, + true, + 0, + true, + "f8eab41b" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88826da3c2766e4b" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "6da3c276" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_29.html b/autobahn/client/hornbeam_case_6_22_29.html new file mode 100644 index 0000000..cc44d81 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_29.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.29</b></span> : Pass - <span style="font-size: 0.9em;"><b>47</b> ms @ 2023-08-10T21:35:50.796Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf3afbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U000efffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U000efffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=197&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: q8J4WecbqBto0+BRIF+PQg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: vgY8D/mC7B+e7/drlD3gQYp3k/k=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>2</td><td>2</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>5</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313937266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f3afbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84e7782f3314d7908d</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6537373832663333</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 8263c1f6ba6029</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3633633166366261</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_29.json b/autobahn/client/hornbeam_case_6_22_29.json new file mode 100644 index 0000000..2edbc66 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_29.json @@ -0,0 +1,192 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 197, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf3afbfbe", + "droppedByMe": true, + "duration": 47, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\udb7f\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=197&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: q8J4WecbqBto0+BRIF+PQg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: vgY8D/mC7B+e7/drlD3gQYp3k/k=\r\n\r\n", + "id": "6.22.29", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\udb7f\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 2, + "7": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.796Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313937266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\udb7f\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f3afbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84e7782f3314d7908d" + ] + ], + [ + "RF", + [ + 4, + "\udb7f\udffe" + ], + 1, + true, + 0, + true, + "e7782f33" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 1, + "88" + ] + ], + [ + "RO", + [ + 7, + "8263c1f6ba6029" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "63c1f6ba" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_3.html b/autobahn/client/hornbeam_case_6_22_3.html new file mode 100644 index 0000000..2e1de32 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_3.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.3</b></span> : Pass - <span style="font-size: 0.9em;"><b>47</b> ms @ 2023-08-10T21:35:49.571Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf09fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0001fffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0001fffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=171&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: dt8FI4aZOLHwdcBToWRiNA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 8TcPm/yZHfSvHkk7c6kJ/B1tHs4=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313731266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f09fbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8427057fa4d79ac01a</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3237303537666134</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882ba0e3891b9e6</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6261306533383931</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_3.json b/autobahn/client/hornbeam_case_6_22_3.json new file mode 100644 index 0000000..cb13f01 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_3.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 171, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf09fbfbe", + "droppedByMe": true, + "duration": 47, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud83f\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=171&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: dt8FI4aZOLHwdcBToWRiNA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 8TcPm/yZHfSvHkk7c6kJ/B1tHs4=\r\n\r\n", + "id": "6.22.3", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud83f\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:49.571Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313731266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud83f\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f09fbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "8427057fa4d79ac01a" + ] + ], + [ + "RF", + [ + 4, + "\ud83f\udffe" + ], + 1, + true, + 0, + true, + "27057fa4" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882ba0e3891b9e6" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "ba0e3891" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_30.html b/autobahn/client/hornbeam_case_6_22_30.html new file mode 100644 index 0000000..689e258 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_30.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.30</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:50.845Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf3afbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U000effff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U000effff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=198&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: DPlmR368hS07kmDxu1fX/A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: NHQ/urtlRG2QYe1lD2HddiV/kxA=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313938266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f3afbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84ad5ef0f45ef14f4b</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6164356566306634</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88828dcdb30d8e25</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3864636462333064</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_30.json b/autobahn/client/hornbeam_case_6_22_30.json new file mode 100644 index 0000000..f9f9cbd --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_30.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 198, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf3afbfbf", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\udb7f\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=198&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: DPlmR368hS07kmDxu1fX/A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: NHQ/urtlRG2QYe1lD2HddiV/kxA=\r\n\r\n", + "id": "6.22.30", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\udb7f\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.845Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313938266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\udb7f\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f3afbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84ad5ef0f45ef14f4b" + ] + ], + [ + "RF", + [ + 4, + "\udb7f\udfff" + ], + 1, + true, + 0, + true, + "ad5ef0f4" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88828dcdb30d8e25" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "8dcdb30d" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_31.html b/autobahn/client/hornbeam_case_6_22_31.html new file mode 100644 index 0000000..4aa3e2a --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_31.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.31</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:50.891Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf3bfbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U000ffffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U000ffffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=199&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: UG10Ho+ckWH9BeVip8EXyw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: jdBSMklRZSK3GqH6poHGYdID990=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313939266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f3bfbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84d59b980f262427b1</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6435396239383066</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882e094d2d6e37c</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6530393464326436</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_31.json b/autobahn/client/hornbeam_case_6_22_31.json new file mode 100644 index 0000000..7f667f8 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_31.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 199, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf3bfbfbe", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\udbbf\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=199&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: UG10Ho+ckWH9BeVip8EXyw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: jdBSMklRZSK3GqH6poHGYdID990=\r\n\r\n", + "id": "6.22.31", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\udbbf\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.891Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313939266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\udbbf\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f3bfbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84d59b980f262427b1" + ] + ], + [ + "RF", + [ + 4, + "\udbbf\udffe" + ], + 1, + true, + 0, + true, + "d59b980f" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882e094d2d6e37c" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "e094d2d6" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_32.html b/autobahn/client/hornbeam_case_6_22_32.html new file mode 100644 index 0000000..ce5eb6b --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_32.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.32</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:50.938Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf3bfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U000fffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U000fffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=200&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 0tHEHrYsGsDM9LvDY0kf2g== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 5v1YH2DE5YzPqHJKP7t0xagcTiw=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323030266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f3bfbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84e338e41d10875ba2</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6533333865343164</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 888200c6048f032e</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3030633630343866</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_32.json b/autobahn/client/hornbeam_case_6_22_32.json new file mode 100644 index 0000000..2a372aa --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_32.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 200, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf3bfbfbf", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\udbbf\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=200&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 0tHEHrYsGsDM9LvDY0kf2g==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 5v1YH2DE5YzPqHJKP7t0xagcTiw=\r\n\r\n", + "id": "6.22.32", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\udbbf\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.938Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323030266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\udbbf\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f3bfbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84e338e41d10875ba2" + ] + ], + [ + "RF", + [ + 4, + "\udbbf\udfff" + ], + 1, + true, + 0, + true, + "e338e41d" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "888200c6048f032e" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "00c6048f" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_33.html b/autobahn/client/hornbeam_case_6_22_33.html new file mode 100644 index 0000000..c8c9b2e --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_33.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.33</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:50.985Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf48fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0010fffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0010fffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=201&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: KGz0Y+/0K3beYh9pynjWGA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: mwOgnqRpMforj/YCQJCLz7jAgkk=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323031266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f48fbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8421cfb3c4d5400c7a</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3231636662336334</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88823d2308583ecb</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3364323330383538</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_33.json b/autobahn/client/hornbeam_case_6_22_33.json new file mode 100644 index 0000000..2ec58ed --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_33.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 201, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf48fbfbe", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\udbff\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=201&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: KGz0Y+/0K3beYh9pynjWGA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: mwOgnqRpMforj/YCQJCLz7jAgkk=\r\n\r\n", + "id": "6.22.33", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\udbff\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:50.985Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323031266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\udbff\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f48fbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "8421cfb3c4d5400c7a" + ] + ], + [ + "RF", + [ + 4, + "\udbff\udffe" + ], + 1, + true, + 0, + true, + "21cfb3c4" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88823d2308583ecb" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "3d230858" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_34.html b/autobahn/client/hornbeam_case_6_22_34.html new file mode 100644 index 0000000..a6f907e --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_34.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.34</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:51.031Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf48fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0010ffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0010ffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=202&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: XZAGso+ra8rB7Rz/hpL8cQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: vsUuLrx65ZenXybJmYP3j1j84Fc=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>2</td><td>2</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>5</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323032266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f48fbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84881181a27c9e3e1d</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3838313138316132</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 821970c7a11a98</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3139373063376131</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_34.json b/autobahn/client/hornbeam_case_6_22_34.json new file mode 100644 index 0000000..b9dd1ed --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_34.json @@ -0,0 +1,192 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 202, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf48fbfbf", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\udbff\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=202&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: XZAGso+ra8rB7Rz/hpL8cQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: vsUuLrx65ZenXybJmYP3j1j84Fc=\r\n\r\n", + "id": "6.22.34", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\udbff\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 2, + "7": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:51.031Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323032266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\udbff\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f48fbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84881181a27c9e3e1d" + ] + ], + [ + "RF", + [ + 4, + "\udbff\udfff" + ], + 1, + true, + 0, + true, + "881181a2" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 1, + "88" + ] + ], + [ + "RO", + [ + 7, + "821970c7a11a98" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "1970c7a1" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_4.html b/autobahn/client/hornbeam_case_6_22_4.html new file mode 100644 index 0000000..bf30751 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_4.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.4</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:49.619Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf09fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0001ffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0001ffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=172&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Wb92LuU5SPoKblI1xXHxQw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: c6MFHkG2DiaTGHv6T6F/6PiFRlM=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313732266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f09fbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 847de12c498d7e93f6</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3764653132633439</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88828d3c74eb8ed4</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3864336337346562</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_4.json b/autobahn/client/hornbeam_case_6_22_4.json new file mode 100644 index 0000000..f13bbfc --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_4.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 172, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf09fbfbf", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud83f\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=172&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Wb92LuU5SPoKblI1xXHxQw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: c6MFHkG2DiaTGHv6T6F/6PiFRlM=\r\n\r\n", + "id": "6.22.4", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud83f\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:49.619Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313732266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud83f\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f09fbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "847de12c498d7e93f6" + ] + ], + [ + "RF", + [ + 4, + "\ud83f\udfff" + ], + 1, + true, + 0, + true, + "7de12c49" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88828d3c74eb8ed4" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "8d3c74eb" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_5.html b/autobahn/client/hornbeam_case_6_22_5.html new file mode 100644 index 0000000..c87d765 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_5.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.5</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:49.665Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0afbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0002fffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0002fffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=173&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: +CutYN+42lP6c+Ekg4O0Cw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: i7mAcKtRtge/5IF89EjerqFmVpg=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313733266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f0afbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8434b08647c41f39f9</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3334623038363437</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882c6fdc8a0c515</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6336666463386130</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_5.json b/autobahn/client/hornbeam_case_6_22_5.json new file mode 100644 index 0000000..2a1f9a8 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_5.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 173, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0afbfbe", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud87f\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=173&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: +CutYN+42lP6c+Ekg4O0Cw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: i7mAcKtRtge/5IF89EjerqFmVpg=\r\n\r\n", + "id": "6.22.5", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud87f\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:49.665Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313733266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud87f\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f0afbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "8434b08647c41f39f9" + ] + ], + [ + "RF", + [ + 4, + "\ud87f\udffe" + ], + 1, + true, + 0, + true, + "34b08647" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882c6fdc8a0c515" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "c6fdc8a0" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_6.html b/autobahn/client/hornbeam_case_6_22_6.html new file mode 100644 index 0000000..3f80b5a --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_6.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.6</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:49.712Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0afbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0002ffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0002ffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=174&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: pMfV+VgcNx0XSpvKifLxIQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: iQOcU4DZ2mTqBNzmwt30pdmORWc=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313734266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f0afbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8418b11e66e81ea1d9</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3138623131653636</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 888206664eae058e</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3036363634656165</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_6.json b/autobahn/client/hornbeam_case_6_22_6.json new file mode 100644 index 0000000..f9da14e --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_6.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 174, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0afbfbf", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud87f\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=174&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: pMfV+VgcNx0XSpvKifLxIQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: iQOcU4DZ2mTqBNzmwt30pdmORWc=\r\n\r\n", + "id": "6.22.6", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud87f\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:49.712Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313734266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud87f\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f0afbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "8418b11e66e81ea1d9" + ] + ], + [ + "RF", + [ + 4, + "\ud87f\udfff" + ], + 1, + true, + 0, + true, + "18b11e66" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "888206664eae058e" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "06664eae" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_7.html b/autobahn/client/hornbeam_case_6_22_7.html new file mode 100644 index 0000000..189c963 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_7.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.7</b></span> : Pass - <span style="font-size: 0.9em;"><b>48</b> ms @ 2023-08-10T21:35:49.758Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0bfbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0003fffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0003fffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=175&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 9XEi2fgO5NqVknUPCJ1Vaw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: Bml1cZpXmd2m63KbSAzhFJAmo/8=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313735266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f0bfbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8496d2566d666de9d3</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3936643235363664</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882ad9064a5ae78</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6164393036346135</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_7.json b/autobahn/client/hornbeam_case_6_22_7.json new file mode 100644 index 0000000..295eb80 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_7.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 175, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0bfbfbe", + "droppedByMe": true, + "duration": 48, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud8bf\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=175&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 9XEi2fgO5NqVknUPCJ1Vaw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: Bml1cZpXmd2m63KbSAzhFJAmo/8=\r\n\r\n", + "id": "6.22.7", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud8bf\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:49.758Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313735266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud8bf\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f0bfbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "8496d2566d666de9d3" + ] + ], + [ + "RF", + [ + 4, + "\ud8bf\udffe" + ], + 1, + true, + 0, + true, + "96d2566d" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882ad9064a5ae78" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "ad9064a5" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_8.html b/autobahn/client/hornbeam_case_6_22_8.html new file mode 100644 index 0000000..4560d1f --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_8.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.8</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:49.806Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0bfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0003ffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0003ffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=176&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: /2f3FxPXBmCMA1RoAU9wRw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: zX13ee0EvHV5d1DN6HszCqN2VaA=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313736266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f0bfbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84e3266a4e1399d5f1</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=6533323636613465</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88824dcf05264e27</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3464636630353236</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_8.json b/autobahn/client/hornbeam_case_6_22_8.json new file mode 100644 index 0000000..ca98370 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_8.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 176, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0bfbfbf", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud8bf\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=176&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: /2f3FxPXBmCMA1RoAU9wRw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: zX13ee0EvHV5d1DN6HszCqN2VaA=\r\n\r\n", + "id": "6.22.8", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud8bf\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:49.806Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313736266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud8bf\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f0bfbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84e3266a4e1399d5f1" + ] + ], + [ + "RF", + [ + 4, + "\ud8bf\udfff" + ], + 1, + true, + 0, + true, + "e3266a4e" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88824dcf05264e27" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "4dcf0526" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_22_9.html b/autobahn/client/hornbeam_case_6_22_9.html new file mode 100644 index 0000000..3458153 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_9.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.22.9</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:49.852Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf18fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0004fffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0004fffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=177&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: RqMRx0HPuFHgm76j9xN7PQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: ARWOaU8d2w8fMcHDmoIf5+nOLao=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313737266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f18fbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8459f8cb42a87774fc</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3539663863623432</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882f7b64f27f45e</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6637623634663237</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_22_9.json b/autobahn/client/hornbeam_case_6_22_9.json new file mode 100644 index 0000000..bc57308 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_22_9.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 177, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf18fbfbe", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud8ff\udffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=177&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: RqMRx0HPuFHgm76j9xN7PQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: ARWOaU8d2w8fMcHDmoIf5+nOLao=\r\n\r\n", + "id": "6.22.9", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud8ff\udffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:49.852Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313737266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud8ff\udffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f18fbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "8459f8cb42a87774fc" + ] + ], + [ + "RF", + [ + 4, + "\ud8ff\udffe" + ], + 1, + true, + 0, + true, + "59f8cb42" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882f7b64f27f45e" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "f7b64f27" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_23_1.html b/autobahn/client/hornbeam_case_6_23_1.html new file mode 100644 index 0000000..5c79b55 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_23_1.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.23.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>50</b> ms @ 2023-08-10T21:35:51.078Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfb9</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\ufff9', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufff9', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=203&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: T85vLq+JbL7fnvjPRKjlgA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: zQwzSzgbW6iKdAWpPoUUbDoz1x0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>2</td><td>16</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>215</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323033266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103efbfb9</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83958063e67a3fda</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=3935383036336536</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882beb807c8bd50</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6265623830376338</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_23_1.json b/autobahn/client/hornbeam_case_6_23_1.json new file mode 100644 index 0000000..6731255 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_23_1.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 203, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfb9", + "droppedByMe": true, + "duration": 50, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ufff9", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=203&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: T85vLq+JbL7fnvjPRKjlgA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: zQwzSzgbW6iKdAWpPoUUbDoz1x0=\r\n\r\n", + "id": "6.23.1", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ufff9", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 2, + "184": 1 + }, + "started": "2023-08-10T21:35:51.078Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "5": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323033266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\ufff9" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103efbfb9" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83958063e67a3fda" + ] + ], + [ + "RF", + [ + 3, + "\ufff9" + ], + 1, + true, + 0, + true, + "958063e6" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882beb807c8bd50" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "beb807c8" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_23_2.html b/autobahn/client/hornbeam_case_6_23_2.html new file mode 100644 index 0000000..8a72837 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_23_2.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.23.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:51.131Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfba</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\ufffa', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffa', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=204&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: qY0eQLfIplHDb/dbD3XJuQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: PJN7tzdR2MGFK4c/+DnNdYXudOc=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>2</td><td>16</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>215</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323034266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103efbfba</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83ee71360501ce8c</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=6565373133363035</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882e417ae1be7ff</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6534313761653162</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_23_2.json b/autobahn/client/hornbeam_case_6_23_2.json new file mode 100644 index 0000000..654a252 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_23_2.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 204, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfba", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ufffa", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=204&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: qY0eQLfIplHDb/dbD3XJuQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: PJN7tzdR2MGFK4c/+DnNdYXudOc=\r\n\r\n", + "id": "6.23.2", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ufffa", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 2, + "184": 1 + }, + "started": "2023-08-10T21:35:51.131Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "5": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323034266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\ufffa" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103efbfba" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83ee71360501ce8c" + ] + ], + [ + "RF", + [ + 3, + "\ufffa" + ], + 1, + true, + 0, + true, + "ee713605" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882e417ae1be7ff" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "e417ae1b" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_23_3.html b/autobahn/client/hornbeam_case_6_23_3.html new file mode 100644 index 0000000..b1c512d --- /dev/null +++ b/autobahn/client/hornbeam_case_6_23_3.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.23.3</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:51.178Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbb</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\ufffb', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffb', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=205&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: PNE7YxOD9xmBoGRQHedpLw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: eP9Q+LeUgc9zmM7+KYWydhjV3aM=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>2</td><td>16</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>215</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323035266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103efbfbb</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 831bd3916ff46c2a</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=3162643339313666</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88823af7428b391f</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3361663734323862</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_23_3.json b/autobahn/client/hornbeam_case_6_23_3.json new file mode 100644 index 0000000..6ecacbc --- /dev/null +++ b/autobahn/client/hornbeam_case_6_23_3.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 205, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbb", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ufffb", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=205&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: PNE7YxOD9xmBoGRQHedpLw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: eP9Q+LeUgc9zmM7+KYWydhjV3aM=\r\n\r\n", + "id": "6.23.3", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ufffb", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 2, + "184": 1 + }, + "started": "2023-08-10T21:35:51.178Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "5": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323035266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\ufffb" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103efbfbb" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "831bd3916ff46c2a" + ] + ], + [ + "RF", + [ + 3, + "\ufffb" + ], + 1, + true, + 0, + true, + "1bd3916f" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88823af7428b391f" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "3af7428b" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_23_4.html b/autobahn/client/hornbeam_case_6_23_4.html new file mode 100644 index 0000000..aa07faa --- /dev/null +++ b/autobahn/client/hornbeam_case_6_23_4.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.23.4</b></span> : Pass - <span style="font-size: 0.9em;"><b>44</b> ms @ 2023-08-10T21:35:51.230Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbc</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\ufffc', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffc', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=206&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: oroo8gMvYm/z7EdZsgrrCQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: LCzKm0chAZIj1eOf/FllDZBAAZY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>2</td><td>16</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>215</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323036266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103efbfbc</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 835cbd4a2bb302f6</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=3563626434613262</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88828e3e42e88dd6</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3865336534326538</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_23_4.json b/autobahn/client/hornbeam_case_6_23_4.json new file mode 100644 index 0000000..30ce7cc --- /dev/null +++ b/autobahn/client/hornbeam_case_6_23_4.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 206, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbc", + "droppedByMe": true, + "duration": 44, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ufffc", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=206&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: oroo8gMvYm/z7EdZsgrrCQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: LCzKm0chAZIj1eOf/FllDZBAAZY=\r\n\r\n", + "id": "6.23.4", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ufffc", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 2, + "184": 1 + }, + "started": "2023-08-10T21:35:51.230Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "5": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323036266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\ufffc" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103efbfbc" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "835cbd4a2bb302f6" + ] + ], + [ + "RF", + [ + 3, + "\ufffc" + ], + 1, + true, + 0, + true, + "5cbd4a2b" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88828e3e42e88dd6" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "8e3e42e8" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_23_5.html b/autobahn/client/hornbeam_case_6_23_5.html new file mode 100644 index 0000000..407d68f --- /dev/null +++ b/autobahn/client/hornbeam_case_6_23_5.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.23.5</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:51.275Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbd</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\ufffd', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=207&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Fs4Jr0TqfUBM8ntCb+B2sQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: TLYm5AyR1Mg+SqDMxuiXOZaqkEA=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>2</td><td>16</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>215</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323037266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> �</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103efbfbd</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8335ea3f8dda5582</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=3335656133663864</pre> + <pre class="wirelog_rx_frame"> �</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88822f1878c92cf0</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3266313837386339</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_23_5.json b/autobahn/client/hornbeam_case_6_23_5.json new file mode 100644 index 0000000..47c1fcf --- /dev/null +++ b/autobahn/client/hornbeam_case_6_23_5.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 207, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbd", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ufffd", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=207&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Fs4Jr0TqfUBM8ntCb+B2sQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: TLYm5AyR1Mg+SqDMxuiXOZaqkEA=\r\n\r\n", + "id": "6.23.5", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ufffd", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 2, + "184": 1 + }, + "started": "2023-08-10T21:35:51.275Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "5": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323037266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\ufffd" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103efbfbd" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "8335ea3f8dda5582" + ] + ], + [ + "RF", + [ + 3, + "\ufffd" + ], + 1, + true, + 0, + true, + "35ea3f8d" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88822f1878c92cf0" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "2f1878c9" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_23_6.html b/autobahn/client/hornbeam_case_6_23_6.html new file mode 100644 index 0000000..7fcccb2 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_23_6.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.23.6</b></span> : Pass - <span style="font-size: 0.9em;"><b>48</b> ms @ 2023-08-10T21:35:51.322Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\ufffe', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffe', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=208&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: PWsUp4C6wmFtPTezjA2RgA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: R7RSmkPkp9U8N36KHrsl7kwcuvA=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>2</td><td>2</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>5</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>215</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323038266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103efbfbe</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83812f17536e90a9</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=3831326631373533</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 82a744297aa4ac</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6137343432393761</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_23_6.json b/autobahn/client/hornbeam_case_6_23_6.json new file mode 100644 index 0000000..f623390 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_23_6.json @@ -0,0 +1,192 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 208, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbe", + "droppedByMe": true, + "duration": 48, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ufffe", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=208&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: PWsUp4C6wmFtPTezjA2RgA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: R7RSmkPkp9U8N36KHrsl7kwcuvA=\r\n\r\n", + "id": "6.23.6", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ufffe", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 2, + "7": 1, + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:51.322Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "5": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323038266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\ufffe" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103efbfbe" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83812f17536e90a9" + ] + ], + [ + "RF", + [ + 3, + "\ufffe" + ], + 1, + true, + 0, + true, + "812f1753" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 1, + "88" + ] + ], + [ + "RO", + [ + 7, + "82a744297aa4ac" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "a744297a" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_23_7.html b/autobahn/client/hornbeam_case_6_23_7.html new file mode 100644 index 0000000..ee999e0 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_23_7.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.23.7</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:51.372Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\uffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\uffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=209&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 7fJCeGIPvI5lt2U9auLyFg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: w/PmFasK5sT8Yc7Nx9Ns7sCigIw=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>2</td><td>16</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>215</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323039266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103efbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83ea280fb20597b0</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=6561323830666232</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88822d7807d22e90</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3264373830376432</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_23_7.json b/autobahn/client/hornbeam_case_6_23_7.json new file mode 100644 index 0000000..24df6d5 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_23_7.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 209, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbf", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\uffff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=209&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 7fJCeGIPvI5lt2U9auLyFg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: w/PmFasK5sT8Yc7Nx9Ns7sCigIw=\r\n\r\n", + "id": "6.23.7", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\uffff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 2, + "184": 1 + }, + "started": "2023-08-10T21:35:51.372Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "5": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323039266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\uffff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103efbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83ea280fb20597b0" + ] + ], + [ + "RF", + [ + 3, + "\uffff" + ], + 1, + true, + 0, + true, + "ea280fb2" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88822d7807d22e90" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "2d7807d2" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_2_1.html b/autobahn/client/hornbeam_case_6_2_1.html new file mode 100644 index 0000000..8f54572 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_2_1.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.2.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:06.373Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a valid UTF-8 text message in one fragment.<br><br>MESSAGE:<br>Hello-µ@ßöäüàá-UTF-8!!<br>48656c6c6f2dc2b540c39fc3b6c3a4c3bcc3a0c3a12d5554462d382121</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'Hello-\xb5@\xdf\xf6\xe4\xfc\xe0\xe1-UTF-8!!', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'Hello-\xb5@\xdf\xf6\xe4\xfc\xe0\xe1-UTF-8!!', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=68&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Qkaa5NpcLofcSgRRFZ1Hwg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: WFMgnvFrIYy+zCgTiJkOThwXnS0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>34</td><td>1</td><td>34</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>226</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>31</td><td>1</td><td>31</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>241</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3638266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=29, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello-µ@ßöäüàá-UTF-8!!</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 811d48656c6c6f2dc2b540c39fc3b6c3a4c3bcc3a0c3a12d5554462d382121</pre> + <pre class="wirelog_kill_after">004 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 9d3362e6f67b078a9a5c4f244373a1793585a142358fa14635924fb3a2754fded712</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=29, MASKED=True, MASK=3333363265366636</pre> + <pre class="wirelog_rx_frame"> Hello-µ@ßöäüàá-UTF-8!!</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88825398db555070</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3533393864623535</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_2_1.json b/autobahn/client/hornbeam_case_6_2_1.json new file mode 100644 index 0000000..8ace4c7 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_2_1.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 68, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a valid UTF-8 text message in one fragment.<br><br>MESSAGE:<br>Hello-\u00b5@\u00df\u00f6\u00e4\u00fc\u00e0\u00e1-UTF-8!!<br>48656c6c6f2dc2b540c39fc3b6c3a4c3bcc3a0c3a12d5554462d382121", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "Hello-\u00b5@\u00df\u00f6\u00e4\u00fc\u00e0\u00e1-UTF-8!!", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=68&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Qkaa5NpcLofcSgRRFZ1Hwg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: WFMgnvFrIYy+zCgTiJkOThwXnS0=\r\n\r\n", + "id": "6.2.1", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "Hello-\u00b5@\u00df\u00f6\u00e4\u00fc\u00e0\u00e1-UTF-8!!", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "34": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:06.373Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "31": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3638266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 29, + "Hello-\u00b5@\u00df\u00f6\u00e4\u00fc\u00e0\u00e1-UTF-8!!" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 31, + "811d48656c6c6f2dc2b540c39fc3b6c3a4c3bcc3a0c3a12d5554462d382121" + ], + false + ], + [ + "TI", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 34, + "9d3362e6f67b078a9a5c4f244373a1793585a142358fa14635924fb3a2754fded712" + ] + ], + [ + "RF", + [ + 29, + "Hello-\u00b5@\u00df\u00f6\u00e4\u00fc\u00e0\u00e1-UTF-8!!" + ], + 1, + true, + 0, + true, + "3362e6f6" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88825398db555070" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "5398db55" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_2_2.html b/autobahn/client/hornbeam_case_6_2_2.html new file mode 100644 index 0000000..258839f --- /dev/null +++ b/autobahn/client/hornbeam_case_6_2_2.html @@ -0,0 +1,299 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.2.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:06.420Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a valid UTF-8 text message in two fragments, fragmented on UTF-8 code point boundary.<br><br>MESSAGE FRAGMENT 1:<br>Hello-µ@ßöä<br>48656c6c6f2dc2b540c39fc3b6c3a4<br><br>MESSAGE FRAGMENT 2:<br>üàá-UTF-8!!<br>c3bcc3a0c3a12d5554462d382121</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'Hello-\xb5@\xdf\xf6\xe4\xfc\xe0\xe1-UTF-8!!', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'Hello-\xb5@\xdf\xf6\xe4', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=69&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: xTdwnwRDncDAAx5kdIz/mg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: oWeDkS+srAl0dI0k6ubLVDSevdA=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>20</td><td>1</td><td>20</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>204</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>16</td><td>1</td><td>16</td></tr> + <tr class="stats_row"><td>17</td><td>1</td><td>17</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>239</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3639266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=15, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello-µ@ßöä</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 010f48656c6c6f2dc2b540c39fc3b6c3a4</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=14, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> üàá-UTF-8!!</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 800ec3bcc3a0c3a12d5554462d382121</pre> + <pre class="wirelog_kill_after">006 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">007 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">008 RX OCTETS: 8fa37dbd1eeb18d172cc507fabe3be22dd15be19</pre> + <pre class="wirelog_rx_frame">009 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=15, MASKED=True, MASK=6133376462643165</pre> + <pre class="wirelog_rx_frame"> Hello-µ@ßöä</pre> + <pre class="wirelog_tcp_closed_by_peer">010 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_2_2.json b/autobahn/client/hornbeam_case_6_2_2.json new file mode 100644 index 0000000..1797d73 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_2_2.json @@ -0,0 +1,164 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 69, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send a valid UTF-8 text message in two fragments, fragmented on UTF-8 code point boundary.<br><br>MESSAGE FRAGMENT 1:<br>Hello-\u00b5@\u00df\u00f6\u00e4<br>48656c6c6f2dc2b540c39fc3b6c3a4<br><br>MESSAGE FRAGMENT 2:<br>\u00fc\u00e0\u00e1-UTF-8!!<br>c3bcc3a0c3a12d5554462d382121", + "droppedByMe": false, + "duration": 2, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "Hello-\u00b5@\u00df\u00f6\u00e4\u00fc\u00e0\u00e1-UTF-8!!", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=69&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: xTdwnwRDncDAAx5kdIz/mg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: oWeDkS+srAl0dI0k6ubLVDSevdA=\r\n\r\n", + "id": "6.2.2", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "Hello-\u00b5@\u00df\u00f6\u00e4", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "20": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:06.420Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1 + }, + "txOctetStats": { + "16": 1, + "17": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3639266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 15, + "Hello-\u00b5@\u00df\u00f6\u00e4" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 17, + "010f48656c6c6f2dc2b540c39fc3b6c3a4" + ], + false + ], + [ + "TF", + [ + 14, + "\u00fc\u00e0\u00e1-UTF-8!!" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 16, + "800ec3bcc3a0c3a12d5554462d382121" + ], + false + ], + [ + "TI", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 20, + "8fa37dbd1eeb18d172cc507fabe3be22dd15be19" + ] + ], + [ + "RF", + [ + 15, + "Hello-\u00b5@\u00df\u00f6\u00e4" + ], + 1, + true, + 0, + true, + "a37dbd1e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_2_3.html b/autobahn/client/hornbeam_case_6_2_3.html new file mode 100644 index 0000000..29a1243 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_2_3.html @@ -0,0 +1,380 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.2.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:06.423Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a valid UTF-8 text message in fragments of 1 octet, resulting in frames ending on positions which are not code point ends.<br><br>MESSAGE:<br>Hello-µ@ßöäüàá-UTF-8!!<br>48656c6c6f2dc2b540c39fc3b6c3a4c3bcc3a0c3a12d5554462d382121</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'Hello-\xb5@\xdf\xf6\xe4\xfc\xe0\xe1-UTF-8!!', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'H', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=70&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 3eajtno8XpAbzLQL/SpOJg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: rAmj7rRXd+0wJzwj9YPu2yfifT4=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>190</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>3</td><td>29</td><td>87</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>31</td><td>295</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>29</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>30</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3730266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> H</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 010148</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> e</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 000165</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> l</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 00016c</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> l</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 00016c</pre> + <pre class="wirelog_tx_frame">010 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> o</pre> + <pre class="wirelog_tx_octets">011 TX OCTETS: 00016f</pre> + <pre class="wirelog_tx_frame">012 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> -</pre> + <pre class="wirelog_tx_octets">013 TX OCTETS: 00012d</pre> + <pre class="wirelog_tx_frame">014 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xc2</pre> + <pre class="wirelog_tx_octets">015 TX OCTETS: 0001c2</pre> + <pre class="wirelog_tx_frame">016 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xb5</pre> + <pre class="wirelog_tx_octets">017 TX OCTETS: 0001b5</pre> + <pre class="wirelog_tx_frame">018 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> @</pre> + <pre class="wirelog_tx_octets">019 TX OCTETS: 000140</pre> + <pre class="wirelog_tx_frame">020 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xc3</pre> + <pre class="wirelog_tx_octets">021 TX OCTETS: 0001c3</pre> + <pre class="wirelog_tx_frame">022 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x9f</pre> + <pre class="wirelog_tx_octets">023 TX OCTETS: 00019f</pre> + <pre class="wirelog_tx_frame">024 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xc3</pre> + <pre class="wirelog_tx_octets">025 TX OCTETS: 0001c3</pre> + <pre class="wirelog_tx_frame">026 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xb6</pre> + <pre class="wirelog_tx_octets">027 TX OCTETS: 0001b6</pre> + <pre class="wirelog_tx_frame">028 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xc3</pre> + <pre class="wirelog_tx_octets">029 TX OCTETS: 0001c3</pre> + <pre class="wirelog_tx_frame">030 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xa4</pre> + <pre class="wirelog_tx_octets">031 TX OCTETS: 0001a4</pre> + <pre class="wirelog_tx_frame">032 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xc3</pre> + <pre class="wirelog_tx_octets">033 TX OCTETS: 0001c3</pre> + <pre class="wirelog_tx_frame">034 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xbc</pre> + <pre class="wirelog_tx_octets">035 TX OCTETS: 0001bc</pre> + <pre class="wirelog_tx_frame">036 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xc3</pre> + <pre class="wirelog_tx_octets">037 TX OCTETS: 0001c3</pre> + <pre class="wirelog_tx_frame">038 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xa0</pre> + <pre class="wirelog_tx_octets">039 TX OCTETS: 0001a0</pre> + <pre class="wirelog_tx_frame">040 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xc3</pre> + <pre class="wirelog_tx_octets">041 TX OCTETS: 0001c3</pre> + <pre class="wirelog_tx_frame">042 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xa1</pre> + <pre class="wirelog_tx_octets">043 TX OCTETS: 0001a1</pre> + <pre class="wirelog_tx_frame">044 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> -</pre> + <pre class="wirelog_tx_octets">045 TX OCTETS: 00012d</pre> + <pre class="wirelog_tx_frame">046 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> U</pre> + <pre class="wirelog_tx_octets">047 TX OCTETS: 000155</pre> + <pre class="wirelog_tx_frame">048 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> T</pre> + <pre class="wirelog_tx_octets">049 TX OCTETS: 000154</pre> + <pre class="wirelog_tx_frame">050 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> F</pre> + <pre class="wirelog_tx_octets">051 TX OCTETS: 000146</pre> + <pre class="wirelog_tx_frame">052 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> -</pre> + <pre class="wirelog_tx_octets">053 TX OCTETS: 00012d</pre> + <pre class="wirelog_tx_frame">054 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 8</pre> + <pre class="wirelog_tx_octets">055 TX OCTETS: 000138</pre> + <pre class="wirelog_tx_frame">056 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> !</pre> + <pre class="wirelog_tx_octets">057 TX OCTETS: 000121</pre> + <pre class="wirelog_tx_frame">058 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> !</pre> + <pre class="wirelog_tx_octets">059 TX OCTETS: 000121</pre> + <pre class="wirelog_tx_frame">060 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">061 TX OCTETS: 8000</pre> + <pre class="wirelog_kill_after">062 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">063 RX OCTETS: 8181c866032280</pre> + <pre class="wirelog_rx_frame">064 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=1, MASKED=True, MASK=6338363630333232</pre> + <pre class="wirelog_rx_frame"> H</pre> + <pre class="wirelog_tcp_closed_by_peer">065 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_2_3.json b/autobahn/client/hornbeam_case_6_2_3.json new file mode 100644 index 0000000..8a29e9c --- /dev/null +++ b/autobahn/client/hornbeam_case_6_2_3.json @@ -0,0 +1,772 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 70, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send a valid UTF-8 text message in fragments of 1 octet, resulting in frames ending on positions which are not code point ends.<br><br>MESSAGE:<br>Hello-\u00b5@\u00df\u00f6\u00e4\u00fc\u00e0\u00e1-UTF-8!!<br>48656c6c6f2dc2b540c39fc3b6c3a4c3bcc3a0c3a12d5554462d382121", + "droppedByMe": false, + "duration": 2, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "Hello-\u00b5@\u00df\u00f6\u00e4\u00fc\u00e0\u00e1-UTF-8!!", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=70&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 3eajtno8XpAbzLQL/SpOJg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: rAmj7rRXd+0wJzwj9YPu2yfifT4=\r\n\r\n", + "id": "6.2.3", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "H", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "7": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:06.423Z", + "trafficStats": null, + "txFrameStats": { + "0": 29, + "1": 1 + }, + "txOctetStats": { + "2": 1, + "3": 29, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3730266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 1, + "H" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "010148" + ], + false + ], + [ + "TF", + [ + 1, + "e" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000165" + ], + false + ], + [ + "TF", + [ + 1, + "l" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "00016c" + ], + false + ], + [ + "TF", + [ + 1, + "l" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "00016c" + ], + false + ], + [ + "TF", + [ + 1, + "o" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "00016f" + ], + false + ], + [ + "TF", + [ + 1, + "-" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "00012d" + ], + false + ], + [ + "TF", + [ + 1, + "0xc2" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001c2" + ], + false + ], + [ + "TF", + [ + 1, + "0xb5" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001b5" + ], + false + ], + [ + "TF", + [ + 1, + "@" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000140" + ], + false + ], + [ + "TF", + [ + 1, + "0xc3" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001c3" + ], + false + ], + [ + "TF", + [ + 1, + "0x9f" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "00019f" + ], + false + ], + [ + "TF", + [ + 1, + "0xc3" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001c3" + ], + false + ], + [ + "TF", + [ + 1, + "0xb6" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001b6" + ], + false + ], + [ + "TF", + [ + 1, + "0xc3" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001c3" + ], + false + ], + [ + "TF", + [ + 1, + "0xa4" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001a4" + ], + false + ], + [ + "TF", + [ + 1, + "0xc3" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001c3" + ], + false + ], + [ + "TF", + [ + 1, + "0xbc" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001bc" + ], + false + ], + [ + "TF", + [ + 1, + "0xc3" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001c3" + ], + false + ], + [ + "TF", + [ + 1, + "0xa0" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001a0" + ], + false + ], + [ + "TF", + [ + 1, + "0xc3" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001c3" + ], + false + ], + [ + "TF", + [ + 1, + "0xa1" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001a1" + ], + false + ], + [ + "TF", + [ + 1, + "-" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "00012d" + ], + false + ], + [ + "TF", + [ + 1, + "U" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000155" + ], + false + ], + [ + "TF", + [ + 1, + "T" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000154" + ], + false + ], + [ + "TF", + [ + 1, + "F" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000146" + ], + false + ], + [ + "TF", + [ + 1, + "-" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "00012d" + ], + false + ], + [ + "TF", + [ + 1, + "8" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000138" + ], + false + ], + [ + "TF", + [ + 1, + "!" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000121" + ], + false + ], + [ + "TF", + [ + 1, + "!" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000121" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8000" + ], + false + ], + [ + "TI", + 1 + ], + [ + "RO", + [ + 7, + "8181c866032280" + ] + ], + [ + "RF", + [ + 1, + "H" + ], + 1, + true, + 0, + true, + "c8660322" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_2_4.html b/autobahn/client/hornbeam_case_6_2_4.html new file mode 100644 index 0000000..b63a880 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_2_4.html @@ -0,0 +1,326 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.2.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:06.426Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a valid UTF-8 text message in fragments of 1 octet, resulting in frames ending on positions which are not code point ends.<br><br>MESSAGE:<br>κόσμε<br>cebae1bdb9cf83cebcceb5</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\u03ba\u1f79\u03c3\u03bc\u03b5', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=71&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 3OeqbrN+SPv1pmgSB00KwA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: ylQRGgq1JGywKan85VuMv7vCZW4=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>3</td><td>11</td><td>33</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>13</td><td>241</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>11</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>12</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3731266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xce</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 0101ce</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xba</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 0001ba</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xe1</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 0001e1</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xbd</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 0001bd</pre> + <pre class="wirelog_tx_frame">010 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xb9</pre> + <pre class="wirelog_tx_octets">011 TX OCTETS: 0001b9</pre> + <pre class="wirelog_tx_frame">012 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xcf</pre> + <pre class="wirelog_tx_octets">013 TX OCTETS: 0001cf</pre> + <pre class="wirelog_tx_frame">014 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x83</pre> + <pre class="wirelog_tx_octets">015 TX OCTETS: 000183</pre> + <pre class="wirelog_tx_frame">016 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xce</pre> + <pre class="wirelog_tx_octets">017 TX OCTETS: 0001ce</pre> + <pre class="wirelog_tx_frame">018 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xbc</pre> + <pre class="wirelog_tx_octets">019 TX OCTETS: 0001bc</pre> + <pre class="wirelog_tx_frame">020 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xce</pre> + <pre class="wirelog_tx_octets">021 TX OCTETS: 0001ce</pre> + <pre class="wirelog_tx_frame">022 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xb5</pre> + <pre class="wirelog_tx_octets">023 TX OCTETS: 0001b5</pre> + <pre class="wirelog_tx_frame">024 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">025 TX OCTETS: 8000</pre> + <pre class="wirelog_kill_after">026 CLOSE CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">027 RX OCTETS: 818380ceedc56f7150</pre> + <pre class="wirelog_rx_frame">028 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=3830636565646335</pre> + <pre class="wirelog_rx_frame"> �</pre> + <pre class="wirelog_tcp_closed_by_peer">029 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_2_4.json b/autobahn/client/hornbeam_case_6_2_4.json new file mode 100644 index 0000000..aa5c1dc --- /dev/null +++ b/autobahn/client/hornbeam_case_6_2_4.json @@ -0,0 +1,376 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 71, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send a valid UTF-8 text message in fragments of 1 octet, resulting in frames ending on positions which are not code point ends.<br><br>MESSAGE:<br>\u03ba\u1f79\u03c3\u03bc\u03b5<br>cebae1bdb9cf83cebcceb5", + "droppedByMe": false, + "duration": 2, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\u03ba\u1f79\u03c3\u03bc\u03b5", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=71&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 3OeqbrN+SPv1pmgSB00KwA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: ylQRGgq1JGywKan85VuMv7vCZW4=\r\n\r\n", + "id": "6.2.4", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "\ufffd", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "9": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:06.426Z", + "trafficStats": null, + "txFrameStats": { + "0": 11, + "1": 1 + }, + "txOctetStats": { + "2": 1, + "3": 11, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3731266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 1, + "0xce" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0101ce" + ], + false + ], + [ + "TF", + [ + 1, + "0xba" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001ba" + ], + false + ], + [ + "TF", + [ + 1, + "0xe1" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001e1" + ], + false + ], + [ + "TF", + [ + 1, + "0xbd" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001bd" + ], + false + ], + [ + "TF", + [ + 1, + "0xb9" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001b9" + ], + false + ], + [ + "TF", + [ + 1, + "0xcf" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001cf" + ], + false + ], + [ + "TF", + [ + 1, + "0x83" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000183" + ], + false + ], + [ + "TF", + [ + 1, + "0xce" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001ce" + ], + false + ], + [ + "TF", + [ + 1, + "0xbc" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001bc" + ], + false + ], + [ + "TF", + [ + 1, + "0xce" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001ce" + ], + false + ], + [ + "TF", + [ + 1, + "0xb5" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001b5" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8000" + ], + false + ], + [ + "TI", + 1 + ], + [ + "RO", + [ + 9, + "818380ceedc56f7150" + ] + ], + [ + "RF", + [ + 3, + "\ufffd" + ], + 1, + true, + 0, + true, + "80ceedc5" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_3_1.html b/autobahn/client/hornbeam_case_6_3_1.html new file mode 100644 index 0000000..d0da3ef --- /dev/null +++ b/autobahn/client/hornbeam_case_6_3_1.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.3.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>1003</b> ms @ 2023-08-10T21:35:06.429Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send invalid UTF-8 text message unfragmented.<br><br>MESSAGE:<br>cebae1bdb9cf83cebcceb5eda080656469746564</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u03ba\u1f79\u03c3\u03bc\u03b5\ufffd\ufffd\ufffdedited', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=72&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: vwzLQ9ljNKBwUH+UowNAUg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: wvtO3apUk2WgYjQ/EklS2u0YZMA=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>31</td><td>1</td><td>31</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>233</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>22</td><td>1</td><td>22</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>242</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3732266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=20, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> κόσμε���edited</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8114cebae1bdb9cf83cebcceb5eda080656469746564</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 9ae16bd52f2fd1349258a456e15da560c05ed63a905c846a92840fbc5b840f</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=26, MASKED=True, MASK=6531366264353266</pre> + <pre class="wirelog_rx_frame"> κόσμε���edited</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c00d936ca033071a569b751ea41ae57b3</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3030643933366361</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_3_1.json b/autobahn/client/hornbeam_case_6_3_1.json new file mode 100644 index 0000000..2f76462 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_3_1.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 72, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send invalid UTF-8 text message unfragmented.<br><br>MESSAGE:<br>cebae1bdb9cf83cebcceb5eda080656469746564", + "droppedByMe": true, + "duration": 1003, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=72&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: vwzLQ9ljNKBwUH+UowNAUg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: wvtO3apUk2WgYjQ/EklS2u0YZMA=\r\n\r\n", + "id": "6.3.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\u03ba\u1f79\u03c3\u03bc\u03b5\ufffd\ufffd\ufffdedited", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "31": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:06.429Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "14": 1, + "22": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3732266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 20, + "\u03ba\u1f79\u03c3\u03bc\u03b5\ud800edited" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 22, + "8114cebae1bdb9cf83cebcceb5eda080656469746564" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 31, + "9ae16bd52f2fd1349258a456e15da560c05ed63a905c846a92840fbc5b840f" + ] + ], + [ + "RF", + [ + 26, + "\u03ba\u1f79\u03c3\u03bc\u03b5\ufffd\ufffd\ufffdedited" + ], + 1, + true, + 0, + true, + "e16bd52f" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c00d936ca033071a569b751ea41ae57b3" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "00d936ca" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_3_2.html b/autobahn/client/hornbeam_case_6_3_2.html new file mode 100644 index 0000000..d0014b5 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_3_2.html @@ -0,0 +1,355 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.3.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>3</b> ms @ 2023-08-10T21:35:07.434Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send invalid UTF-8 text message in fragments of 1 octet, resulting in frames ending on positions which are not code point ends.<br><br>MESSAGE:<br>cebae1bdb9cf83cebcceb5eda080656469746564</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=73&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: e86VUgjjwCaTkchD/D08Zw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: stxVFtSSlpsyifZUSFTQI/omJNY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>3</td><td>20</td><td>60</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>22</td><td>268</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>20</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>21</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3733266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xce</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 0101ce</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xba</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 0001ba</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xe1</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 0001e1</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xbd</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 0001bd</pre> + <pre class="wirelog_tx_frame">010 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xb9</pre> + <pre class="wirelog_tx_octets">011 TX OCTETS: 0001b9</pre> + <pre class="wirelog_tx_frame">012 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xcf</pre> + <pre class="wirelog_tx_octets">013 TX OCTETS: 0001cf</pre> + <pre class="wirelog_tx_frame">014 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x83</pre> + <pre class="wirelog_tx_octets">015 TX OCTETS: 000183</pre> + <pre class="wirelog_tx_frame">016 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xce</pre> + <pre class="wirelog_tx_octets">017 TX OCTETS: 0001ce</pre> + <pre class="wirelog_tx_frame">018 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xbc</pre> + <pre class="wirelog_tx_octets">019 TX OCTETS: 0001bc</pre> + <pre class="wirelog_tx_frame">020 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xce</pre> + <pre class="wirelog_tx_octets">021 TX OCTETS: 0001ce</pre> + <pre class="wirelog_tx_frame">022 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xb5</pre> + <pre class="wirelog_tx_octets">023 TX OCTETS: 0001b5</pre> + <pre class="wirelog_tx_frame">024 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xed</pre> + <pre class="wirelog_tx_octets">025 TX OCTETS: 0001ed</pre> + <pre class="wirelog_tx_frame">026 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xa0</pre> + <pre class="wirelog_tx_octets">027 TX OCTETS: 0001a0</pre> + <pre class="wirelog_tx_frame">028 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x80</pre> + <pre class="wirelog_tx_octets">029 TX OCTETS: 000180</pre> + <pre class="wirelog_tx_frame">030 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> e</pre> + <pre class="wirelog_tx_octets">031 TX OCTETS: 000165</pre> + <pre class="wirelog_tx_frame">032 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> d</pre> + <pre class="wirelog_tx_octets">033 TX OCTETS: 000164</pre> + <pre class="wirelog_tx_frame">034 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> i</pre> + <pre class="wirelog_tx_octets">035 TX OCTETS: 000169</pre> + <pre class="wirelog_tx_frame">036 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> t</pre> + <pre class="wirelog_tx_octets">037 TX OCTETS: 000174</pre> + <pre class="wirelog_tx_frame">038 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> e</pre> + <pre class="wirelog_tx_octets">039 TX OCTETS: 000165</pre> + <pre class="wirelog_tx_frame">040 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> d</pre> + <pre class="wirelog_tx_octets">041 TX OCTETS: 000164</pre> + <pre class="wirelog_tx_frame">042 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">043 TX OCTETS: 8000</pre> + <pre class="wirelog_kill_after">044 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">045 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">046 RX OCTETS: 83672c210088939c</pre> + <pre class="wirelog_rx_frame">047 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=3637326332313030</pre> + <pre class="wirelog_rx_frame"> �</pre> + <pre class="wirelog_tcp_closed_by_peer">048 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_3_2.json b/autobahn/client/hornbeam_case_6_3_2.json new file mode 100644 index 0000000..4a2b197 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_3_2.json @@ -0,0 +1,577 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 73, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send invalid UTF-8 text message in fragments of 1 octet, resulting in frames ending on positions which are not code point ends.<br><br>MESSAGE:<br>cebae1bdb9cf83cebcceb5eda080656469746564", + "droppedByMe": false, + "duration": 3, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=73&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: e86VUgjjwCaTkchD/D08Zw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: stxVFtSSlpsyifZUSFTQI/omJNY=\r\n\r\n", + "id": "6.3.2", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "\ufffd", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:07.434Z", + "trafficStats": null, + "txFrameStats": { + "0": 20, + "1": 1 + }, + "txOctetStats": { + "2": 1, + "3": 20, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3733266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 1, + "0xce" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0101ce" + ], + false + ], + [ + "TF", + [ + 1, + "0xba" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001ba" + ], + false + ], + [ + "TF", + [ + 1, + "0xe1" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001e1" + ], + false + ], + [ + "TF", + [ + 1, + "0xbd" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001bd" + ], + false + ], + [ + "TF", + [ + 1, + "0xb9" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001b9" + ], + false + ], + [ + "TF", + [ + 1, + "0xcf" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001cf" + ], + false + ], + [ + "TF", + [ + 1, + "0x83" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000183" + ], + false + ], + [ + "TF", + [ + 1, + "0xce" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001ce" + ], + false + ], + [ + "TF", + [ + 1, + "0xbc" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001bc" + ], + false + ], + [ + "TF", + [ + 1, + "0xce" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001ce" + ], + false + ], + [ + "TF", + [ + 1, + "0xb5" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001b5" + ], + false + ], + [ + "TF", + [ + 1, + "0xed" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001ed" + ], + false + ], + [ + "TF", + [ + 1, + "0xa0" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "0001a0" + ], + false + ], + [ + "TF", + [ + 1, + "0x80" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000180" + ], + false + ], + [ + "TF", + [ + 1, + "e" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000165" + ], + false + ], + [ + "TF", + [ + 1, + "d" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000164" + ], + false + ], + [ + "TF", + [ + 1, + "i" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000169" + ], + false + ], + [ + "TF", + [ + 1, + "t" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000174" + ], + false + ], + [ + "TF", + [ + 1, + "e" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000165" + ], + false + ], + [ + "TF", + [ + 1, + "d" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000164" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8000" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83672c210088939c" + ] + ], + [ + "RF", + [ + 3, + "\ufffd" + ], + 1, + true, + 0, + true, + "672c2100" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_4_1.html b/autobahn/client/hornbeam_case_6_4_1.html new file mode 100644 index 0000000..8472a6c --- /dev/null +++ b/autobahn/client/hornbeam_case_6_4_1.html @@ -0,0 +1,308 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.4.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>1003</b> ms @ 2023-08-10T21:35:07.439Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send invalid UTF-8 text message in 3 fragments (frames). +First frame payload is valid, then wait, then 2nd frame which contains the payload making the sequence invalid, then wait, then 3rd frame with rest. +Note that PART1 and PART3 are valid UTF-8 in themselves, PART2 is a 0x110000 encoded as in the UTF-8 integer encoding scheme, but the codepoint is invalid (out of range). +<br><br>MESSAGE PARTS:<br> +PART1 = cebae1bdb9cf83cebcceb5<br> +PART2 = f4908080<br> +PART3 = 656469746564<br> +</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The first frame is accepted, we expect to timeout on the first wait. The 2nd frame should be rejected immediately (fail fast on UTF-8). If we timeout, we expect the connection is failed at least then, since the complete message payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('timeout', 'A')], 'NON-STRICT': [('timeout', 'A'), ('timeout', 'B')]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u03ba\u1f79\u03c3\u03bc\u03b5', False), ('timeout', 'A')]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=74&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Hk3Rfo2P0muresL9E+Q3Dg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: ESMKErebtdx+/SsIIA4ElNTc41w=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>16</td><td>1</td><td>16</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>200</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>13</td><td>1</td><td>13</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3734266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=11, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> κόσμε</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 010bcebae1bdb9cf83cebcceb5</pre> + <pre class="wirelog_delay">004 DELAY 1.000000 sec for TAG A</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8be602994d28b878f05fcd1a835acc2c</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=11, MASKED=True, MASK=6536303239393464</pre> + <pre class="wirelog_rx_frame"> κόσμε</pre> + <pre class="wirelog_delay">008 DELAY TIMEOUT on TAG A</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf4908080</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 0004f4908080</pre> + <pre class="wirelog_delay">011 DELAY 1.000000 sec for TAG B</pre> + <pre class="wirelog_tcp_closed_by_peer">012 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_4_1.json b/autobahn/client/hornbeam_case_6_4_1.json new file mode 100644 index 0000000..7833900 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_4_1.json @@ -0,0 +1,188 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 74, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Send invalid UTF-8 text message in 3 fragments (frames).\nFirst frame payload is valid, then wait, then 2nd frame which contains the payload making the sequence invalid, then wait, then 3rd frame with rest.\nNote that PART1 and PART3 are valid UTF-8 in themselves, PART2 is a 0x110000 encoded as in the UTF-8 integer encoding scheme, but the codepoint is invalid (out of range).\n<br><br>MESSAGE PARTS:<br>\nPART1 = cebae1bdb9cf83cebcceb5<br>\nPART2 = f4908080<br>\nPART3 = 656469746564<br>\n", + "droppedByMe": false, + "duration": 1003, + "expectation": "The first frame is accepted, we expect to timeout on the first wait. The 2nd frame should be rejected immediately (fail fast on UTF-8). If we timeout, we expect the connection is failed at least then, since the complete message payload is not valid UTF-8.", + "expected": { + "NON-STRICT": [ + [ + "timeout", + "A" + ], + [ + "timeout", + "B" + ] + ], + "OK": [ + [ + "timeout", + "A" + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=74&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Hk3Rfo2P0muresL9E+Q3Dg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: ESMKErebtdx+/SsIIA4ElNTc41w=\r\n\r\n", + "id": "6.4.1", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "\u03ba\u1f79\u03c3\u03bc\u03b5", + false + ], + [ + "timeout", + "A" + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "16": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:07.439Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1 + }, + "txOctetStats": { + "6": 1, + "13": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3734266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 11, + "\u03ba\u1f79\u03c3\u03bc\u03b5" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 13, + "010bcebae1bdb9cf83cebcceb5" + ], + false + ], + [ + "CT", + 1, + "A" + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 16, + "8be602994d28b878f05fcd1a835acc2c" + ] + ], + [ + "RF", + [ + 11, + "\u03ba\u1f79\u03c3\u03bc\u03b5" + ], + 1, + true, + 0, + true, + "e602994d" + ], + [ + "CTE", + "A" + ], + [ + "TF", + [ + 4, + "0xf4908080" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "0004f4908080" + ], + false + ], + [ + "CT", + 1, + "B" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_4_2.html b/autobahn/client/hornbeam_case_6_4_2.html new file mode 100644 index 0000000..b3fc735 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_4_2.html @@ -0,0 +1,306 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.4.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>1003</b> ms @ 2023-08-10T21:35:08.444Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Same as Case 6.4.1, but in 2nd frame, we send only up to and including the octet making the complete payload invalid. +<br><br>MESSAGE PARTS:<br> +PART1 = cebae1bdb9cf83cebcceb5f4<br> +PART2 = 90<br> +PART3 = 8080656469746564<br> +</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The first frame is accepted, we expect to timeout on the first wait. The 2nd frame should be rejected immediately (fail fast on UTF-8). If we timeout, we expect the connection is failed at least then, since the complete message payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('timeout', 'A')], 'NON-STRICT': [('timeout', 'A'), ('timeout', 'B')]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u03ba\u1f79\u03c3\u03bc\u03b5\ufffd', False), ('timeout', 'A')]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=75&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: jlNkw4CKSCfMsZUIJPUG9Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: BxCyysLMra+P8DckVs0IMkNOdpU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>19</td><td>1</td><td>19</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>203</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>3</td><td>1</td><td>3</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>223</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3735266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xcebae1bdb9cf83cebcceb5f4</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 010ccebae1bdb9cf83cebcceb5f4</pre> + <pre class="wirelog_delay">004 DELAY 1.000000 sec for TAG A</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8e0d6da7a3c3d7461eb4a2246db1a3124cb2d0</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=14, MASKED=True, MASK=3064366461376133</pre> + <pre class="wirelog_rx_frame"> κόσμε�</pre> + <pre class="wirelog_delay">008 DELAY TIMEOUT on TAG A</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=0, FIN=False, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x90</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 000190</pre> + <pre class="wirelog_delay">011 DELAY 1.000000 sec for TAG B</pre> + <pre class="wirelog_tcp_closed_by_peer">012 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_4_2.json b/autobahn/client/hornbeam_case_6_4_2.json new file mode 100644 index 0000000..f81a255 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_4_2.json @@ -0,0 +1,188 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 75, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Same as Case 6.4.1, but in 2nd frame, we send only up to and including the octet making the complete payload invalid.\n<br><br>MESSAGE PARTS:<br>\nPART1 = cebae1bdb9cf83cebcceb5f4<br>\nPART2 = 90<br>\nPART3 = 8080656469746564<br>\n", + "droppedByMe": false, + "duration": 1003, + "expectation": "The first frame is accepted, we expect to timeout on the first wait. The 2nd frame should be rejected immediately (fail fast on UTF-8). If we timeout, we expect the connection is failed at least then, since the complete message payload is not valid UTF-8.", + "expected": { + "NON-STRICT": [ + [ + "timeout", + "A" + ], + [ + "timeout", + "B" + ] + ], + "OK": [ + [ + "timeout", + "A" + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=75&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: jlNkw4CKSCfMsZUIJPUG9Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: BxCyysLMra+P8DckVs0IMkNOdpU=\r\n\r\n", + "id": "6.4.2", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "message", + "\u03ba\u1f79\u03c3\u03bc\u03b5\ufffd", + false + ], + [ + "timeout", + "A" + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "19": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:08.444Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1 + }, + "txOctetStats": { + "3": 1, + "14": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3735266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 12, + "0xcebae1bdb9cf83cebcceb5f4" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "010ccebae1bdb9cf83cebcceb5f4" + ], + false + ], + [ + "CT", + 1, + "A" + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 19, + "8e0d6da7a3c3d7461eb4a2246db1a3124cb2d0" + ] + ], + [ + "RF", + [ + 14, + "\u03ba\u1f79\u03c3\u03bc\u03b5\ufffd" + ], + 1, + true, + 0, + true, + "0d6da7a3" + ], + [ + "CTE", + "A" + ], + [ + "TF", + [ + 1, + "0x90" + ], + 0, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "000190" + ], + false + ], + [ + "CT", + 1, + "B" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_4_3.html b/autobahn/client/hornbeam_case_6_4_3.html new file mode 100644 index 0000000..3fa7d20 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_4_3.html @@ -0,0 +1,309 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.4.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>2004</b> ms @ 2023-08-10T21:35:09.449Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Same as Case 6.4.1, but we send message not in 3 frames, but in 3 chops of the same message frame. +<br><br>MESSAGE PARTS:<br> +PART1 = cebae1bdb9cf83cebcceb5<br> +PART2 = f4908080<br> +PART3 = 656469746564<br> +</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The first chop is accepted, we expect to timeout on the first wait. The 2nd chop should be rejected immediately (fail fast on UTF-8). If we timeout, we expect the connection is failed at least then, since the complete message payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('timeout', 'A')], 'NON-STRICT': [('timeout', 'A'), ('timeout', 'B')]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('timeout', 'A'), ('timeout', 'B'), ('message', u'\u03ba\u1f79\u03c3\u03bc\u03b5\ufffd\ufffd\ufffd\ufffdedited', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=76&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 7ELyQv4RM8HULJbkSoT7lA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: qr/25YCH+83K/sNzH6wqePPZnvs=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>34</td><td>1</td><td>34</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>218</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>2</td><td>4</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>11</td><td>1</td><td>11</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>6</td><td>231</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3736266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_octets">002 TX OCTETS: 0115</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: cebae1bdb9cf83cebcceb5</pre> + <pre class="wirelog_delay">004 DELAY 1.000000 sec for TAG A</pre> + <pre class="wirelog_delay">005 DELAY TIMEOUT on TAG A</pre> + <pre class="wirelog_tx_octets">006 TX OCTETS: f4908080</pre> + <pre class="wirelog_delay">007 DELAY 1.000000 sec for TAG B</pre> + <pre class="wirelog_delay">008 DELAY TIMEOUT on TAG B</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 656469746564</pre> + <pre class="wirelog_tx_frame">010 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">011 TX OCTETS: 8000</pre> + <pre class="wirelog_kill_after">012 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">013 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">014 RX OCTETS: 9d56a6a7f9981c4644ef692437ea681216e91b4846eb491844b9191a9c32cfd39c32</pre> + <pre class="wirelog_rx_frame">015 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=29, MASKED=True, MASK=3536613661376639</pre> + <pre class="wirelog_rx_frame"> κόσμε����edited</pre> + <pre class="wirelog_tcp_closed_by_peer">016 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_4_3.json b/autobahn/client/hornbeam_case_6_4_3.json new file mode 100644 index 0000000..7eff2a3 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_4_3.json @@ -0,0 +1,211 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 76, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Same as Case 6.4.1, but we send message not in 3 frames, but in 3 chops of the same message frame.\n<br><br>MESSAGE PARTS:<br>\nPART1 = cebae1bdb9cf83cebcceb5<br>\nPART2 = f4908080<br>\nPART3 = 656469746564<br>\n", + "droppedByMe": false, + "duration": 2004, + "expectation": "The first chop is accepted, we expect to timeout on the first wait. The 2nd chop should be rejected immediately (fail fast on UTF-8). If we timeout, we expect the connection is failed at least then, since the complete message payload is not valid UTF-8.", + "expected": { + "NON-STRICT": [ + [ + "timeout", + "A" + ], + [ + "timeout", + "B" + ] + ], + "OK": [ + [ + "timeout", + "A" + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=76&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 7ELyQv4RM8HULJbkSoT7lA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: qr/25YCH+83K/sNzH6wqePPZnvs=\r\n\r\n", + "id": "6.4.3", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "timeout", + "A" + ], + [ + "timeout", + "B" + ], + [ + "message", + "\u03ba\u1f79\u03c3\u03bc\u03b5\ufffd\ufffd\ufffd\ufffdedited", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "34": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:09.449Z", + "trafficStats": null, + "txFrameStats": { + "0": 1 + }, + "txOctetStats": { + "2": 2, + "4": 1, + "6": 1, + "11": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3736266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TO", + [ + 2, + "0115" + ], + false + ], + [ + "TO", + [ + 11, + "cebae1bdb9cf83cebcceb5" + ], + false + ], + [ + "CT", + 1, + "A" + ], + [ + "CTE", + "A" + ], + [ + "TO", + [ + 4, + "f4908080" + ], + false + ], + [ + "CT", + 1, + "B" + ], + [ + "CTE", + "B" + ], + [ + "TO", + [ + 6, + "656469746564" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8000" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 34, + "9d56a6a7f9981c4644ef692437ea681216e91b4846eb491844b9191a9c32cfd39c32" + ] + ], + [ + "RF", + [ + 29, + "\u03ba\u1f79\u03c3\u03bc\u03b5\ufffd\ufffd\ufffd\ufffdedited" + ], + 1, + true, + 0, + true, + "56a6a7f9" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_4_4.html b/autobahn/client/hornbeam_case_6_4_4.html new file mode 100644 index 0000000..753f4a6 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_4_4.html @@ -0,0 +1,309 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.4.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>2004</b> ms @ 2023-08-10T21:35:11.454Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Same as Case 6.4.2, but we send message not in 3 frames, but in 3 chops of the same message frame. +<br><br>MESSAGE PARTS:<br> +PART1 = cebae1bdb9cf83cebcceb5f4<br> +PART2 = 90<br> +PART3 = <br> +</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The first chop is accepted, we expect to timeout on the first wait. The 2nd chop should be rejected immediately (fail fast on UTF-8). If we timeout, we expect the connection is failed at least then, since the complete message payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('timeout', 'A')], 'NON-STRICT': [('timeout', 'A'), ('timeout', 'B')]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('timeout', 'A'), ('timeout', 'B'), ('message', u'\u03ba\u1f79\u03c3\u03bc\u03b5\ufffd\ufffd\ufffd\ufffdedited', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=77&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: LXxLQ1gybmzv5nuTRCkGlQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: wCO6t1yzEs8QPVnruF27ZjaLDmI=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">False</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>34</td><td>1</td><td>34</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>218</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>2</td><td>2</td><td>4</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>12</td><td>1</td><td>12</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>6</td><td>231</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3737266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_octets">002 TX OCTETS: 0115</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: cebae1bdb9cf83cebcceb5f4</pre> + <pre class="wirelog_delay">004 DELAY 1.000000 sec for TAG A</pre> + <pre class="wirelog_delay">005 DELAY TIMEOUT on TAG A</pre> + <pre class="wirelog_tx_octets">006 TX OCTETS: 90</pre> + <pre class="wirelog_delay">007 DELAY 1.000000 sec for TAG B</pre> + <pre class="wirelog_delay">008 DELAY TIMEOUT on TAG B</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 8080656469746564</pre> + <pre class="wirelog_tx_frame">010 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">011 TX OCTETS: 8000</pre> + <pre class="wirelog_kill_after">012 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">013 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">014 RX OCTETS: 9d65b38cc9ab096d74dc7c0f07d97d3926da0e6376d85c33748a0c31ac01daf8ac01</pre> + <pre class="wirelog_rx_frame">015 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=29, MASKED=True, MASK=3635623338636339</pre> + <pre class="wirelog_rx_frame"> κόσμε����edited</pre> + <pre class="wirelog_tcp_closed_by_peer">016 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_4_4.json b/autobahn/client/hornbeam_case_6_4_4.json new file mode 100644 index 0000000..cdd652f --- /dev/null +++ b/autobahn/client/hornbeam_case_6_4_4.json @@ -0,0 +1,211 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 77, + "closedByMe": false, + "createStats": true, + "createWirelog": true, + "description": "Same as Case 6.4.2, but we send message not in 3 frames, but in 3 chops of the same message frame.\n<br><br>MESSAGE PARTS:<br>\nPART1 = cebae1bdb9cf83cebcceb5f4<br>\nPART2 = 90<br>\nPART3 = <br>\n", + "droppedByMe": false, + "duration": 2004, + "expectation": "The first chop is accepted, we expect to timeout on the first wait. The 2nd chop should be rejected immediately (fail fast on UTF-8). If we timeout, we expect the connection is failed at least then, since the complete message payload is not valid UTF-8.", + "expected": { + "NON-STRICT": [ + [ + "timeout", + "A" + ], + [ + "timeout", + "B" + ] + ], + "OK": [ + [ + "timeout", + "A" + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=77&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: LXxLQ1gybmzv5nuTRCkGlQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: wCO6t1yzEs8QPVnruF27ZjaLDmI=\r\n\r\n", + "id": "6.4.4", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [ + [ + "timeout", + "A" + ], + [ + "timeout", + "B" + ], + [ + "message", + "\u03ba\u1f79\u03c3\u03bc\u03b5\ufffd\ufffd\ufffd\ufffdedited", + false + ] + ], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1 + }, + "rxOctetStats": { + "1": 1, + "34": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:11.454Z", + "trafficStats": null, + "txFrameStats": { + "0": 1 + }, + "txOctetStats": { + "1": 1, + "2": 2, + "8": 1, + "12": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3737266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TO", + [ + 2, + "0115" + ], + false + ], + [ + "TO", + [ + 12, + "cebae1bdb9cf83cebcceb5f4" + ], + false + ], + [ + "CT", + 1, + "A" + ], + [ + "CTE", + "A" + ], + [ + "TO", + [ + 1, + "90" + ], + false + ], + [ + "CT", + 1, + "B" + ], + [ + "CTE", + "B" + ], + [ + "TO", + [ + 8, + "8080656469746564" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8000" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 34, + "9d65b38cc9ab096d74dc7c0f07d97d3926da0e6376d85c33748a0c31ac01daf8ac01" + ] + ], + [ + "RF", + [ + 29, + "\u03ba\u1f79\u03c3\u03bc\u03b5\ufffd\ufffd\ufffd\ufffdedited" + ], + 1, + true, + 0, + true, + "65b38cc9" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_5_1.html b/autobahn/client/hornbeam_case_6_5_1.html new file mode 100644 index 0000000..513174f --- /dev/null +++ b/autobahn/client/hornbeam_case_6_5_1.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.5.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>49</b> ms @ 2023-08-10T21:35:13.461Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x68656c6c6f24776f726c64</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'hello$world', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'hello$world', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=78&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: OfJz6g7aE/yI8a6fBD2GKw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: ZzerBdwTTNOqe2/seSrcHtyrg40=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>16</td><td>1</td><td>16</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>208</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>13</td><td>1</td><td>13</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>223</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3738266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=11, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> hello$world</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810b68656c6c6f24776f726c64</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8bbbb2ebf5d3d78799d4969c9ac9de8f</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=11, MASKED=True, MASK=6262623265626635</pre> + <pre class="wirelog_rx_frame"> hello$world</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882271db4bb24f5</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3237316462346262</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_5_1.json b/autobahn/client/hornbeam_case_6_5_1.json new file mode 100644 index 0000000..44c0c05 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_5_1.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 78, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x68656c6c6f24776f726c64", + "droppedByMe": true, + "duration": 49, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "hello$world", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=78&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: OfJz6g7aE/yI8a6fBD2GKw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: ZzerBdwTTNOqe2/seSrcHtyrg40=\r\n\r\n", + "id": "6.5.1", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "hello$world", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "16": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:13.461Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "13": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3738266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 11, + "hello$world" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 13, + "810b68656c6c6f24776f726c64" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 16, + "8bbbb2ebf5d3d78799d4969c9ac9de8f" + ] + ], + [ + "RF", + [ + 11, + "hello$world" + ], + 1, + true, + 0, + true, + "bbb2ebf5" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882271db4bb24f5" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "271db4bb" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_5_2.html b/autobahn/client/hornbeam_case_6_5_2.html new file mode 100644 index 0000000..3db9d9a --- /dev/null +++ b/autobahn/client/hornbeam_case_6_5_2.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.5.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>44</b> ms @ 2023-08-10T21:35:13.512Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x68656c6c6fc2a2776f726c64</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'hello\xa2world', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'hello\xa2world', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=79&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: QfsoifqfDSzvLuu64s049A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: XDFmSZa0GnBZ2bfGOTVbILI+Yww=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>17</td><td>1</td><td>17</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>209</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>224</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3739266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> hello¢world</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810c68656c6c6fc2a2776f726c64</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8c96d88ff1febde39df91a2d86f9aae395</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3936643838666631</pre> + <pre class="wirelog_rx_frame"> hello¢world</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88823897e98e3b7f</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3338393765393865</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_5_2.json b/autobahn/client/hornbeam_case_6_5_2.json new file mode 100644 index 0000000..db94940 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_5_2.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 79, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x68656c6c6fc2a2776f726c64", + "droppedByMe": true, + "duration": 44, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "hello\u00a2world", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=79&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: QfsoifqfDSzvLuu64s049A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: XDFmSZa0GnBZ2bfGOTVbILI+Yww=\r\n\r\n", + "id": "6.5.2", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "hello\u00a2world", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "17": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:13.512Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3739266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 12, + "hello\u00a2world" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "810c68656c6c6fc2a2776f726c64" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 17, + "8c96d88ff1febde39df91a2d86f9aae395" + ] + ], + [ + "RF", + [ + 12, + "hello\u00a2world" + ], + 1, + true, + 0, + true, + "96d88ff1" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88823897e98e3b7f" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "3897e98e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_5_3.html b/autobahn/client/hornbeam_case_6_5_3.html new file mode 100644 index 0000000..83435a9 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_5_3.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.5.3</b></span> : Pass - <span style="font-size: 0.9em;"><b>47</b> ms @ 2023-08-10T21:35:13.559Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x68656c6c6fe282ac776f726c64</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'hello\u20acworld', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'hello\u20acworld', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=80&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 59zmrlngz7KFwHQRYG1Eow== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: bYGXeW+hj/WtzFBhrBi7qcuRNXs=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>210</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>15</td><td>1</td><td>15</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3830266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> hello€world</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810d68656c6c6fe282ac776f726c64</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8db16c704dd9091c21de8ef2e1c6030221d5</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=13, MASKED=True, MASK=6231366337303464</pre> + <pre class="wirelog_rx_frame"> hello€world</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882e4d18042e739</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6534643138303432</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_5_3.json b/autobahn/client/hornbeam_case_6_5_3.json new file mode 100644 index 0000000..d236cec --- /dev/null +++ b/autobahn/client/hornbeam_case_6_5_3.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 80, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x68656c6c6fe282ac776f726c64", + "droppedByMe": true, + "duration": 47, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "hello\u20acworld", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=80&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 59zmrlngz7KFwHQRYG1Eow==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: bYGXeW+hj/WtzFBhrBi7qcuRNXs=\r\n\r\n", + "id": "6.5.3", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "hello\u20acworld", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "18": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:13.559Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "15": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3830266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 13, + "hello\u20acworld" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 15, + "810d68656c6c6fe282ac776f726c64" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 18, + "8db16c704dd9091c21de8ef2e1c6030221d5" + ] + ], + [ + "RF", + [ + 13, + "hello\u20acworld" + ], + 1, + true, + 0, + true, + "b16c704d" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882e4d18042e739" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "e4d18042" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_5_4.html b/autobahn/client/hornbeam_case_6_5_4.html new file mode 100644 index 0000000..8e09f9a --- /dev/null +++ b/autobahn/client/hornbeam_case_6_5_4.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.5.4</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:13.608Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x68656c6c6ff0a4ada2776f726c64</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'hello\U00024b62world', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'hello\U00024b62world', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=81&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 7YL4NqwuLF8XiA3qF6nWxQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: eG2MFgJQsjJ2hhUz2JA/ck87mqw=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>19</td><td>1</td><td>19</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>211</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>16</td><td>1</td><td>16</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>226</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3831266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=14, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> hello𤭢world</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810e68656c6c6ff0a4ada2776f726c64</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8e7464c1c81c01ada41b946565d613aeba1800</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=14, MASKED=True, MASK=3734363463316338</pre> + <pre class="wirelog_rx_frame"> hello𤭢world</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88823eb5612d3d5d</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3365623536313264</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_5_4.json b/autobahn/client/hornbeam_case_6_5_4.json new file mode 100644 index 0000000..a8a68f0 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_5_4.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 81, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x68656c6c6ff0a4ada2776f726c64", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "hello\ud852\udf62world", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=81&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 7YL4NqwuLF8XiA3qF6nWxQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: eG2MFgJQsjJ2hhUz2JA/ck87mqw=\r\n\r\n", + "id": "6.5.4", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "hello\ud852\udf62world", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "19": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:13.608Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "16": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3831266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 14, + "hello\ud852\udf62world" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 16, + "810e68656c6c6ff0a4ada2776f726c64" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 19, + "8e7464c1c81c01ada41b946565d613aeba1800" + ] + ], + [ + "RF", + [ + 14, + "hello\ud852\udf62world" + ], + 1, + true, + 0, + true, + "7464c1c8" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88823eb5612d3d5d" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "3eb5612d" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_5_5.html b/autobahn/client/hornbeam_case_6_5_5.html new file mode 100644 index 0000000..6a038aa --- /dev/null +++ b/autobahn/client/hornbeam_case_6_5_5.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.5.5</b></span> : Pass - <span style="font-size: 0.9em;"><b>47</b> ms @ 2023-08-10T21:35:13.656Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83cebcceb5</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\u03ba\u1f79\u03c3\u03bc\u03b5', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u03ba\u1f79\u03c3\u03bc\u03b5', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=82&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Xr27RzoMJtuS8HuiXM9iRQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: vLrPAGZ9cYgUK121LPy/nAQeR2Q=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>16</td><td>1</td><td>16</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>208</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>13</td><td>1</td><td>13</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>223</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3832266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=11, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> κόσμε</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810bcebae1bdb9cf83cebcceb5</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8ba6b7cd7d680d2cc01f784eb31a7978</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=11, MASKED=True, MASK=6136623763643764</pre> + <pre class="wirelog_rx_frame"> κόσμε</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882eec238d5ed2a</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6565633233386435</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_5_5.json b/autobahn/client/hornbeam_case_6_5_5.json new file mode 100644 index 0000000..cead1b3 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_5_5.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 82, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83cebcceb5", + "droppedByMe": true, + "duration": 47, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\u03ba\u1f79\u03c3\u03bc\u03b5", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=82&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Xr27RzoMJtuS8HuiXM9iRQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: vLrPAGZ9cYgUK121LPy/nAQeR2Q=\r\n\r\n", + "id": "6.5.5", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\u03ba\u1f79\u03c3\u03bc\u03b5", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "16": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:13.656Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "13": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3832266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 11, + "\u03ba\u1f79\u03c3\u03bc\u03b5" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 13, + "810bcebae1bdb9cf83cebcceb5" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 16, + "8ba6b7cd7d680d2cc01f784eb31a7978" + ] + ], + [ + "RF", + [ + 11, + "\u03ba\u1f79\u03c3\u03bc\u03b5" + ], + 1, + true, + 0, + true, + "a6b7cd7d" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882eec238d5ed2a" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "eec238d5" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_6_1.html b/autobahn/client/hornbeam_case_6_6_1.html new file mode 100644 index 0000000..e929883 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_1.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.6.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:13.705Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xce</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=83&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: vAoFBk6FwB1WeWqf8VH9Xw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: BYk/V9PY0WFUj02G2iF+DpsE7h8=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>210</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>3</td><td>1</td><td>3</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>223</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3833266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xce</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8101ce</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83469a4953a925f4</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=3436396134393533</pre> + <pre class="wirelog_rx_frame"> �</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c003d8f0703d4c8686953e827414aee7e</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3030336438663037</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_6_1.json b/autobahn/client/hornbeam_case_6_6_1.json new file mode 100644 index 0000000..4fb808b --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_1.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 83, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xce", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=83&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: vAoFBk6FwB1WeWqf8VH9Xw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: BYk/V9PY0WFUj02G2iF+DpsE7h8=\r\n\r\n", + "id": "6.6.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "18": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:13.705Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "3": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3833266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 1, + "0xce" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "8101ce" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83469a4953a925f4" + ] + ], + [ + "RF", + [ + 3, + "\ufffd" + ], + 1, + true, + 0, + true, + "469a4953" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c003d8f0703d4c8686953e827414aee7e" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "003d8f07" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_6_10.html b/autobahn/client/hornbeam_case_6_6_10.html new file mode 100644 index 0000000..c305367 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_10.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.6.10</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:16.419Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83cebcce</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u03ba\u1f79\u03c3\u03bc\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=92&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: yqqueXC1fctcectWp8dYbA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: bLJDURpbSTCpIJBWBCN4j/r3Nwg=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>17</td><td>1</td><td>17</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>219</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>12</td><td>1</td><td>12</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>232</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3932266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=10, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xcebae1bdb9cf83cebcce</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810acebae1bdb9cf83cebcce</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8cee4943c220f3a27f5786c00c52a6fc7f</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6565343934336332</pre> + <pre class="wirelog_rx_frame"> κόσμ�</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c03d2f7c6003bb0a96abc90e642a596bf</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3033643266376336</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_6_10.json b/autobahn/client/hornbeam_case_6_6_10.json new file mode 100644 index 0000000..67ea17c --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_10.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 92, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83cebcce", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=92&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: yqqueXC1fctcectWp8dYbA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: bLJDURpbSTCpIJBWBCN4j/r3Nwg=\r\n\r\n", + "id": "6.6.10", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\u03ba\u1f79\u03c3\u03bc\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "17": 1, + "18": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:16.419Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "12": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3932266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 10, + "0xcebae1bdb9cf83cebcce" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 12, + "810acebae1bdb9cf83cebcce" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 17, + "8cee4943c220f3a27f5786c00c52a6fc7f" + ] + ], + [ + "RF", + [ + 12, + "\u03ba\u1f79\u03c3\u03bc\ufffd" + ], + 1, + true, + 0, + true, + "ee4943c2" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c03d2f7c6003bb0a96abc90e642a596bf" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "03d2f7c6" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_6_11.html b/autobahn/client/hornbeam_case_6_6_11.html new file mode 100644 index 0000000..de7b886 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_11.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.6.11</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:16.924Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83cebcceb5</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\u03ba\u1f79\u03c3\u03bc\u03b5', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u03ba\u1f79\u03c3\u03bc\u03b5', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=93&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: g4v6lp4HliJ4atwZlMlhyQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: JezHtcvdLsLJPqkM6HapmTpJSZg=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>16</td><td>1</td><td>16</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>208</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>13</td><td>1</td><td>13</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>223</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3933266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=11, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> κόσμε</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810bcebae1bdb9cf83cebcceb5</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8b90ebbd805e515c3d29243e4e2c2508</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=11, MASKED=True, MASK=3930656262643830</pre> + <pre class="wirelog_rx_frame"> κόσμε</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882492f1ba94ac7</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3439326631626139</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_6_11.json b/autobahn/client/hornbeam_case_6_6_11.json new file mode 100644 index 0000000..378ac52 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_11.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 93, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83cebcceb5", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\u03ba\u1f79\u03c3\u03bc\u03b5", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=93&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: g4v6lp4HliJ4atwZlMlhyQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: JezHtcvdLsLJPqkM6HapmTpJSZg=\r\n\r\n", + "id": "6.6.11", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\u03ba\u1f79\u03c3\u03bc\u03b5", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "16": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:16.924Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "13": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3933266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 11, + "\u03ba\u1f79\u03c3\u03bc\u03b5" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 13, + "810bcebae1bdb9cf83cebcceb5" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 16, + "8b90ebbd805e515c3d29243e4e2c2508" + ] + ], + [ + "RF", + [ + 11, + "\u03ba\u1f79\u03c3\u03bc\u03b5" + ], + 1, + true, + 0, + true, + "90ebbd80" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882492f1ba94ac7" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "492f1ba9" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_6_2.html b/autobahn/client/hornbeam_case_6_6_2.html new file mode 100644 index 0000000..5089cec --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_2.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.6.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:14.209Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xceba</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\u03ba', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u03ba', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=84&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 7vLiilKKyuV/qcDiOrmqJw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: ioekY98gKR8OY3ZKNnKK3+jbFX8=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>2</td><td>2</td></tr> + <tr class="stats_row"><td>7</td><td>2</td><td>14</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>5</td><td>199</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>2</td><td>8</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>214</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3834266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> κ</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8102ceba</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 82ac64883c62de</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6163363438383363</pre> + <pre class="wirelog_rx_frame"> κ</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 82c41fa2b4c7f7</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6334316661326234</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_6_2.json b/autobahn/client/hornbeam_case_6_6_2.json new file mode 100644 index 0000000..174e0a6 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_2.json @@ -0,0 +1,190 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 84, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xceba", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\u03ba", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=84&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 7vLiilKKyuV/qcDiOrmqJw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: ioekY98gKR8OY3ZKNnKK3+jbFX8=\r\n\r\n", + "id": "6.6.2", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\u03ba", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 2, + "7": 2, + "183": 1 + }, + "started": "2023-08-10T21:35:14.209Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 2, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3834266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "\u03ba" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "8102ceba" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 7, + "82ac64883c62de" + ] + ], + [ + "RF", + [ + 2, + "\u03ba" + ], + 1, + true, + 0, + true, + "ac64883c" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 1, + "88" + ] + ], + [ + "RO", + [ + 7, + "82c41fa2b4c7f7" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "c41fa2b4" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_6_3.html b/autobahn/client/hornbeam_case_6_6_3.html new file mode 100644 index 0000000..33f947c --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_3.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.6.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:14.258Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u03ba\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=85&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: pRGze7kspxOR8y/owGKuyg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: N9cOCXMjcp2/CP2m0qlfaXcKC/E=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>10</td><td>1</td><td>10</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>212</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>225</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3835266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xcebae1</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103cebae1</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 85ca6963b404d38c0b77</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=5, MASKED=True, MASK=6361363936336234</pre> + <pre class="wirelog_rx_frame"> κ�</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cb263105bb18a5734db0d777bf3147122</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6232363331303562</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_6_3.json b/autobahn/client/hornbeam_case_6_6_3.json new file mode 100644 index 0000000..609bdc6 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_3.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 85, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=85&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: pRGze7kspxOR8y/owGKuyg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: N9cOCXMjcp2/CP2m0qlfaXcKC/E=\r\n\r\n", + "id": "6.6.3", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\u03ba\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "10": 1, + "18": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:14.258Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "5": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3835266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "0xcebae1" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103cebae1" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 10, + "85ca6963b404d38c0b77" + ] + ], + [ + "RF", + [ + 5, + "\u03ba\ufffd" + ], + 1, + true, + 0, + true, + "ca6963b4" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cb263105bb18a5734db0d777bf3147122" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "b263105b" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_6_4.html b/autobahn/client/hornbeam_case_6_6_4.html new file mode 100644 index 0000000..dcb47a5 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_4.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.6.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:14.763Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bd</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u03ba\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=86&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: nt1qO12kI9BoOxUbYLC78w== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 1nDlohkVMJ4bADybz5REfSb8NuY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>10</td><td>1</td><td>10</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>212</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>226</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3836266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xcebae1bd</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104cebae1bd</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 858b56702245ec9f9d36</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=5, MASKED=True, MASK=3862353637303232</pre> + <pre class="wirelog_rx_frame"> κ�</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c7254ef0e71bda8611b3a882e33238e77</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3732353465663065</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_6_4.json b/autobahn/client/hornbeam_case_6_6_4.json new file mode 100644 index 0000000..d982a47 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_4.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 86, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bd", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=86&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: nt1qO12kI9BoOxUbYLC78w==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 1nDlohkVMJ4bADybz5REfSb8NuY=\r\n\r\n", + "id": "6.6.4", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\u03ba\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "10": 1, + "18": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:14.763Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "6": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3836266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "0xcebae1bd" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104cebae1bd" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 10, + "858b56702245ec9f9d36" + ] + ], + [ + "RF", + [ + 5, + "\u03ba\ufffd" + ], + 1, + true, + 0, + true, + "8b567022" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c7254ef0e71bda8611b3a882e33238e77" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "7254ef0e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_6_5.html b/autobahn/client/hornbeam_case_6_6_5.html new file mode 100644 index 0000000..cafb7c4 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_5.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.6.5</b></span> : Pass - <span style="font-size: 0.9em;"><b>47</b> ms @ 2023-08-10T21:35:15.268Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\u03ba\u1f79', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u03ba\u1f79', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=87&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: ZXLInu65g0Hh5ICDe9XTTQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: syjMLMFS4FzQ3IEMnI5wGEZ28Nc=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>10</td><td>1</td><td>10</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>217</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3837266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=5, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> κό</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8105cebae1bdb9</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 85e16afe572fd01fea58</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=5, MASKED=True, MASK=6531366166653537</pre> + <pre class="wirelog_rx_frame"> κό</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882aa90e456a978</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6161393065343536</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_6_5.json b/autobahn/client/hornbeam_case_6_6_5.json new file mode 100644 index 0000000..5c30f3f --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_5.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 87, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9", + "droppedByMe": true, + "duration": 47, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\u03ba\u1f79", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=87&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: ZXLInu65g0Hh5ICDe9XTTQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: syjMLMFS4FzQ3IEMnI5wGEZ28Nc=\r\n\r\n", + "id": "6.6.5", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\u03ba\u1f79", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "10": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:15.268Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "7": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3837266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 5, + "\u03ba\u1f79" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 7, + "8105cebae1bdb9" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 10, + "85e16afe572fd01fea58" + ] + ], + [ + "RF", + [ + 5, + "\u03ba\u1f79" + ], + 1, + true, + 0, + true, + "e16afe57" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882aa90e456a978" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "aa90e456" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_6_6.html b/autobahn/client/hornbeam_case_6_6_6.html new file mode 100644 index 0000000..12c9b88 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_6.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.6.6</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:15.317Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u03ba\u1f79\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=88&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: ljaq0cZ9ZS+XGgNGwK1rqw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: sq3wfRg/6qQV8f2a91b4gcx91LY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>13</td><td>1</td><td>13</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>215</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3838266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xcebae1bdb9cf</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106cebae1bdb9cf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 88cb8d9ab105377b0c7262250c</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=8, MASKED=True, MASK=6362386439616231</pre> + <pre class="wirelog_rx_frame"> κό�</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c75e86d6c76012a031c860a4c349f0c15</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3735653836643663</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_6_6.json b/autobahn/client/hornbeam_case_6_6_6.json new file mode 100644 index 0000000..9c86aea --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_6.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 88, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=88&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: ljaq0cZ9ZS+XGgNGwK1rqw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: sq3wfRg/6qQV8f2a91b4gcx91LY=\r\n\r\n", + "id": "6.6.6", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\u03ba\u1f79\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "13": 1, + "18": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:15.317Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3838266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "0xcebae1bdb9cf" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106cebae1bdb9cf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 13, + "88cb8d9ab105377b0c7262250c" + ] + ], + [ + "RF", + [ + 8, + "\u03ba\u1f79\ufffd" + ], + 1, + true, + 0, + true, + "cb8d9ab1" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c75e86d6c76012a031c860a4c349f0c15" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "75e86d6c" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_6_7.html b/autobahn/client/hornbeam_case_6_6_7.html new file mode 100644 index 0000000..8a1371b --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_7.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.6.7</b></span> : Pass - <span style="font-size: 0.9em;"><b>44</b> ms @ 2023-08-10T21:35:15.823Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\u03ba\u1f79\u03c3', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u03ba\u1f79\u03c3', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=89&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 9m+cDnIjQouybEdqX4rGlw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: hQ0666JCUI0B57qeNAMTn61U9NE=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>12</td><td>1</td><td>12</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>204</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>219</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3839266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=7, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> κόσ</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8107cebae1bdb9cf83</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 87e0f41c5d2e4efde0593b9f</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=7, MASKED=True, MASK=6530663431633564</pre> + <pre class="wirelog_rx_frame"> κόσ</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88825aa6526d594e</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3561613635323664</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_6_7.json b/autobahn/client/hornbeam_case_6_6_7.json new file mode 100644 index 0000000..0974221 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_7.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 89, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83", + "droppedByMe": true, + "duration": 44, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\u03ba\u1f79\u03c3", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=89&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 9m+cDnIjQouybEdqX4rGlw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: hQ0666JCUI0B57qeNAMTn61U9NE=\r\n\r\n", + "id": "6.6.7", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\u03ba\u1f79\u03c3", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "12": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:15.823Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "9": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3839266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 7, + "\u03ba\u1f79\u03c3" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 9, + "8107cebae1bdb9cf83" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 12, + "87e0f41c5d2e4efde0593b9f" + ] + ], + [ + "RF", + [ + 7, + "\u03ba\u1f79\u03c3" + ], + 1, + true, + 0, + true, + "e0f41c5d" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88825aa6526d594e" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "5aa6526d" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_6_8.html b/autobahn/client/hornbeam_case_6_6_8.html new file mode 100644 index 0000000..85741a3 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_8.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.6.8</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:15.868Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83ce</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u03ba\u1f79\u03c3\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=90&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: eyuz7jcJZxilqPejdZpilA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: bWZqhNde57N/29kcscG7lX+/+oI=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>15</td><td>1</td><td>15</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>217</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>10</td><td>1</td><td>10</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>230</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3930266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=8, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xcebae1bdb9cf83ce</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8108cebae1bdb9cf83ce</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8ad18d5e8a1f37bf376842dd656e30</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=10, MASKED=True, MASK=6431386435653861</pre> + <pre class="wirelog_rx_frame"> κόσ�</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888cdfc62682dc2f61edb6a841a29eb147fb</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=6466633632363832</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_6_8.json b/autobahn/client/hornbeam_case_6_6_8.json new file mode 100644 index 0000000..343a21e --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_8.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 90, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83ce", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=90&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: eyuz7jcJZxilqPejdZpilA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: bWZqhNde57N/29kcscG7lX+/+oI=\r\n\r\n", + "id": "6.6.8", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\u03ba\u1f79\u03c3\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "15": 1, + "18": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:15.868Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "10": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3930266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 8, + "0xcebae1bdb9cf83ce" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 10, + "8108cebae1bdb9cf83ce" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 15, + "8ad18d5e8a1f37bf376842dd656e30" + ] + ], + [ + "RF", + [ + 10, + "\u03ba\u1f79\u03c3\ufffd" + ], + 1, + true, + 0, + true, + "d18d5e8a" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888cdfc62682dc2f61edb6a841a29eb147fb" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "dfc62682" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_6_9.html b/autobahn/client/hornbeam_case_6_6_9.html new file mode 100644 index 0000000..534bec4 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_9.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.6.9</b></span> : Pass - <span style="font-size: 0.9em;"><b>44</b> ms @ 2023-08-10T21:35:16.373Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83cebc</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\u03ba\u1f79\u03c3\u03bc', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u03ba\u1f79\u03c3\u03bc', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=91&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: FoxmVKjzNGHcJtFnF8I3fQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: TWUOWXpS9DFI82F6FD2eltU4q6U=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>206</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>11</td><td>1</td><td>11</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>221</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3931266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> κόσμ</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8109cebae1bdb9cf83cebc</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 89b5cfea067b750bbb0c0069c809</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=6235636665613036</pre> + <pre class="wirelog_rx_frame"> κόσμ</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88820508179e06e0</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3035303831373965</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_6_9.json b/autobahn/client/hornbeam_case_6_6_9.json new file mode 100644 index 0000000..dd98ea5 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_6_9.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 91, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83cebc", + "droppedByMe": true, + "duration": 44, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\u03ba\u1f79\u03c3\u03bc", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=91&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: FoxmVKjzNGHcJtFnF8I3fQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: TWUOWXpS9DFI82F6FD2eltU4q6U=\r\n\r\n", + "id": "6.6.9", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\u03ba\u1f79\u03c3\u03bc", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "14": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:16.373Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "11": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3931266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "\u03ba\u1f79\u03c3\u03bc" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8109cebae1bdb9cf83cebc" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 14, + "89b5cfea067b750bbb0c0069c809" + ] + ], + [ + "RF", + [ + 9, + "\u03ba\u1f79\u03c3\u03bc" + ], + 1, + true, + 0, + true, + "b5cfea06" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88820508179e06e0" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "0508179e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_7_1.html b/autobahn/client/hornbeam_case_6_7_1.html new file mode 100644 index 0000000..2688c96 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_7_1.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.7.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>47</b> ms @ 2023-08-10T21:35:16.971Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x00</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\x00', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\x00', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=94&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 3YuHnxQS/fj52Udre2cjoQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: d8rZJl/8jn9OHeFy2A1ZatVx/Sg=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>198</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>3</td><td>1</td><td>3</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>213</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3934266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> �</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810100</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 81f94ef2c8f9</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=1, MASKED=True, MASK=6639346566326338</pre> + <pre class="wirelog_rx_frame"> �</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882e8f2e751eb1a</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6538663265373531</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_7_1.json b/autobahn/client/hornbeam_case_6_7_1.json new file mode 100644 index 0000000..e1d6200 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_7_1.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 94, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x00", + "droppedByMe": true, + "duration": 47, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\u0000", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=94&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 3YuHnxQS/fj52Udre2cjoQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: d8rZJl/8jn9OHeFy2A1ZatVx/Sg=\r\n\r\n", + "id": "6.7.1", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\u0000", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "6": 1, + "8": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:16.971Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "3": 1, + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3934266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 1, + "\u0000" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "810100" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 6, + "81f94ef2c8f9" + ] + ], + [ + "RF", + [ + 1, + "\u0000" + ], + 1, + true, + 0, + true, + "f94ef2c8" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882e8f2e751eb1a" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "e8f2e751" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_7_2.html b/autobahn/client/hornbeam_case_6_7_2.html new file mode 100644 index 0000000..e6ee1ac --- /dev/null +++ b/autobahn/client/hornbeam_case_6_7_2.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.7.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>44</b> ms @ 2023-08-10T21:35:17.020Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xc280</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\x80', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\x80', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=95&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 4QsL7x01cU1nUULfd0BDew== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: Io3hfFqFUYNqYRCJPqs9rl/sX8Y=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>199</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>2</td><td>8</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>214</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3935266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8102c280</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 824dde241a8f5e</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3464646532343161</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 888209100de00af8</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3039313030646530</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_7_2.json b/autobahn/client/hornbeam_case_6_7_2.json new file mode 100644 index 0000000..caec37e --- /dev/null +++ b/autobahn/client/hornbeam_case_6_7_2.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 95, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xc280", + "droppedByMe": true, + "duration": 44, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\u0080", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=95&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 4QsL7x01cU1nUULfd0BDew==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: Io3hfFqFUYNqYRCJPqs9rl/sX8Y=\r\n\r\n", + "id": "6.7.2", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\u0080", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "7": 1, + "8": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:17.020Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 2, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3935266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "\u0080" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "8102c280" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 7, + "824dde241a8f5e" + ] + ], + [ + "RF", + [ + 2, + "\u0080" + ], + 1, + true, + 0, + true, + "4dde241a" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "888209100de00af8" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "09100de0" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_7_3.html b/autobahn/client/hornbeam_case_6_7_3.html new file mode 100644 index 0000000..4890c35 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_7_3.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.7.3</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:17.065Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xe0a080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\u0800', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u0800', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=96&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: UekLI596Tf7MuxzBUCSMRQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: s4380WIxMcQ245K7L0vEPbXAynM=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>2</td><td>16</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>200</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>215</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3936266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> ࠀ</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103e0a080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 837ccd37ed9c6db7</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=3763636433376564</pre> + <pre class="wirelog_rx_frame"> ࠀ</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88821562ed43168a</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3135363265643433</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_7_3.json b/autobahn/client/hornbeam_case_6_7_3.json new file mode 100644 index 0000000..f733b1b --- /dev/null +++ b/autobahn/client/hornbeam_case_6_7_3.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 96, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xe0a080", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\u0800", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=96&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: UekLI596Tf7MuxzBUCSMRQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: s4380WIxMcQ245K7L0vEPbXAynM=\r\n\r\n", + "id": "6.7.3", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\u0800", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 2, + "183": 1 + }, + "started": "2023-08-10T21:35:17.065Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "5": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3936266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\u0800" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103e0a080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "837ccd37ed9c6db7" + ] + ], + [ + "RF", + [ + 3, + "\u0800" + ], + 1, + true, + 0, + true, + "7ccd37ed" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88821562ed43168a" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "1562ed43" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_7_4.html b/autobahn/client/hornbeam_case_6_7_4.html new file mode 100644 index 0000000..141c574 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_7_4.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.7.4</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:17.112Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0908080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U00010000', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U00010000', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=97&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: gE7KaTRIp0/hl0uXiZL2kw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: /rHoz5OqD5+46byo203Az70S7FU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3937266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 𐀀</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f0908080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 84154e36e2e5deb662</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3135346533366532</pre> + <pre class="wirelog_rx_frame"> 𐀀</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882077e46b80496</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3037376534366238</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_7_4.json b/autobahn/client/hornbeam_case_6_7_4.json new file mode 100644 index 0000000..040111e --- /dev/null +++ b/autobahn/client/hornbeam_case_6_7_4.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 97, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0908080", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\ud800\udc00", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=97&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: gE7KaTRIp0/hl0uXiZL2kw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: /rHoz5OqD5+46byo203Az70S7FU=\r\n\r\n", + "id": "6.7.4", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\ud800\udc00", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:17.112Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3937266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\ud800\udc00" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f0908080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "84154e36e2e5deb662" + ] + ], + [ + "RF", + [ + 4, + "\ud800\udc00" + ], + 1, + true, + 0, + true, + "154e36e2" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882077e46b80496" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "077e46b8" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_8_1.html b/autobahn/client/hornbeam_case_6_8_1.html new file mode 100644 index 0000000..b7efde2 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_8_1.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.8.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:17.158Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf888808080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=98&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: jVosMId73KuagkM9kEg4VA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 4ZUbA04uFv1cKrbnYLpvALroVBs=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>20</td><td>1</td><td>20</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>222</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>227</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3938266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=5, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xf888808080</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8105f888808080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8fcc52366123ed8b8e73efd9de71bd89dc23ed8b</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=15, MASKED=True, MASK=6363353233363631</pre> + <pre class="wirelog_rx_frame"> �����</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c26e3018f250a46e04f8d66af679460f6</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3236653330313866</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_8_1.json b/autobahn/client/hornbeam_case_6_8_1.json new file mode 100644 index 0000000..97cef4c --- /dev/null +++ b/autobahn/client/hornbeam_case_6_8_1.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 98, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf888808080", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=98&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: jVosMId73KuagkM9kEg4VA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 4ZUbA04uFv1cKrbnYLpvALroVBs=\r\n\r\n", + "id": "6.8.1", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "20": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:17.158Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "7": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3938266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 5, + "0xf888808080" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 7, + "8105f888808080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 20, + "8fcc52366123ed8b8e73efd9de71bd89dc23ed8b" + ] + ], + [ + "RF", + [ + 15, + "\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "cc523661" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c26e3018f250a46e04f8d66af679460f6" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "26e3018f" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_8_2.html b/autobahn/client/hornbeam_case_6_8_2.html new file mode 100644 index 0000000..59fae17 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_8_2.html @@ -0,0 +1,305 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.8.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>503</b> ms @ 2023-08-10T21:35:17.664Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc8480808080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The connection was failed by the wrong endpoint (FAILED)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=99&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: RPk68Y91MC0hjNHVpTuGWQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: k5Ol9+RqGDNAlHNFVHamujqxpaU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Going Away</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Going Away</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>18</td><td>1</td><td>18</td></tr> + <tr class="stats_row"><td>23</td><td>1</td><td>23</td></tr> + <tr class="stats_row"><td>183</td><td>1</td><td>183</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>225</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>228</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d3939266167656e743d486f726e6265616d20485454502f312e310d0a486f7374</pre> + <pre class="wirelog_rx_octets"> 3a206c6f63616c686f73743a3930 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=6, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xfc8480808080</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8106fc8480808080</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 923beab26ad4550f8584575dd586050dd7d4550f858457</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=18, MASKED=True, MASK=3362656162323661</pre> + <pre class="wirelog_rx_frame"> ������</pre> + <pre class="wirelog_kill_after">008 FAILING CONNECTION</pre> + <pre class="wirelog_tx_frame">009 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tx_octets">010 TX OCTETS: 880c03e9476f696e672041776179</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 888c84ce622d87272542eda0050dc5b90354</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3834636536323264</pre> + <pre class="wirelog_rx_frame"> 0x03e9476f696e672041776179</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_8_2.json b/autobahn/client/hornbeam_case_6_8_2.json new file mode 100644 index 0000000..6f43ec0 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_8_2.json @@ -0,0 +1,183 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "FAILED", + "case": 99, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc8480808080", + "droppedByMe": true, + "duration": 503, + "expectation": "The connection is failed immediately, since the payload is not valid UTF-8.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1007 + ], + "closedByMe": false, + "closedByWrongEndpointIsFatal": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=99&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: RPk68Y91MC0hjNHVpTuGWQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: k5Ol9+RqGDNAlHNFVHamujqxpaU=\r\n\r\n", + "id": "6.8.2", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": "Going Away", + "received": [ + [ + "message", + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd", + false + ] + ], + "remoteCloseCode": 1001, + "remoteCloseReason": "Going Away", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "The connection was failed by the wrong endpoint", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "18": 1, + "23": 1, + "183": 1 + }, + "started": "2023-08-10T21:35:17.664Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "8": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 183, + "474554202f72756e436173653f636173653d3939266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a3930 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 6, + "0xfc8480808080" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 8, + "8106fc8480808080" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 23, + "923beab26ad4550f8584575dd586050dd7d4550f858457" + ] + ], + [ + "RF", + [ + 18, + "\ufffd\ufffd\ufffd\ufffd\ufffd\ufffd" + ], + 1, + true, + 0, + true, + "3beab26a" + ], + [ + "KLE" + ], + [ + "TF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "880c03e9476f696e672041776179" + ], + false + ], + [ + "RO", + [ + 18, + "888c84ce622d87272542eda0050dc5b90354" + ] + ], + [ + "RF", + [ + 12, + "0x03e9476f696e672041776179" + ], + 8, + true, + 0, + true, + "84ce622d" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_9_1.html b/autobahn/client/hornbeam_case_6_9_1.html new file mode 100644 index 0000000..c267879 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_9_1.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.9.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>48</b> ms @ 2023-08-10T21:35:18.169Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x7f</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\x7f', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\x7f', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=100&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: z9zRneh6zD3te0Dv7c9eQA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: iJiQlElF+c3yUPc775ZNt398GqY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>199</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>3</td><td>1</td><td>3</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>213</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313030266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 81017f</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 81146890856b</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=1, MASKED=True, MASK=3134363839303835</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88829abc29a69954</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3961626332396136</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_9_1.json b/autobahn/client/hornbeam_case_6_9_1.json new file mode 100644 index 0000000..21f9ebc --- /dev/null +++ b/autobahn/client/hornbeam_case_6_9_1.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 100, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x7f", + "droppedByMe": true, + "duration": 48, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\u007f", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=100&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: z9zRneh6zD3te0Dv7c9eQA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: iJiQlElF+c3yUPc775ZNt398GqY=\r\n\r\n", + "id": "6.9.1", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\u007f", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "6": 1, + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:18.169Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "3": 1, + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313030266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 1, + "\u007f" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "81017f" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 6, + "81146890856b" + ] + ], + [ + "RF", + [ + 1, + "\u007f" + ], + 1, + true, + 0, + true, + "14689085" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88829abc29a69954" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "9abc29a6" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_9_2.html b/autobahn/client/hornbeam_case_6_9_2.html new file mode 100644 index 0000000..d932c1e --- /dev/null +++ b/autobahn/client/hornbeam_case_6_9_2.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.9.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>44</b> ms @ 2023-08-10T21:35:18.219Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xdfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\u07ff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\u07ff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=101&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 6xCVKX8Fj1vMuPmooataVA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: c+g2LdNIHOid5uE8ZNDF637Qsqg=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>200</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>2</td><td>8</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>214</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313031266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> ߿</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8102dfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 82ffbbc76c2004</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6666626263373663</pre> + <pre class="wirelog_rx_frame"> ߿</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88820e1f9ff80df7</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3065316639666638</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_9_2.json b/autobahn/client/hornbeam_case_6_9_2.json new file mode 100644 index 0000000..314f526 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_9_2.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 101, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xdfbf", + "droppedByMe": true, + "duration": 44, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\u07ff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=101&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 6xCVKX8Fj1vMuPmooataVA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: c+g2LdNIHOid5uE8ZNDF637Qsqg=\r\n\r\n", + "id": "6.9.2", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\u07ff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "7": 1, + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:18.219Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 2, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313031266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "\u07ff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "8102dfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 7, + "82ffbbc76c2004" + ] + ], + [ + "RF", + [ + 2, + "\u07ff" + ], + 1, + true, + 0, + true, + "ffbbc76c" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88820e1f9ff80df7" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "0e1f9ff8" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_9_3.html b/autobahn/client/hornbeam_case_6_9_3.html new file mode 100644 index 0000000..95f35e7 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_9_3.html @@ -0,0 +1,303 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.9.3</b></span> : Pass - <span style="font-size: 0.9em;"><b>46</b> ms @ 2023-08-10T21:35:18.265Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\uffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\uffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=102&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: tZt5ouxLJW9J6AvV+x3PEA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: pQ1xkTN5/G4CeaDRjVGKWGxvGiA=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>2</td><td>16</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>201</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>5</td><td>1</td><td>5</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>215</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313032266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8103efbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 83c1bc2f3f2e0390</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=3, MASKED=True, MASK=6331626332663366</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882f0ca84f9f322</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6630636138346639</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_9_3.json b/autobahn/client/hornbeam_case_6_9_3.json new file mode 100644 index 0000000..e811667 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_9_3.json @@ -0,0 +1,184 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 102, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbf", + "droppedByMe": true, + "duration": 46, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\uffff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=102&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: tZt5ouxLJW9J6AvV+x3PEA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: pQ1xkTN5/G4CeaDRjVGKWGxvGiA=\r\n\r\n", + "id": "6.9.3", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\uffff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 2, + "184": 1 + }, + "started": "2023-08-10T21:35:18.265Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "5": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313032266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 3, + "\uffff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 5, + "8103efbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 8, + "83c1bc2f3f2e0390" + ] + ], + [ + "RF", + [ + 3, + "\uffff" + ], + 1, + true, + 0, + true, + "c1bc2f3f" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882f0ca84f9f322" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "f0ca84f9" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_6_9_4.html b/autobahn/client/hornbeam_case_6_9_4.html new file mode 100644 index 0000000..c4ef548 --- /dev/null +++ b/autobahn/client/hornbeam_case_6_9_4.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 6.9.4</b></span> : Pass - <span style="font-size: 0.9em;"><b>45</b> ms @ 2023-08-10T21:35:18.312Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf48fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'\U0010ffff', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'\U0010ffff', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=103&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Y/0jVwaPf7mb1DtaeCx+uw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: YCmeLoqSjcwzAwmqvTTmvV0uQ3Q=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>9</td><td>1</td><td>9</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>202</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>216</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d313033266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> </pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8104f48fbfbf</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 0.500000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 846dccbea799430118</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=4, MASKED=True, MASK=3664636362656137</pre> + <pre class="wirelog_rx_frame"> </pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 8882fe2416b9fdcc</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6665323431366239</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_6_9_4.json b/autobahn/client/hornbeam_case_6_9_4.json new file mode 100644 index 0000000..82713ad --- /dev/null +++ b/autobahn/client/hornbeam_case_6_9_4.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 103, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf48fbfbf", + "droppedByMe": true, + "duration": 45, + "expectation": "The message is echo'ed back to us.", + "expected": { + "OK": [ + [ + "message", + "\udbff\udfff", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=103&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Y/0jVwaPf7mb1DtaeCx+uw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: YCmeLoqSjcwzAwmqvTTmvV0uQ3Q=\r\n\r\n", + "id": "6.9.4", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "\udbff\udfff", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "9": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:18.312Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "6": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d313033266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 4, + "\udbff\udfff" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 6, + "8104f48fbfbf" + ], + false + ], + [ + "KL", + 0.5 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 9, + "846dccbea799430118" + ] + ], + [ + "RF", + [ + 4, + "\udbff\udfff" + ], + 1, + true, + 0, + true, + "6dccbea7" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882fe2416b9fdcc" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "fe2416b9" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_13_1.html b/autobahn/client/hornbeam_case_7_13_1.html new file mode 100644 index 0000000..ec26999 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_13_1.html @@ -0,0 +1,294 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_info">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.13.1</b></span> : Informational - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.295Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with close code 5000</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Actual events are undefined by the spec.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events are undefined by the spec.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (INFORMATIONAL)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=245&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: R9nyHTvVNLhZXdRL1vNiOg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: jedtXtxVo+tkKLHEPpN3GUHkZI0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">5000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">5000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323435266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x1388</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 88021388</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 88</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 824756b19554de</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3437353662313935</pre> + <pre class="wirelog_rx_frame"> 0x1388</pre> + <pre class="wirelog_tcp_closed_by_me">008 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_13_1.json b/autobahn/client/hornbeam_case_7_13_1.json new file mode 100644 index 0000000..75381bf --- /dev/null +++ b/autobahn/client/hornbeam_case_7_13_1.json @@ -0,0 +1,130 @@ +{ + "agent": "Hornbeam", + "behavior": "INFORMATIONAL", + "behaviorClose": "INFORMATIONAL", + "case": 245, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with close code 5000", + "droppedByMe": true, + "duration": 1, + "expectation": "Actual events are undefined by the spec.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 5000, + 1002 + ], + "closedByMe": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=245&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: R9nyHTvVNLhZXdRL1vNiOg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: jedtXtxVo+tkKLHEPpN3GUHkZI0=\r\n\r\n", + "id": "7.13.1", + "isServer": true, + "localCloseCode": 5000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 5000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events are undefined by the spec.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "7": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.295Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323435266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x1388" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "88021388" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "88" + ] + ], + [ + "RO", + [ + 7, + "824756b19554de" + ] + ], + [ + "RF", + [ + 2, + "0x1388" + ], + 8, + true, + 0, + true, + "4756b195" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_13_2.html b/autobahn/client/hornbeam_case_7_13_2.html new file mode 100644 index 0000000..e9b4aec --- /dev/null +++ b/autobahn/client/hornbeam_case_7_13_2.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_info">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.13.2</b></span> : Informational - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:52.304Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with close code 65536</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Actual events are undefined by the spec.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events are undefined by the spec.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (INFORMATIONAL)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=246&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: H411aAfy/tO4mIj5oBSfww== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 1GHwVYagQQhq27CoNwGjEJgbzEA=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">65535</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">65535</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323436266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0xffff</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8802ffff</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8882dcb8b0c12347</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6463623862306331</pre> + <pre class="wirelog_rx_frame"> 0xffff</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_13_2.json b/autobahn/client/hornbeam_case_7_13_2.json new file mode 100644 index 0000000..f6babdd --- /dev/null +++ b/autobahn/client/hornbeam_case_7_13_2.json @@ -0,0 +1,122 @@ +{ + "agent": "Hornbeam", + "behavior": "INFORMATIONAL", + "behaviorClose": "INFORMATIONAL", + "case": 246, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with close code 65536", + "droppedByMe": true, + "duration": 2, + "expectation": "Actual events are undefined by the spec.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 65535, + 1002 + ], + "closedByMe": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=246&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: H411aAfy/tO4mIj5oBSfww==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 1GHwVYagQQhq27CoNwGjEJgbzEA=\r\n\r\n", + "id": "7.13.2", + "isServer": true, + "localCloseCode": 65535, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 65535, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events are undefined by the spec.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.304Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323436266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0xffff" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "8802ffff" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "8882dcb8b0c12347" + ] + ], + [ + "RF", + [ + 2, + "0xffff" + ], + 8, + true, + 0, + true, + "dcb8b0c1" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_1_1.html b/autobahn/client/hornbeam_case_7_1_1.html new file mode 100644 index 0000000..14d24cc --- /dev/null +++ b/autobahn/client/hornbeam_case_7_1_1.html @@ -0,0 +1,304 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.1.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>44</b> ms @ 2023-08-10T21:35:51.420Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a message followed by a close frame</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echoed message followed by clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'Hello World!', False)]}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'Hello World!', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=210&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: XbGtNAn+w6AqY/e0ney/5g== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: Ac6EKQB1dQCfemPw3R7DYX1EYkk=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>17</td><td>1</td><td>17</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>210</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>224</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323130266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello World!</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 810c48656c6c6f20576f726c6421</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8c1a9424a452f148c875b473cb68f84085</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASKED=True, MASK=3161393432346134</pre> + <pre class="wirelog_rx_frame"> Hello World!</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 88823ca92d1d3f41</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3363613932643164</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">012 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_1_1.json b/autobahn/client/hornbeam_case_7_1_1.json new file mode 100644 index 0000000..0bd00ac --- /dev/null +++ b/autobahn/client/hornbeam_case_7_1_1.json @@ -0,0 +1,185 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 210, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a message followed by a close frame", + "droppedByMe": true, + "duration": 44, + "expectation": "Echoed message followed by clean close with normal code.", + "expected": { + "OK": [ + [ + "message", + "Hello World!", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=210&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: XbGtNAn+w6AqY/e0ney/5g==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: Ac6EKQB1dQCfemPw3R7DYX1EYkk=\r\n\r\n", + "id": "7.1.1", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "Hello World!", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "17": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:51.420Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323130266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 12, + "Hello World!" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "810c48656c6c6f20576f726c6421" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 17, + "8c1a9424a452f148c875b473cb68f84085" + ] + ], + [ + "RF", + [ + 12, + "Hello World!" + ], + 1, + true, + 0, + true, + "1a9424a4" + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88823ca92d1d3f41" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "3ca92d1d" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_1_2.html b/autobahn/client/hornbeam_case_7_1_2.html new file mode 100644 index 0000000..a07ea42 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_1_2.html @@ -0,0 +1,295 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.1.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:51.465Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send two close frames</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code. Second close frame ignored.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=211&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: +bK220bN7I7PS1Rva+RR4w== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: Hl76XRJxSfmTzTv5gENd4UAoyIU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>212</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>2</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323131266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203e8</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 8800</pre> + <pre class="wirelog_kill_after">006 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">007 RX OCTETS: 888217007d6014e8</pre> + <pre class="wirelog_rx_frame">008 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3137303037643630</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">009 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_1_2.json b/autobahn/client/hornbeam_case_7_1_2.json new file mode 100644 index 0000000..12275cc --- /dev/null +++ b/autobahn/client/hornbeam_case_7_1_2.json @@ -0,0 +1,143 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 211, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send two close frames", + "droppedByMe": true, + "duration": 2, + "expectation": "Clean close with normal code. Second close frame ignored.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=211&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: +bK220bN7I7PS1Rva+RR4w==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: Hl76XRJxSfmTzTv5gENd4UAoyIU=\r\n\r\n", + "id": "7.1.2", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:51.465Z", + "trafficStats": null, + "txFrameStats": { + "8": 2 + }, + "txOctetStats": { + "2": 1, + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323131266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8800" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "888217007d6014e8" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "17007d60" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_1_3.html b/autobahn/client/hornbeam_case_7_1_3.html new file mode 100644 index 0000000..c61243a --- /dev/null +++ b/autobahn/client/hornbeam_case_7_1_3.html @@ -0,0 +1,296 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.1.3</b></span> : Pass - <span style="font-size: 0.9em;"><b>3</b> ms @ 2023-08-10T21:35:51.469Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a ping after close message</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code, no pong.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=212&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: IrfanBk7LfxljK6DZ/UOlw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: CY2dKCaGHoEYVlmugd7ehKYAp/0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>212</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323132266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203e8</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 8900</pre> + <pre class="wirelog_kill_after">006 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">007 RX OCTETS: 88822ed35b992d3b</pre> + <pre class="wirelog_rx_frame">008 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3265643335623939</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">009 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_1_3.json b/autobahn/client/hornbeam_case_7_1_3.json new file mode 100644 index 0000000..5fdd984 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_1_3.json @@ -0,0 +1,144 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 212, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a ping after close message", + "droppedByMe": true, + "duration": 3, + "expectation": "Clean close with normal code, no pong.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=212&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: IrfanBk7LfxljK6DZ/UOlw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: CY2dKCaGHoEYVlmugd7ehKYAp/0=\r\n\r\n", + "id": "7.1.3", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:51.469Z", + "trafficStats": null, + "txFrameStats": { + "8": 1, + "9": 1 + }, + "txOctetStats": { + "2": 1, + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323132266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8900" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "88822ed35b992d3b" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "2ed35b99" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_1_4.html b/autobahn/client/hornbeam_case_7_1_4.html new file mode 100644 index 0000000..805fc0e --- /dev/null +++ b/autobahn/client/hornbeam_case_7_1_4.html @@ -0,0 +1,299 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.1.4</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:51.473Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message after sending a close frame.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code. Text message ignored.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=213&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 5pnZb6gXNy2cz9WccvCFyA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 06bBiPlIeu7wokKyqrLtD/dh95w=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>224</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323133266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203e8</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello World!</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 810c48656c6c6f20576f726c6421</pre> + <pre class="wirelog_kill_after">006 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">007 RX OCTETS: 88</pre> + <pre class="wirelog_rx_octets">008 RX OCTETS: 829446f0bc97ae</pre> + <pre class="wirelog_rx_frame">009 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3934343666306263</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">010 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_1_4.json b/autobahn/client/hornbeam_case_7_1_4.json new file mode 100644 index 0000000..59d56c8 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_1_4.json @@ -0,0 +1,152 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 213, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message after sending a close frame.", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with normal code. Text message ignored.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=213&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 5pnZb6gXNy2cz9WccvCFyA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 06bBiPlIeu7wokKyqrLtD/dh95w=\r\n\r\n", + "id": "7.1.4", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "7": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:51.473Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "14": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323133266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "TF", + [ + 12, + "Hello World!" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "810c48656c6c6f20576f726c6421" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "88" + ] + ], + [ + "RO", + [ + 7, + "829446f0bc97ae" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "9446f0bc" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_1_5.html b/autobahn/client/hornbeam_case_7_1_5.html new file mode 100644 index 0000000..eadc3e9 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_1_5.html @@ -0,0 +1,306 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.1.5</b></span> : Fail - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:51.475Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send message fragment1 followed by close then fragment</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events differ from any expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[('message', u'fragment1', False)]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=214&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: GNSjtuMa0gPjwTtgqGX0UA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: Y3ddztMBsh9eFHSYRo/FyYgwpt4=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>22</td><td>1</td><td>22</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>207</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>11</td><td>2</td><td>22</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>232</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>0</td><td>1</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323134266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=False, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment1</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 0109667261676d656e7431</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 880203e8</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=0, FIN=True, RSV=0, PAYLOAD-LEN=9, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> fragment2</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 8009667261676d656e7432</pre> + <pre class="wirelog_kill_after">008 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">009 RX OCTETS: 81</pre> + <pre class="wirelog_rx_octets">010 RX OCTETS: 891180211a77f2407d7ce54f6e208882e99d49b9ea75</pre> + <pre class="wirelog_rx_frame">011 RX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=9, MASKED=True, MASK=3131383032313161</pre> + <pre class="wirelog_rx_frame"> fragment1</pre> + <pre class="wirelog_rx_frame">012 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6539396434396239</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">013 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_1_5.json b/autobahn/client/hornbeam_case_7_1_5.json new file mode 100644 index 0000000..9abe0ad --- /dev/null +++ b/autobahn/client/hornbeam_case_7_1_5.json @@ -0,0 +1,194 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "OK", + "case": 214, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send message fragment1 followed by close then fragment", + "droppedByMe": true, + "duration": 2, + "expectation": "Clean close with normal code.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=214&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: GNSjtuMa0gPjwTtgqGX0UA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: Y3ddztMBsh9eFHSYRo/FyYgwpt4=\r\n\r\n", + "id": "7.1.5", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [ + [ + "message", + "fragment1", + false + ] + ], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events differ from any expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "22": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:51.475Z", + "trafficStats": null, + "txFrameStats": { + "0": 1, + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "11": 2, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323134266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 9, + "fragment1" + ], + 1, + false, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "0109667261676d656e7431" + ], + false + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "TF", + [ + 9, + "fragment2" + ], + 0, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 11, + "8009667261676d656e7432" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "81" + ] + ], + [ + "RO", + [ + 22, + "891180211a77f2407d7ce54f6e208882e99d49b9ea75" + ] + ], + [ + "RF", + [ + 9, + "fragment1" + ], + 1, + true, + 0, + true, + "1180211a" + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "e99d49b9" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_1_6.html b/autobahn/client/hornbeam_case_7_1_6.html new file mode 100644 index 0000000..2149f9f --- /dev/null +++ b/autobahn/client/hornbeam_case_7_1_6.html @@ -0,0 +1,319 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_info">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.1.6</b></span> : Informational - <span style="font-size: 0.9em;"><b>723</b> ms @ 2023-08-10T21:35:51.478Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 256K message followed by close then a ping</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Case outcome depends on implementation defined close behavior. Message and close frame are sent back to back. If the close frame is processed before the text message write is complete (as can happen in asynchronous processing models) the close frame is processed first and the text message may not be received or may only be partially recieved.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Close was processed before text message could be returned.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': [('message', u'Hello World!', False)], 'NON-STRICT': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The spec requires the connection to be failed cleanly here (INFORMATIONAL)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=215&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: gtuj/GR6WG//yd/VdXUKvg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 16RmqdfxLEPZBd+4NucYuSPaxhU=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">False</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer dropped the TCP connection without previous WebSocket closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_row"><td>7241</td><td>1</td><td>7241</td></tr> + <tr class="stats_row"><td>23168</td><td>1</td><td>23168</td></tr> + <tr class="stats_row"><td>46336</td><td>1</td><td>46336</td></tr> + <tr class="stats_row"><td>56152</td><td>1</td><td>56152</td></tr> + <tr class="stats_row"><td>63712</td><td>1</td><td>63712</td></tr> + <tr class="stats_row"><td>65536</td><td>1</td><td>65536</td></tr> + <tr class="stats_total"><td>Total</td><td>7</td><td>262329</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>14</td><td>1</td><td>14</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>262154</td><td>1</td><td>262154</td></tr> + <tr class="stats_total"><td>Total</td><td>5</td><td>262380</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_row"><td>9</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323135266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=10, MASK=None, PAYLOAD-REPEAT-LEN=262144, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> BAsd7&jh23</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 817f00000000000400004241736437266a6832334241736437266a6832334241736437266a6832334241736437266a683233</pre> + <pre class="wirelog_tx_octets"> 4241736437266a68323342417364 ...</pre> + <pre class="wirelog_tx_frame">004 TX FRAME : OPCODE=1, FIN=True, RSV=0, PAYLOAD-LEN=12, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> Hello World!</pre> + <pre class="wirelog_tx_octets">005 TX OCTETS: 810c48656c6c6f20576f726c6421</pre> + <pre class="wirelog_tx_frame">006 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">007 TX OCTETS: 880203e8</pre> + <pre class="wirelog_tx_frame">008 TX FRAME : OPCODE=9, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">009 TX OCTETS: 8900</pre> + <pre class="wirelog_kill_after">010 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">011 RX OCTETS: 81ff0000000000040000e73b58dea57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff8</pre> + <pre class="wirelog_rx_octets"> 8d536aeda57a2bbad01d32b6d508 ...</pre> + <pre class="wirelog_rx_octets">012 RX OCTETS: b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d</pre> + <pre class="wirelog_rx_octets"> 536aeda57a2bbad01d32b6d5081a ...</pre> + <pre class="wirelog_rx_octets">013 RX OCTETS: f88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad0</pre> + <pre class="wirelog_rx_octets"> 1d32b6d5081a9f945f6ff88d536a ...</pre> + <pre class="wirelog_rx_octets">014 RX OCTETS: 9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda5</pre> + <pre class="wirelog_rx_octets"> 7a2bbad01d32b6d5081a9f945f6f ...</pre> + <pre class="wirelog_rx_octets">015 RX OCTETS: bad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f94</pre> + <pre class="wirelog_rx_octets"> 5f6ff88d536aeda57a2bbad01d32 ...</pre> + <pre class="wirelog_rx_octets">016 RX OCTETS: eda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5</pre> + <pre class="wirelog_rx_octets"> 081a9f945f6ff88d536aeda57a2b ...</pre> + <pre class="wirelog_tcp_closed_by_peer">017 TCP DROPPED BY PEER</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_1_6.json b/autobahn/client/hornbeam_case_7_1_6.json new file mode 100644 index 0000000..e293c46 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_1_6.json @@ -0,0 +1,224 @@ +{ + "agent": "Hornbeam", + "behavior": "INFORMATIONAL", + "behaviorClose": "INFORMATIONAL", + "case": 215, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send 256K message followed by close then a ping", + "droppedByMe": false, + "duration": 723, + "expectation": "Case outcome depends on implementation defined close behavior. Message and close frame are sent back to back. If the close frame is processed before the text message write is complete (as can happen in asynchronous processing models) the close frame is processed first and the text message may not be received or may only be partially recieved.", + "expected": { + "NON-STRICT": [], + "OK": [ + [ + "message", + "Hello World!", + false + ] + ] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=215&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: gtuj/GR6WG//yd/VdXUKvg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 16RmqdfxLEPZBd+4NucYuSPaxhU=\r\n\r\n", + "id": "7.1.6", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Close was processed before text message could be returned.", + "resultClose": "The spec requires the connection to be failed cleanly here", + "rxFrameStats": {}, + "rxOctetStats": { + "184": 1, + "7241": 1, + "23168": 1, + "46336": 1, + "56152": 1, + "63712": 1, + "65536": 1 + }, + "started": "2023-08-10T21:35:51.478Z", + "trafficStats": null, + "txFrameStats": { + "1": 2, + "8": 1, + "9": 1 + }, + "txOctetStats": { + "2": 1, + "4": 1, + "14": 1, + "206": 1, + "262154": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": "peer dropped the TCP connection without previous WebSocket closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323135266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 10, + "BAsd7&jh23" + ], + 1, + true, + 0, + null, + 262144, + null, + false + ], + [ + "TO", + [ + 262154, + "817f00000000000400004241736437266a6832334241736437266a6832334241736437266a6832334241736437266a6832334241736437266a68323342417364 ..." + ], + false + ], + [ + "TF", + [ + 12, + "Hello World!" + ], + 1, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 14, + "810c48656c6c6f20576f726c6421" + ], + false + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 9, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8900" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 7241, + "81ff0000000000040000e73b58dea57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d508 ..." + ] + ], + [ + "RO", + [ + 23168, + "b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a ..." + ] + ], + [ + "RO", + [ + 46336, + "f88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536a ..." + ] + ], + [ + "RO", + [ + 63712, + "9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6f ..." + ] + ], + [ + "RO", + [ + 65536, + "bad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32 ..." + ] + ], + [ + "RO", + [ + 56152, + "eda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2bbad01d32b6d5081a9f945f6ff88d536aeda57a2b ..." + ] + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_3_1.html b/autobahn/client/hornbeam_case_7_3_1.html new file mode 100644 index 0000000..fd35a9a --- /dev/null +++ b/autobahn/client/hornbeam_case_7_3_1.html @@ -0,0 +1,290 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.3.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>3</b> ms @ 2023-08-10T21:35:52.200Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a close frame with payload length 0 (no close code, no close reason)</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=216&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 3miD7zULPjjxqY/glhW1rg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: P1udRXe8JbhoiO2zgOoslD0vNlk=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>6</td><td>1</td><td>6</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>190</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>208</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323136266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8800</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8880e934f721</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=0, MASKED=True, MASK=6539333466373231</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_3_1.json b/autobahn/client/hornbeam_case_7_3_1.json new file mode 100644 index 0000000..80d35ea --- /dev/null +++ b/autobahn/client/hornbeam_case_7_3_1.json @@ -0,0 +1,120 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 216, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a close frame with payload length 0 (no close code, no close reason)", + "droppedByMe": true, + "duration": 3, + "expectation": "Clean close with normal code.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=216&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 3miD7zULPjjxqY/glhW1rg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: P1udRXe8JbhoiO2zgOoslD0vNlk=\r\n\r\n", + "id": "7.3.1", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "6": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.200Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "2": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323136266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 0, + "" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 2, + "8800" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 6, + "8880e934f721" + ] + ], + [ + "RF", + [ + 0, + "" + ], + 8, + true, + 0, + true, + "e934f721" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_3_2.html b/autobahn/client/hornbeam_case_7_3_2.html new file mode 100644 index 0000000..d7e75b7 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_3_2.html @@ -0,0 +1,289 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.3.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.203Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a close frame with payload length 1</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error or drop TCP.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=217&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: btp/CdoVhHf6Zw1KW73P2w== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: PDbf28JuU/G8NHocbQsFYm7Anhw=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">a</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>191</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>3</td><td>1</td><td>3</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>209</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323137266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=1, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> a</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880161</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 88816c73320e0d</pre> + <pre class="wirelog_tcp_closed_by_me">006 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_3_2.json b/autobahn/client/hornbeam_case_7_3_2.json new file mode 100644 index 0000000..aaa2335 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_3_2.json @@ -0,0 +1,106 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 217, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a close frame with payload length 1", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with protocol error or drop TCP.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=217&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: btp/CdoVhHf6Zw1KW73P2w==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: PDbf28JuU/G8NHocbQsFYm7Anhw=\r\n\r\n", + "id": "7.3.2", + "isServer": true, + "localCloseCode": null, + "localCloseReason": "a", + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "7": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.203Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "3": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323137266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 1, + "a" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 3, + "880161" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 7, + "88816c73320e0d" + ] + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_3_3.html b/autobahn/client/hornbeam_case_7_3_3.html new file mode 100644 index 0000000..b7a2304 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_3_3.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.3.3</b></span> : Pass - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:52.206Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a close frame with payload length 2 (regular close with a code)</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=218&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: ti4PiJL/W6DJ74BwjOJgNw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 0KmEL9zF45O5e01RWDADOt1iOsw=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323138266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203e8</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8882001373e003fb</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3030313337336530</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_3_3.json b/autobahn/client/hornbeam_case_7_3_3.json new file mode 100644 index 0000000..21c4a01 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_3_3.json @@ -0,0 +1,120 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 218, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a close frame with payload length 2 (regular close with a code)", + "droppedByMe": true, + "duration": 2, + "expectation": "Clean close with normal code.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=218&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: ti4PiJL/W6DJ74BwjOJgNw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 0KmEL9zF45O5e01RWDADOt1iOsw=\r\n\r\n", + "id": "7.3.3", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.206Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323138266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "8882001373e003fb" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "001373e0" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_3_4.html b/autobahn/client/hornbeam_case_7_3_4.html new file mode 100644 index 0000000..f5f926b --- /dev/null +++ b/autobahn/client/hornbeam_case_7_3_4.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.3.4</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.209Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a close frame with close code and close reason</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=219&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: DC2o+wxWBtCerfgA+6v7kw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: tr3B+Nco7NpjbaaTbYfNhv3GldE=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">Hello World!</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">Hello World!</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>20</td><td>1</td><td>20</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>204</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>16</td><td>1</td><td>16</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>222</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323139266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=14, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e848656c6c6f20576f726c6421</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880e03e848656c6c6f20576f726c6421</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 888e7a4dd0c779a598a21621bfe72d22a2ab1e6c</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=14, MASKED=True, MASK=3761346464306337</pre> + <pre class="wirelog_rx_frame"> 0x03e848656c6c6f20576f726c6421</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_3_4.json b/autobahn/client/hornbeam_case_7_3_4.json new file mode 100644 index 0000000..dd88d40 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_3_4.json @@ -0,0 +1,120 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 219, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a close frame with close code and close reason", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with normal code.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=219&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: DC2o+wxWBtCerfgA+6v7kw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: tr3B+Nco7NpjbaaTbYfNhv3GldE=\r\n\r\n", + "id": "7.3.4", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": "Hello World!", + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": "Hello World!", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "20": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.209Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "16": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323139266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 14, + "0x03e848656c6c6f20576f726c6421" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 16, + "880e03e848656c6c6f20576f726c6421" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 20, + "888e7a4dd0c779a598a21621bfe72d22a2ab1e6c" + ] + ], + [ + "RF", + [ + 14, + "0x03e848656c6c6f20576f726c6421" + ], + 8, + true, + 0, + true, + "7a4dd0c7" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_3_5.html b/autobahn/client/hornbeam_case_7_3_5.html new file mode 100644 index 0000000..782d636 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_3_5.html @@ -0,0 +1,296 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.3.5</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.211Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a close frame with close code and close reason of maximum length (123)</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=220&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: vv8Oh30iIf2S9buQlmZt3A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 1qtBnYyOtGCzVL8MFRorsJSu5pI=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">***************************************************************************************************************************</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">***************************************************************************************************************************</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>131</td><td>1</td><td>131</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>315</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>127</td><td>1</td><td>127</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>333</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323230266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=125, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e82a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_frame"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 887d03e82a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 88fdff5779ccfcbf53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6</pre> + <pre class="wirelog_rx_octets"> d57d53e6d57d53e6d57d53e6d57d ...</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=125, MASKED=True, MASK=6666353737396363</pre> + <pre class="wirelog_rx_frame"> 0x03e82a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_rx_frame"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_3_5.json b/autobahn/client/hornbeam_case_7_3_5.json new file mode 100644 index 0000000..b77ad24 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_3_5.json @@ -0,0 +1,120 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 220, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a close frame with close code and close reason of maximum length (123)", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with normal code.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=220&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: vv8Oh30iIf2S9buQlmZt3A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 1qtBnYyOtGCzVL8MFRorsJSu5pI=\r\n\r\n", + "id": "7.3.5", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": "***************************************************************************************************************************", + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": "***************************************************************************************************************************", + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "131": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.211Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "127": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323230266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 125, + "0x03e82a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 127, + "887d03e82a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 131, + "88fdff5779ccfcbf53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d53e6d57d ..." + ] + ], + [ + "RF", + [ + 125, + "0x03e82a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + 8, + true, + 0, + true, + "ff5779cc" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_3_6.html b/autobahn/client/hornbeam_case_7_3_6.html new file mode 100644 index 0000000..501eb1a --- /dev/null +++ b/autobahn/client/hornbeam_case_7_3_6.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.3.6</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.214Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a close frame with close code and close reason which is too long (124) - total frame payload 126 octets</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or dropped TCP connection.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=221&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: sp4/07NunVN0rqKxM0uhKg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: IaWoogLZUr71L960NIXDzq72dGQ=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">****************************************************************************************************************************</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>134</td><td>1</td><td>134</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>318</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>130</td><td>1</td><td>130</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>336</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323231266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=126, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e82a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_frame"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 887e007e03e82a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a</pre> + <pre class="wirelog_tx_octets"> 2a2a2a2a2a2a2a2a2a2a2a2a2a2a ...</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 88fe007e7c5d83117fb5a93b5677a93b5677a93b5677a93b5677a93b5677a93b5677a93b5677a93b5677a93b5677a93b5677</pre> + <pre class="wirelog_rx_octets"> a93b5677a93b5677a93b5677a93b ...</pre> + <pre class="wirelog_tcp_closed_by_me">006 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_3_6.json b/autobahn/client/hornbeam_case_7_3_6.json new file mode 100644 index 0000000..24d795a --- /dev/null +++ b/autobahn/client/hornbeam_case_7_3_6.json @@ -0,0 +1,106 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 221, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a close frame with close code and close reason which is too long (124) - total frame payload 126 octets", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with protocol error code or dropped TCP connection.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=221&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: sp4/07NunVN0rqKxM0uhKg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: IaWoogLZUr71L960NIXDzq72dGQ=\r\n\r\n", + "id": "7.3.6", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": "****************************************************************************************************************************", + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": {}, + "rxOctetStats": { + "134": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.214Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "130": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323231266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 126, + "0x03e82a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 130, + "887e007e03e82a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a ..." + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 134, + "88fe007e7c5d83117fb5a93b5677a93b5677a93b5677a93b5677a93b5677a93b5677a93b5677a93b5677a93b5677a93b5677a93b5677a93b5677a93b5677a93b ..." + ] + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_5_1.html b/autobahn/client/hornbeam_case_7_5_1.html new file mode 100644 index 0000000..815501d --- /dev/null +++ b/autobahn/client/hornbeam_case_7_5_1.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.5.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.216Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a close frame with invalid UTF8 payload</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error or invalid utf8 code or dropped TCP.</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>The close code should have been 1002,1007 or empty<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The close code should have been 1002,1007 or empty (WRONG CODE)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=222&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: IlD9cxc4Ul3jSiv+TNBiLw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 8tNGwdql1kPvC6eWez/QDASvdgQ=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">cebae1bdb9cf83cebcceb5eda080656469746564</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">κόσμε���edited</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>28</td><td>1</td><td>28</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>212</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>24</td><td>1</td><td>24</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>230</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323232266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=22, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8cebae1bdb9cf83cebcceb5eda080656469746564</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 881603e8cebae1bdb9cf83cebcceb5eda080656469746564</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8896d59211cdd67adf77342fa802565cad03607fb14db0f678b9b0f6</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=22, MASKED=True, MASK=6435393231316364</pre> + <pre class="wirelog_rx_frame"> 0x03e8cebae1bdb9cf83cebcceb5eda080656469746564</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_5_1.json b/autobahn/client/hornbeam_case_7_5_1.json new file mode 100644 index 0000000..e4aab42 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_5_1.json @@ -0,0 +1,121 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "case": 222, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send a close frame with invalid UTF8 payload", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with protocol error or invalid utf8 code or dropped TCP.", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002, + 1007 + ], + "closedByMe": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=222&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: IlD9cxc4Ul3jSiv+TNBiLw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 8tNGwdql1kPvC6eWez/QDASvdgQ=\r\n\r\n", + "id": "7.5.1", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": "cebae1bdb9cf83cebcceb5eda080656469746564", + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": "\u03ba\u1f79\u03c3\u03bc\u03b5\ud800edited", + "reportCompressionRatio": false, + "reportTime": false, + "result": "The close code should have been 1002,1007 or empty", + "resultClose": "The close code should have been 1002,1007 or empty", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "28": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.216Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "24": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323232266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 22, + "0x03e8cebae1bdb9cf83cebcceb5eda080656469746564" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 24, + "881603e8cebae1bdb9cf83cebcceb5eda080656469746564" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 28, + "8896d59211cdd67adf77342fa802565cad03607fb14db0f678b9b0f6" + ] + ], + [ + "RF", + [ + 22, + "0x03e8cebae1bdb9cf83cebcceb5eda080656469746564" + ], + 8, + true, + 0, + true, + "d59211cd" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_7_1.html b/autobahn/client/hornbeam_case_7_7_1.html new file mode 100644 index 0000000..45fa30a --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_1.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.7.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.219Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1000</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=223&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: pN6TZlVB8urlmkOTDDpkqg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 2YE69rWLbtJm79FxS+KogM+uwpg=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323233266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203e8</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 88825f7504415c9d</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3566373530343431</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_7_1.json b/autobahn/client/hornbeam_case_7_7_1.json new file mode 100644 index 0000000..5adb285 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_1.json @@ -0,0 +1,121 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 223, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with valid close code 1000", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with normal or echoed code", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=223&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: pN6TZlVB8urlmkOTDDpkqg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 2YE69rWLbtJm79FxS+KogM+uwpg=\r\n\r\n", + "id": "7.7.1", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.219Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323233266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "88825f7504415c9d" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "5f750441" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_7_10.html b/autobahn/client/hornbeam_case_7_7_10.html new file mode 100644 index 0000000..1ff2985 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_10.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.7.10</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.251Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 3000</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=232&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: vU56We8MQhtjg8SoWXddJw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: iYWTmTimPWXkfMesnDlFdbDLGwM=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">3000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">3000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323332266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x0bb8</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 88020bb8</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8882930c9d3e98b4</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3933306339643365</pre> + <pre class="wirelog_rx_frame"> 0x0bb8</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_7_10.json b/autobahn/client/hornbeam_case_7_7_10.json new file mode 100644 index 0000000..2735e5b --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_10.json @@ -0,0 +1,121 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 232, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with valid close code 3000", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with normal or echoed code", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 3000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=232&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: vU56We8MQhtjg8SoWXddJw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: iYWTmTimPWXkfMesnDlFdbDLGwM=\r\n\r\n", + "id": "7.7.10", + "isServer": true, + "localCloseCode": 3000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 3000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.251Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323332266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x0bb8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "88020bb8" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "8882930c9d3e98b4" + ] + ], + [ + "RF", + [ + 2, + "0x0bb8" + ], + 8, + true, + 0, + true, + "930c9d3e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_7_11.html b/autobahn/client/hornbeam_case_7_7_11.html new file mode 100644 index 0000000..a9fadfe --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_11.html @@ -0,0 +1,294 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.7.11</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.256Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 3999</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=233&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Ollg39ZbYtuTf+4YQ8ORVg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: cVefj02DxSJI9ZGplceQFtOH1KA=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">3999</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">3999</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323333266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x0f9f</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 88020f9f</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 88</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 82be22d365b1bd</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6265323264333635</pre> + <pre class="wirelog_rx_frame"> 0x0f9f</pre> + <pre class="wirelog_tcp_closed_by_me">008 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_7_11.json b/autobahn/client/hornbeam_case_7_7_11.json new file mode 100644 index 0000000..71c7322 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_11.json @@ -0,0 +1,129 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 233, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with valid close code 3999", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with normal or echoed code", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 3999 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=233&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Ollg39ZbYtuTf+4YQ8ORVg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: cVefj02DxSJI9ZGplceQFtOH1KA=\r\n\r\n", + "id": "7.7.11", + "isServer": true, + "localCloseCode": 3999, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 3999, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "7": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.256Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323333266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x0f9f" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "88020f9f" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "88" + ] + ], + [ + "RO", + [ + 7, + "82be22d365b1bd" + ] + ], + [ + "RF", + [ + 2, + "0x0f9f" + ], + 8, + true, + 0, + true, + "be22d365" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_7_12.html b/autobahn/client/hornbeam_case_7_7_12.html new file mode 100644 index 0000000..2117d57 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_12.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.7.12</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.259Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 4000</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=234&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: P4S3Ar2V0sWtbOp+7W39gg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: bqm08j+iCCkdT+IN7riozvI1SVw=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">4000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">4000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323334266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x0fa0</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 88020fa0</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8882a53c25d8aa9c</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6135336332356438</pre> + <pre class="wirelog_rx_frame"> 0x0fa0</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_7_12.json b/autobahn/client/hornbeam_case_7_7_12.json new file mode 100644 index 0000000..1f521fd --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_12.json @@ -0,0 +1,121 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 234, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with valid close code 4000", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with normal or echoed code", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 4000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=234&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: P4S3Ar2V0sWtbOp+7W39gg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: bqm08j+iCCkdT+IN7riozvI1SVw=\r\n\r\n", + "id": "7.7.12", + "isServer": true, + "localCloseCode": 4000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 4000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.259Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323334266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x0fa0" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "88020fa0" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "8882a53c25d8aa9c" + ] + ], + [ + "RF", + [ + 2, + "0x0fa0" + ], + 8, + true, + 0, + true, + "a53c25d8" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_7_13.html b/autobahn/client/hornbeam_case_7_7_13.html new file mode 100644 index 0000000..35e9153 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_13.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.7.13</b></span> : Pass - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:52.261Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 4999</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=235&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: r0445SaztG/rl1MJPB+BQQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: LXP1oqjRqwwKG/yze7kF1k3MaMs=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">4999</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">4999</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323335266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x1387</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 88021387</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8882138eaa9d0009</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3133386561613964</pre> + <pre class="wirelog_rx_frame"> 0x1387</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_7_13.json b/autobahn/client/hornbeam_case_7_7_13.json new file mode 100644 index 0000000..eacb38f --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_13.json @@ -0,0 +1,121 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 235, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with valid close code 4999", + "droppedByMe": true, + "duration": 2, + "expectation": "Clean close with normal or echoed code", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 4999 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=235&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: r0445SaztG/rl1MJPB+BQQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: LXP1oqjRqwwKG/yze7kF1k3MaMs=\r\n\r\n", + "id": "7.7.13", + "isServer": true, + "localCloseCode": 4999, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 4999, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.261Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323335266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x1387" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "88021387" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "8882138eaa9d0009" + ] + ], + [ + "RF", + [ + 2, + "0x1387" + ], + 8, + true, + 0, + true, + "138eaa9d" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_7_2.html b/autobahn/client/hornbeam_case_7_7_2.html new file mode 100644 index 0000000..5866cc1 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_2.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.7.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:52.225Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1001</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=224&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: ptIlNVgdzdOh85h2ZiKwdQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: GPkq2d/hw2C8P8aI1M1CsXGX8Ac=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1001</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1001</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323234266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e9</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203e9</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 888201066a6e02ef</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3031303636613665</pre> + <pre class="wirelog_rx_frame"> 0x03e9</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_7_2.json b/autobahn/client/hornbeam_case_7_7_2.json new file mode 100644 index 0000000..b138bc5 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_2.json @@ -0,0 +1,121 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 224, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with valid close code 1001", + "droppedByMe": true, + "duration": 2, + "expectation": "Clean close with normal or echoed code", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 1001 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=224&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: ptIlNVgdzdOh85h2ZiKwdQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: GPkq2d/hw2C8P8aI1M1CsXGX8Ac=\r\n\r\n", + "id": "7.7.2", + "isServer": true, + "localCloseCode": 1001, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1001, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.225Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323234266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03e9" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e9" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "888201066a6e02ef" + ] + ], + [ + "RF", + [ + 2, + "0x03e9" + ], + 8, + true, + 0, + true, + "01066a6e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_7_3.html b/autobahn/client/hornbeam_case_7_7_3.html new file mode 100644 index 0000000..12502ca --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_3.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.7.3</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.228Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1002</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=225&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: tQgmUlUsYQi2A4TzMTUrzQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: L4XbaBr82wbPvJ2JdmSamszou18=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1002</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1002</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323235266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03ea</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203ea</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 888277182bd874f2</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3737313832626438</pre> + <pre class="wirelog_rx_frame"> 0x03ea</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_7_3.json b/autobahn/client/hornbeam_case_7_7_3.json new file mode 100644 index 0000000..5eb5b5f --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_3.json @@ -0,0 +1,121 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 225, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with valid close code 1002", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with normal or echoed code", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 1002 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=225&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: tQgmUlUsYQi2A4TzMTUrzQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: L4XbaBr82wbPvJ2JdmSamszou18=\r\n\r\n", + "id": "7.7.3", + "isServer": true, + "localCloseCode": 1002, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1002, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.228Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323235266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03ea" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203ea" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "888277182bd874f2" + ] + ], + [ + "RF", + [ + 2, + "0x03ea" + ], + 8, + true, + 0, + true, + "77182bd8" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_7_4.html b/autobahn/client/hornbeam_case_7_7_4.html new file mode 100644 index 0000000..d23ab76 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_4.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.7.4</b></span> : Pass - <span style="font-size: 0.9em;"><b>4</b> ms @ 2023-08-10T21:35:52.231Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1003</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=226&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 5Kaiiwy7HxVAPmneHdTHZw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: Z2iF2bSfqxdlPNlOEBeW3a2+B9k=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1003</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1003</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323236266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03eb</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203eb</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8882b79e84e8b475</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6237396538346538</pre> + <pre class="wirelog_rx_frame"> 0x03eb</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_7_4.json b/autobahn/client/hornbeam_case_7_7_4.json new file mode 100644 index 0000000..d547b75 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_4.json @@ -0,0 +1,121 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 226, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with valid close code 1003", + "droppedByMe": true, + "duration": 4, + "expectation": "Clean close with normal or echoed code", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 1003 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=226&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 5Kaiiwy7HxVAPmneHdTHZw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: Z2iF2bSfqxdlPNlOEBeW3a2+B9k=\r\n\r\n", + "id": "7.7.4", + "isServer": true, + "localCloseCode": 1003, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1003, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.231Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323236266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03eb" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203eb" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "8882b79e84e8b475" + ] + ], + [ + "RF", + [ + 2, + "0x03eb" + ], + 8, + true, + 0, + true, + "b79e84e8" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_7_5.html b/autobahn/client/hornbeam_case_7_7_5.html new file mode 100644 index 0000000..6eb12db --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_5.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.7.5</b></span> : Pass - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:52.236Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1007</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=227&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: 9uJIu3zcHAVsvQoU8fZr0Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: CQDfEfaaEifXlzvH91FPVixSWCQ=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1007</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1007</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323237266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03ef</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203ef</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 888297bbf5f59454</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3937626266356635</pre> + <pre class="wirelog_rx_frame"> 0x03ef</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_7_5.json b/autobahn/client/hornbeam_case_7_7_5.json new file mode 100644 index 0000000..bf8e972 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_5.json @@ -0,0 +1,121 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 227, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with valid close code 1007", + "droppedByMe": true, + "duration": 2, + "expectation": "Clean close with normal or echoed code", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 1007 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=227&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: 9uJIu3zcHAVsvQoU8fZr0Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: CQDfEfaaEifXlzvH91FPVixSWCQ=\r\n\r\n", + "id": "7.7.5", + "isServer": true, + "localCloseCode": 1007, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1007, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.236Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323237266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03ef" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203ef" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "888297bbf5f59454" + ] + ], + [ + "RF", + [ + 2, + "0x03ef" + ], + 8, + true, + 0, + true, + "97bbf5f5" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_7_6.html b/autobahn/client/hornbeam_case_7_7_6.html new file mode 100644 index 0000000..0be1a51 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_6.html @@ -0,0 +1,294 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.7.6</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.239Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1008</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=228&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Vk0tec6f0MkAiCuB9yHInQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 2x3TYihx9zSc14KN9m69PApyQUY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1008</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1008</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323238266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03f0</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203f0</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 88</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 82b49d3d1eb76d</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6234396433643165</pre> + <pre class="wirelog_rx_frame"> 0x03f0</pre> + <pre class="wirelog_tcp_closed_by_me">008 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_7_6.json b/autobahn/client/hornbeam_case_7_7_6.json new file mode 100644 index 0000000..ef17ef5 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_6.json @@ -0,0 +1,129 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 228, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with valid close code 1008", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with normal or echoed code", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 1008 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=228&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Vk0tec6f0MkAiCuB9yHInQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 2x3TYihx9zSc14KN9m69PApyQUY=\r\n\r\n", + "id": "7.7.6", + "isServer": true, + "localCloseCode": 1008, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1008, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "7": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.239Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323238266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03f0" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203f0" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "88" + ] + ], + [ + "RO", + [ + 7, + "82b49d3d1eb76d" + ] + ], + [ + "RF", + [ + 2, + "0x03f0" + ], + 8, + true, + 0, + true, + "b49d3d1e" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_7_7.html b/autobahn/client/hornbeam_case_7_7_7.html new file mode 100644 index 0000000..3b6af26 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_7.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.7.7</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.242Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1009</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=229&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: afcE4+qLhaRTYJ8nVXDojw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: MvVidRqZiyDHvWmuapmAQqDgD8Y=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1009</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1009</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323239266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03f1</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203f1</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 888225b6e8c92647</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3235623665386339</pre> + <pre class="wirelog_rx_frame"> 0x03f1</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_7_7.json b/autobahn/client/hornbeam_case_7_7_7.json new file mode 100644 index 0000000..78dd335 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_7.json @@ -0,0 +1,121 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 229, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with valid close code 1009", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with normal or echoed code", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 1009 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=229&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: afcE4+qLhaRTYJ8nVXDojw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: MvVidRqZiyDHvWmuapmAQqDgD8Y=\r\n\r\n", + "id": "7.7.7", + "isServer": true, + "localCloseCode": 1009, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1009, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.242Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323239266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03f1" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203f1" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "888225b6e8c92647" + ] + ], + [ + "RF", + [ + 2, + "0x03f1" + ], + 8, + true, + 0, + true, + "25b6e8c9" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_7_8.html b/autobahn/client/hornbeam_case_7_7_8.html new file mode 100644 index 0000000..50f22c1 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_8.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.7.8</b></span> : Pass - <span style="font-size: 0.9em;"><b>3</b> ms @ 2023-08-10T21:35:52.245Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1010</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=230&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: rFsW1qzI+m/XGH5Xj80Oww== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 3LgMx+xgMmzfcqlC8oUqxDhCpVc=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1010</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1010</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323330266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03f2</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203f2</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8882afaddd91ac5f</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6166616464643931</pre> + <pre class="wirelog_rx_frame"> 0x03f2</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_7_8.json b/autobahn/client/hornbeam_case_7_7_8.json new file mode 100644 index 0000000..7dabb8c --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_8.json @@ -0,0 +1,121 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 230, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with valid close code 1010", + "droppedByMe": true, + "duration": 3, + "expectation": "Clean close with normal or echoed code", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 1010 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=230&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: rFsW1qzI+m/XGH5Xj80Oww==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 3LgMx+xgMmzfcqlC8oUqxDhCpVc=\r\n\r\n", + "id": "7.7.8", + "isServer": true, + "localCloseCode": 1010, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1010, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.245Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323330266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03f2" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203f2" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "8882afaddd91ac5f" + ] + ], + [ + "RF", + [ + 2, + "0x03f2" + ], + 8, + true, + 0, + true, + "afaddd91" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_7_9.html b/autobahn/client/hornbeam_case_7_7_9.html new file mode 100644 index 0000000..fce71b3 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_9.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.7.9</b></span> : Pass - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.249Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1011</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Actual events match at least one expected.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=231&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: gq+x4nK95w4sSxdlfYyHJQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 0Oa51dwBoGimjfroOp1fd8vismQ=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1011</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1011</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323331266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03f3</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203f3</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8882468ffe43457c</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3436386666653433</pre> + <pre class="wirelog_rx_frame"> 0x03f3</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_7_9.json b/autobahn/client/hornbeam_case_7_7_9.json new file mode 100644 index 0000000..6a6ef36 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_7_9.json @@ -0,0 +1,121 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 231, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with valid close code 1011", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with normal or echoed code", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1000, + 1011 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=231&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: gq+x4nK95w4sSxdlfYyHJQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 0Oa51dwBoGimjfroOp1fd8vismQ=\r\n\r\n", + "id": "7.7.9", + "isServer": true, + "localCloseCode": 1011, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1011, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "Actual events match at least one expected.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.249Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323331266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03f3" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203f3" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "8882468ffe43457c" + ] + ], + [ + "RF", + [ + 2, + "0x03f3" + ], + 8, + true, + 0, + true, + "468ffe43" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_9_1.html b/autobahn/client/hornbeam_case_7_9_1.html new file mode 100644 index 0000000..3d9c8bf --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_1.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.9.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.264Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 0</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>The close code should have been 1002 or empty<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The close code should have been 1002 or empty (WRONG CODE)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=236&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: +D2oX+2yqNXrvi/M3Leoxw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: R1Hz7EewaAMviurhyrdcrcuN4NE=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">0</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">0</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323336266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> ��</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 88020000</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 88821a12502f1a12</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3161313235303266</pre> + <pre class="wirelog_rx_frame"> ��</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_9_1.json b/autobahn/client/hornbeam_case_7_9_1.json new file mode 100644 index 0000000..f214f38 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_1.json @@ -0,0 +1,120 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "case": 236, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with invalid close code 0", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with protocol error code or drop TCP", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=236&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: +D2oX+2yqNXrvi/M3Leoxw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: R1Hz7EewaAMviurhyrdcrcuN4NE=\r\n\r\n", + "id": "7.9.1", + "isServer": true, + "localCloseCode": 0, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 0, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "The close code should have been 1002 or empty", + "resultClose": "The close code should have been 1002 or empty", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.264Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323336266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "\u0000\u0000" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "88020000" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "88821a12502f1a12" + ] + ], + [ + "RF", + [ + 2, + "\u0000\u0000" + ], + 8, + true, + 0, + true, + "1a12502f" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_9_2.html b/autobahn/client/hornbeam_case_7_9_2.html new file mode 100644 index 0000000..e5da9b3 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_2.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.9.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:52.268Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 999</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>The close code should have been 1002 or empty<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The close code should have been 1002 or empty (WRONG CODE)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=237&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: hVhHFwcPiT0/MbjMQPEX0A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: EoX8Bf2d9xpHX74cig26Gu67FNk=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">999</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">999</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323337266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e7</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203e7</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8882deced62ddd29</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6465636564363264</pre> + <pre class="wirelog_rx_frame"> 0x03e7</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_9_2.json b/autobahn/client/hornbeam_case_7_9_2.json new file mode 100644 index 0000000..6ed2fa8 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_2.json @@ -0,0 +1,120 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "case": 237, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with invalid close code 999", + "droppedByMe": true, + "duration": 2, + "expectation": "Clean close with protocol error code or drop TCP", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=237&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: hVhHFwcPiT0/MbjMQPEX0A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: EoX8Bf2d9xpHX74cig26Gu67FNk=\r\n\r\n", + "id": "7.9.2", + "isServer": true, + "localCloseCode": 999, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 999, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "The close code should have been 1002 or empty", + "resultClose": "The close code should have been 1002 or empty", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.268Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323337266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03e7" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e7" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "8882deced62ddd29" + ] + ], + [ + "RF", + [ + 2, + "0x03e7" + ], + 8, + true, + 0, + true, + "deced62d" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_9_3.html b/autobahn/client/hornbeam_case_7_9_3.html new file mode 100644 index 0000000..88f84cd --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_3.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.9.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:52.270Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 1004</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>The close code should have been 1002 or empty<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The close code should have been 1002 or empty (WRONG CODE)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=238&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: FGh6nZ7tOdna0+k4ogGL0Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: VKLedpOrEJcz33brT4+C1FssjIg=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1004</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1004</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323338266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03ec</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203ec</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 88823183cf0c326f</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3331383363663063</pre> + <pre class="wirelog_rx_frame"> 0x03ec</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_9_3.json b/autobahn/client/hornbeam_case_7_9_3.json new file mode 100644 index 0000000..c2940c4 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_3.json @@ -0,0 +1,120 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "case": 238, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with invalid close code 1004", + "droppedByMe": true, + "duration": 2, + "expectation": "Clean close with protocol error code or drop TCP", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=238&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: FGh6nZ7tOdna0+k4ogGL0Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: VKLedpOrEJcz33brT4+C1FssjIg=\r\n\r\n", + "id": "7.9.3", + "isServer": true, + "localCloseCode": 1004, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1004, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "The close code should have been 1002 or empty", + "resultClose": "The close code should have been 1002 or empty", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.270Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323338266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03ec" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203ec" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "88823183cf0c326f" + ] + ], + [ + "RF", + [ + 2, + "0x03ec" + ], + 8, + true, + 0, + true, + "3183cf0c" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_9_4.html b/autobahn/client/hornbeam_case_7_9_4.html new file mode 100644 index 0000000..17efe9d --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_4.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.9.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:52.273Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 1005</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>The close code should have been 1002 or empty<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The close code should have been 1002 or empty (WRONG CODE)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=239&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: c+453PA81+vU+cY3UXUSvw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: a0Swc/bpNvIgkjDCMm6zjbGOCss=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1005</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1005</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323339266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03ed</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203ed</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8882edf7cbb9ee1a</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6564663763626239</pre> + <pre class="wirelog_rx_frame"> 0x03ed</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_9_4.json b/autobahn/client/hornbeam_case_7_9_4.json new file mode 100644 index 0000000..6ac348c --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_4.json @@ -0,0 +1,120 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "case": 239, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with invalid close code 1005", + "droppedByMe": true, + "duration": 2, + "expectation": "Clean close with protocol error code or drop TCP", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=239&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: c+453PA81+vU+cY3UXUSvw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: a0Swc/bpNvIgkjDCMm6zjbGOCss=\r\n\r\n", + "id": "7.9.4", + "isServer": true, + "localCloseCode": 1005, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1005, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "The close code should have been 1002 or empty", + "resultClose": "The close code should have been 1002 or empty", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.273Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323339266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03ed" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203ed" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "8882edf7cbb9ee1a" + ] + ], + [ + "RF", + [ + 2, + "0x03ed" + ], + 8, + true, + 0, + true, + "edf7cbb9" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_9_5.html b/autobahn/client/hornbeam_case_7_9_5.html new file mode 100644 index 0000000..9a1be44 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_5.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.9.5</b></span> : Fail - <span style="font-size: 0.9em;"><b>6</b> ms @ 2023-08-10T21:35:52.276Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 1006</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>The close code should have been 1002 or empty<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The close code should have been 1002 or empty (WRONG CODE)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=240&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: utRVauK3BrKpmmvMvjmr6g== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: vH7Gj2lj04JSmv1lUeyNDdxSR2M=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1006</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1006</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323430266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03ee</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203ee</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8882bbfc15f8b812</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6262666331356638</pre> + <pre class="wirelog_rx_frame"> 0x03ee</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_9_5.json b/autobahn/client/hornbeam_case_7_9_5.json new file mode 100644 index 0000000..0ff7a31 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_5.json @@ -0,0 +1,120 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "case": 240, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with invalid close code 1006", + "droppedByMe": true, + "duration": 6, + "expectation": "Clean close with protocol error code or drop TCP", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=240&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: utRVauK3BrKpmmvMvjmr6g==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: vH7Gj2lj04JSmv1lUeyNDdxSR2M=\r\n\r\n", + "id": "7.9.5", + "isServer": true, + "localCloseCode": 1006, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1006, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "The close code should have been 1002 or empty", + "resultClose": "The close code should have been 1002 or empty", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.276Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323430266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03ee" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203ee" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "8882bbfc15f8b812" + ] + ], + [ + "RF", + [ + 2, + "0x03ee" + ], + 8, + true, + 0, + true, + "bbfc15f8" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_9_6.html b/autobahn/client/hornbeam_case_7_9_6.html new file mode 100644 index 0000000..4c9724d --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_6.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.9.6</b></span> : Fail - <span style="font-size: 0.9em;"><b>3</b> ms @ 2023-08-10T21:35:52.283Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 1016</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>The close code should have been 1002 or empty<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The close code should have been 1002 or empty (WRONG CODE)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=241&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: ytBC/QxiJiGXuoqms42NDA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: w7uC5zwyDoDuOnpZ7otZkBp9FMk=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1016</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1016</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323431266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03f8</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880203f8</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 88824b096f0d48f1</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3462303936663064</pre> + <pre class="wirelog_rx_frame"> 0x03f8</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_9_6.json b/autobahn/client/hornbeam_case_7_9_6.json new file mode 100644 index 0000000..0c6a707 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_6.json @@ -0,0 +1,120 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "case": 241, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with invalid close code 1016", + "droppedByMe": true, + "duration": 3, + "expectation": "Clean close with protocol error code or drop TCP", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=241&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: ytBC/QxiJiGXuoqms42NDA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: w7uC5zwyDoDuOnpZ7otZkBp9FMk=\r\n\r\n", + "id": "7.9.6", + "isServer": true, + "localCloseCode": 1016, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1016, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "The close code should have been 1002 or empty", + "resultClose": "The close code should have been 1002 or empty", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.283Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323431266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x03f8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203f8" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "88824b096f0d48f1" + ] + ], + [ + "RF", + [ + 2, + "0x03f8" + ], + 8, + true, + 0, + true, + "4b096f0d" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_9_7.html b/autobahn/client/hornbeam_case_7_9_7.html new file mode 100644 index 0000000..dcbb933 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_7.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.9.7</b></span> : Fail - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.287Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 1100</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>The close code should have been 1002 or empty<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The close code should have been 1002 or empty (WRONG CODE)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=242&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: jWdySa6MXmjnguqRDjjf8Q== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: TfsRQWfZ7dL0FJ1elQ36dIPGy1s=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1100</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1100</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323432266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> L</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 8802044c</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 88829be139c89fad</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3962653133396338</pre> + <pre class="wirelog_rx_frame"> L</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_9_7.json b/autobahn/client/hornbeam_case_7_9_7.json new file mode 100644 index 0000000..13b4b84 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_7.json @@ -0,0 +1,120 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "case": 242, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with invalid close code 1100", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with protocol error code or drop TCP", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=242&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: jWdySa6MXmjnguqRDjjf8Q==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: TfsRQWfZ7dL0FJ1elQ36dIPGy1s=\r\n\r\n", + "id": "7.9.7", + "isServer": true, + "localCloseCode": 1100, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1100, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "The close code should have been 1002 or empty", + "resultClose": "The close code should have been 1002 or empty", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.287Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323432266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "\u0004L" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "8802044c" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "88829be139c89fad" + ] + ], + [ + "RF", + [ + 2, + "\u0004L" + ], + 8, + true, + 0, + true, + "9be139c8" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_9_8.html b/autobahn/client/hornbeam_case_7_9_8.html new file mode 100644 index 0000000..a17a6d3 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_8.html @@ -0,0 +1,292 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.9.8</b></span> : Fail - <span style="font-size: 0.9em;"><b>1</b> ms @ 2023-08-10T21:35:52.289Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 2000</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>The close code should have been 1002 or empty<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The close code should have been 1002 or empty (WRONG CODE)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=243&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: B4+zYKGzFw7VfNm9fGeA9A== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: PbZYJLCUgpPWQzQDv1wx8ot8sP4=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">2000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">2000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323433266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x07d0</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 880207d0</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8882a4b17c3fa361</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6134623137633366</pre> + <pre class="wirelog_rx_frame"> 0x07d0</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_9_8.json b/autobahn/client/hornbeam_case_7_9_8.json new file mode 100644 index 0000000..91f8b66 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_8.json @@ -0,0 +1,120 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "case": 243, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with invalid close code 2000", + "droppedByMe": true, + "duration": 1, + "expectation": "Clean close with protocol error code or drop TCP", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=243&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: B4+zYKGzFw7VfNm9fGeA9A==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: PbZYJLCUgpPWQzQDv1wx8ot8sP4=\r\n\r\n", + "id": "7.9.8", + "isServer": true, + "localCloseCode": 2000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 2000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "The close code should have been 1002 or empty", + "resultClose": "The close code should have been 1002 or empty", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "8": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.289Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323433266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x07d0" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880207d0" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 8, + "8882a4b17c3fa361" + ] + ], + [ + "RF", + [ + 2, + "0x07d0" + ], + 8, + true, + 0, + true, + "a4b17c3f" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_7_9_9.html b/autobahn/client/hornbeam_case_7_9_9.html new file mode 100644 index 0000000..0b5d2e8 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_9.html @@ -0,0 +1,294 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 7.9.9</b></span> : Fail - <span style="font-size: 0.9em;"><b>2</b> ms @ 2023-08-10T21:35:52.292Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 2999</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>The close code should have been 1002 or empty<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{'OK': []}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The close code should have been 1002 or empty (WRONG CODE)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=244&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: Eun5uLfZenf74rP3ziRCXQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: HFyrQ32G5yAoSaoOeluKY37RPxY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">2999</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">2999</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>192</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td><td>210</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323434266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_tx_frame">002 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x0bb7</pre> + <pre class="wirelog_tx_octets">003 TX OCTETS: 88020bb7</pre> + <pre class="wirelog_kill_after">004 FAIL CONNECTION AFTER 1.000000 sec</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 88</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 8238b747a43300</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3338623734376134</pre> + <pre class="wirelog_rx_frame"> 0x0bb7</pre> + <pre class="wirelog_tcp_closed_by_me">008 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_7_9_9.json b/autobahn/client/hornbeam_case_7_9_9.json new file mode 100644 index 0000000..8c6fb90 --- /dev/null +++ b/autobahn/client/hornbeam_case_7_9_9.json @@ -0,0 +1,128 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "case": 244, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send close with invalid close code 2999", + "droppedByMe": true, + "duration": 2, + "expectation": "Clean close with protocol error code or drop TCP", + "expected": { + "OK": [] + }, + "expectedClose": { + "closeCode": [ + 1002 + ], + "closedByMe": true, + "requireClean": false + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=244&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: Eun5uLfZenf74rP3ziRCXQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: HFyrQ32G5yAoSaoOeluKY37RPxY=\r\n\r\n", + "id": "7.9.9", + "isServer": true, + "localCloseCode": 2999, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 2999, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": false, + "result": "The close code should have been 1002 or empty", + "resultClose": "The close code should have been 1002 or empty", + "rxFrameStats": { + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "7": 1, + "184": 1 + }, + "started": "2023-08-10T21:35:52.292Z", + "trafficStats": null, + "txFrameStats": { + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323434266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TF", + [ + 2, + "0x0bb7" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "88020bb7" + ], + false + ], + [ + "KL", + 1 + ], + [ + "RO", + [ + 1, + "88" + ] + ], + [ + "RO", + [ + 7, + "8238b747a43300" + ] + ], + [ + "RF", + [ + 2, + "0x0bb7" + ], + 8, + true, + 0, + true, + "38b747a4" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_9_1_1.html b/autobahn/client/hornbeam_case_9_1_1.html new file mode 100644 index 0000000..aa46066 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_1_1.html @@ -0,0 +1,299 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 9.1.1</b></span> : Pass - <span style="font-size: 0.9em;"><b>176</b> ms @ 2023-08-10T21:35:52.307Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 64 * 2**10 (64k).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Received text message of length 65536.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=247&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: tRmSYBLFipYzQ9+cxt0rWQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: dB+NPL+f77D+Wso75mow89zAFKE=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_row"><td>13032</td><td>1</td><td>13032</td></tr> + <tr class="stats_row"><td>23557</td><td>1</td><td>23557</td></tr> + <tr class="stats_row"><td>28960</td><td>1</td><td>28960</td></tr> + <tr class="stats_total"><td>Total</td><td>6</td><td>65742</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>65546</td><td>1</td><td>65546</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>65756</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323437266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_kill_after">002 CLOSE CONNECTION AFTER 10.000000 sec</pre> + <pre class="wirelog_tx_frame">003 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">004 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8882c6c3e198c52b</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6336633365313938</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_9_1_1.json b/autobahn/client/hornbeam_case_9_1_1.json new file mode 100644 index 0000000..f27fd22 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_1_1.json @@ -0,0 +1,125 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 247, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message message with payload of length 64 * 2**10 (64k).", + "droppedByMe": true, + "duration": 176, + "expectation": "Receive echo'ed text message (with payload as sent).", + "expected": {}, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=247&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: tRmSYBLFipYzQ9+cxt0rWQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: dB+NPL+f77D+Wso75mow89zAFKE=\r\n\r\n", + "id": "9.1.1", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": true, + "result": "Received text message of length 65536.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "184": 1, + "13032": 1, + "23557": 1, + "28960": 1 + }, + "started": "2023-08-10T21:35:52.307Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1, + "65546": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323437266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TI", + 10 + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882c6c3e198c52b" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "c6c3e198" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_9_1_2.html b/autobahn/client/hornbeam_case_9_1_2.html new file mode 100644 index 0000000..a87c264 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_1_2.html @@ -0,0 +1,301 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 9.1.2</b></span> : Pass - <span style="font-size: 0.9em;"><b>707</b> ms @ 2023-08-10T21:35:52.484Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 256 * 2**10 (256k).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Received text message of length 262144.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=248&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: WFB1izKDbk/8lZzMt2JAVQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: dooj1nql//Gcv81581tTuuoy8OY=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>2</td><td>2</td></tr> + <tr class="stats_row"><td>7</td><td>1</td><td>7</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_row"><td>13032</td><td>1</td><td>13032</td></tr> + <tr class="stats_row"><td>23557</td><td>1</td><td>23557</td></tr> + <tr class="stats_row"><td>28960</td><td>1</td><td>28960</td></tr> + <tr class="stats_row"><td>65536</td><td>3</td><td>196608</td></tr> + <tr class="stats_total"><td>Total</td><td>10</td><td>262350</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>262154</td><td>1</td><td>262154</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>262364</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323438266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_kill_after">002 CLOSE CONNECTION AFTER 10.000000 sec</pre> + <pre class="wirelog_tx_frame">003 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">004 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 88</pre> + <pre class="wirelog_rx_octets">006 RX OCTETS: 82e8200da1ebc8</pre> + <pre class="wirelog_rx_frame">007 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=6538323030646131</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">008 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_9_1_2.json b/autobahn/client/hornbeam_case_9_1_2.json new file mode 100644 index 0000000..4ff8618 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_1_2.json @@ -0,0 +1,133 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 248, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message message with payload of length 256 * 2**10 (256k).", + "droppedByMe": true, + "duration": 707, + "expectation": "Receive echo'ed text message (with payload as sent).", + "expected": {}, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=248&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: WFB1izKDbk/8lZzMt2JAVQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: dooj1nql//Gcv81581tTuuoy8OY=\r\n\r\n", + "id": "9.1.2", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": true, + "result": "Received text message of length 262144.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 2, + "7": 1, + "184": 1, + "13032": 1, + "23557": 1, + "28960": 1, + "65536": 3 + }, + "started": "2023-08-10T21:35:52.484Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1, + "262154": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323438266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TI", + 10 + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 1, + "88" + ] + ], + [ + "RO", + [ + 7, + "82e8200da1ebc8" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "e8200da1" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_9_1_3.html b/autobahn/client/hornbeam_case_9_1_3.html new file mode 100644 index 0000000..5e39fc3 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_1_3.html @@ -0,0 +1,301 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 9.1.3</b></span> : Pass - <span style="font-size: 0.9em;"><b>3047</b> ms @ 2023-08-10T21:35:53.204Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 1 * 2**20 (1M).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Received text message of length 1048576.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=249&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: KVUdPVQ5t/Sh5egU5rCZuQ== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: NddYheD33bO/lticyPU4DP7Mo8A=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>13</td><td>1</td><td>13</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_row"><td>13032</td><td>1</td><td>13032</td></tr> + <tr class="stats_row"><td>24080</td><td>1</td><td>24080</td></tr> + <tr class="stats_row"><td>28424</td><td>1</td><td>28424</td></tr> + <tr class="stats_row"><td>65536</td><td>15</td><td>983040</td></tr> + <tr class="stats_total"><td>Total</td><td>22</td><td>1048782</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>1048586</td><td>1</td><td>1048586</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>1048796</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323439266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_kill_after">002 CLOSE CONNECTION AFTER 100.000000 sec</pre> + <pre class="wirelog_tx_frame">003 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">004 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 8882215844db22b0</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3231353834346462</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_9_1_3.json b/autobahn/client/hornbeam_case_9_1_3.json new file mode 100644 index 0000000..fc1cd11 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_1_3.json @@ -0,0 +1,127 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 249, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message message with payload of length 1 * 2**20 (1M).", + "droppedByMe": true, + "duration": 3047, + "expectation": "Receive echo'ed text message (with payload as sent).", + "expected": {}, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=249&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: KVUdPVQ5t/Sh5egU5rCZuQ==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: NddYheD33bO/lticyPU4DP7Mo8A=\r\n\r\n", + "id": "9.1.3", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": true, + "result": "Received text message of length 1048576.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "13": 1, + "184": 1, + "13032": 1, + "24080": 1, + "28424": 1, + "65536": 15 + }, + "started": "2023-08-10T21:35:53.204Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1, + "1048586": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323439266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TI", + 100 + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "8882215844db22b0" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "215844db" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_9_1_4.html b/autobahn/client/hornbeam_case_9_1_4.html new file mode 100644 index 0000000..a79caa4 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_1_4.html @@ -0,0 +1,300 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 9.1.4</b></span> : Pass - <span style="font-size: 0.9em;"><b>11433</b> ms @ 2023-08-10T21:35:56.257Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 4 * 2**20 (4M).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Received text message of length 4194304.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=250&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: DNpwCTqqmppIAYnV5Cz5RA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: pELuIG9xmbGIytpBIFzsuhPhxxs=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_row"><td>13032</td><td>1</td><td>13032</td></tr> + <tr class="stats_row"><td>24093</td><td>1</td><td>24093</td></tr> + <tr class="stats_row"><td>28424</td><td>1</td><td>28424</td></tr> + <tr class="stats_row"><td>65536</td><td>63</td><td>4128768</td></tr> + <tr class="stats_total"><td>Total</td><td>69</td><td>4194510</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>4194314</td><td>1</td><td>4194314</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>4194524</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323530266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_kill_after">002 CLOSE CONNECTION AFTER 100.000000 sec</pre> + <pre class="wirelog_tx_frame">003 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">004 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 888294bdea6d9755</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3934626465613664</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_9_1_4.json b/autobahn/client/hornbeam_case_9_1_4.json new file mode 100644 index 0000000..94c4470 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_1_4.json @@ -0,0 +1,126 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 250, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message message with payload of length 4 * 2**20 (4M).", + "droppedByMe": true, + "duration": 11433, + "expectation": "Receive echo'ed text message (with payload as sent).", + "expected": {}, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=250&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: DNpwCTqqmppIAYnV5Cz5RA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: pELuIG9xmbGIytpBIFzsuhPhxxs=\r\n\r\n", + "id": "9.1.4", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": true, + "result": "Received text message of length 4194304.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "184": 1, + "13032": 1, + "24093": 1, + "28424": 1, + "65536": 63 + }, + "started": "2023-08-10T21:35:56.257Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1, + "4194314": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323530266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TI", + 100 + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "888294bdea6d9755" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "94bdea6d" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_9_1_5.html b/autobahn/client/hornbeam_case_9_1_5.html new file mode 100644 index 0000000..084f058 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_1_5.html @@ -0,0 +1,300 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 9.1.5</b></span> : Pass - <span style="font-size: 0.9em;"><b>23670</b> ms @ 2023-08-10T21:36:07.706Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 8 * 2**20 (8M).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Received text message of length 8388608.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=251&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: aLEM7b4edfVEo9XgzI3cmg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: +iq5dJrzZM+AvFLTPYThL0IjdIo=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_row"><td>13032</td><td>1</td><td>13032</td></tr> + <tr class="stats_row"><td>23557</td><td>1</td><td>23557</td></tr> + <tr class="stats_row"><td>28960</td><td>1</td><td>28960</td></tr> + <tr class="stats_row"><td>65536</td><td>127</td><td>8323072</td></tr> + <tr class="stats_total"><td>Total</td><td>133</td><td>8388814</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>8388618</td><td>1</td><td>8388618</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>8388828</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323531266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_kill_after">002 CLOSE CONNECTION AFTER 100.000000 sec</pre> + <pre class="wirelog_tx_frame">003 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">004 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 888230ad0e953345</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3330616430653935</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_9_1_5.json b/autobahn/client/hornbeam_case_9_1_5.json new file mode 100644 index 0000000..5be6cdd --- /dev/null +++ b/autobahn/client/hornbeam_case_9_1_5.json @@ -0,0 +1,126 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 251, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message message with payload of length 8 * 2**20 (8M).", + "droppedByMe": true, + "duration": 23670, + "expectation": "Receive echo'ed text message (with payload as sent).", + "expected": {}, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=251&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: aLEM7b4edfVEo9XgzI3cmg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: +iq5dJrzZM+AvFLTPYThL0IjdIo=\r\n\r\n", + "id": "9.1.5", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": true, + "result": "Received text message of length 8388608.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "1": 1, + "8": 1, + "184": 1, + "13032": 1, + "23557": 1, + "28960": 1, + "65536": 127 + }, + "started": "2023-08-10T21:36:07.706Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1, + "8388618": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323531266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TI", + 100 + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "888230ad0e953345" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "30ad0e95" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_9_1_6.html b/autobahn/client/hornbeam_case_9_1_6.html new file mode 100644 index 0000000..ad9226b --- /dev/null +++ b/autobahn/client/hornbeam_case_9_1_6.html @@ -0,0 +1,298 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_ok">Hornbeam - <span style="font-size: 1.3em;"><b>Case 9.1.6</b></span> : Pass - <span style="font-size: 0.9em;"><b>49073</b> ms @ 2023-08-10T21:36:31.378Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 16 * 2**20 (16M).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Received text message of length 16777216.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>Connection was properly closed (OK)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=252&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: f4Hl3EC4A2Fs5EozEcoP2w== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: LDjSlPLK6eUAhlXTzS4zLSJKHiw=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">True</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1000</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">1000</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>8</td><td>1</td><td>8</td></tr> + <tr class="stats_row"><td>10</td><td>1</td><td>10</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_row"><td>65536</td><td>256</td><td>16777216</td></tr> + <tr class="stats_total"><td>Total</td><td>260</td><td>16777422</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>4</td><td>1</td><td>4</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>16777226</td><td>1</td><td>16777226</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>16777436</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323532266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_kill_after">002 CLOSE CONNECTION AFTER 100.000000 sec</pre> + <pre class="wirelog_tx_frame">003 TX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASK=None, PAYLOAD-REPEAT-LEN=None, CHOPSIZE=None, SYNC=False</pre> + <pre class="wirelog_tx_frame"> 0x03e8</pre> + <pre class="wirelog_tx_octets">004 TX OCTETS: 880203e8</pre> + <pre class="wirelog_rx_octets">005 RX OCTETS: 88821129848212c1</pre> + <pre class="wirelog_rx_frame">006 RX FRAME : OPCODE=8, FIN=True, RSV=0, PAYLOAD-LEN=2, MASKED=True, MASK=3131323938343832</pre> + <pre class="wirelog_rx_frame"> 0x03e8</pre> + <pre class="wirelog_tcp_closed_by_me">007 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_9_1_6.json b/autobahn/client/hornbeam_case_9_1_6.json new file mode 100644 index 0000000..6b37f56 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_1_6.json @@ -0,0 +1,124 @@ +{ + "agent": "Hornbeam", + "behavior": "OK", + "behaviorClose": "OK", + "case": 252, + "closedByMe": true, + "createStats": true, + "createWirelog": true, + "description": "Send text message message with payload of length 16 * 2**20 (16M).", + "droppedByMe": true, + "duration": 49073, + "expectation": "Receive echo'ed text message (with payload as sent).", + "expected": {}, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=252&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: f4Hl3EC4A2Fs5EozEcoP2w==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: LDjSlPLK6eUAhlXTzS4zLSJKHiw=\r\n\r\n", + "id": "9.1.6", + "isServer": true, + "localCloseCode": 1000, + "localCloseReason": null, + "received": [], + "remoteCloseCode": 1000, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": true, + "result": "Received text message of length 16777216.", + "resultClose": "Connection was properly closed", + "rxFrameStats": { + "1": 1, + "8": 1 + }, + "rxOctetStats": { + "4": 1, + "8": 1, + "10": 1, + "184": 1, + "65536": 256 + }, + "started": "2023-08-10T21:36:31.378Z", + "trafficStats": null, + "txFrameStats": { + "1": 1, + "8": 1 + }, + "txOctetStats": { + "4": 1, + "206": 1, + "16777226": 1 + }, + "wasClean": true, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323532266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TI", + 100 + ], + [ + "TF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + null, + null, + null, + false + ], + [ + "TO", + [ + 4, + "880203e8" + ], + false + ], + [ + "RO", + [ + 8, + "88821129848212c1" + ] + ], + [ + "RF", + [ + 2, + "0x03e8" + ], + 8, + true, + 0, + true, + "11298482" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_9_2_1.html b/autobahn/client/hornbeam_case_9_2_1.html new file mode 100644 index 0000000..68439e6 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_2_1.html @@ -0,0 +1,289 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 9.2.1</b></span> : Fail - <span style="font-size: 0.9em;"><b>227</b> ms @ 2023-08-10T21:37:20.451Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 64 * 2**10 (64k).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Did not receive message within 10 seconds.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The spec requires the connection to be failed cleanly here (UNCLEAN)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=253&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: ByRhvprmhCytfp81XT7JyA== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: DcTbL+yYSzIVVW3SuP3gQTpQQt0=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1007</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">encountered invalid UTF-8 while processing text message at payload octet index 1</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_row"><td>7241</td><td>1</td><td>7241</td></tr> + <tr class="stats_row"><td>17376</td><td>1</td><td>17376</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>24801</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>84</td><td>1</td><td>84</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>65546</td><td>1</td><td>65546</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>65836</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <p style="margin-left: 40px; color: #f00;"><i>Wire log after handshake disabled!</i></p> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323533266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_kill_after">002 CLOSE CONNECTION AFTER 10.000000 sec</pre> + <pre class="wirelog_tcp_closed_by_me">003 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_9_2_1.json b/autobahn/client/hornbeam_case_9_2_1.json new file mode 100644 index 0000000..9611b60 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_2_1.json @@ -0,0 +1,78 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "UNCLEAN", + "case": 253, + "closedByMe": true, + "createStats": true, + "createWirelog": false, + "description": "Send binary message message with payload of length 64 * 2**10 (64k).", + "droppedByMe": true, + "duration": 227, + "expectation": "Receive echo'ed binary message (with payload as sent).", + "expected": {}, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=253&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: ByRhvprmhCytfp81XT7JyA==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: DcTbL+yYSzIVVW3SuP3gQTpQQt0=\r\n\r\n", + "id": "9.2.1", + "isServer": true, + "localCloseCode": 1007, + "localCloseReason": "encountered invalid UTF-8 while processing text message at payload octet index 1", + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": true, + "result": "Did not receive message within 10 seconds.", + "resultClose": "The spec requires the connection to be failed cleanly here", + "rxFrameStats": {}, + "rxOctetStats": { + "184": 1, + "7241": 1, + "17376": 1 + }, + "started": "2023-08-10T21:37:20.451Z", + "trafficStats": null, + "txFrameStats": { + "2": 1, + "8": 1 + }, + "txOctetStats": { + "84": 1, + "206": 1, + "65546": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323533266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TI", + 10 + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_9_2_2.html b/autobahn/client/hornbeam_case_9_2_2.html new file mode 100644 index 0000000..e2d386c --- /dev/null +++ b/autobahn/client/hornbeam_case_9_2_2.html @@ -0,0 +1,290 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 9.2.2</b></span> : Fail - <span style="font-size: 0.9em;"><b>775</b> ms @ 2023-08-10T21:37:20.688Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 256 * 2**10 (256k).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Did not receive message within 10 seconds.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The spec requires the connection to be failed cleanly here (UNCLEAN)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=254&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: QbCcIyrW/fw9HXHTwNDyiw== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: iMN7Elfp8E3xL23Ve9UK5cM9ThM=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1007</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">encountered invalid UTF-8 while processing text message at payload octet index 1</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_row"><td>13032</td><td>1</td><td>13032</td></tr> + <tr class="stats_row"><td>28960</td><td>1</td><td>28960</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>42177</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>84</td><td>1</td><td>84</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>262154</td><td>1</td><td>262154</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>262444</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <p style="margin-left: 40px; color: #f00;"><i>Wire log after handshake disabled!</i></p> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323534266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_kill_after">002 CLOSE CONNECTION AFTER 10.000000 sec</pre> + <pre class="wirelog_tcp_closed_by_me">003 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_9_2_2.json b/autobahn/client/hornbeam_case_9_2_2.json new file mode 100644 index 0000000..331c9a6 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_2_2.json @@ -0,0 +1,79 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "UNCLEAN", + "case": 254, + "closedByMe": true, + "createStats": true, + "createWirelog": false, + "description": "Send binary message message with payload of length 256 * 2**10 (256k).", + "droppedByMe": true, + "duration": 775, + "expectation": "Receive echo'ed binary message (with payload as sent).", + "expected": {}, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=254&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: QbCcIyrW/fw9HXHTwNDyiw==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: iMN7Elfp8E3xL23Ve9UK5cM9ThM=\r\n\r\n", + "id": "9.2.2", + "isServer": true, + "localCloseCode": 1007, + "localCloseReason": "encountered invalid UTF-8 while processing text message at payload octet index 1", + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": true, + "result": "Did not receive message within 10 seconds.", + "resultClose": "The spec requires the connection to be failed cleanly here", + "rxFrameStats": {}, + "rxOctetStats": { + "1": 1, + "184": 1, + "13032": 1, + "28960": 1 + }, + "started": "2023-08-10T21:37:20.688Z", + "trafficStats": null, + "txFrameStats": { + "2": 1, + "8": 1 + }, + "txOctetStats": { + "84": 1, + "206": 1, + "262154": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323534266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TI", + 10 + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_9_2_3.html b/autobahn/client/hornbeam_case_9_2_3.html new file mode 100644 index 0000000..82819c0 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_2_3.html @@ -0,0 +1,290 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 9.2.3</b></span> : Fail - <span style="font-size: 0.9em;"><b>2790</b> ms @ 2023-08-10T21:37:21.465Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 1 * 2**20 (1M).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Did not receive message within 10 seconds.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The spec requires the connection to be failed cleanly here (UNCLEAN)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=255&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: duDHcBrN7+VXiLgAkDBfrg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: 28njz+3cKL+/2YqCYZ8FIeMVU+w=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">True</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">None</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">False</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">1007</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">encountered invalid UTF-8 while processing text message at payload octet index 1</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>1</td><td>1</td><td>1</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_row"><td>13032</td><td>1</td><td>13032</td></tr> + <tr class="stats_row"><td>28424</td><td>1</td><td>28424</td></tr> + <tr class="stats_total"><td>Total</td><td>4</td><td>41641</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>84</td><td>1</td><td>84</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>1048586</td><td>1</td><td>1048586</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>1048876</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <p style="margin-left: 40px; color: #f00;"><i>Wire log after handshake disabled!</i></p> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323535266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_kill_after">002 CLOSE CONNECTION AFTER 10.000000 sec</pre> + <pre class="wirelog_tcp_closed_by_me">003 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_9_2_3.json b/autobahn/client/hornbeam_case_9_2_3.json new file mode 100644 index 0000000..6fcc370 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_2_3.json @@ -0,0 +1,79 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "UNCLEAN", + "case": 255, + "closedByMe": true, + "createStats": true, + "createWirelog": false, + "description": "Send binary message message with payload of length 1 * 2**20 (1M).", + "droppedByMe": true, + "duration": 2790, + "expectation": "Receive echo'ed binary message (with payload as sent).", + "expected": {}, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": true, + "httpRequest": "GET /runCase?case=255&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: duDHcBrN7+VXiLgAkDBfrg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: 28njz+3cKL+/2YqCYZ8FIeMVU+w=\r\n\r\n", + "id": "9.2.3", + "isServer": true, + "localCloseCode": 1007, + "localCloseReason": "encountered invalid UTF-8 while processing text message at payload octet index 1", + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": true, + "result": "Did not receive message within 10 seconds.", + "resultClose": "The spec requires the connection to be failed cleanly here", + "rxFrameStats": {}, + "rxOctetStats": { + "1": 1, + "184": 1, + "13032": 1, + "28424": 1 + }, + "started": "2023-08-10T21:37:21.465Z", + "trafficStats": null, + "txFrameStats": { + "2": 1, + "8": 1 + }, + "txOctetStats": { + "84": 1, + "206": 1, + "1048586": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": false, + "wasNotCleanReason": null, + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323535266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TI", + 10 + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/hornbeam_case_9_2_4.html b/autobahn/client/hornbeam_case_9_2_4.html new file mode 100644 index 0000000..97afc42 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_2_4.html @@ -0,0 +1,288 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +p.case { + color: #fff; + border-radius: 10px; + padding: 20px; + margin: 12px 20px; + font-size: 1.2em; +} + +p.case_ok { + background-color: #0a0; +} + +p.case_non_strict, p.case_no_close { + background-color: #9a0; +} + +p.case_info { + background-color: #4095BF; +} + +p.case_failed { + background-color: #900; +} + +table { + border-collapse: collapse; + border-spacing: 0px; + margin-left: 80px; + margin-bottom: 12px; + margin-top: 0px; +} + +td +{ + margin: 0; + font-size: 0.8em; + border: 1px #fff solid; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + text-align: right; +} + +td.right { + text-align: right; +} + +td.left { + text-align: left; +} + +tr.stats_header { + color: #eee; + background-color: #000; +} + +tr.stats_row { + color: #000; + background-color: #fc3; +} + +tr.stats_total { + color: #fff; + background-color: #888; +} + +div#wirelog { + margin-top: 20px; + margin-bottom: 80px; +} + +pre.wirelog_rx_octets {color: #aaa; margin: 0; background-color: #060; padding: 2px;} +pre.wirelog_tx_octets {color: #aaa; margin: 0; background-color: #600; padding: 2px;} +pre.wirelog_tx_octets_sync {color: #aaa; margin: 0; background-color: #606; padding: 2px;} + +pre.wirelog_rx_frame {color: #fff; margin: 0; background-color: #0a0; padding: 2px;} +pre.wirelog_tx_frame {color: #fff; margin: 0; background-color: #a00; padding: 2px;} +pre.wirelog_tx_frame_sync {color: #fff; margin: 0; background-color: #a0a; padding: 2px;} + +pre.wirelog_delay {color: #fff; margin: 0; background-color: #000; padding: 2px;} +pre.wirelog_kill_after {color: #fff; margin: 0; background-color: #000; padding: 2px;} + +pre.wirelog_tcp_closed_by_me {color: #fff; margin: 0; background-color: #008; padding: 2px;} +pre.wirelog_tcp_closed_by_peer {color: #fff; margin: 0; background-color: #000; padding: 2px;} +</style> + </head> + <body> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <br/> + <p class="case case_failed">Hornbeam - <span style="font-size: 1.3em;"><b>Case 9.2.4</b></span> : Fail - <span style="font-size: 0.9em;"><b>11015</b> ms @ 2023-08-10T21:37:24.257Z</a></p> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 4 * 2**20 (4M).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + + <p class="case_text_block case_outcome"> + <b>Case Outcome</b><br/><br/>Did not receive message within 10 seconds.<br/><br/> + <i>Expected:</i><br/><span class="case_pickle">{}</span><br/><br/> + <i>Observed:</i><br><span class="case_pickle">[]</span> + </p> + <p class="case_text_block case_closing_beh"><b>Case Closing Behavior</b><br/><br/>The spec requires the connection to be failed cleanly here (UNCLEAN)</p> + <br/><hr/> + <h2>Opening Handshake</h2> + <pre class="http_dump">GET /runCase?case=256&agent=Hornbeam HTTP/1.1 +Host: localhost:9001 +Upgrade: websocket +Connection: upgrade +Sec-WebSocket-Key: mgmDAXtexxxQhm06nRw+Qg== +Sec-WebSocket-Version: 13</pre> + <pre class="http_dump">HTTP/1.1 101 Switching Protocols +Server: AutobahnTestSuite/0.8.2-0.10.9 +X-Powered-By: AutobahnPython/0.10.9 +Upgrade: WebSocket +Connection: Upgrade +Sec-WebSocket-Accept: rhRvUENkdgVbkr1FHIo7vS++87k=</pre> + <br/><hr/> + <h2>Closing Behavior</h2> + <table> + <tr class="stats_header"><td>Key</td><td class="left">Value</td><td class="left">Description</td></tr> + <tr class="stats_row"><td>isServer</td><td class="left">True</td><td class="left">True, iff I (the fuzzer) am a server, and the peer is a client.</td></tr> + <tr class="stats_row"><td>closedByMe</td><td class="left">True</td><td class="left">True, iff I have initiated closing handshake (that is, did send close first).</td></tr> + <tr class="stats_row"><td>failedByMe</td><td class="left">False</td><td class="left">True, iff I have failed the WS connection (i.e. due to protocol error). Failing can be either by initiating closing handshake or brutal drop TCP.</td></tr> + <tr class="stats_row"><td>droppedByMe</td><td class="left">True</td><td class="left">True, iff I dropped the TCP connection.</td></tr> + <tr class="stats_row"><td>wasClean</td><td class="left">False</td><td class="left">True, iff full WebSocket closing handshake was performed (close frame sent and received) _and_ the server dropped the TCP (which is its responsibility).</td></tr> + <tr class="stats_row"><td>wasNotCleanReason</td><td class="left">peer did not respond (in time) in closing handshake</td><td class="left">When wasClean == False, the reason what happened.</td></tr> + <tr class="stats_row"><td>wasServerConnectionDropTimeout</td><td class="left">False</td><td class="left">When we are a client, and we expected the server to drop the TCP, but that didn't happen in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasOpenHandshakeTimeout</td><td class="left">False</td><td class="left">When performing the opening handshake, but the peer did not finish in time, this gets True.</td></tr> + <tr class="stats_row"><td>wasCloseHandshakeTimeout</td><td class="left">True</td><td class="left">When we initiated a closing handshake, but the peer did not respond in time, this gets True.</td></tr> + <tr class="stats_row"><td>localCloseCode</td><td class="left">None</td><td class="left">The close code I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>localCloseReason</td><td class="left">None</td><td class="left">The close reason I sent in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseCode</td><td class="left">None</td><td class="left">The close code the peer sent me in close frame (if any).</td></tr> + <tr class="stats_row"><td>remoteCloseReason</td><td class="left">None</td><td class="left">The close reason the peer sent me in close frame (if any).</td></tr> + </table> <br/><hr/> + <h2>Wire Statistics</h2> + <h3>Octets Received by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>184</td><td>1</td><td>184</td></tr> + <tr class="stats_total"><td>Total</td><td>1</td><td>184</td></tr> + </table> + <h3>Octets Transmitted by Chop Size</h3> + <table> + <tr class="stats_header"><td>Chop Size</td><td>Count</td><td>Octets</td></tr> + <tr class="stats_row"><td>2</td><td>1</td><td>2</td></tr> + <tr class="stats_row"><td>206</td><td>1</td><td>206</td></tr> + <tr class="stats_row"><td>4194314</td><td>1</td><td>4194314</td></tr> + <tr class="stats_total"><td>Total</td><td>3</td><td>4194522</td></tr> + </table> + <h3>Frames Received by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_total"><td>Total</td><td>0</td></tr> + </table> + <h3>Frames Transmitted by Opcode</h3> + <table> + <tr class="stats_header"><td>Opcode</td><td>Count</td></tr> + <tr class="stats_row"><td>2</td><td>1</td></tr> + <tr class="stats_row"><td>8</td><td>1</td></tr> + <tr class="stats_total"><td>Total</td><td>2</td></tr> + </table> + <br/><hr/> + <h2>Wire Log</h2> + <p style="margin-left: 40px; color: #f00;"><i>Wire log after handshake disabled!</i></p> + <div id="wirelog"> + <pre class="wirelog_rx_octets">000 RX OCTETS: 474554202f72756e436173653f636173653d323536266167656e743d486f726e6265616d20485454502f312e310d0a486f73</pre> + <pre class="wirelog_rx_octets"> 743a206c6f63616c686f73743a39 ...</pre> + <pre class="wirelog_tx_octets">001 TX OCTETS: 485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e</pre> + <pre class="wirelog_tx_octets"> 5465737453756974652f302e382e ...</pre> + <pre class="wirelog_kill_after">002 CLOSE CONNECTION AFTER 10.000000 sec</pre> + <pre class="wirelog_kill_after">003 CLOSING CONNECTION</pre> + <pre class="wirelog_tcp_closed_by_me">004 TCP DROPPED BY ME</pre> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/hornbeam_case_9_2_4.json b/autobahn/client/hornbeam_case_9_2_4.json new file mode 100644 index 0000000..6606811 --- /dev/null +++ b/autobahn/client/hornbeam_case_9_2_4.json @@ -0,0 +1,79 @@ +{ + "agent": "Hornbeam", + "behavior": "FAILED", + "behaviorClose": "UNCLEAN", + "case": 256, + "closedByMe": true, + "createStats": true, + "createWirelog": false, + "description": "Send binary message message with payload of length 4 * 2**20 (4M).", + "droppedByMe": true, + "duration": 11015, + "expectation": "Receive echo'ed binary message (with payload as sent).", + "expected": {}, + "expectedClose": { + "closeCode": [ + 1000 + ], + "closedByMe": true, + "requireClean": true + }, + "failedByMe": false, + "httpRequest": "GET /runCase?case=256&agent=Hornbeam HTTP/1.1\r\nHost: localhost:9001\r\nUpgrade: websocket\r\nConnection: upgrade\r\nSec-WebSocket-Key: mgmDAXtexxxQhm06nRw+Qg==\r\nSec-WebSocket-Version: 13\r\n\r\n", + "httpResponse": "HTTP/1.1 101 Switching Protocols\r\nServer: AutobahnTestSuite/0.8.2-0.10.9\r\nX-Powered-By: AutobahnPython/0.10.9\r\nUpgrade: WebSocket\r\nConnection: Upgrade\r\nSec-WebSocket-Accept: rhRvUENkdgVbkr1FHIo7vS++87k=\r\n\r\n", + "id": "9.2.4", + "isServer": true, + "localCloseCode": null, + "localCloseReason": null, + "received": [], + "remoteCloseCode": null, + "remoteCloseReason": null, + "reportCompressionRatio": false, + "reportTime": true, + "result": "Did not receive message within 10 seconds.", + "resultClose": "The spec requires the connection to be failed cleanly here", + "rxFrameStats": {}, + "rxOctetStats": { + "184": 1 + }, + "started": "2023-08-10T21:37:24.257Z", + "trafficStats": null, + "txFrameStats": { + "2": 1, + "8": 1 + }, + "txOctetStats": { + "2": 1, + "206": 1, + "4194314": 1 + }, + "wasClean": false, + "wasCloseHandshakeTimeout": true, + "wasNotCleanReason": "peer did not respond (in time) in closing handshake", + "wasOpenHandshakeTimeout": false, + "wasServerConnectionDropTimeout": false, + "wirelog": [ + [ + "RO", + [ + 184, + "474554202f72756e436173653f636173653d323536266167656e743d486f726e6265616d20485454502f312e310d0a486f73743a206c6f63616c686f73743a39 ..." + ] + ], + [ + "TO", + [ + 206, + "485454502f312e312031303120537769746368696e672050726f746f636f6c730d0a5365727665723a204175746f6261686e5465737453756974652f302e382e ..." + ], + false + ], + [ + "TI", + 10 + ], + [ + "TIE" + ] + ] +} \ No newline at end of file diff --git a/autobahn/client/index.html b/autobahn/client/index.html new file mode 100644 index 0000000..a1a57a0 --- /dev/null +++ b/autobahn/client/index.html @@ -0,0 +1,5923 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="utf-8" /> + <style lang="css"> +body { + background-color: #F4F4F4; + color: #333; + font-family: Segoe UI,Tahoma,Arial,Verdana,sans-serif; +} + +p#intro { + font-family: Cambria,serif; + font-size: 1.1em; + color: #444; +} + +p#intro a { + color: #444; +} + +p#intro a:visited { + color: #444; +} + +.block { + background-color: #e0e0e0; + padding: 16px; + margin: 20px; +} + +p.case_text_block { + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; + color: #444; +} + +p.case_desc { +} + +p.case_expect { +} + +p.case_outcome { +} + +p.case_closing_beh { +} + +pre.http_dump { + font-family: Consolas, "Courier New", monospace; + font-size: 0.8em; + color: #333; + border-radius: 10px; + border: 1px solid #aaa; + padding: 16px; + margin: 4px 20px; +} + +span.case_pickle { + font-family: Consolas, "Courier New", monospace; + font-size: 0.7em; + color: #000; +} + +p#case_result,p#close_result { + border-radius: 10px; + background-color: #e8e2d1; + padding: 20px; + margin: 20px; +} + +h1 { + margin-left: 60px; +} + +h2 { + margin-left: 30px; +} + +h3 { + margin-left: 50px; +} + +a.up { + float: right; + border-radius: 16px; + margin-top: 16px; + margin-bottom: 10px; + + margin-right: 30px; + padding-left: 10px; + padding-right: 10px; + padding-bottom: 2px; + padding-top: 2px; + background-color: #666; + color: #fff; + text-decoration: none; + font-size: 0.8em; +} + +a.up:visited { +} + +a.up:hover { + background-color: #028ec9; +} +</style> + <style lang="css"> +table { + border-collapse: collapse; + border-spacing: 0px; +} + +td { + margin: 0; + border: 1px solid #fff; + padding-top: 6px; + padding-bottom: 6px; + padding-left: 16px; + padding-right: 16px; + font-size: 0.9em; + color: #fff; +} + +table#agent_case_results { + border-collapse: collapse; + border-spacing: 0px; + border-radius: 10px; + margin-left: 20px; + margin-right: 20px; + margin-bottom: 40px; +} + +td.outcome_desc { + width: 100%; + color: #333; + font-size: 0.8em; +} + +tr.agent_case_result_row a { + color: #eee; +} + +td.agent { + color: #fff; + font-size: 1.0em; + text-align: center; + background-color: #048; + font-size: 0.8em; + word-wrap: break-word; + padding: 4px; + width: 140px; +} + +td.case { + background-color: #666; + text-align: left; + padding-left: 40px; + font-size: 0.9em; +} + +td.case_category { + color: #fff; + background-color: #000; + text-align: left; + padding-left: 20px; + font-size: 1.0em; +} + +td.case_subcategory { + color: #fff; + background-color: #333; + text-align: left; + padding-left: 30px; + font-size: 0.9em; +} + +td.close { + width: 15px; + padding: 6px; + font-size: 0.7em; + color: #fff; + min-width: 0px; +} + +td.case_ok { + background-color: #0a0; + text-align: center; +} + +td.case_almost { + background-color: #6d6; + text-align: center; +} + +td.case_non_strict, td.case_no_close { + background-color: #9a0; + text-align: center; +} + +td.case_info { + background-color: #4095BF; + text-align: center; +} + +td.case_unimplemented { + background-color: #800080; + text-align: center; +} + +td.case_failed { + background-color: #900; + text-align: center; +} + +td.case_missing { + color: #fff; + background-color: #a05a2c; + text-align: center; +} + +span.case_duration { + font-size: 0.7em; + color: #fff; +} + +*.unselectable { + user-select: none; + -moz-user-select: -moz-none; + -webkit-user-select: none; + -khtml-user-select: none; +} + +div#toggle_button { + position: fixed; + bottom: 10px; + right: 10px; + background-color: rgba(60, 60, 60, 0.5); + border-radius: 12px; + color: #fff; + font-size: 0.7em; + padding: 5px 10px; +} + +div#toggle_button:hover { + background-color: #028ec9; +} +</style> + <script language="javascript"> +var isClosed = false; + +function closeHelper(display,colspan) { + // hide all close codes + var a = document.getElementsByClassName("close_hide"); + for (var i in a) { + if (a[i].style) { + a[i].style.display = display; + } + } + + // set colspans + var a = document.getElementsByClassName("close_flex"); + for (var i in a) { + a[i].colSpan = colspan; + } + + var a = document.getElementsByClassName("case_subcategory"); + for (var i in a) { + a[i].colSpan = 1 * colspan + 1; + } +} + +function toggleClose() { + if (window.isClosed == false) { + closeHelper("none",1); + window.isClosed = true; + } else { + closeHelper("table-cell",2); + window.isClosed = false; + } +} +</script> + </head> + <body> + <a href="#"><div id="toggle_button" class="unselectable" onclick="toggleClose();">Toggle Details</div></a> + <a name="top"></a> + <br/> + <center><a href="http://autobahn.ws/testsuite" title="Autobahn WebSocket Testsuite"><img src="http://autobahn.ws/static/img/ws_protocol_test_report.png" border="0" width="820" height="46" alt="Autobahn WebSocket Testsuite Report"></img></a></center> + <center><a href="http://autobahn.ws" title="Autobahn WebSocket"> <img src="http://autobahn.ws/static/img/ws_protocol_test_report_autobahn.png" border="0" width="300" height="68" alt="Autobahn WebSocket"> </img></a></center> + <div id="master_report_header" class="block"> + <p id="intro">Summary report generated on 2023-08-10T21:50:28.396Z (UTC) by <a href="http://autobahn.ws/testsuite">Autobahn WebSocket Testsuite</a> v0.8.2/v0.10.9.</p> + + <table id="case_outcome_desc"> + <tr> + <td class="case_ok">Pass</td> + <td class="outcome_desc">Test case was executed and passed successfully.</td> + </tr> + <tr> + <td class="case_non_strict">Non-Strict</td> + <td class="outcome_desc">Test case was executed and passed non-strictly. + A non-strict behavior is one that does not adhere to a SHOULD-behavior as described in the protocol specification or + a well-defined, canonical behavior that appears to be desirable but left open in the protocol specification. + An implementation with non-strict behavior is still conformant to the protocol specification.</td> + </tr> + <tr> + <td class="case_failed">Fail</td> + <td class="outcome_desc">Test case was executed and failed. An implementation which fails a test case - other + than a performance/limits related one - is non-conforming to a MUST-behavior as described in the protocol specification.</td> + </tr> + <tr> + <td class="case_info">Info</td> + <td class="outcome_desc">Informational test case which detects certain implementation behavior left unspecified by the spec + but nevertheless potentially interesting to implementors.</td> + </tr> + <tr> + <td class="case_missing">Missing</td> + <td class="outcome_desc">Test case is missing, either because it was skipped via the test suite configuration + or deactivated, i.e. because the implementation does not implement the tested feature or breaks during running + the test case.</td> + </tr> + </table> + </div> + <table id="agent_case_results"> + <tr class="case_category_row"> + <td class="case_category">1 Framing</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">1.1 Text Messages</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_1_1">Case 1.1.1</a></td> + <td class="case_ok"><a href="hornbeam_case_1_1_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_1_2">Case 1.1.2</a></td> + <td class="case_ok"><a href="hornbeam_case_1_1_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_1_3">Case 1.1.3</a></td> + <td class="case_ok"><a href="hornbeam_case_1_1_3.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_1_4">Case 1.1.4</a></td> + <td class="case_ok"><a href="hornbeam_case_1_1_4.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_1_5">Case 1.1.5</a></td> + <td class="case_ok"><a href="hornbeam_case_1_1_5.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_1_6">Case 1.1.6</a></td> + <td class="case_ok"><a href="hornbeam_case_1_1_6.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_1_7">Case 1.1.7</a></td> + <td class="case_ok"><a href="hornbeam_case_1_1_7.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_1_8">Case 1.1.8</a></td> + <td class="case_ok"><a href="hornbeam_case_1_1_8.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">1 Framing</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">1.2 Binary Messages</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_2_1">Case 1.2.1</a></td> + <td class="case_ok"><a href="hornbeam_case_1_2_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_2_2">Case 1.2.2</a></td> + <td class="case_ok"><a href="hornbeam_case_1_2_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_2_3">Case 1.2.3</a></td> + <td class="case_ok"><a href="hornbeam_case_1_2_3.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_2_4">Case 1.2.4</a></td> + <td class="case_ok"><a href="hornbeam_case_1_2_4.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_2_5">Case 1.2.5</a></td> + <td class="case_ok"><a href="hornbeam_case_1_2_5.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_2_6">Case 1.2.6</a></td> + <td class="case_ok"><a href="hornbeam_case_1_2_6.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_2_7">Case 1.2.7</a></td> + <td class="case_ok"><a href="hornbeam_case_1_2_7.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_1_2_8">Case 1.2.8</a></td> + <td class="case_ok"><a href="hornbeam_case_1_2_8.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">2 Pings/Pongs</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_2_1">Case 2.1</a></td> + <td class="case_failed"><a href="hornbeam_case_2_1.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_2_2">Case 2.2</a></td> + <td class="case_failed"><a href="hornbeam_case_2_2.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_2_3">Case 2.3</a></td> + <td class="case_failed"><a href="hornbeam_case_2_3.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_2_4">Case 2.4</a></td> + <td class="case_failed"><a href="hornbeam_case_2_4.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_2_5">Case 2.5</a></td> + <td class="case_ok"><a href="hornbeam_case_2_5.html">Pass</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_2_6">Case 2.6</a></td> + <td class="case_failed"><a href="hornbeam_case_2_6.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_2_7">Case 2.7</a></td> + <td class="case_ok"><a href="hornbeam_case_2_7.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_2_8">Case 2.8</a></td> + <td class="case_ok"><a href="hornbeam_case_2_8.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_2_9">Case 2.9</a></td> + <td class="case_failed"><a href="hornbeam_case_2_9.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_2_10">Case 2.10</a></td> + <td class="case_failed"><a href="hornbeam_case_2_10.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_2_11">Case 2.11</a></td> + <td class="case_failed"><a href="hornbeam_case_2_11.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">3 Reserved Bits</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_3_1">Case 3.1</a></td> + <td class="case_failed"><a href="hornbeam_case_3_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_3_2">Case 3.2</a></td> + <td class="case_failed"><a href="hornbeam_case_3_2.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_3_3">Case 3.3</a></td> + <td class="case_failed"><a href="hornbeam_case_3_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_3_4">Case 3.4</a></td> + <td class="case_failed"><a href="hornbeam_case_3_4.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_3_5">Case 3.5</a></td> + <td class="case_ok"><a href="hornbeam_case_3_5.html">Pass</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_3_6">Case 3.6</a></td> + <td class="case_failed"><a href="hornbeam_case_3_6.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_3_7">Case 3.7</a></td> + <td class="case_ok"><a href="hornbeam_case_3_7.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">4 Opcodes</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">4.1 Non-control Opcodes</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_4_1_1">Case 4.1.1</a></td> + <td class="case_ok"><a href="hornbeam_case_4_1_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_4_1_2">Case 4.1.2</a></td> + <td class="case_ok"><a href="hornbeam_case_4_1_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_4_1_3">Case 4.1.3</a></td> + <td class="case_ok"><a href="hornbeam_case_4_1_3.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_4_1_4">Case 4.1.4</a></td> + <td class="case_ok"><a href="hornbeam_case_4_1_4.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_4_1_5">Case 4.1.5</a></td> + <td class="case_ok"><a href="hornbeam_case_4_1_5.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">4 Opcodes</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">4.2 Control Opcodes</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_4_2_1">Case 4.2.1</a></td> + <td class="case_ok"><a href="hornbeam_case_4_2_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_4_2_2">Case 4.2.2</a></td> + <td class="case_ok"><a href="hornbeam_case_4_2_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_4_2_3">Case 4.2.3</a></td> + <td class="case_ok"><a href="hornbeam_case_4_2_3.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_4_2_4">Case 4.2.4</a></td> + <td class="case_ok"><a href="hornbeam_case_4_2_4.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_4_2_5">Case 4.2.5</a></td> + <td class="case_ok"><a href="hornbeam_case_4_2_5.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">5 Fragmentation</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_1">Case 5.1</a></td> + <td class="case_ok"><a href="hornbeam_case_5_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_2">Case 5.2</a></td> + <td class="case_ok"><a href="hornbeam_case_5_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_3">Case 5.3</a></td> + <td class="case_failed"><a href="hornbeam_case_5_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_4">Case 5.4</a></td> + <td class="case_failed"><a href="hornbeam_case_5_4.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_5">Case 5.5</a></td> + <td class="case_failed"><a href="hornbeam_case_5_5.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_6">Case 5.6</a></td> + <td class="case_failed"><a href="hornbeam_case_5_6.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_7">Case 5.7</a></td> + <td class="case_failed"><a href="hornbeam_case_5_7.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_8">Case 5.8</a></td> + <td class="case_failed"><a href="hornbeam_case_5_8.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_9">Case 5.9</a></td> + <td class="case_ok"><a href="hornbeam_case_5_9.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_10">Case 5.10</a></td> + <td class="case_ok"><a href="hornbeam_case_5_10.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_11">Case 5.11</a></td> + <td class="case_ok"><a href="hornbeam_case_5_11.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_12">Case 5.12</a></td> + <td class="case_ok"><a href="hornbeam_case_5_12.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_13">Case 5.13</a></td> + <td class="case_ok"><a href="hornbeam_case_5_13.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_14">Case 5.14</a></td> + <td class="case_ok"><a href="hornbeam_case_5_14.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_15">Case 5.15</a></td> + <td class="case_failed"><a href="hornbeam_case_5_15.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_16">Case 5.16</a></td> + <td class="case_ok"><a href="hornbeam_case_5_16.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_17">Case 5.17</a></td> + <td class="case_ok"><a href="hornbeam_case_5_17.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_18">Case 5.18</a></td> + <td class="case_failed"><a href="hornbeam_case_5_18.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_19">Case 5.19</a></td> + <td class="case_failed"><a href="hornbeam_case_5_19.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_5_20">Case 5.20</a></td> + <td class="case_failed"><a href="hornbeam_case_5_20.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.1 Valid UTF-8 with zero payload fragments</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_1_1">Case 6.1.1</a></td> + <td class="case_ok"><a href="hornbeam_case_6_1_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_1_2">Case 6.1.2</a></td> + <td class="case_ok"><a href="hornbeam_case_6_1_2.html">Pass</a></td><td class="close close_hide case_failed"><span class="close_code">Unclean</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_1_3">Case 6.1.3</a></td> + <td class="case_failed"><a href="hornbeam_case_6_1_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.2 Valid UTF-8 unfragmented, fragmented on code-points and within code-points</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_2_1">Case 6.2.1</a></td> + <td class="case_ok"><a href="hornbeam_case_6_2_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_2_2">Case 6.2.2</a></td> + <td class="case_failed"><a href="hornbeam_case_6_2_2.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_2_3">Case 6.2.3</a></td> + <td class="case_failed"><a href="hornbeam_case_6_2_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_2_4">Case 6.2.4</a></td> + <td class="case_failed"><a href="hornbeam_case_6_2_4.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.3 Invalid UTF-8 differently fragmented</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_3_1">Case 6.3.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_3_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_3_2">Case 6.3.2</a></td> + <td class="case_failed"><a href="hornbeam_case_6_3_2.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.4 Fail-fast on invalid UTF-8</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_4_1">Case 6.4.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_4_1.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_4_2">Case 6.4.2</a></td> + <td class="case_failed"><a href="hornbeam_case_6_4_2.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_4_3">Case 6.4.3</a></td> + <td class="case_failed"><a href="hornbeam_case_6_4_3.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_4_4">Case 6.4.4</a></td> + <td class="case_failed"><a href="hornbeam_case_6_4_4.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.5 Some valid UTF-8 sequences</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_5_1">Case 6.5.1</a></td> + <td class="case_ok"><a href="hornbeam_case_6_5_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_5_2">Case 6.5.2</a></td> + <td class="case_ok"><a href="hornbeam_case_6_5_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_5_3">Case 6.5.3</a></td> + <td class="case_ok"><a href="hornbeam_case_6_5_3.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_5_4">Case 6.5.4</a></td> + <td class="case_ok"><a href="hornbeam_case_6_5_4.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_5_5">Case 6.5.5</a></td> + <td class="case_ok"><a href="hornbeam_case_6_5_5.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.6 All prefixes of a valid UTF-8 string that contains multi-byte code points</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_6_1">Case 6.6.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_6_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_6_2">Case 6.6.2</a></td> + <td class="case_ok"><a href="hornbeam_case_6_6_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_6_3">Case 6.6.3</a></td> + <td class="case_failed"><a href="hornbeam_case_6_6_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_6_4">Case 6.6.4</a></td> + <td class="case_failed"><a href="hornbeam_case_6_6_4.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_6_5">Case 6.6.5</a></td> + <td class="case_ok"><a href="hornbeam_case_6_6_5.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_6_6">Case 6.6.6</a></td> + <td class="case_failed"><a href="hornbeam_case_6_6_6.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_6_7">Case 6.6.7</a></td> + <td class="case_ok"><a href="hornbeam_case_6_6_7.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_6_8">Case 6.6.8</a></td> + <td class="case_failed"><a href="hornbeam_case_6_6_8.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_6_9">Case 6.6.9</a></td> + <td class="case_ok"><a href="hornbeam_case_6_6_9.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_6_10">Case 6.6.10</a></td> + <td class="case_failed"><a href="hornbeam_case_6_6_10.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_6_11">Case 6.6.11</a></td> + <td class="case_ok"><a href="hornbeam_case_6_6_11.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.7 First possible sequence of a certain length</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_7_1">Case 6.7.1</a></td> + <td class="case_ok"><a href="hornbeam_case_6_7_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_7_2">Case 6.7.2</a></td> + <td class="case_ok"><a href="hornbeam_case_6_7_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_7_3">Case 6.7.3</a></td> + <td class="case_ok"><a href="hornbeam_case_6_7_3.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_7_4">Case 6.7.4</a></td> + <td class="case_ok"><a href="hornbeam_case_6_7_4.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.8 First possible sequence length 5/6 (invalid codepoints)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_8_1">Case 6.8.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_8_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_8_2">Case 6.8.2</a></td> + <td class="case_failed"><a href="hornbeam_case_6_8_2.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.9 Last possible sequence of a certain length</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_9_1">Case 6.9.1</a></td> + <td class="case_ok"><a href="hornbeam_case_6_9_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_9_2">Case 6.9.2</a></td> + <td class="case_ok"><a href="hornbeam_case_6_9_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_9_3">Case 6.9.3</a></td> + <td class="case_ok"><a href="hornbeam_case_6_9_3.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_9_4">Case 6.9.4</a></td> + <td class="case_ok"><a href="hornbeam_case_6_9_4.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.10 Last possible sequence length 4/5/6 (invalid codepoints)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_10_1">Case 6.10.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_10_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_10_2">Case 6.10.2</a></td> + <td class="case_failed"><a href="hornbeam_case_6_10_2.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_10_3">Case 6.10.3</a></td> + <td class="case_failed"><a href="hornbeam_case_6_10_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.11 Other boundary conditions</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_11_1">Case 6.11.1</a></td> + <td class="case_ok"><a href="hornbeam_case_6_11_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_11_2">Case 6.11.2</a></td> + <td class="case_ok"><a href="hornbeam_case_6_11_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_11_3">Case 6.11.3</a></td> + <td class="case_ok"><a href="hornbeam_case_6_11_3.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_11_4">Case 6.11.4</a></td> + <td class="case_ok"><a href="hornbeam_case_6_11_4.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_11_5">Case 6.11.5</a></td> + <td class="case_failed"><a href="hornbeam_case_6_11_5.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.12 Unexpected continuation bytes</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_12_1">Case 6.12.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_12_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_12_2">Case 6.12.2</a></td> + <td class="case_failed"><a href="hornbeam_case_6_12_2.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_12_3">Case 6.12.3</a></td> + <td class="case_failed"><a href="hornbeam_case_6_12_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_12_4">Case 6.12.4</a></td> + <td class="case_failed"><a href="hornbeam_case_6_12_4.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_12_5">Case 6.12.5</a></td> + <td class="case_failed"><a href="hornbeam_case_6_12_5.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_12_6">Case 6.12.6</a></td> + <td class="case_failed"><a href="hornbeam_case_6_12_6.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_12_7">Case 6.12.7</a></td> + <td class="case_failed"><a href="hornbeam_case_6_12_7.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_12_8">Case 6.12.8</a></td> + <td class="case_failed"><a href="hornbeam_case_6_12_8.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.13 Lonely start characters</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_13_1">Case 6.13.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_13_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_13_2">Case 6.13.2</a></td> + <td class="case_failed"><a href="hornbeam_case_6_13_2.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_13_3">Case 6.13.3</a></td> + <td class="case_failed"><a href="hornbeam_case_6_13_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_13_4">Case 6.13.4</a></td> + <td class="case_failed"><a href="hornbeam_case_6_13_4.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_13_5">Case 6.13.5</a></td> + <td class="case_failed"><a href="hornbeam_case_6_13_5.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.14 Sequences with last continuation byte missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_14_1">Case 6.14.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_14_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_14_2">Case 6.14.2</a></td> + <td class="case_failed"><a href="hornbeam_case_6_14_2.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_14_3">Case 6.14.3</a></td> + <td class="case_failed"><a href="hornbeam_case_6_14_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_14_4">Case 6.14.4</a></td> + <td class="case_failed"><a href="hornbeam_case_6_14_4.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_14_5">Case 6.14.5</a></td> + <td class="case_failed"><a href="hornbeam_case_6_14_5.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_14_6">Case 6.14.6</a></td> + <td class="case_failed"><a href="hornbeam_case_6_14_6.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_14_7">Case 6.14.7</a></td> + <td class="case_failed"><a href="hornbeam_case_6_14_7.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_14_8">Case 6.14.8</a></td> + <td class="case_failed"><a href="hornbeam_case_6_14_8.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_14_9">Case 6.14.9</a></td> + <td class="case_failed"><a href="hornbeam_case_6_14_9.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_14_10">Case 6.14.10</a></td> + <td class="case_failed"><a href="hornbeam_case_6_14_10.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.15 Concatenation of incomplete sequences</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_15_1">Case 6.15.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_15_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.16 Impossible bytes</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_16_1">Case 6.16.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_16_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_16_2">Case 6.16.2</a></td> + <td class="case_failed"><a href="hornbeam_case_6_16_2.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_16_3">Case 6.16.3</a></td> + <td class="case_failed"><a href="hornbeam_case_6_16_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.17 Examples of an overlong ASCII character</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_17_1">Case 6.17.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_17_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_17_2">Case 6.17.2</a></td> + <td class="case_failed"><a href="hornbeam_case_6_17_2.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_17_3">Case 6.17.3</a></td> + <td class="case_failed"><a href="hornbeam_case_6_17_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_17_4">Case 6.17.4</a></td> + <td class="case_failed"><a href="hornbeam_case_6_17_4.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_17_5">Case 6.17.5</a></td> + <td class="case_failed"><a href="hornbeam_case_6_17_5.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.18 Maximum overlong sequences</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_18_1">Case 6.18.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_18_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_18_2">Case 6.18.2</a></td> + <td class="case_failed"><a href="hornbeam_case_6_18_2.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_18_3">Case 6.18.3</a></td> + <td class="case_failed"><a href="hornbeam_case_6_18_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_18_4">Case 6.18.4</a></td> + <td class="case_failed"><a href="hornbeam_case_6_18_4.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_18_5">Case 6.18.5</a></td> + <td class="case_failed"><a href="hornbeam_case_6_18_5.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.19 Overlong representation of the NUL character</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_19_1">Case 6.19.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_19_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_19_2">Case 6.19.2</a></td> + <td class="case_failed"><a href="hornbeam_case_6_19_2.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_19_3">Case 6.19.3</a></td> + <td class="case_failed"><a href="hornbeam_case_6_19_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_19_4">Case 6.19.4</a></td> + <td class="case_failed"><a href="hornbeam_case_6_19_4.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_19_5">Case 6.19.5</a></td> + <td class="case_failed"><a href="hornbeam_case_6_19_5.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.20 Single UTF-16 surrogates</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_20_1">Case 6.20.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_20_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_20_2">Case 6.20.2</a></td> + <td class="case_failed"><a href="hornbeam_case_6_20_2.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_20_3">Case 6.20.3</a></td> + <td class="case_failed"><a href="hornbeam_case_6_20_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_20_4">Case 6.20.4</a></td> + <td class="case_failed"><a href="hornbeam_case_6_20_4.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_20_5">Case 6.20.5</a></td> + <td class="case_failed"><a href="hornbeam_case_6_20_5.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_20_6">Case 6.20.6</a></td> + <td class="case_failed"><a href="hornbeam_case_6_20_6.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_20_7">Case 6.20.7</a></td> + <td class="case_failed"><a href="hornbeam_case_6_20_7.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.21 Paired UTF-16 surrogates</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_21_1">Case 6.21.1</a></td> + <td class="case_failed"><a href="hornbeam_case_6_21_1.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_21_2">Case 6.21.2</a></td> + <td class="case_failed"><a href="hornbeam_case_6_21_2.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_21_3">Case 6.21.3</a></td> + <td class="case_failed"><a href="hornbeam_case_6_21_3.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_21_4">Case 6.21.4</a></td> + <td class="case_failed"><a href="hornbeam_case_6_21_4.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_21_5">Case 6.21.5</a></td> + <td class="case_failed"><a href="hornbeam_case_6_21_5.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_21_6">Case 6.21.6</a></td> + <td class="case_failed"><a href="hornbeam_case_6_21_6.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_21_7">Case 6.21.7</a></td> + <td class="case_failed"><a href="hornbeam_case_6_21_7.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_21_8">Case 6.21.8</a></td> + <td class="case_failed"><a href="hornbeam_case_6_21_8.html">Fail</a></td><td class="close close_hide case_failed"><span class="close_code">Fail</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.22 Non-character code points (valid UTF-8)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_1">Case 6.22.1</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_2">Case 6.22.2</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_3">Case 6.22.3</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_3.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_4">Case 6.22.4</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_4.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_5">Case 6.22.5</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_5.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_6">Case 6.22.6</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_6.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_7">Case 6.22.7</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_7.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_8">Case 6.22.8</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_8.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_9">Case 6.22.9</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_9.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_10">Case 6.22.10</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_10.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_11">Case 6.22.11</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_11.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_12">Case 6.22.12</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_12.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_13">Case 6.22.13</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_13.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_14">Case 6.22.14</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_14.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_15">Case 6.22.15</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_15.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_16">Case 6.22.16</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_16.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_17">Case 6.22.17</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_17.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_18">Case 6.22.18</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_18.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_19">Case 6.22.19</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_19.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_20">Case 6.22.20</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_20.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_21">Case 6.22.21</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_21.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_22">Case 6.22.22</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_22.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_23">Case 6.22.23</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_23.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_24">Case 6.22.24</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_24.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_25">Case 6.22.25</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_25.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_26">Case 6.22.26</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_26.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_27">Case 6.22.27</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_27.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_28">Case 6.22.28</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_28.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_29">Case 6.22.29</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_29.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_30">Case 6.22.30</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_30.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_31">Case 6.22.31</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_31.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_32">Case 6.22.32</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_32.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_33">Case 6.22.33</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_33.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_22_34">Case 6.22.34</a></td> + <td class="case_ok"><a href="hornbeam_case_6_22_34.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">6 UTF-8 Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">6.23 Unicode specials (i.e. replacement char)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_23_1">Case 6.23.1</a></td> + <td class="case_ok"><a href="hornbeam_case_6_23_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_23_2">Case 6.23.2</a></td> + <td class="case_ok"><a href="hornbeam_case_6_23_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_23_3">Case 6.23.3</a></td> + <td class="case_ok"><a href="hornbeam_case_6_23_3.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_23_4">Case 6.23.4</a></td> + <td class="case_ok"><a href="hornbeam_case_6_23_4.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_23_5">Case 6.23.5</a></td> + <td class="case_ok"><a href="hornbeam_case_6_23_5.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_23_6">Case 6.23.6</a></td> + <td class="case_ok"><a href="hornbeam_case_6_23_6.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_6_23_7">Case 6.23.7</a></td> + <td class="case_ok"><a href="hornbeam_case_6_23_7.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">7 Close Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">7.1 Basic close behavior (fuzzer initiated)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_1_1">Case 7.1.1</a></td> + <td class="case_ok"><a href="hornbeam_case_7_1_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_1_2">Case 7.1.2</a></td> + <td class="case_ok"><a href="hornbeam_case_7_1_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_1_3">Case 7.1.3</a></td> + <td class="case_ok"><a href="hornbeam_case_7_1_3.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_1_4">Case 7.1.4</a></td> + <td class="case_ok"><a href="hornbeam_case_7_1_4.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_1_5">Case 7.1.5</a></td> + <td class="case_failed"><a href="hornbeam_case_7_1_5.html">Fail</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_1_6">Case 7.1.6</a></td> + <td class="case_info"><a href="hornbeam_case_7_1_6.html">Info</a></td><td class="close close_hide case_info"><span class="close_code">None</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">7 Close Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">7.3 Close frame structure: payload length (fuzzer initiated)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_3_1">Case 7.3.1</a></td> + <td class="case_ok"><a href="hornbeam_case_7_3_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_3_2">Case 7.3.2</a></td> + <td class="case_ok"><a href="hornbeam_case_7_3_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_3_3">Case 7.3.3</a></td> + <td class="case_ok"><a href="hornbeam_case_7_3_3.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_3_4">Case 7.3.4</a></td> + <td class="case_ok"><a href="hornbeam_case_7_3_4.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_3_5">Case 7.3.5</a></td> + <td class="case_ok"><a href="hornbeam_case_7_3_5.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_3_6">Case 7.3.6</a></td> + <td class="case_ok"><a href="hornbeam_case_7_3_6.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">None</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">7 Close Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">7.5 Close frame structure: payload value (fuzzer initiated)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_5_1">Case 7.5.1</a></td> + <td class="case_failed"><a href="hornbeam_case_7_5_1.html">Fail</a></td><td class="close close_hide case_non_strict"><span class="close_code">1000</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">7 Close Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">7.7 Close frame structure: valid close codes (fuzzer initiated)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_7_1">Case 7.7.1</a></td> + <td class="case_ok"><a href="hornbeam_case_7_7_1.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_7_2">Case 7.7.2</a></td> + <td class="case_ok"><a href="hornbeam_case_7_7_2.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1001</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_7_3">Case 7.7.3</a></td> + <td class="case_ok"><a href="hornbeam_case_7_7_3.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1002</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_7_4">Case 7.7.4</a></td> + <td class="case_ok"><a href="hornbeam_case_7_7_4.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1003</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_7_5">Case 7.7.5</a></td> + <td class="case_ok"><a href="hornbeam_case_7_7_5.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1007</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_7_6">Case 7.7.6</a></td> + <td class="case_ok"><a href="hornbeam_case_7_7_6.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1008</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_7_7">Case 7.7.7</a></td> + <td class="case_ok"><a href="hornbeam_case_7_7_7.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1009</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_7_8">Case 7.7.8</a></td> + <td class="case_ok"><a href="hornbeam_case_7_7_8.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1010</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_7_9">Case 7.7.9</a></td> + <td class="case_ok"><a href="hornbeam_case_7_7_9.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">1011</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_7_10">Case 7.7.10</a></td> + <td class="case_ok"><a href="hornbeam_case_7_7_10.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">3000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_7_11">Case 7.7.11</a></td> + <td class="case_ok"><a href="hornbeam_case_7_7_11.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">3999</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_7_12">Case 7.7.12</a></td> + <td class="case_ok"><a href="hornbeam_case_7_7_12.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">4000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_7_13">Case 7.7.13</a></td> + <td class="case_ok"><a href="hornbeam_case_7_7_13.html">Pass</a></td><td class="close close_hide case_ok"><span class="close_code">4999</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">7 Close Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">7.9 Close frame structure: invalid close codes (fuzzer initiated)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_9_1">Case 7.9.1</a></td> + <td class="case_failed"><a href="hornbeam_case_7_9_1.html">Fail</a></td><td class="close close_hide case_non_strict"><span class="close_code">0</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_9_2">Case 7.9.2</a></td> + <td class="case_failed"><a href="hornbeam_case_7_9_2.html">Fail</a></td><td class="close close_hide case_non_strict"><span class="close_code">999</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_9_3">Case 7.9.3</a></td> + <td class="case_failed"><a href="hornbeam_case_7_9_3.html">Fail</a></td><td class="close close_hide case_non_strict"><span class="close_code">1004</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_9_4">Case 7.9.4</a></td> + <td class="case_failed"><a href="hornbeam_case_7_9_4.html">Fail</a></td><td class="close close_hide case_non_strict"><span class="close_code">1005</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_9_5">Case 7.9.5</a></td> + <td class="case_failed"><a href="hornbeam_case_7_9_5.html">Fail</a></td><td class="close close_hide case_non_strict"><span class="close_code">1006</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_9_6">Case 7.9.6</a></td> + <td class="case_failed"><a href="hornbeam_case_7_9_6.html">Fail</a></td><td class="close close_hide case_non_strict"><span class="close_code">1016</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_9_7">Case 7.9.7</a></td> + <td class="case_failed"><a href="hornbeam_case_7_9_7.html">Fail</a></td><td class="close close_hide case_non_strict"><span class="close_code">1100</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_9_8">Case 7.9.8</a></td> + <td class="case_failed"><a href="hornbeam_case_7_9_8.html">Fail</a></td><td class="close close_hide case_non_strict"><span class="close_code">2000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_9_9">Case 7.9.9</a></td> + <td class="case_failed"><a href="hornbeam_case_7_9_9.html">Fail</a></td><td class="close close_hide case_non_strict"><span class="close_code">2999</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">7 Close Handling</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">7.13 Informational close information (fuzzer initiated)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_13_1">Case 7.13.1</a></td> + <td class="case_info"><a href="hornbeam_case_7_13_1.html">Info</a></td><td class="close close_hide case_info"><span class="close_code">5000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_7_13_2">Case 7.13.2</a></td> + <td class="case_info"><a href="hornbeam_case_7_13_2.html">Info</a></td><td class="close close_hide case_info"><span class="close_code">65535</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">9 Limits/Performance</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">9.1 Text Message (increasing size)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_1_1">Case 9.1.1</a></td> + <td class="case_ok"><a href="hornbeam_case_9_1_1.html">Pass</a><br/><span class="case_duration">176 ms</span></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_1_2">Case 9.1.2</a></td> + <td class="case_ok"><a href="hornbeam_case_9_1_2.html">Pass</a><br/><span class="case_duration">707 ms</span></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_1_3">Case 9.1.3</a></td> + <td class="case_ok"><a href="hornbeam_case_9_1_3.html">Pass</a><br/><span class="case_duration">3047 ms</span></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_1_4">Case 9.1.4</a></td> + <td class="case_ok"><a href="hornbeam_case_9_1_4.html">Pass</a><br/><span class="case_duration">11433 ms</span></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_1_5">Case 9.1.5</a></td> + <td class="case_ok"><a href="hornbeam_case_9_1_5.html">Pass</a><br/><span class="case_duration">23670 ms</span></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_1_6">Case 9.1.6</a></td> + <td class="case_ok"><a href="hornbeam_case_9_1_6.html">Pass</a><br/><span class="case_duration">49073 ms</span></td><td class="close close_hide case_ok"><span class="close_code">1000</span></td> + </tr> + <tr class="case_category_row"> + <td class="case_category">9 Limits/Performance</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">9.2 Binary Message (increasing size)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_2_1">Case 9.2.1</a></td> + <td class="case_failed"><a href="hornbeam_case_9_2_1.html">Fail</a><br/><span class="case_duration">227 ms</span></td><td class="close close_hide case_failed"><span class="close_code">Unclean</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_2_2">Case 9.2.2</a></td> + <td class="case_failed"><a href="hornbeam_case_9_2_2.html">Fail</a><br/><span class="case_duration">775 ms</span></td><td class="close close_hide case_failed"><span class="close_code">Unclean</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_2_3">Case 9.2.3</a></td> + <td class="case_failed"><a href="hornbeam_case_9_2_3.html">Fail</a><br/><span class="case_duration">2790 ms</span></td><td class="close close_hide case_failed"><span class="close_code">Unclean</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_2_4">Case 9.2.4</a></td> + <td class="case_failed"><a href="hornbeam_case_9_2_4.html">Fail</a><br/><span class="case_duration">11015 ms</span></td><td class="close close_hide case_failed"><span class="close_code">Unclean</span></td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_2_5">Case 9.2.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_2_6">Case 9.2.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">9 Limits/Performance</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">9.3 Fragmented Text Message (fixed size, increasing fragment size)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_3_1">Case 9.3.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_3_2">Case 9.3.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_3_3">Case 9.3.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_3_4">Case 9.3.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_3_5">Case 9.3.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_3_6">Case 9.3.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_3_7">Case 9.3.7</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_3_8">Case 9.3.8</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_3_9">Case 9.3.9</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">9 Limits/Performance</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">9.4 Fragmented Binary Message (fixed size, increasing fragment size)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_4_1">Case 9.4.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_4_2">Case 9.4.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_4_3">Case 9.4.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_4_4">Case 9.4.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_4_5">Case 9.4.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_4_6">Case 9.4.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_4_7">Case 9.4.7</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_4_8">Case 9.4.8</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_4_9">Case 9.4.9</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">9 Limits/Performance</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">9.5 Text Message (fixed size, increasing chop size)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_5_1">Case 9.5.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_5_2">Case 9.5.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_5_3">Case 9.5.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_5_4">Case 9.5.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_5_5">Case 9.5.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_5_6">Case 9.5.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">9 Limits/Performance</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">9.6 Binary Text Message (fixed size, increasing chop size)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_6_1">Case 9.6.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_6_2">Case 9.6.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_6_3">Case 9.6.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_6_4">Case 9.6.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_6_5">Case 9.6.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_6_6">Case 9.6.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">9 Limits/Performance</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">9.7 Text Message Roundtrip Time (fixed number, increasing size)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_7_1">Case 9.7.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_7_2">Case 9.7.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_7_3">Case 9.7.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_7_4">Case 9.7.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_7_5">Case 9.7.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_7_6">Case 9.7.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">9 Limits/Performance</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">9.8 Binary Message Roundtrip Time (fixed number, increasing size)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_8_1">Case 9.8.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_8_2">Case 9.8.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_8_3">Case 9.8.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_8_4">Case 9.8.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_8_5">Case 9.8.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_9_8_6">Case 9.8.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">10 Misc</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">10.1 Auto-Fragmentation</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_10_1_1">Case 10.1.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">12 WebSocket Compression (different payloads)</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">12.1 Large JSON data file (utf8, 194056 bytes)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_1">Case 12.1.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_2">Case 12.1.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_3">Case 12.1.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_4">Case 12.1.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_5">Case 12.1.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_6">Case 12.1.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_7">Case 12.1.7</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_8">Case 12.1.8</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_9">Case 12.1.9</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_10">Case 12.1.10</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_11">Case 12.1.11</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_12">Case 12.1.12</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_13">Case 12.1.13</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_14">Case 12.1.14</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_15">Case 12.1.15</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_16">Case 12.1.16</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_17">Case 12.1.17</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_1_18">Case 12.1.18</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">12 WebSocket Compression (different payloads)</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">12.2 Lena Picture, Bitmap 512x512 bw (binary, 263222 bytes)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_1">Case 12.2.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_2">Case 12.2.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_3">Case 12.2.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_4">Case 12.2.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_5">Case 12.2.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_6">Case 12.2.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_7">Case 12.2.7</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_8">Case 12.2.8</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_9">Case 12.2.9</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_10">Case 12.2.10</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_11">Case 12.2.11</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_12">Case 12.2.12</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_13">Case 12.2.13</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_14">Case 12.2.14</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_15">Case 12.2.15</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_16">Case 12.2.16</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_17">Case 12.2.17</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_2_18">Case 12.2.18</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">12 WebSocket Compression (different payloads)</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">12.3 Human readable text, Goethe's Faust I (German) (binary, 222218 bytes)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_1">Case 12.3.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_2">Case 12.3.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_3">Case 12.3.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_4">Case 12.3.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_5">Case 12.3.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_6">Case 12.3.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_7">Case 12.3.7</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_8">Case 12.3.8</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_9">Case 12.3.9</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_10">Case 12.3.10</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_11">Case 12.3.11</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_12">Case 12.3.12</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_13">Case 12.3.13</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_14">Case 12.3.14</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_15">Case 12.3.15</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_16">Case 12.3.16</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_17">Case 12.3.17</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_3_18">Case 12.3.18</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">12 WebSocket Compression (different payloads)</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">12.4 Large HTML file (utf8, 263527 bytes)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_1">Case 12.4.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_2">Case 12.4.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_3">Case 12.4.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_4">Case 12.4.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_5">Case 12.4.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_6">Case 12.4.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_7">Case 12.4.7</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_8">Case 12.4.8</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_9">Case 12.4.9</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_10">Case 12.4.10</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_11">Case 12.4.11</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_12">Case 12.4.12</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_13">Case 12.4.13</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_14">Case 12.4.14</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_15">Case 12.4.15</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_16">Case 12.4.16</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_17">Case 12.4.17</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_4_18">Case 12.4.18</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">12 WebSocket Compression (different payloads)</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">12.5 A larger PDF (binary, 1042328 bytes)</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_1">Case 12.5.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_2">Case 12.5.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_3">Case 12.5.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_4">Case 12.5.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_5">Case 12.5.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_6">Case 12.5.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_7">Case 12.5.7</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_8">Case 12.5.8</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_9">Case 12.5.9</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_10">Case 12.5.10</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_11">Case 12.5.11</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_12">Case 12.5.12</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_13">Case 12.5.13</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_14">Case 12.5.14</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_15">Case 12.5.15</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_16">Case 12.5.16</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_17">Case 12.5.17</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_12_5_18">Case 12.5.18</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">13 WebSocket Compression (different parameters)</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">13.1 Large JSON data file (utf8, 194056 bytes) - client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)] / server accept (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_1">Case 13.1.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_2">Case 13.1.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_3">Case 13.1.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_4">Case 13.1.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_5">Case 13.1.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_6">Case 13.1.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_7">Case 13.1.7</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_8">Case 13.1.8</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_9">Case 13.1.9</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_10">Case 13.1.10</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_11">Case 13.1.11</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_12">Case 13.1.12</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_13">Case 13.1.13</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_14">Case 13.1.14</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_15">Case 13.1.15</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_16">Case 13.1.16</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_17">Case 13.1.17</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_1_18">Case 13.1.18</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">13 WebSocket Compression (different parameters)</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">13.2 Large JSON data file (utf8, 194056 bytes) - client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)] / server accept (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_1">Case 13.2.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_2">Case 13.2.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_3">Case 13.2.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_4">Case 13.2.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_5">Case 13.2.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_6">Case 13.2.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_7">Case 13.2.7</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_8">Case 13.2.8</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_9">Case 13.2.9</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_10">Case 13.2.10</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_11">Case 13.2.11</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_12">Case 13.2.12</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_13">Case 13.2.13</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_14">Case 13.2.14</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_15">Case 13.2.15</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_16">Case 13.2.16</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_17">Case 13.2.17</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_2_18">Case 13.2.18</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">13 WebSocket Compression (different parameters)</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">13.3 Large JSON data file (utf8, 194056 bytes) - client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)] / server accept (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_1">Case 13.3.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_2">Case 13.3.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_3">Case 13.3.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_4">Case 13.3.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_5">Case 13.3.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_6">Case 13.3.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_7">Case 13.3.7</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_8">Case 13.3.8</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_9">Case 13.3.9</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_10">Case 13.3.10</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_11">Case 13.3.11</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_12">Case 13.3.12</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_13">Case 13.3.13</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_14">Case 13.3.14</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_15">Case 13.3.15</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_16">Case 13.3.16</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_17">Case 13.3.17</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_3_18">Case 13.3.18</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">13 WebSocket Compression (different parameters)</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">13.4 Large JSON data file (utf8, 194056 bytes) - client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)] / server accept (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_1">Case 13.4.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_2">Case 13.4.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_3">Case 13.4.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_4">Case 13.4.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_5">Case 13.4.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_6">Case 13.4.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_7">Case 13.4.7</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_8">Case 13.4.8</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_9">Case 13.4.9</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_10">Case 13.4.10</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_11">Case 13.4.11</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_12">Case 13.4.12</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_13">Case 13.4.13</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_14">Case 13.4.14</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_15">Case 13.4.15</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_16">Case 13.4.16</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_17">Case 13.4.17</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_4_18">Case 13.4.18</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">13 WebSocket Compression (different parameters)</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">13.5 Large JSON data file (utf8, 194056 bytes) - client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)] / server accept (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_1">Case 13.5.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_2">Case 13.5.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_3">Case 13.5.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_4">Case 13.5.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_5">Case 13.5.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_6">Case 13.5.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_7">Case 13.5.7</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_8">Case 13.5.8</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_9">Case 13.5.9</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_10">Case 13.5.10</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_11">Case 13.5.11</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_12">Case 13.5.12</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_13">Case 13.5.13</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_14">Case 13.5.14</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_15">Case 13.5.15</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_16">Case 13.5.16</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_17">Case 13.5.17</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_5_18">Case 13.5.18</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">13 WebSocket Compression (different parameters)</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">13.6 Large JSON data file (utf8, 194056 bytes) - client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)] / server accept (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_1">Case 13.6.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_2">Case 13.6.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_3">Case 13.6.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_4">Case 13.6.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_5">Case 13.6.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_6">Case 13.6.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_7">Case 13.6.7</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_8">Case 13.6.8</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_9">Case 13.6.9</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_10">Case 13.6.10</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_11">Case 13.6.11</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_12">Case 13.6.12</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_13">Case 13.6.13</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_14">Case 13.6.14</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_15">Case 13.6.15</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_16">Case 13.6.16</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_17">Case 13.6.17</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_6_18">Case 13.6.18</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="case_category_row"> + <td class="case_category">13 WebSocket Compression (different parameters)</td> + <td class="agent close_flex" colspan="2">Hornbeam</td> + </tr> + <tr class="case_subcategory_row"> + <td class="case_subcategory" colspan="3">13.7 Large JSON data file (utf8, 194056 bytes) - client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)] / server accept (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_1">Case 13.7.1</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_2">Case 13.7.2</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_3">Case 13.7.3</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_4">Case 13.7.4</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_5">Case 13.7.5</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_6">Case 13.7.6</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_7">Case 13.7.7</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_8">Case 13.7.8</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_9">Case 13.7.9</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_10">Case 13.7.10</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_11">Case 13.7.11</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_12">Case 13.7.12</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_13">Case 13.7.13</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_14">Case 13.7.14</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_15">Case 13.7.15</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_16">Case 13.7.16</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_17">Case 13.7.17</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + <tr class="agent_case_result_row"> + <td class="case"><a href="#case_desc_13_7_18">Case 13.7.18</a></td> + <td class="case_missing close_flex" colspan="2">Missing</td> + </tr> + </table> + <br/><hr/> + <div id="test_case_descriptions"> + <br/> + <a name="case_desc_1_1_1"></a> + <h2>Case 1.1.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message with payload 0.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with empty payload). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_1_2"></a> + <h2>Case 1.1.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 125.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_1_3"></a> + <h2>Case 1.1.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 126.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_1_4"></a> + <h2>Case 1.1.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 127.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_1_5"></a> + <h2>Case 1.1.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 128.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_1_6"></a> + <h2>Case 1.1.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 65535.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_1_7"></a> + <h2>Case 1.1.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 65536.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_1_8"></a> + <h2>Case 1.1.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 65536. Sent out data in chops of 997 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_2_1"></a> + <h2>Case 1.2.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message with payload 0.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with empty payload). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_2_2"></a> + <h2>Case 1.2.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 125.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_2_3"></a> + <h2>Case 1.2.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 126.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_2_4"></a> + <h2>Case 1.2.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 127.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_2_5"></a> + <h2>Case 1.2.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 128.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_2_6"></a> + <h2>Case 1.2.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 65535.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_2_7"></a> + <h2>Case 1.2.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 65536.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent). Clean close with normal code.</p> + <br/> + <a name="case_desc_1_2_8"></a> + <h2>Case 1.2.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 65536. Sent out data in chops of 997 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent). Clean close with normal code.</p> + <br/> + <a name="case_desc_2_1"></a> + <h2>Case 2.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send ping without payload.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Pong (with empty payload) is sent in reply to Ping. Clean close with normal code.</p> + <br/> + <a name="case_desc_2_2"></a> + <h2>Case 2.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send ping with small text payload.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Pong with payload echo'ed is sent in reply to Ping. Clean close with normal code.</p> + <br/> + <a name="case_desc_2_3"></a> + <h2>Case 2.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send ping with small binary (non UTF-8) payload.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Pong with payload echo'ed is sent in reply to Ping. Clean close with normal code.</p> + <br/> + <a name="case_desc_2_4"></a> + <h2>Case 2.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send ping with binary payload of 125 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Pong with payload echo'ed is sent in reply to Ping. Clean close with normal code.</p> + <br/> + <a name="case_desc_2_5"></a> + <h2>Case 2.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send ping with binary payload of 126 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Connection is failed immediately (1002/Protocol Error), since control frames are only allowed to have payload up to and including 125 octets..</p> + <br/> + <a name="case_desc_2_6"></a> + <h2>Case 2.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send ping with binary payload of 125 octets, send in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Pong with payload echo'ed is sent in reply to Ping. Implementations must be TCP clean. Clean close with normal code.</p> + <br/> + <a name="case_desc_2_7"></a> + <h2>Case 2.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unsolicited pong without payload. Verify nothing is received. Clean close with normal code.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Nothing.</p> + <br/> + <a name="case_desc_2_8"></a> + <h2>Case 2.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unsolicited pong with payload. Verify nothing is received. Clean close with normal code.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Nothing.</p> + <br/> + <a name="case_desc_2_9"></a> + <h2>Case 2.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unsolicited pong with payload. Send ping with payload. Verify pong for ping is received.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Nothing in reply to own Pong, but Pong with payload echo'ed in reply to Ping. Clean close with normal code.</p> + <br/> + <a name="case_desc_2_10"></a> + <h2>Case 2.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 10 Pings with payload.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Pongs for our Pings with all the payloads. Note: This is not required by the Spec .. but we check for this behaviour anyway. Clean close with normal code.</p> + <br/> + <a name="case_desc_2_11"></a> + <h2>Case 2.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 10 Pings with payload. Send out octets in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Pongs for our Pings with all the payloads. Note: This is not required by the Spec .. but we check for this behaviour anyway. Clean close with normal code.</p> + <br/> + <a name="case_desc_3_1"></a> + <h2>Case 3.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message with <b>RSV = 1</b>.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately (1002/protocol error), since RSV must be 0, when no extension defining RSV meaning has been negotiated.</p> + <br/> + <a name="case_desc_3_2"></a> + <h2>Case 3.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send again with <b>RSV = 2</b>, then send Ping.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since RSV must be 0, when no extension defining RSV meaning has been negotiated. The Pong is not received.</p> + <br/> + <a name="case_desc_3_3"></a> + <h2>Case 3.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send again with <b>RSV = 3</b>, then send Ping. Octets are sent in frame-wise chops. Octets are sent in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since RSV must be 0, when no extension defining RSV meaning has been negotiated. The Pong is not received.</p> + <br/> + <a name="case_desc_3_4"></a> + <h2>Case 3.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send again with <b>RSV = 4</b>, then send Ping. Octets are sent in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since RSV must be 0, when no extension defining RSV meaning has been negotiated. The Pong is not received.</p> + <br/> + <a name="case_desc_3_5"></a> + <h2>Case 3.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small binary message with <b>RSV = 5</b>.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since RSV must be 0.</p> + <br/> + <a name="case_desc_3_6"></a> + <h2>Case 3.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send Ping with <b>RSV = 6</b>.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since RSV must be 0.</p> + <br/> + <a name="case_desc_3_7"></a> + <h2>Case 3.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send Close with <b>RSV = 7</b>.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since RSV must be 0.</p> + <br/> + <a name="case_desc_4_1_1"></a> + <h2>Case 4.1.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send frame with reserved non-control <b>Opcode = 3</b>.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately.</p> + <br/> + <a name="case_desc_4_1_2"></a> + <h2>Case 4.1.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send frame with reserved non-control <b>Opcode = 4</b> and non-empty payload.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately.</p> + <br/> + <a name="case_desc_4_1_3"></a> + <h2>Case 4.1.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send frame with reserved non-control <b>Opcode = 5</b>, then send Ping.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.</p> + <br/> + <a name="case_desc_4_1_4"></a> + <h2>Case 4.1.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send frame with reserved non-control <b>Opcode = 6</b> and non-empty payload, then send Ping.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.</p> + <br/> + <a name="case_desc_4_1_5"></a> + <h2>Case 4.1.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send frame with reserved non-control <b>Opcode = 7</b> and non-empty payload, then send Ping.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.</p> + <br/> + <a name="case_desc_4_2_1"></a> + <h2>Case 4.2.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send frame with reserved control <b>Opcode = 11</b>.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately.</p> + <br/> + <a name="case_desc_4_2_2"></a> + <h2>Case 4.2.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send frame with reserved control <b>Opcode = 12</b> and non-empty payload.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately.</p> + <br/> + <a name="case_desc_4_2_3"></a> + <h2>Case 4.2.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send frame with reserved control <b>Opcode = 13</b>, then send Ping.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.</p> + <br/> + <a name="case_desc_4_2_4"></a> + <h2>Case 4.2.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send frame with reserved control <b>Opcode = 14</b> and non-empty payload, then send Ping.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.</p> + <br/> + <a name="case_desc_4_2_5"></a> + <h2>Case 4.2.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send small text message, then send frame with reserved control <b>Opcode = 15</b> and non-empty payload, then send Ping.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echo for first message is received, but then connection is failed immediately, since reserved opcode frame is used. A Pong is not received.</p> + <br/> + <a name="case_desc_5_1"></a> + <h2>Case 5.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send Ping fragmented into 2 fragments.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Connection is failed immediately, since control message MUST NOT be fragmented.</p> + <br/> + <a name="case_desc_5_2"></a> + <h2>Case 5.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send Pong fragmented into 2 fragments.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Connection is failed immediately, since control message MUST NOT be fragmented.</p> + <br/> + <a name="case_desc_5_3"></a> + <h2>Case 5.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Message is processed and echo'ed back to us.</p> + <br/> + <a name="case_desc_5_4"></a> + <h2>Case 5.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments, octets are sent in frame-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Message is processed and echo'ed back to us.</p> + <br/> + <a name="case_desc_5_5"></a> + <h2>Case 5.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments, octets are sent in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Message is processed and echo'ed back to us.</p> + <br/> + <a name="case_desc_5_6"></a> + <h2>Case 5.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments, one ping with payload in-between.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>A pong is received, then the message is echo'ed back to us.</p> + <br/> + <a name="case_desc_5_7"></a> + <h2>Case 5.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments, one ping with payload in-between. Octets are sent in frame-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>A pong is received, then the message is echo'ed back to us.</p> + <br/> + <a name="case_desc_5_8"></a> + <h2>Case 5.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments, one ping with payload in-between. Octets are sent in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>A pong is received, then the message is echo'ed back to us.</p> + <br/> + <a name="case_desc_5_9"></a> + <h2>Case 5.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unfragmented Text Message after Continuation Frame with FIN = true, where there is nothing to continue, sent in one chop.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + <br/> + <a name="case_desc_5_10"></a> + <h2>Case 5.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unfragmented Text Message after Continuation Frame with FIN = true, where there is nothing to continue, sent in per-frame chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + <br/> + <a name="case_desc_5_11"></a> + <h2>Case 5.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unfragmented Text Message after Continuation Frame with FIN = true, where there is nothing to continue, sent in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + <br/> + <a name="case_desc_5_12"></a> + <h2>Case 5.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unfragmented Text Message after Continuation Frame with FIN = false, where there is nothing to continue, sent in one chop.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + <br/> + <a name="case_desc_5_13"></a> + <h2>Case 5.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unfragmented Text Message after Continuation Frame with FIN = false, where there is nothing to continue, sent in per-frame chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + <br/> + <a name="case_desc_5_14"></a> + <h2>Case 5.14</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send unfragmented Text Message after Continuation Frame with FIN = false, where there is nothing to continue, sent in octet-wise chops.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + <br/> + <a name="case_desc_5_15"></a> + <h2>Case 5.15</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments, then Continuation Frame with FIN = false where there is nothing to continue, then unfragmented Text Message, all sent in one chop.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + <br/> + <a name="case_desc_5_16"></a> + <h2>Case 5.16</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Repeated 2x: Continuation Frame with FIN = false (where there is nothing to continue), then text Message fragmented into 2 fragments.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + <br/> + <a name="case_desc_5_17"></a> + <h2>Case 5.17</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Repeated 2x: Continuation Frame with FIN = true (where there is nothing to continue), then text Message fragmented into 2 fragments.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since there is no message to continue.</p> + <br/> + <a name="case_desc_5_18"></a> + <h2>Case 5.18</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text Message fragmented into 2 fragments, with both frame opcodes set to text, sent in one chop.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since all data frames after the initial data frame must have opcode 0.</p> + <br/> + <a name="case_desc_5_19"></a> + <h2>Case 5.19</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>A fragmented text message is sent in multiple frames. After + sending the first 2 frames of the text message, a Ping is sent. Then we wait 1s, + then we send 2 more text fragments, another Ping and then the final text fragment. + Everything is legal.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The peer immediately answers the first Ping before + it has received the last text message fragment. The peer pong's back the Ping's + payload exactly, and echo's the payload of the fragmented message back to us.</p> + <br/> + <a name="case_desc_5_20"></a> + <h2>Case 5.20</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Same as Case 5.19, but send all frames with SYNC = True. + Note, this does not change the octets sent in any way, only how the stream + is chopped up on the wire.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Same as Case 5.19. Implementations must be agnostic to how + octet stream is chopped up on wire (must be TCP clean).</p> + <br/> + <a name="case_desc_6_1_1"></a> + <h2>Case 6.1.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message of length 0.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>A message is echo'ed back to us (with empty payload).</p> + <br/> + <a name="case_desc_6_1_2"></a> + <h2>Case 6.1.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented text message, 3 fragments each of length 0.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>A message is echo'ed back to us (with empty payload).</p> + <br/> + <a name="case_desc_6_1_3"></a> + <h2>Case 6.1.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented text message, 3 fragments, first and last of length 0, middle non-empty.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>A message is echo'ed back to us (with payload = payload of middle fragment).</p> + <br/> + <a name="case_desc_6_2_1"></a> + <h2>Case 6.2.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a valid UTF-8 text message in one fragment.<br><br>MESSAGE:<br>Hello-µ@ßöäüàá-UTF-8!!<br>48656c6c6f2dc2b540c39fc3b6c3a4c3bcc3a0c3a12d5554462d382121</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_2_2"></a> + <h2>Case 6.2.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a valid UTF-8 text message in two fragments, fragmented on UTF-8 code point boundary.<br><br>MESSAGE FRAGMENT 1:<br>Hello-µ@ßöä<br>48656c6c6f2dc2b540c39fc3b6c3a4<br><br>MESSAGE FRAGMENT 2:<br>üàá-UTF-8!!<br>c3bcc3a0c3a12d5554462d382121</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_2_3"></a> + <h2>Case 6.2.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a valid UTF-8 text message in fragments of 1 octet, resulting in frames ending on positions which are not code point ends.<br><br>MESSAGE:<br>Hello-µ@ßöäüàá-UTF-8!!<br>48656c6c6f2dc2b540c39fc3b6c3a4c3bcc3a0c3a12d5554462d382121</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_2_4"></a> + <h2>Case 6.2.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a valid UTF-8 text message in fragments of 1 octet, resulting in frames ending on positions which are not code point ends.<br><br>MESSAGE:<br>κόσμε<br>cebae1bdb9cf83cebcceb5</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_3_1"></a> + <h2>Case 6.3.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send invalid UTF-8 text message unfragmented.<br><br>MESSAGE:<br>cebae1bdb9cf83cebcceb5eda080656469746564</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_3_2"></a> + <h2>Case 6.3.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send invalid UTF-8 text message in fragments of 1 octet, resulting in frames ending on positions which are not code point ends.<br><br>MESSAGE:<br>cebae1bdb9cf83cebcceb5eda080656469746564</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_4_1"></a> + <h2>Case 6.4.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send invalid UTF-8 text message in 3 fragments (frames). +First frame payload is valid, then wait, then 2nd frame which contains the payload making the sequence invalid, then wait, then 3rd frame with rest. +Note that PART1 and PART3 are valid UTF-8 in themselves, PART2 is a 0x110000 encoded as in the UTF-8 integer encoding scheme, but the codepoint is invalid (out of range). +<br><br>MESSAGE PARTS:<br> +PART1 = cebae1bdb9cf83cebcceb5<br> +PART2 = f4908080<br> +PART3 = 656469746564<br> +</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The first frame is accepted, we expect to timeout on the first wait. The 2nd frame should be rejected immediately (fail fast on UTF-8). If we timeout, we expect the connection is failed at least then, since the complete message payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_4_2"></a> + <h2>Case 6.4.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Same as Case 6.4.1, but in 2nd frame, we send only up to and including the octet making the complete payload invalid. +<br><br>MESSAGE PARTS:<br> +PART1 = cebae1bdb9cf83cebcceb5f4<br> +PART2 = 90<br> +PART3 = 8080656469746564<br> +</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The first frame is accepted, we expect to timeout on the first wait. The 2nd frame should be rejected immediately (fail fast on UTF-8). If we timeout, we expect the connection is failed at least then, since the complete message payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_4_3"></a> + <h2>Case 6.4.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Same as Case 6.4.1, but we send message not in 3 frames, but in 3 chops of the same message frame. +<br><br>MESSAGE PARTS:<br> +PART1 = cebae1bdb9cf83cebcceb5<br> +PART2 = f4908080<br> +PART3 = 656469746564<br> +</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The first chop is accepted, we expect to timeout on the first wait. The 2nd chop should be rejected immediately (fail fast on UTF-8). If we timeout, we expect the connection is failed at least then, since the complete message payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_4_4"></a> + <h2>Case 6.4.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Same as Case 6.4.2, but we send message not in 3 frames, but in 3 chops of the same message frame. +<br><br>MESSAGE PARTS:<br> +PART1 = cebae1bdb9cf83cebcceb5f4<br> +PART2 = 90<br> +PART3 = <br> +</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The first chop is accepted, we expect to timeout on the first wait. The 2nd chop should be rejected immediately (fail fast on UTF-8). If we timeout, we expect the connection is failed at least then, since the complete message payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_5_1"></a> + <h2>Case 6.5.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x68656c6c6f24776f726c64</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_5_2"></a> + <h2>Case 6.5.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x68656c6c6fc2a2776f726c64</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_5_3"></a> + <h2>Case 6.5.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x68656c6c6fe282ac776f726c64</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_5_4"></a> + <h2>Case 6.5.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x68656c6c6ff0a4ada2776f726c64</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_5_5"></a> + <h2>Case 6.5.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83cebcceb5</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_6_1"></a> + <h2>Case 6.6.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xce</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_6_2"></a> + <h2>Case 6.6.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xceba</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_6_3"></a> + <h2>Case 6.6.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_6_4"></a> + <h2>Case 6.6.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bd</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_6_5"></a> + <h2>Case 6.6.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_6_6"></a> + <h2>Case 6.6.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_6_7"></a> + <h2>Case 6.6.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_6_8"></a> + <h2>Case 6.6.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83ce</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_6_9"></a> + <h2>Case 6.6.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83cebc</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_6_10"></a> + <h2>Case 6.6.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83cebcce</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_6_11"></a> + <h2>Case 6.6.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xcebae1bdb9cf83cebcceb5</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_7_1"></a> + <h2>Case 6.7.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x00</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_7_2"></a> + <h2>Case 6.7.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xc280</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_7_3"></a> + <h2>Case 6.7.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xe0a080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_7_4"></a> + <h2>Case 6.7.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0908080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_8_1"></a> + <h2>Case 6.8.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf888808080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_8_2"></a> + <h2>Case 6.8.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc8480808080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_9_1"></a> + <h2>Case 6.9.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0x7f</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_9_2"></a> + <h2>Case 6.9.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xdfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_9_3"></a> + <h2>Case 6.9.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_9_4"></a> + <h2>Case 6.9.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf48fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_10_1"></a> + <h2>Case 6.10.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf7bfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_10_2"></a> + <h2>Case 6.10.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfbbfbfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_10_3"></a> + <h2>Case 6.10.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfdbfbfbfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_11_1"></a> + <h2>Case 6.11.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xed9fbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_11_2"></a> + <h2>Case 6.11.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xee8080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_11_3"></a> + <h2>Case 6.11.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbd</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_11_4"></a> + <h2>Case 6.11.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf48fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_11_5"></a> + <h2>Case 6.11.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf4908080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_12_1"></a> + <h2>Case 6.12.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_12_2"></a> + <h2>Case 6.12.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_12_3"></a> + <h2>Case 6.12.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_12_4"></a> + <h2>Case 6.12.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf80</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_12_5"></a> + <h2>Case 6.12.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf80bf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_12_6"></a> + <h2>Case 6.12.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf80bf80</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_12_7"></a> + <h2>Case 6.12.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x80bf80bf80bf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_12_8"></a> + <h2>Case 6.12.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0x808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_13_1"></a> + <h2>Case 6.13.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc020c120c220c320c420c520c620c720c820c920ca20cb20cc20cd20ce20cf20d020d120d220d320d420d520d620d720d820d920da20db20dc20dd20de20</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_13_2"></a> + <h2>Case 6.13.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe020e120e220e320e420e520e620e720e820e920ea20eb20ec20ed20ee20</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_13_3"></a> + <h2>Case 6.13.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf020f120f220f320f420f520f620</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_13_4"></a> + <h2>Case 6.13.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf820f920fa20</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_13_5"></a> + <h2>Case 6.13.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc20</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_14_1"></a> + <h2>Case 6.14.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc0</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_14_2"></a> + <h2>Case 6.14.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_14_3"></a> + <h2>Case 6.14.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf08080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_14_4"></a> + <h2>Case 6.14.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf8808080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_14_5"></a> + <h2>Case 6.14.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc80808080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_14_6"></a> + <h2>Case 6.14.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xdf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_14_7"></a> + <h2>Case 6.14.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xefbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_14_8"></a> + <h2>Case 6.14.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf7bfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_14_9"></a> + <h2>Case 6.14.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfbbfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_14_10"></a> + <h2>Case 6.14.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfdbfbfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_15_1"></a> + <h2>Case 6.15.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc0e080f08080f8808080fc80808080dfefbff7bfbffbbfbfbffdbfbfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_16_1"></a> + <h2>Case 6.16.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_16_2"></a> + <h2>Case 6.16.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xff</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_16_3"></a> + <h2>Case 6.16.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfefeffff</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_17_1"></a> + <h2>Case 6.17.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc0af</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_17_2"></a> + <h2>Case 6.17.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe080af</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_17_3"></a> + <h2>Case 6.17.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf08080af</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_17_4"></a> + <h2>Case 6.17.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf8808080af</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_17_5"></a> + <h2>Case 6.17.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc80808080af</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_18_1"></a> + <h2>Case 6.18.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc1bf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_18_2"></a> + <h2>Case 6.18.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe09fbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_18_3"></a> + <h2>Case 6.18.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf08fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_18_4"></a> + <h2>Case 6.18.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf887bfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_18_5"></a> + <h2>Case 6.18.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc83bfbfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_19_1"></a> + <h2>Case 6.19.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xc080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_19_2"></a> + <h2>Case 6.19.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xe08080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_19_3"></a> + <h2>Case 6.19.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf0808080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_19_4"></a> + <h2>Case 6.19.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xf880808080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_19_5"></a> + <h2>Case 6.19.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xfc8080808080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_20_1"></a> + <h2>Case 6.20.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xeda080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_20_2"></a> + <h2>Case 6.20.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedadbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_20_3"></a> + <h2>Case 6.20.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedae80</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_20_4"></a> + <h2>Case 6.20.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedafbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_20_5"></a> + <h2>Case 6.20.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedb080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_20_6"></a> + <h2>Case 6.20.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedbe80</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_20_7"></a> + <h2>Case 6.20.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_21_1"></a> + <h2>Case 6.21.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xeda080edb080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_21_2"></a> + <h2>Case 6.21.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xeda080edbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_21_3"></a> + <h2>Case 6.21.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedadbfedb080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_21_4"></a> + <h2>Case 6.21.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedadbfedbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_21_5"></a> + <h2>Case 6.21.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedae80edb080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_21_6"></a> + <h2>Case 6.21.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedae80edbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_21_7"></a> + <h2>Case 6.21.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedafbfedb080</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_21_8"></a> + <h2>Case 6.21.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is not valid UTF-8 in one fragment.<br><br>Payload: 0xedafbfedbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The connection is failed immediately, since the payload is not valid UTF-8.</p> + <br/> + <a name="case_desc_6_22_1"></a> + <h2>Case 6.22.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_2"></a> + <h2>Case 6.22.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_3"></a> + <h2>Case 6.22.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf09fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_4"></a> + <h2>Case 6.22.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf09fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_5"></a> + <h2>Case 6.22.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0afbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_6"></a> + <h2>Case 6.22.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0afbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_7"></a> + <h2>Case 6.22.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0bfbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_8"></a> + <h2>Case 6.22.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf0bfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_9"></a> + <h2>Case 6.22.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf18fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_10"></a> + <h2>Case 6.22.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf18fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_11"></a> + <h2>Case 6.22.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf19fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_12"></a> + <h2>Case 6.22.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf19fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_13"></a> + <h2>Case 6.22.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf1afbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_14"></a> + <h2>Case 6.22.14</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf1afbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_15"></a> + <h2>Case 6.22.15</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf1bfbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_16"></a> + <h2>Case 6.22.16</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf1bfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_17"></a> + <h2>Case 6.22.17</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf28fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_18"></a> + <h2>Case 6.22.18</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf28fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_19"></a> + <h2>Case 6.22.19</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf29fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_20"></a> + <h2>Case 6.22.20</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf29fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_21"></a> + <h2>Case 6.22.21</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf2afbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_22"></a> + <h2>Case 6.22.22</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf2afbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_23"></a> + <h2>Case 6.22.23</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf2bfbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_24"></a> + <h2>Case 6.22.24</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf2bfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_25"></a> + <h2>Case 6.22.25</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf38fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_26"></a> + <h2>Case 6.22.26</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf38fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_27"></a> + <h2>Case 6.22.27</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf39fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_28"></a> + <h2>Case 6.22.28</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf39fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_29"></a> + <h2>Case 6.22.29</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf3afbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_30"></a> + <h2>Case 6.22.30</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf3afbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_31"></a> + <h2>Case 6.22.31</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf3bfbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_32"></a> + <h2>Case 6.22.32</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf3bfbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_33"></a> + <h2>Case 6.22.33</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf48fbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_22_34"></a> + <h2>Case 6.22.34</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xf48fbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_23_1"></a> + <h2>Case 6.23.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfb9</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_23_2"></a> + <h2>Case 6.23.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfba</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_23_3"></a> + <h2>Case 6.23.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbb</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_23_4"></a> + <h2>Case 6.23.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbc</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_23_5"></a> + <h2>Case 6.23.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbd</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_23_6"></a> + <h2>Case 6.23.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbe</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_6_23_7"></a> + <h2>Case 6.23.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a text message with payload which is valid UTF-8 in one fragment.<br><br>Payload: 0xefbfbf</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>The message is echo'ed back to us.</p> + <br/> + <a name="case_desc_7_1_1"></a> + <h2>Case 7.1.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a message followed by a close frame</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Echoed message followed by clean close with normal code.</p> + <br/> + <a name="case_desc_7_1_2"></a> + <h2>Case 7.1.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send two close frames</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code. Second close frame ignored.</p> + <br/> + <a name="case_desc_7_1_3"></a> + <h2>Case 7.1.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a ping after close message</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code, no pong.</p> + <br/> + <a name="case_desc_7_1_4"></a> + <h2>Case 7.1.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message after sending a close frame.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code. Text message ignored.</p> + <br/> + <a name="case_desc_7_1_5"></a> + <h2>Case 7.1.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send message fragment1 followed by close then fragment</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code.</p> + <br/> + <a name="case_desc_7_1_6"></a> + <h2>Case 7.1.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 256K message followed by close then a ping</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Case outcome depends on implementation defined close behavior. Message and close frame are sent back to back. If the close frame is processed before the text message write is complete (as can happen in asynchronous processing models) the close frame is processed first and the text message may not be received or may only be partially recieved.</p> + <br/> + <a name="case_desc_7_3_1"></a> + <h2>Case 7.3.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a close frame with payload length 0 (no close code, no close reason)</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code.</p> + <br/> + <a name="case_desc_7_3_2"></a> + <h2>Case 7.3.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a close frame with payload length 1</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error or drop TCP.</p> + <br/> + <a name="case_desc_7_3_3"></a> + <h2>Case 7.3.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a close frame with payload length 2 (regular close with a code)</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code.</p> + <br/> + <a name="case_desc_7_3_4"></a> + <h2>Case 7.3.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a close frame with close code and close reason</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code.</p> + <br/> + <a name="case_desc_7_3_5"></a> + <h2>Case 7.3.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a close frame with close code and close reason of maximum length (123)</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal code.</p> + <br/> + <a name="case_desc_7_3_6"></a> + <h2>Case 7.3.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a close frame with close code and close reason which is too long (124) - total frame payload 126 octets</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or dropped TCP connection.</p> + <br/> + <a name="case_desc_7_5_1"></a> + <h2>Case 7.5.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send a close frame with invalid UTF8 payload</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error or invalid utf8 code or dropped TCP.</p> + <br/> + <a name="case_desc_7_7_1"></a> + <h2>Case 7.7.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1000</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + <br/> + <a name="case_desc_7_7_2"></a> + <h2>Case 7.7.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1001</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + <br/> + <a name="case_desc_7_7_3"></a> + <h2>Case 7.7.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1002</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + <br/> + <a name="case_desc_7_7_4"></a> + <h2>Case 7.7.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1003</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + <br/> + <a name="case_desc_7_7_5"></a> + <h2>Case 7.7.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1007</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + <br/> + <a name="case_desc_7_7_6"></a> + <h2>Case 7.7.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1008</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + <br/> + <a name="case_desc_7_7_7"></a> + <h2>Case 7.7.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1009</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + <br/> + <a name="case_desc_7_7_8"></a> + <h2>Case 7.7.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1010</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + <br/> + <a name="case_desc_7_7_9"></a> + <h2>Case 7.7.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 1011</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + <br/> + <a name="case_desc_7_7_10"></a> + <h2>Case 7.7.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 3000</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + <br/> + <a name="case_desc_7_7_11"></a> + <h2>Case 7.7.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 3999</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + <br/> + <a name="case_desc_7_7_12"></a> + <h2>Case 7.7.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 4000</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + <br/> + <a name="case_desc_7_7_13"></a> + <h2>Case 7.7.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with valid close code 4999</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with normal or echoed code</p> + <br/> + <a name="case_desc_7_9_1"></a> + <h2>Case 7.9.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 0</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + <br/> + <a name="case_desc_7_9_2"></a> + <h2>Case 7.9.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 999</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + <br/> + <a name="case_desc_7_9_3"></a> + <h2>Case 7.9.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 1004</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + <br/> + <a name="case_desc_7_9_4"></a> + <h2>Case 7.9.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 1005</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + <br/> + <a name="case_desc_7_9_5"></a> + <h2>Case 7.9.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 1006</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + <br/> + <a name="case_desc_7_9_6"></a> + <h2>Case 7.9.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 1016</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + <br/> + <a name="case_desc_7_9_7"></a> + <h2>Case 7.9.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 1100</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + <br/> + <a name="case_desc_7_9_8"></a> + <h2>Case 7.9.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 2000</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + <br/> + <a name="case_desc_7_9_9"></a> + <h2>Case 7.9.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with invalid close code 2999</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Clean close with protocol error code or drop TCP</p> + <br/> + <a name="case_desc_7_13_1"></a> + <h2>Case 7.13.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with close code 5000</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Actual events are undefined by the spec.</p> + <br/> + <a name="case_desc_7_13_2"></a> + <h2>Case 7.13.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send close with close code 65536</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Actual events are undefined by the spec.</p> + <br/> + <a name="case_desc_9_1_1"></a> + <h2>Case 9.1.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 64 * 2**10 (64k).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_1_2"></a> + <h2>Case 9.1.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 256 * 2**10 (256k).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_1_3"></a> + <h2>Case 9.1.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 1 * 2**20 (1M).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_1_4"></a> + <h2>Case 9.1.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 4 * 2**20 (4M).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_1_5"></a> + <h2>Case 9.1.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 8 * 2**20 (8M).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_1_6"></a> + <h2>Case 9.1.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 16 * 2**20 (16M).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_2_1"></a> + <h2>Case 9.2.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 64 * 2**10 (64k).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_2_2"></a> + <h2>Case 9.2.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 256 * 2**10 (256k).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_2_3"></a> + <h2>Case 9.2.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 1 * 2**20 (1M).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_2_4"></a> + <h2>Case 9.2.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 4 * 2**20 (4M).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_2_5"></a> + <h2>Case 9.2.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 8 * 2**20 (16M).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_2_6"></a> + <h2>Case 9.2.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 16 * 2**20 (16M).</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_3_1"></a> + <h2>Case 9.3.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented text message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 64.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_3_2"></a> + <h2>Case 9.3.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented text message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 256.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_3_3"></a> + <h2>Case 9.3.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented text message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 1k.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_3_4"></a> + <h2>Case 9.3.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented text message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 4k.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_3_5"></a> + <h2>Case 9.3.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented text message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 16k.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_3_6"></a> + <h2>Case 9.3.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented text message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 64k.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_3_7"></a> + <h2>Case 9.3.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented text message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 256k.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_3_8"></a> + <h2>Case 9.3.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented text message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 1M.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_3_9"></a> + <h2>Case 9.3.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented text message message with message payload of length 4 * 2**20 (8M). Sent out in fragments of 4M.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_4_1"></a> + <h2>Case 9.4.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented binary message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 64.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_4_2"></a> + <h2>Case 9.4.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented binary message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 256.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_4_3"></a> + <h2>Case 9.4.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented binary message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 1k.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_4_4"></a> + <h2>Case 9.4.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented binary message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 4k.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_4_5"></a> + <h2>Case 9.4.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented binary message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 16k.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_4_6"></a> + <h2>Case 9.4.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented binary message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 64k.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_4_7"></a> + <h2>Case 9.4.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented binary message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 256k.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_4_8"></a> + <h2>Case 9.4.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented binary message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 1M.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_4_9"></a> + <h2>Case 9.4.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send fragmented binary message message with message payload of length 4 * 2**20 (4M). Sent out in fragments of 4M.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_5_1"></a> + <h2>Case 9.5.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 1 * 2**20 (1M). Sent out data in chops of 64 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_5_2"></a> + <h2>Case 9.5.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 1 * 2**20 (1M). Sent out data in chops of 128 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_5_3"></a> + <h2>Case 9.5.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 1 * 2**20 (1M). Sent out data in chops of 256 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_5_4"></a> + <h2>Case 9.5.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 1 * 2**20 (1M). Sent out data in chops of 512 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_5_5"></a> + <h2>Case 9.5.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 1 * 2**20 (1M). Sent out data in chops of 1024 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_5_6"></a> + <h2>Case 9.5.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message message with payload of length 1 * 2**20 (1M). Sent out data in chops of 2048 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_6_1"></a> + <h2>Case 9.6.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 1 * 2**20 (1M). Sent out data in chops of 64 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary message (with payload as sent).</p> + <br/> + <a name="case_desc_9_6_2"></a> + <h2>Case 9.6.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 1 * 2**20 (1M). Sent out data in chops of 128 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_6_3"></a> + <h2>Case 9.6.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 1 * 2**20 (1M). Sent out data in chops of 256 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_6_4"></a> + <h2>Case 9.6.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 1 * 2**20 (1M). Sent out data in chops of 512 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_6_5"></a> + <h2>Case 9.6.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 1 * 2**20 (1M). Sent out data in chops of 1024 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_6_6"></a> + <h2>Case 9.6.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send binary message message with payload of length 1 * 2**20 (1M). Sent out data in chops of 2048 octets.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent).</p> + <br/> + <a name="case_desc_9_7_1"></a> + <h2>Case 9.7.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 text messages of payload size 0 to measure implementation/network RTT (round trip time) / latency.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_9_7_2"></a> + <h2>Case 9.7.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 text messages of payload size 16 to measure implementation/network RTT (round trip time) / latency.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_9_7_3"></a> + <h2>Case 9.7.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 text messages of payload size 64 to measure implementation/network RTT (round trip time) / latency.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_9_7_4"></a> + <h2>Case 9.7.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 text messages of payload size 256 to measure implementation/network RTT (round trip time) / latency.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text messages (with payload as sent). Timeout case after 120 secs.</p> + <br/> + <a name="case_desc_9_7_5"></a> + <h2>Case 9.7.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 text messages of payload size 1024 to measure implementation/network RTT (round trip time) / latency.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text messages (with payload as sent). Timeout case after 240 secs.</p> + <br/> + <a name="case_desc_9_7_6"></a> + <h2>Case 9.7.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 text messages of payload size 4096 to measure implementation/network RTT (round trip time) / latency.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_9_8_1"></a> + <h2>Case 9.8.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 binary messages of payload size 0 to measure implementation/network RTT (round trip time) / latency.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_9_8_2"></a> + <h2>Case 9.8.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 binary messages of payload size 16 to measure implementation/network RTT (round trip time) / latency.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_9_8_3"></a> + <h2>Case 9.8.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 binary messages of payload size 64 to measure implementation/network RTT (round trip time) / latency.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_9_8_4"></a> + <h2>Case 9.8.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 binary messages of payload size 256 to measure implementation/network RTT (round trip time) / latency.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary messages (with payload as sent). Timeout case after 120 secs.</p> + <br/> + <a name="case_desc_9_8_5"></a> + <h2>Case 9.8.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 binary messages of payload size 1024 to measure implementation/network RTT (round trip time) / latency.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary messages (with payload as sent). Timeout case after 240 secs.</p> + <br/> + <a name="case_desc_9_8_6"></a> + <h2>Case 9.8.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 binary messages of payload size 4096 to measure implementation/network RTT (round trip time) / latency.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed binary messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_10_1_1"></a> + <h2>Case 10.1.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send text message with payload of length 65536 auto-fragmented with <b>autoFragmentSize = 1300</b>.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed text message (with payload as sent and transmitted frame counts as expected). Clean close with normal code.</p> + <br/> + <a name="case_desc_12_1_1"></a> + <h2>Case 12.1.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_12_1_2"></a> + <h2>Case 12.1.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 64, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_12_1_3"></a> + <h2>Case 12.1.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 256, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 120 secs.</p> + <br/> + <a name="case_desc_12_1_4"></a> + <h2>Case 12.1.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 1024, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 240 secs.</p> + <br/> + <a name="case_desc_12_1_5"></a> + <h2>Case 12.1.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 4096, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_1_6"></a> + <h2>Case 12.1.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_1_7"></a> + <h2>Case 12.1.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_1_8"></a> + <h2>Case 12.1.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_1_9"></a> + <h2>Case 12.1.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_1_10"></a> + <h2>Case 12.1.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_1_11"></a> + <h2>Case 12.1.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_1_12"></a> + <h2>Case 12.1.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_1_13"></a> + <h2>Case 12.1.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_1_14"></a> + <h2>Case 12.1.14</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_1_15"></a> + <h2>Case 12.1.15</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_1_16"></a> + <h2>Case 12.1.16</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 1024 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_1_17"></a> + <h2>Case 12.1.17</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 4096 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_1_18"></a> + <h2>Case 12.1.18</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 32768 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_2_1"></a> + <h2>Case 12.2.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_12_2_2"></a> + <h2>Case 12.2.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 64, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_12_2_3"></a> + <h2>Case 12.2.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 256, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 120 secs.</p> + <br/> + <a name="case_desc_12_2_4"></a> + <h2>Case 12.2.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 1024, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 240 secs.</p> + <br/> + <a name="case_desc_12_2_5"></a> + <h2>Case 12.2.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 4096, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_2_6"></a> + <h2>Case 12.2.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_2_7"></a> + <h2>Case 12.2.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_2_8"></a> + <h2>Case 12.2.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_2_9"></a> + <h2>Case 12.2.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_2_10"></a> + <h2>Case 12.2.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_2_11"></a> + <h2>Case 12.2.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_2_12"></a> + <h2>Case 12.2.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_2_13"></a> + <h2>Case 12.2.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_2_14"></a> + <h2>Case 12.2.14</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_2_15"></a> + <h2>Case 12.2.15</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_2_16"></a> + <h2>Case 12.2.16</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 1024 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_2_17"></a> + <h2>Case 12.2.17</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 4096 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_2_18"></a> + <h2>Case 12.2.18</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 32768 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_3_1"></a> + <h2>Case 12.3.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_12_3_2"></a> + <h2>Case 12.3.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 64, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_12_3_3"></a> + <h2>Case 12.3.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 256, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 120 secs.</p> + <br/> + <a name="case_desc_12_3_4"></a> + <h2>Case 12.3.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 1024, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 240 secs.</p> + <br/> + <a name="case_desc_12_3_5"></a> + <h2>Case 12.3.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 4096, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_3_6"></a> + <h2>Case 12.3.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_3_7"></a> + <h2>Case 12.3.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_3_8"></a> + <h2>Case 12.3.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_3_9"></a> + <h2>Case 12.3.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_3_10"></a> + <h2>Case 12.3.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_3_11"></a> + <h2>Case 12.3.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_3_12"></a> + <h2>Case 12.3.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_3_13"></a> + <h2>Case 12.3.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_3_14"></a> + <h2>Case 12.3.14</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_3_15"></a> + <h2>Case 12.3.15</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_3_16"></a> + <h2>Case 12.3.16</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 1024 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_3_17"></a> + <h2>Case 12.3.17</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 4096 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_3_18"></a> + <h2>Case 12.3.18</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 32768 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_4_1"></a> + <h2>Case 12.4.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_12_4_2"></a> + <h2>Case 12.4.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 64, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_12_4_3"></a> + <h2>Case 12.4.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 256, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 120 secs.</p> + <br/> + <a name="case_desc_12_4_4"></a> + <h2>Case 12.4.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 1024, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 240 secs.</p> + <br/> + <a name="case_desc_12_4_5"></a> + <h2>Case 12.4.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 4096, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_4_6"></a> + <h2>Case 12.4.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_4_7"></a> + <h2>Case 12.4.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_4_8"></a> + <h2>Case 12.4.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_4_9"></a> + <h2>Case 12.4.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_4_10"></a> + <h2>Case 12.4.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_4_11"></a> + <h2>Case 12.4.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_4_12"></a> + <h2>Case 12.4.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_4_13"></a> + <h2>Case 12.4.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_4_14"></a> + <h2>Case 12.4.14</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_4_15"></a> + <h2>Case 12.4.15</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_4_16"></a> + <h2>Case 12.4.16</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 1024 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_4_17"></a> + <h2>Case 12.4.17</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 4096 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_4_18"></a> + <h2>Case 12.4.18</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 32768 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_5_1"></a> + <h2>Case 12.5.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_12_5_2"></a> + <h2>Case 12.5.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 64, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_12_5_3"></a> + <h2>Case 12.5.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 256, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 120 secs.</p> + <br/> + <a name="case_desc_12_5_4"></a> + <h2>Case 12.5.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 1024, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 240 secs.</p> + <br/> + <a name="case_desc_12_5_5"></a> + <h2>Case 12.5.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 4096, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_5_6"></a> + <h2>Case 12.5.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_5_7"></a> + <h2>Case 12.5.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_5_8"></a> + <h2>Case 12.5.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_5_9"></a> + <h2>Case 12.5.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_5_10"></a> + <h2>Case 12.5.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 0 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_5_11"></a> + <h2>Case 12.5.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_5_12"></a> + <h2>Case 12.5.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_5_13"></a> + <h2>Case 12.5.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_5_14"></a> + <h2>Case 12.5.14</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_5_15"></a> + <h2>Case 12.5.15</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 256 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_5_16"></a> + <h2>Case 12.5.16</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 1024 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_5_17"></a> + <h2>Case 12.5.17</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 4096 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_12_5_18"></a> + <h2>Case 12.5.18</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 32768 octets. Use default permessage-deflate offer.</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_1_1"></a> + <h2>Case 13.1.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_13_1_2"></a> + <h2>Case 13.1.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 64, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_13_1_3"></a> + <h2>Case 13.1.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 256, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 120 secs.</p> + <br/> + <a name="case_desc_13_1_4"></a> + <h2>Case 13.1.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 1024, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 240 secs.</p> + <br/> + <a name="case_desc_13_1_5"></a> + <h2>Case 13.1.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 4096, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_1_6"></a> + <h2>Case 13.1.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_1_7"></a> + <h2>Case 13.1.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_1_8"></a> + <h2>Case 13.1.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_1_9"></a> + <h2>Case 13.1.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_1_10"></a> + <h2>Case 13.1.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_1_11"></a> + <h2>Case 13.1.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_1_12"></a> + <h2>Case 13.1.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_1_13"></a> + <h2>Case 13.1.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_1_14"></a> + <h2>Case 13.1.14</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_1_15"></a> + <h2>Case 13.1.15</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_1_16"></a> + <h2>Case 13.1.16</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 1024 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_1_17"></a> + <h2>Case 13.1.17</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 4096 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_1_18"></a> + <h2>Case 13.1.18</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 32768 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_2_1"></a> + <h2>Case 13.2.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_13_2_2"></a> + <h2>Case 13.2.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 64, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_13_2_3"></a> + <h2>Case 13.2.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 256, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 120 secs.</p> + <br/> + <a name="case_desc_13_2_4"></a> + <h2>Case 13.2.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 1024, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 240 secs.</p> + <br/> + <a name="case_desc_13_2_5"></a> + <h2>Case 13.2.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 4096, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_2_6"></a> + <h2>Case 13.2.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_2_7"></a> + <h2>Case 13.2.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_2_8"></a> + <h2>Case 13.2.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_2_9"></a> + <h2>Case 13.2.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_2_10"></a> + <h2>Case 13.2.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_2_11"></a> + <h2>Case 13.2.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_2_12"></a> + <h2>Case 13.2.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_2_13"></a> + <h2>Case 13.2.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_2_14"></a> + <h2>Case 13.2.14</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_2_15"></a> + <h2>Case 13.2.15</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_2_16"></a> + <h2>Case 13.2.16</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 1024 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_2_17"></a> + <h2>Case 13.2.17</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 4096 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_2_18"></a> + <h2>Case 13.2.18</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 32768 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_3_1"></a> + <h2>Case 13.3.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_13_3_2"></a> + <h2>Case 13.3.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 64, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_13_3_3"></a> + <h2>Case 13.3.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 256, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 120 secs.</p> + <br/> + <a name="case_desc_13_3_4"></a> + <h2>Case 13.3.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 1024, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 240 secs.</p> + <br/> + <a name="case_desc_13_3_5"></a> + <h2>Case 13.3.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 4096, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_3_6"></a> + <h2>Case 13.3.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_3_7"></a> + <h2>Case 13.3.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_3_8"></a> + <h2>Case 13.3.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_3_9"></a> + <h2>Case 13.3.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_3_10"></a> + <h2>Case 13.3.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_3_11"></a> + <h2>Case 13.3.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_3_12"></a> + <h2>Case 13.3.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_3_13"></a> + <h2>Case 13.3.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_3_14"></a> + <h2>Case 13.3.14</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_3_15"></a> + <h2>Case 13.3.15</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_3_16"></a> + <h2>Case 13.3.16</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 1024 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_3_17"></a> + <h2>Case 13.3.17</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 4096 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_3_18"></a> + <h2>Case 13.3.18</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 32768 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_4_1"></a> + <h2>Case 13.4.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_13_4_2"></a> + <h2>Case 13.4.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 64, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_13_4_3"></a> + <h2>Case 13.4.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 256, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 120 secs.</p> + <br/> + <a name="case_desc_13_4_4"></a> + <h2>Case 13.4.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 1024, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 240 secs.</p> + <br/> + <a name="case_desc_13_4_5"></a> + <h2>Case 13.4.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 4096, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_4_6"></a> + <h2>Case 13.4.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_4_7"></a> + <h2>Case 13.4.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_4_8"></a> + <h2>Case 13.4.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_4_9"></a> + <h2>Case 13.4.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_4_10"></a> + <h2>Case 13.4.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_4_11"></a> + <h2>Case 13.4.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_4_12"></a> + <h2>Case 13.4.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_4_13"></a> + <h2>Case 13.4.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_4_14"></a> + <h2>Case 13.4.14</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_4_15"></a> + <h2>Case 13.4.15</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_4_16"></a> + <h2>Case 13.4.16</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 1024 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_4_17"></a> + <h2>Case 13.4.17</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 4096 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_4_18"></a> + <h2>Case 13.4.18</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 32768 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(False, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_5_1"></a> + <h2>Case 13.5.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_13_5_2"></a> + <h2>Case 13.5.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 64, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_13_5_3"></a> + <h2>Case 13.5.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 256, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 120 secs.</p> + <br/> + <a name="case_desc_13_5_4"></a> + <h2>Case 13.5.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 1024, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 240 secs.</p> + <br/> + <a name="case_desc_13_5_5"></a> + <h2>Case 13.5.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 4096, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_5_6"></a> + <h2>Case 13.5.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_5_7"></a> + <h2>Case 13.5.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_5_8"></a> + <h2>Case 13.5.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_5_9"></a> + <h2>Case 13.5.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_5_10"></a> + <h2>Case 13.5.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_5_11"></a> + <h2>Case 13.5.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_5_12"></a> + <h2>Case 13.5.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_5_13"></a> + <h2>Case 13.5.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_5_14"></a> + <h2>Case 13.5.14</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_5_15"></a> + <h2>Case 13.5.15</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_5_16"></a> + <h2>Case 13.5.16</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 1024 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_5_17"></a> + <h2>Case 13.5.17</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 4096 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_5_18"></a> + <h2>Case 13.5.18</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 32768 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_6_1"></a> + <h2>Case 13.6.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_13_6_2"></a> + <h2>Case 13.6.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 64, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_13_6_3"></a> + <h2>Case 13.6.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 256, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 120 secs.</p> + <br/> + <a name="case_desc_13_6_4"></a> + <h2>Case 13.6.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 1024, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 240 secs.</p> + <br/> + <a name="case_desc_13_6_5"></a> + <h2>Case 13.6.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 4096, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_6_6"></a> + <h2>Case 13.6.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_6_7"></a> + <h2>Case 13.6.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_6_8"></a> + <h2>Case 13.6.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_6_9"></a> + <h2>Case 13.6.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_6_10"></a> + <h2>Case 13.6.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_6_11"></a> + <h2>Case 13.6.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_6_12"></a> + <h2>Case 13.6.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_6_13"></a> + <h2>Case 13.6.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_6_14"></a> + <h2>Case 13.6.14</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_6_15"></a> + <h2>Case 13.6.15</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_6_16"></a> + <h2>Case 13.6.16</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 1024 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_6_17"></a> + <h2>Case 13.6.17</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 4096 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_6_18"></a> + <h2>Case 13.6.18</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 32768 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 15)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_7_1"></a> + <h2>Case 13.7.1</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_13_7_2"></a> + <h2>Case 13.7.2</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 64, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 60 secs.</p> + <br/> + <a name="case_desc_13_7_3"></a> + <h2>Case 13.7.3</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 256, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 120 secs.</p> + <br/> + <a name="case_desc_13_7_4"></a> + <h2>Case 13.7.4</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 1024, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 240 secs.</p> + <br/> + <a name="case_desc_13_7_5"></a> + <h2>Case 13.7.5</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 4096, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_7_6"></a> + <h2>Case 13.7.6</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_7_7"></a> + <h2>Case 13.7.7</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_7_8"></a> + <h2>Case 13.7.8</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_7_9"></a> + <h2>Case 13.7.9</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_7_10"></a> + <h2>Case 13.7.10</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 0 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_7_11"></a> + <h2>Case 13.7.11</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 8192, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_7_12"></a> + <h2>Case 13.7.12</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 16384, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_7_13"></a> + <h2>Case 13.7.13</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 32768, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_7_14"></a> + <h2>Case 13.7.14</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 65536, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_7_15"></a> + <h2>Case 13.7.15</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 256 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_7_16"></a> + <h2>Case 13.7.16</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 1024 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_7_17"></a> + <h2>Case 13.7.17</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 4096 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + <br/> + <a name="case_desc_13_7_18"></a> + <h2>Case 13.7.18</h2> + <a class="up" href="#top">Up</a> + <p class="case_text_block case_desc"><b>Case Description</b><br/><br/>Send 1000 compressed messages each of payload size 131072, auto-fragment to 32768 octets. Use permessage-deflate client offers (requestNoContextTakeover, requestMaxWindowBits): [(True, 9), (True, 0), (False, 0)]</p> + <p class="case_text_block case_expect"><b>Case Expectation</b><br/><br/>Receive echo'ed messages (with payload as sent). Timeout case after 480 secs.</p> + </div> + <br/><hr/> + </body> +</html> diff --git a/autobahn/client/index.json b/autobahn/client/index.json new file mode 100644 index 0000000..73e8723 --- /dev/null +++ b/autobahn/client/index.json @@ -0,0 +1,1796 @@ +{ + "Hornbeam": { + "1.1.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_1_1.json" + }, + "1.1.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_1_2.json" + }, + "1.1.3": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_1_3.json" + }, + "1.1.4": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_1_4.json" + }, + "1.1.5": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_1_5.json" + }, + "1.1.6": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 210, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_1_6.json" + }, + "1.1.7": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 186, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_1_7.json" + }, + "1.1.8": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 221, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_1_8.json" + }, + "1.2.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 50, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_2_1.json" + }, + "1.2.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_2_2.json" + }, + "1.2.3": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_2_3.json" + }, + "1.2.4": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_2_4.json" + }, + "1.2.5": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 47, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_2_5.json" + }, + "1.2.6": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 697, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_2_6.json" + }, + "1.2.7": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 395, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_2_7.json" + }, + "1.2.8": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 602, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_1_2_8.json" + }, + "2.1": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 1003, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_2_1.json" + }, + "2.10": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 3004, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_2_10.json" + }, + "2.11": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 3004, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_2_11.json" + }, + "2.2": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 1003, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_2_2.json" + }, + "2.3": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 1003, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_2_3.json" + }, + "2.4": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 1003, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_2_4.json" + }, + "2.5": { + "behavior": "OK", + "behaviorClose": "FAILED", + "duration": 1003, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_2_5.json" + }, + "2.6": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 2003, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_2_6.json" + }, + "2.7": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 3, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_2_7.json" + }, + "2.8": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 3, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_2_8.json" + }, + "2.9": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 1003, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_2_9.json" + }, + "3.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 1002, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_3_1.json" + }, + "3.2": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 1003, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_3_2.json" + }, + "3.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 1002, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_3_3.json" + }, + "3.4": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 1003, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_3_4.json" + }, + "3.5": { + "behavior": "OK", + "behaviorClose": "FAILED", + "duration": 44, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_3_5.json" + }, + "3.6": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 1003, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_3_6.json" + }, + "3.7": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 3, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_3_7.json" + }, + "4.1.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_4_1_1.json" + }, + "4.1.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_4_1_2.json" + }, + "4.1.3": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_4_1_3.json" + }, + "4.1.4": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 3, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_4_1_4.json" + }, + "4.1.5": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 7, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_4_1_5.json" + }, + "4.2.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_4_2_1.json" + }, + "4.2.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_4_2_2.json" + }, + "4.2.3": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_4_2_3.json" + }, + "4.2.4": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_4_2_4.json" + }, + "4.2.5": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_4_2_5.json" + }, + "5.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_1.json" + }, + "5.10": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_10.json" + }, + "5.11": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_11.json" + }, + "5.12": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 4, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_12.json" + }, + "5.13": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_13.json" + }, + "5.14": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_14.json" + }, + "5.15": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_15.json" + }, + "5.16": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_16.json" + }, + "5.17": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_17.json" + }, + "5.18": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 1003, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_5_18.json" + }, + "5.19": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 3, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_19.json" + }, + "5.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_2.json" + }, + "5.20": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_20.json" + }, + "5.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 1, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_3.json" + }, + "5.4": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_4.json" + }, + "5.5": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 3, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_5.json" + }, + "5.6": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_6.json" + }, + "5.7": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_7.json" + }, + "5.8": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 3, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_8.json" + }, + "5.9": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_5_9.json" + }, + "6.1.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_1_1.json" + }, + "6.1.2": { + "behavior": "OK", + "behaviorClose": "UNCLEAN", + "duration": 3, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_6_1_2.json" + }, + "6.1.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 3, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_6_1_3.json" + }, + "6.10.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_10_1.json" + }, + "6.10.2": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_10_2.json" + }, + "6.10.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_10_3.json" + }, + "6.11.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_11_1.json" + }, + "6.11.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_11_2.json" + }, + "6.11.3": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_11_3.json" + }, + "6.11.4": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_11_4.json" + }, + "6.11.5": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 502, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_11_5.json" + }, + "6.12.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_12_1.json" + }, + "6.12.2": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_12_2.json" + }, + "6.12.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_12_3.json" + }, + "6.12.4": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_12_4.json" + }, + "6.12.5": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_12_5.json" + }, + "6.12.6": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_12_6.json" + }, + "6.12.7": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_12_7.json" + }, + "6.12.8": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_12_8.json" + }, + "6.13.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_13_1.json" + }, + "6.13.2": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_13_2.json" + }, + "6.13.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_13_3.json" + }, + "6.13.4": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_13_4.json" + }, + "6.13.5": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_13_5.json" + }, + "6.14.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 504, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_14_1.json" + }, + "6.14.10": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_14_10.json" + }, + "6.14.2": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_14_2.json" + }, + "6.14.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_14_3.json" + }, + "6.14.4": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_14_4.json" + }, + "6.14.5": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 517, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_14_5.json" + }, + "6.14.6": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 524, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_14_6.json" + }, + "6.14.7": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 540, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_14_7.json" + }, + "6.14.8": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 543, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_14_8.json" + }, + "6.14.9": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 502, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_14_9.json" + }, + "6.15.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 504, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_15_1.json" + }, + "6.16.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_16_1.json" + }, + "6.16.2": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_16_2.json" + }, + "6.16.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 504, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_16_3.json" + }, + "6.17.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_17_1.json" + }, + "6.17.2": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_17_2.json" + }, + "6.17.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_17_3.json" + }, + "6.17.4": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_17_4.json" + }, + "6.17.5": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_17_5.json" + }, + "6.18.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_18_1.json" + }, + "6.18.2": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_18_2.json" + }, + "6.18.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 502, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_18_3.json" + }, + "6.18.4": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 502, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_18_4.json" + }, + "6.18.5": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 502, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_18_5.json" + }, + "6.19.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_19_1.json" + }, + "6.19.2": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_19_2.json" + }, + "6.19.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 502, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_19_3.json" + }, + "6.19.4": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_19_4.json" + }, + "6.19.5": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_19_5.json" + }, + "6.2.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_2_1.json" + }, + "6.2.2": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_6_2_2.json" + }, + "6.2.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_6_2_3.json" + }, + "6.2.4": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 2, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_6_2_4.json" + }, + "6.20.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 502, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_20_1.json" + }, + "6.20.2": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_20_2.json" + }, + "6.20.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 502, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_20_3.json" + }, + "6.20.4": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_20_4.json" + }, + "6.20.5": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_20_5.json" + }, + "6.20.6": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_20_6.json" + }, + "6.20.7": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 502, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_20_7.json" + }, + "6.21.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 511, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_21_1.json" + }, + "6.21.2": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_21_2.json" + }, + "6.21.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 502, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_21_3.json" + }, + "6.21.4": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 502, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_21_4.json" + }, + "6.21.5": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 502, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_21_5.json" + }, + "6.21.6": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 502, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_21_6.json" + }, + "6.21.7": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 502, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_21_7.json" + }, + "6.21.8": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_21_8.json" + }, + "6.22.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 49, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_1.json" + }, + "6.22.10": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_10.json" + }, + "6.22.11": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_11.json" + }, + "6.22.12": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_12.json" + }, + "6.22.13": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 44, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_13.json" + }, + "6.22.14": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 49, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_14.json" + }, + "6.22.15": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 48, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_15.json" + }, + "6.22.16": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_16.json" + }, + "6.22.17": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_17.json" + }, + "6.22.18": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_18.json" + }, + "6.22.19": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_19.json" + }, + "6.22.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 44, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_2.json" + }, + "6.22.20": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 44, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_20.json" + }, + "6.22.21": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_21.json" + }, + "6.22.22": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_22.json" + }, + "6.22.23": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 47, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_23.json" + }, + "6.22.24": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_24.json" + }, + "6.22.25": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_25.json" + }, + "6.22.26": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_26.json" + }, + "6.22.27": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_27.json" + }, + "6.22.28": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_28.json" + }, + "6.22.29": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 47, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_29.json" + }, + "6.22.3": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 47, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_3.json" + }, + "6.22.30": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_30.json" + }, + "6.22.31": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_31.json" + }, + "6.22.32": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_32.json" + }, + "6.22.33": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_33.json" + }, + "6.22.34": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_34.json" + }, + "6.22.4": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_4.json" + }, + "6.22.5": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_5.json" + }, + "6.22.6": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_6.json" + }, + "6.22.7": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 48, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_7.json" + }, + "6.22.8": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_8.json" + }, + "6.22.9": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_22_9.json" + }, + "6.23.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 50, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_23_1.json" + }, + "6.23.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_23_2.json" + }, + "6.23.3": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_23_3.json" + }, + "6.23.4": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 44, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_23_4.json" + }, + "6.23.5": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_23_5.json" + }, + "6.23.6": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 48, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_23_6.json" + }, + "6.23.7": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_23_7.json" + }, + "6.3.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 1003, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_3_1.json" + }, + "6.3.2": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 3, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_6_3_2.json" + }, + "6.4.1": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 1003, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_6_4_1.json" + }, + "6.4.2": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 1003, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_6_4_2.json" + }, + "6.4.3": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 2004, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_6_4_3.json" + }, + "6.4.4": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 2004, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_6_4_4.json" + }, + "6.5.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 49, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_5_1.json" + }, + "6.5.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 44, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_5_2.json" + }, + "6.5.3": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 47, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_5_3.json" + }, + "6.5.4": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_5_4.json" + }, + "6.5.5": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 47, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_5_5.json" + }, + "6.6.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_6_1.json" + }, + "6.6.10": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_6_10.json" + }, + "6.6.11": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_6_11.json" + }, + "6.6.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_6_2.json" + }, + "6.6.3": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_6_3.json" + }, + "6.6.4": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_6_4.json" + }, + "6.6.5": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 47, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_6_5.json" + }, + "6.6.6": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_6_6.json" + }, + "6.6.7": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 44, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_6_7.json" + }, + "6.6.8": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_6_8.json" + }, + "6.6.9": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 44, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_6_9.json" + }, + "6.7.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 47, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_7_1.json" + }, + "6.7.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 44, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_7_2.json" + }, + "6.7.3": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_7_3.json" + }, + "6.7.4": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_7_4.json" + }, + "6.8.1": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_8_1.json" + }, + "6.8.2": { + "behavior": "FAILED", + "behaviorClose": "FAILED", + "duration": 503, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_6_8_2.json" + }, + "6.9.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 48, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_9_1.json" + }, + "6.9.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 44, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_9_2.json" + }, + "6.9.3": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 46, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_9_3.json" + }, + "6.9.4": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 45, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_6_9_4.json" + }, + "7.1.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 44, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_7_1_1.json" + }, + "7.1.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_7_1_2.json" + }, + "7.1.3": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 3, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_7_1_3.json" + }, + "7.1.4": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_7_1_4.json" + }, + "7.1.5": { + "behavior": "FAILED", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_7_1_5.json" + }, + "7.1.6": { + "behavior": "INFORMATIONAL", + "behaviorClose": "INFORMATIONAL", + "duration": 723, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_7_1_6.json" + }, + "7.13.1": { + "behavior": "INFORMATIONAL", + "behaviorClose": "INFORMATIONAL", + "duration": 1, + "remoteCloseCode": 5000, + "reportfile": "hornbeam_case_7_13_1.json" + }, + "7.13.2": { + "behavior": "INFORMATIONAL", + "behaviorClose": "INFORMATIONAL", + "duration": 2, + "remoteCloseCode": 65535, + "reportfile": "hornbeam_case_7_13_2.json" + }, + "7.3.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 3, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_7_3_1.json" + }, + "7.3.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_7_3_2.json" + }, + "7.3.3": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_7_3_3.json" + }, + "7.3.4": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_7_3_4.json" + }, + "7.3.5": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_7_3_5.json" + }, + "7.3.6": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_7_3_6.json" + }, + "7.5.1": { + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "duration": 1, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_7_5_1.json" + }, + "7.7.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_7_7_1.json" + }, + "7.7.10": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": 3000, + "reportfile": "hornbeam_case_7_7_10.json" + }, + "7.7.11": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": 3999, + "reportfile": "hornbeam_case_7_7_11.json" + }, + "7.7.12": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": 4000, + "reportfile": "hornbeam_case_7_7_12.json" + }, + "7.7.13": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": 4999, + "reportfile": "hornbeam_case_7_7_13.json" + }, + "7.7.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": 1001, + "reportfile": "hornbeam_case_7_7_2.json" + }, + "7.7.3": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": 1002, + "reportfile": "hornbeam_case_7_7_3.json" + }, + "7.7.4": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 4, + "remoteCloseCode": 1003, + "reportfile": "hornbeam_case_7_7_4.json" + }, + "7.7.5": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 2, + "remoteCloseCode": 1007, + "reportfile": "hornbeam_case_7_7_5.json" + }, + "7.7.6": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": 1008, + "reportfile": "hornbeam_case_7_7_6.json" + }, + "7.7.7": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": 1009, + "reportfile": "hornbeam_case_7_7_7.json" + }, + "7.7.8": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 3, + "remoteCloseCode": 1010, + "reportfile": "hornbeam_case_7_7_8.json" + }, + "7.7.9": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 1, + "remoteCloseCode": 1011, + "reportfile": "hornbeam_case_7_7_9.json" + }, + "7.9.1": { + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "duration": 1, + "remoteCloseCode": 0, + "reportfile": "hornbeam_case_7_9_1.json" + }, + "7.9.2": { + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "duration": 2, + "remoteCloseCode": 999, + "reportfile": "hornbeam_case_7_9_2.json" + }, + "7.9.3": { + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "duration": 2, + "remoteCloseCode": 1004, + "reportfile": "hornbeam_case_7_9_3.json" + }, + "7.9.4": { + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "duration": 2, + "remoteCloseCode": 1005, + "reportfile": "hornbeam_case_7_9_4.json" + }, + "7.9.5": { + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "duration": 6, + "remoteCloseCode": 1006, + "reportfile": "hornbeam_case_7_9_5.json" + }, + "7.9.6": { + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "duration": 3, + "remoteCloseCode": 1016, + "reportfile": "hornbeam_case_7_9_6.json" + }, + "7.9.7": { + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "duration": 1, + "remoteCloseCode": 1100, + "reportfile": "hornbeam_case_7_9_7.json" + }, + "7.9.8": { + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "duration": 1, + "remoteCloseCode": 2000, + "reportfile": "hornbeam_case_7_9_8.json" + }, + "7.9.9": { + "behavior": "FAILED", + "behaviorClose": "WRONG CODE", + "duration": 2, + "remoteCloseCode": 2999, + "reportfile": "hornbeam_case_7_9_9.json" + }, + "9.1.1": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 176, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_9_1_1.json" + }, + "9.1.2": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 707, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_9_1_2.json" + }, + "9.1.3": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 3047, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_9_1_3.json" + }, + "9.1.4": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 11433, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_9_1_4.json" + }, + "9.1.5": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 23670, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_9_1_5.json" + }, + "9.1.6": { + "behavior": "OK", + "behaviorClose": "OK", + "duration": 49073, + "remoteCloseCode": 1000, + "reportfile": "hornbeam_case_9_1_6.json" + }, + "9.2.1": { + "behavior": "FAILED", + "behaviorClose": "UNCLEAN", + "duration": 227, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_9_2_1.json" + }, + "9.2.2": { + "behavior": "FAILED", + "behaviorClose": "UNCLEAN", + "duration": 775, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_9_2_2.json" + }, + "9.2.3": { + "behavior": "FAILED", + "behaviorClose": "UNCLEAN", + "duration": 2790, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_9_2_3.json" + }, + "9.2.4": { + "behavior": "FAILED", + "behaviorClose": "UNCLEAN", + "duration": 11015, + "remoteCloseCode": null, + "reportfile": "hornbeam_case_9_2_4.json" + } + } +} \ No newline at end of file diff --git a/autobahn/server.json b/autobahn/server.json new file mode 100644 index 0000000..c887c35 --- /dev/null +++ b/autobahn/server.json @@ -0,0 +1,7 @@ +{ + "url": "ws://127.0.0.1:9001", + "outdir": "./autobahn/client", + "cases": ["*"], + "exclude-cases": [], + "exclude-agent-cases": {} +} diff --git a/hornbeam-autobahn-client/Cargo.toml b/hornbeam-autobahn-client/Cargo.toml new file mode 100644 index 0000000..d183b04 --- /dev/null +++ b/hornbeam-autobahn-client/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "hornbeam-autobahn-client" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +hornbeam = { version = "0.1.0", path = "../hornbeam" } +url = "2.4" +simple_logger = "4.2" +log = "0.4" \ No newline at end of file diff --git a/hornbeam-autobahn-client/src/main.rs b/hornbeam-autobahn-client/src/main.rs new file mode 100644 index 0000000..b9eca75 --- /dev/null +++ b/hornbeam-autobahn-client/src/main.rs @@ -0,0 +1,115 @@ +use std::error::Error; +use std::io::Read; +use std::net::TcpStream; +use std::str::FromStr; +use std::time::Duration; +use log::{debug, error, info}; +use url::Url; +use hornbeam::frame::Message; +use hornbeam::handshake_client::ClientConnectionInfo; +use hornbeam::stream::{MessageReadable, MessageReadError, MessageWritable, MessageWriteError}; + +fn get_case_count() -> u32 { + // ws://localhost:9001/getCaseCount + let mut socket = TcpStream::connect("localhost:9001").unwrap(); + let info = ClientConnectionInfo::from(Url::from_str("ws://localhost:9001/getCaseCount").unwrap()); + info.send_handshake(&mut socket).unwrap(); + let mut ws = info.read_handshake(socket).unwrap(); + let msg = ws.read_message().unwrap(); + ws.close(None, None).unwrap(); + match msg { + hornbeam::frame::Message::Text(s) => s.parse().unwrap(), + _ => panic!("unexpected getCaseCount response") + } +} + +fn update_reports() { + // ws://localhost:9001/updateReports?agent=Hornbeam + let mut socket = TcpStream::connect("localhost:9001").unwrap(); + let info = ClientConnectionInfo::from(Url::from_str("ws://localhost:9001/updateReports?agent=Hornbeam").unwrap()); + info.send_handshake(&mut socket).unwrap(); + let mut ws = info.read_handshake(socket).unwrap(); + ws.close(None, None).unwrap(); +} + +fn run_test(test_id: u32) -> Result<(), MessageReadError> { + info!("Running test case {}", test_id); + + let mut socket = TcpStream::connect("localhost:9001")?; + socket.set_read_timeout(Some(Duration::from_secs(1))).unwrap(); + let info = ClientConnectionInfo::from(Url::from_str(&format!("ws://localhost:9001/runCase?case={}&agent=Hornbeam", test_id)).unwrap()); + info.send_handshake(&mut socket).unwrap(); +/* + loop { + let mut buf: [u8; 1024] = [0u8; 1024]; + let bytes = socket.read(&mut buf).unwrap(); + if bytes == 0 { break; } + let bytes = &buf[0..bytes]; + debug!("{:x?}", bytes); + } + + Ok(()) + + */ + + let mut ws = info.read_handshake(socket).unwrap(); + + loop { + let msg = ws.read_message()?; + match msg { + Message::Text(_) => ws.write_message(msg).unwrap(), + Message::Binary(_) => ws.write_message(msg).unwrap(), + Message::Ping(_) => {} + Message::Pong(_) => {} + } + } +} + +fn main() { + simple_logger::init_with_env().unwrap(); + + info!("-=- Hornbeam Websockets -=-"); + info!("Autobahn Testsuite - Client"); + info!("Fetching case count..."); + + info!("Starting tests..."); + + let mut args = std::env::args(); + + let run; + + if args.len() == 1 { + let case_count = get_case_count(); + run = 1..=case_count; + } else { + let test_number = args.nth(1).unwrap().parse().unwrap(); + run = test_number..=test_number; + } + + info!("Running tests ({:?}) ...", run); + + for test in run { + match run_test(test) { + Ok(_) => {} + Err(e) => match e { + MessageReadError::IoError(e) => { + error!("io error on test {}: {}", test, e); + }, + MessageReadError::FrameReadError(e) => { + error!("frame read error on test {}: {}", test, e); + }, + MessageReadError::ContinuationOutsideFragment => { + error!("continuation outside fragment on test {}", test); + }, + MessageReadError::FrameWriteError(e) => { + error!("frame write error on test {}: {}", test, e); + }, + _ => {} + } + } + } + + info!("Tests complete, generating reports..."); + update_reports(); + info!("All done!"); +} \ No newline at end of file diff --git a/hornbeam/src/frame/frame_ops.rs b/hornbeam/src/frame/frame_ops.rs new file mode 100644 index 0000000..a53faee --- /dev/null +++ b/hornbeam/src/frame/frame_ops.rs @@ -0,0 +1,44 @@ +use crate::frame::{Frame, Message, Opcode}; + +pub trait AsFrame { + /// Gets a Frame for this type, ready to be sent over the network + fn as_frame(&self, mask: bool) -> Frame; +} +pub trait FromFrame { + /// Converts a Frame received over the network into this type, to be passed to the application + fn from_frame(frame: &Frame) -> Self; +} + +impl AsFrame for Message { + fn as_frame(&self, mask: bool) -> Frame { + let (payload, opcode) = match self { + Message::Text(txt) => (txt.as_bytes().to_vec(), Opcode::Text), + Message::Binary(bin) => (bin.clone(), Opcode::Binary), + Message::Ping(bin) => (bin.clone(), Opcode::Ping), + Message::Pong(bin) => (bin.clone(), Opcode::Pong) + }; + Frame { + fin: true, + rsv1: false, + rsv2: false, + rsv3: false, + opcode, + mask, + payload_len: payload.len() as u64, + masking_key: if mask { Some(crate::random::masking_key()) } else { None }, + payload_data: payload, + } + } +} +impl FromFrame for Message { + fn from_frame(frame: &Frame) -> Self { + match frame.opcode { + Opcode::Continuation => panic!("Message::from_frame called with a continuation frame"), + Opcode::Text => Self::Text(String::from_utf8_lossy(&frame.payload_data).to_string()), + Opcode::Binary => Self::Binary(frame.payload_data.clone()), + Opcode::ConnectionClose => panic!("Message::from_frame called with a close frame"), + Opcode::Ping => Self::Ping(frame.payload_data.clone()), + Opcode::Pong => Self::Pong(frame.payload_data.clone()) + } + } +} \ No newline at end of file diff --git a/hornbeam/src/frame/mod.rs b/hornbeam/src/frame/mod.rs index 3964de0..e3d7586 100644 --- a/hornbeam/src/frame/mod.rs +++ b/hornbeam/src/frame/mod.rs @@ -8,39 +8,69 @@ pub mod read; pub mod length; /// Contains functions for frame masking pub mod mask; +/// Contains the AsFrame and FromFrame traits and their implementations for Message +pub mod frame_ops; #[derive(PartialEq, Eq, Clone, Debug)] pub struct Frame { + /// Is this a continuation packet? pub fin: bool, // 1 bit + /// Reserved bit 1 pub rsv1: bool, // 1 bit + /// Reserved bit 2 pub rsv2: bool, // 1 bit + /// Reserved bit 3 pub rsv3: bool, // 1 bit + /// Message opcode pub opcode: Opcode, // 4 bits // -- byte boundary -- + /// Is this message masked? pub mask: bool, // 1 bit + /// How long is the payload pub payload_len: u64, // 7 bits, or 7 + 16 bits, or 7 + 64 bits // -- byte boundary -- + /// If masked, what is the masking key? pub masking_key: Option<[u8; 4]>, // 4 bytes // -- byte boundary -- + /// Payload pub payload_data: Vec<u8> } #[derive(Clone, PartialEq, Eq, Debug)] #[repr(u8)] pub enum Opcode { + /// This message is a continuation of a previous packet Continuation = 0x0, + /// This message is a text packet Text = 0x1, + /// This message is a binary packet Binary = 0x2, + /// This message is a connection close packet ConnectionClose = 0x8, + /// This message is a ping Ping = 0x9, + /// This message is a pong Pong = 0xa } pub trait AsBit { + /// Converts the type into a single-bit representation, using the LSB (rightmost) bit. fn as_bit(&self) -> u8; } impl AsBit for bool { fn as_bit(&self) -> u8 { if *self { 1u8 } else { 0u8 } } +} + +#[derive(Clone, PartialEq, Eq, Debug)] +pub enum Message { + /// A UTF-8 text message + Text(String), + /// An arbitrary binary message + Binary(Vec<u8>), + /// A ping message with arbitrary contents + Ping(Vec<u8>), + /// A pong message with arbitrary contents + Pong(Vec<u8>) } \ No newline at end of file diff --git a/hornbeam/src/frame/read.rs b/hornbeam/src/frame/read.rs index b7a7c68..f1afe78 100644 --- a/hornbeam/src/frame/read.rs +++ b/hornbeam/src/frame/read.rs @@ -32,41 +32,26 @@ impl<R: Read> FrameReadable for R { fn read_frame(&mut self) -> Result<Frame, Self::Error> { // read the first two bytes + trace!("frame read : tinyheader"); let mut first_two = [0u8; 2]; + self.read_exact(&mut first_two)?; + trace!("first two: {:x?}", first_two); + let fin = (first_two[0] & 0b1000_0000) >> 7; let rsv1 = (first_two[0] & 0b0100_0000) >> 6; let rsv2 = (first_two[0] & 0b0010_0000) >> 5; let rsv3 = (first_two[0] & 0b0001_0000) >> 4; - let opcode = first_two[0] & 0b0000_1111; + let opcode_u8 = first_two[0] & 0b0000_1111; - let do_mask = (first_two[1] & 0b1000_0000) >> 7; - let length_without_mask = first_two[1] & 0b0111_1111; + trace!("Frame:"); + trace!(" FIN: {}", fin); + trace!(" RSV1: {}", rsv1); + trace!(" RSV2: {}", rsv2); + trace!(" RSV3: {}", rsv3); - - let length: u64 = WireLength::read_length(length_without_mask, self)?.into(); - - - let mut mask_key = None; - - if do_mask == 1 { - let mut buf = [0u8; 4]; - - self.read_exact(&mut buf)?; - - mask_key = Some(buf); - } - - let mut payload = vec![0u8; length as usize]; - - self.read_exact(&mut payload)?; - - if let Some(key) = mask_key { - mask(&mut payload, key); - } - - let opcode = match opcode { + let opcode = match opcode_u8 { 0 => Opcode::Continuation, 1 => Opcode::Text, 2 => Opcode::Binary, @@ -76,6 +61,46 @@ impl<R: Read> FrameReadable for R { _ => return Err(FrameReadError::InvalidOpcode) }; + trace!(" OP: {} = {:?}", opcode_u8, opcode); + + let do_mask = (first_two[1] & 0b1000_0000) >> 7; + let length_without_mask = first_two[1] & 0b0111_1111; + + trace!(" Mask: {}", do_mask); + trace!(" Length: {}", length_without_mask); + + let length: u64 = WireLength::read_length(length_without_mask, self)?.into(); + + trace!(" Parsed length: {}", length); + + let mut mask_key = None; + + if do_mask == 1 { + let mut buf = [0u8; 4]; + + trace!("reading mask"); + + self.read_exact(&mut buf)?; + + mask_key = Some(buf); + } + + let mut payload; + + if length != 0 { + payload = vec![0u8; length as usize]; + + self.read_exact(&mut payload)?; + + trace!("payload read {:x?}", payload); + + if let Some(key) = mask_key { + mask(&mut payload, key); + } + } else { + payload = vec![]; + } + Ok(Frame { fin: fin == 1, rsv1: rsv1 == 1, @@ -93,8 +118,10 @@ impl<R: Read> FrameReadable for R { #[cfg(test)] mod tests { use std::io::{Cursor, Write}; + use std::sync::Once; use crate::frame::{Frame, Opcode}; use crate::frame::wire::{FrameReadable, FrameWritable}; + use crate::tests::setup_logger; #[test] fn decoding_6455_5_7_a() { @@ -132,5 +159,24 @@ mod tests { }); } + #[test] + fn decoding_autobahn_1_1_1_close_frame() { + setup_logger(); + + let mut buf: Cursor<Vec<u8>> = Cursor::new(vec![0x88, 0x0c, 0x03, 0xe9, 0x47, 0x6f, 0x69, 0x6e, 0x67, 0x20, 0x41, 0x77, 0x61, 0x79]); + + assert_eq!(buf.read_frame().unwrap(), Frame { + fin: true, + rsv1: false, + rsv2: false, + rsv3: false, + opcode: Opcode::ConnectionClose, + mask: false, + payload_len: 12, + masking_key: None, + payload_data: [3, 233, 71, 111, 105, 110, 103, 32, 65, 119, 97, 121].to_vec(), + }); + } + // 5.7(e) and 5.7(f) are skipped because they are impractical to write } \ No newline at end of file diff --git a/hornbeam/src/frame/write.rs b/hornbeam/src/frame/write.rs index 5dd18a1..dec53b0 100644 --- a/hornbeam/src/frame/write.rs +++ b/hornbeam/src/frame/write.rs @@ -35,13 +35,21 @@ impl<W: Write> FrameWritable for W { let flags: u8 = (frame.fin.as_bit() << 7) | (frame.rsv1.as_bit() << 6) | (frame.rsv2.as_bit() << 5) | (frame.rsv3.as_bit() << 4); let opcode: u8 = (frame.opcode.clone()) as u8; let byte_0 = flags | opcode; + + trace!("wrote frame tinyheader, {:b}", byte_0); + self.write_all(&[byte_0])?; // write the mask bit and length WireLength::from(frame.payload_len).write_length(frame.mask, self)?; + trace!("wrote mask and length {}", frame.payload_len); + let mut data = frame.payload_data.clone(); + trace!("data length: {}", data.len()); + trace!("data: {:x?}", data); + if frame.mask { if let Some(key) = frame.masking_key { self.write_all(&key)?; diff --git a/hornbeam/src/handshake_client.rs b/hornbeam/src/handshake_client.rs index 07e064f..ba26d84 100644 --- a/hornbeam/src/handshake_client.rs +++ b/hornbeam/src/handshake_client.rs @@ -1,12 +1,14 @@ use std::error::Error; use std::fmt::{Display, Formatter}; use std::io; -use std::io::{Read, Write}; +use std::io::{BufReader, Chain, Cursor, Read, Write}; use std::string::FromUtf8Error; use url::Url; use crate::b64::impl_b64::base64_encode; use crate::handshake_common::{derive_handshake_response, HeaderMap, WEBSOCKET_PROTOCOL_VERSION}; use crate::random::websocket_client_key; +use crate::splittable::Splittable; +use crate::stream::WebsocketStream; /// Contains the information needed to perform the WebSocket client handshake. Create from a URL with `ClientConnectionInfo::from(url)`, /// or build from it's components with `ClientConnectionInfo::build()`. @@ -147,13 +149,25 @@ impl ClientConnectionInfo { /// # Errors /// This function will return an error if the handshake fails for any reason. /// See `ClientHandshakeError` for more details. - pub fn send_handshake<W: Write>(&self, w: &mut W) -> Result<(), ClientHandshakeSendError> { - let resource_url = self.url.path().to_string() + self.url.query().unwrap_or(""); + pub fn send_handshake<W: Read + Write>(&self, w: &mut W) -> Result<(), ClientHandshakeSendError> { + let mut resource_url = self.url.path().to_string(); + + if let Some(query) = self.url.query() { + resource_url += "?"; + resource_url += query; + } + + debug!("resource URL: {}", resource_url); + + let mut host = self.url.host_str().ok_or(ClientHandshakeSendError::UrlMissingHost)?.to_string(); + if let Some(port) = self.url.port() { + host += &format!(":{}", port); + } // send the handshake: // 1. HTTP GET write!(w, "GET {resource_url} HTTP/1.1\r\n")?; - write!(w, "Host: {}\r\n", self.url.host_str().ok_or(ClientHandshakeSendError::UrlMissingHost)?)?; + write!(w, "Host: {}\r\n", host)?; write!(w, "Upgrade: websocket\r\n")?; write!(w, "Connection: upgrade\r\n")?; write!(w, "Sec-WebSocket-Key: {}\r\n", crate::b64::impl_b64::base64_encode(&self.websocket_key))?; @@ -174,29 +188,51 @@ impl ClientConnectionInfo { Ok(()) } - /// Read the WebSocket handshake response from the given stream. + /// Read the WebSocket handshake response from the given stream, upgrading it to a WebsocketStream. /// # Errors /// This function will return an error in many circumstances. See `ClientHandshakeRecvError` for details. - pub fn read_handshake<R: Read>(&self, r: &mut R) -> Result<(), ClientHandshakeRecvError> { + pub fn read_handshake<S: Read + Write + Splittable>(&self, mut stream: S) -> Result<WebsocketStream<Chain<Cursor<Vec<u8>>, S>, S>, ClientHandshakeRecvError> { // read until we see the double \r\n let mut read_bytes = vec![]; let mut read_buf = [0u8; 1024]; + + let mut extra_bytes = vec![]; + loop { - let read = r.read(&mut read_buf)?; + let read = stream.read(&mut read_buf)?; + + debug!("read {}", read); if read == 0 { return Err(ClientHandshakeRecvError::UnexpectedEOF); } - read_bytes.extend_from_slice(&read_buf[0..read-1]); + debug!("{:x?}", &read_buf[0..read-1]); + + read_bytes.extend_from_slice(&read_buf[0..read]); if read_bytes.ends_with(&[0x0d, 0x0a, 0x0d]) || read_bytes.ends_with(&[0x0d, 0x0a, 0x0d, 0x0a]) { // we have hit the end of the server ws handshake break; } + // we might have read a bit into the first packet + // go through one by one to see if it was there + // this is ok, because its the handshake, and its ok to be slow here + let mut should_break = false; + for i in 0..read_bytes.len() { + let read_slice = &read_bytes[0..i+1]; + if read_slice.ends_with(&[0x0d, 0x0a, 0x0d, 0x0a]) { + extra_bytes = read_bytes[i+1..].to_vec(); + debug!("extra bytes: {:x?}", extra_bytes); + read_bytes = read_slice.to_vec(); + should_break = true; + break; + } + } + if should_break { break; } } - debug!("read {:?} bytes from server, parsing as handshake", read_bytes); + debug!("read {:x?} bytes from server, parsing as handshake", read_bytes); let handshake_response = String::from_utf8(read_bytes)?; @@ -259,7 +295,7 @@ impl ClientConnectionInfo { return Err(ClientHandshakeRecvError::MissingSecWebsocketAccept); } - Ok(()) + Ok(WebsocketStream::create(true, stream, extra_bytes)) } } @@ -280,14 +316,9 @@ mod tests { use std::io::{Cursor}; use std::net::TcpStream; use std::str::FromStr; - use std::sync::Once; use url::Url; use crate::handshake_client::ClientConnectionInfo; - - static LOG: Once = Once::new(); - fn setup_logger() { - LOG.call_once(|| simple_logger::init().unwrap()); - } + use crate::tests::setup_logger; #[test] fn client_handshake_test() { @@ -329,7 +360,7 @@ mod tests { let mut tcpstream = TcpStream::connect("10.16.1.1:3204").unwrap(); client.send_handshake(&mut tcpstream).unwrap(); - client.read_handshake(&mut tcpstream).unwrap(); + client.read_handshake(tcpstream).unwrap(); panic!(); } diff --git a/hornbeam/src/lib.rs b/hornbeam/src/lib.rs index b7f1243..2883ba4 100644 --- a/hornbeam/src/lib.rs +++ b/hornbeam/src/lib.rs @@ -84,4 +84,17 @@ pub mod random; pub(crate) mod b64; /// WebSocket frame encoding and decoding -pub mod frame; \ No newline at end of file +pub mod frame; + +/// Adds a generic TryClone method to allow for generalization of it +pub mod splittable; + +#[cfg(test)] +pub(crate) mod tests { + use std::sync::Once; + + static LOG: Once = Once::new(); + pub(crate) fn setup_logger() { + LOG.call_once(|| simple_logger::init().unwrap()); + } +} \ No newline at end of file diff --git a/hornbeam/src/splittable.rs b/hornbeam/src/splittable.rs new file mode 100644 index 0000000..21d1502 --- /dev/null +++ b/hornbeam/src/splittable.rs @@ -0,0 +1,10 @@ +use std::net::TcpStream; + +pub trait Splittable { + fn try_split(&self) -> std::io::Result<Self> where Self: Sized; +} +impl Splittable for TcpStream { + fn try_split(&self) -> std::io::Result<Self> where Self: Sized { + self.try_clone() + } +} \ No newline at end of file diff --git a/hornbeam/src/stream.rs b/hornbeam/src/stream.rs index 0c723a8..3bab287 100644 --- a/hornbeam/src/stream.rs +++ b/hornbeam/src/stream.rs @@ -1,4 +1,301 @@ -/// An upgraded TCP stream, used to send WebSocket frames. -pub struct WebsocketStream { - enable_masking: bool +use std::error::Error; +use std::fmt::{Display, Formatter}; +use std::io; +use std::io::{Chain, Cursor, ErrorKind, Read, Write}; +use std::string::FromUtf8Error; +use crate::frame::{Frame, Message, Opcode}; +use crate::frame::frame_ops::{AsFrame, FromFrame}; +use crate::frame::read::FrameReadError; +use crate::frame::wire::{FrameReadable, FrameWritable}; +use crate::frame::write::FrameWriteError; +use crate::random::masking_key; +use crate::splittable::Splittable; + +/// An upgraded TCP stream, used to send WebSocket messages. +pub struct WebsocketStream<R: Read, W: Write> { + enable_masking: bool, + read: R, + write: W, + is_in_fragment: bool, + fragment_buf: Vec<u8>, + fragment_opcode: Opcode, + closing: bool, + closed: bool, + close_code: Option<u16>, + close_message: Option<String> +} + +impl<S: Read + Write + Splittable> WebsocketStream<Chain<Cursor<Vec<u8>>, S>, S> { + pub(crate) fn create(mask: bool, stream: S, extra_bytes: Vec<u8>) -> Self { + let extra_bytes_cur = Cursor::new(extra_bytes); + Self { + enable_masking: mask, + read: extra_bytes_cur.chain(stream.try_split().unwrap()), + write: stream, + is_in_fragment: false, + fragment_buf: vec![], + fragment_opcode: Opcode::Continuation, + closed: false, + closing: false, + close_code: None, + close_message: None + } + } +} + +impl<R: Read, W: Write> FrameWritable for WebsocketStream<R, W> { + type Error = FrameWriteError; + + fn write_frame(&mut self, frame: &Frame) -> Result<(), Self::Error> { + self.write.write_frame(frame) + } +} + +impl<R: Read, W: Write> FrameReadable for WebsocketStream<R, W> { + type Error = FrameReadError; + + fn read_frame(&mut self) -> Result<Frame, Self::Error> { + loop { + let res = self.read.read_frame(); + match res { + Ok(f) => return Ok(f), + Err(e) => { + match e { + FrameReadError::IoError(e) if matches!(e.kind(), ErrorKind::WouldBlock) => { + continue; + } + _ => return Err(e) + } + } + } + } + } +} + +pub trait MessageReadable<M: FromFrame>: FrameReadable { + type Err; + + fn read_message(&mut self) -> Result<M, Self::Err>; +} +pub trait MessageWritable: FrameWritable { + type Err; + + fn write_message(&mut self, msg: impl AsFrame) -> Result<(), Self::Err>; +} + +#[derive(Debug)] +pub enum MessageReadError { + /// An IO error occured while reading the message + IoError(io::Error), + /// An error occured while reading the frame + FrameReadError(FrameReadError), + /// Received a continuation frame while not processing a fragment + ContinuationOutsideFragment, + /// The connection was closed + ConnectionClosed { + code: Option<u16>, + message: Option<String> + }, + /// There was an error writing a response to an internal frame to the stream + FrameWriteError(FrameWriteError), + /// There was an error parsing a UTF-8 byte literal + FromUtf8Error(FromUtf8Error) +} +impl Display for MessageReadError { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + match self { + Self::IoError(e) => write!(f, "io error: {}", e), + Self::FrameReadError(e) => write!(f, "frame read error: {}", e), + Self::ContinuationOutsideFragment => write!(f, "received continuation frame while not in fragment"), + Self::ConnectionClosed { code, message } => { + write!(f, "channel closed (code: {:?}, message: {:?})", code, message) + }, + Self::FrameWriteError(e) => write!(f, "frame write error: {}", e), + Self::FromUtf8Error(e) => write!(f, "invalid UTF-8: {}", e) + } + } +} +impl Error for MessageReadError {} +impl From<io::Error> for MessageReadError { + fn from(value: io::Error) -> Self { + Self::IoError(value) + } +} +impl From<FrameReadError> for MessageReadError { + fn from(value: FrameReadError) -> Self { + Self::FrameReadError(value) + } +} +impl From<FrameWriteError> for MessageReadError { + fn from(value: FrameWriteError) -> Self { + Self::FrameWriteError(value) + } +} +impl From<FromUtf8Error> for MessageReadError { + fn from(value: FromUtf8Error) -> Self { + Self::FromUtf8Error(value) + } +} + +impl<R: Read, W: Write> MessageReadable<Message> for WebsocketStream<R, W> { + type Err = MessageReadError; + + fn read_message(&mut self) -> Result<Message, Self::Err> { + // loop until we have a full message to send upwards + loop { + debug!("reading a frame"); + // read a frame + let frame = self.read_frame()?; + + debug!("read frame {} bytes, opcode {:?}", frame.payload_len, frame.opcode); + + if frame.opcode == Opcode::Continuation && self.is_in_fragment { + self.fragment_buf.extend_from_slice(&frame.payload_data); + if frame.fin { + // fragment over + let mut frame = frame; + frame.payload_data = self.fragment_buf.clone(); + frame.opcode = self.fragment_opcode.clone(); + frame.payload_len = frame.payload_data.len() as u64; + self.is_in_fragment = false; + self.fragment_buf = vec![]; + self.fragment_opcode = Opcode::Continuation; + return Ok(Message::from_frame(&frame)); + } + // fragment not over, keep loopin' + continue; + } + + return match frame.opcode { + Opcode::Continuation => Err(MessageReadError::ContinuationOutsideFragment), + Opcode::Text | Opcode::Binary | Opcode::Ping | Opcode::Pong => Ok(Message::from_frame(&frame)), + Opcode::ConnectionClose => { + if !self.closing { + // send a response + self.write_frame(&Frame { + fin: true, + rsv1: false, + rsv2: false, + rsv3: false, + opcode: Opcode::ConnectionClose, + mask: self.enable_masking, + payload_len: 2, + masking_key: if self.enable_masking { Some(masking_key()) } else { None }, + payload_data: vec![0x03, 0xe8], + })?; + } + self.closed = true; + if frame.payload_len == 2 { + // just has a close reason + let close_code = [frame.payload_data[0], frame.payload_data[1]]; + let close_code = u16::from_be_bytes(close_code); + self.close_code = Some(close_code); + return Err(MessageReadError::ConnectionClosed { + code: Some(close_code), + message: None + }) + } else if frame.payload_len > 2 { + // close reason and message + let close_code = [frame.payload_data[0], frame.payload_data[1]]; + let close_code = u16::from_be_bytes(close_code); + + let close_message = &frame.payload_data[2..]; + let close_message = String::from_utf8(close_message.to_vec())?; + self.close_code = Some(close_code); + self.close_message = Some(close_message.clone()); + return Err(MessageReadError::ConnectionClosed { + code: Some(close_code), + message: Some(close_message) + }) + } + Err(MessageReadError::ConnectionClosed { + code: None, + message: None + }) + } + } + } + } +} + +#[derive(Debug)] +pub enum MessageWriteError { + /// An IO error occured while reading the message + IoError(io::Error), + /// The connection is closed + ConnectionClosed { + code: Option<u16>, + message: Option<String> + }, + /// There was an error writing the frame + FrameWriteError(FrameWriteError), +} +impl Display for MessageWriteError { + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { + match self { + Self::IoError(e) => write!(f, "io error: {}", e), + Self::ConnectionClosed { code, message } => { + write!(f, "channel closed (code: {:?}, message: {:?})", code, message) + }, + Self::FrameWriteError(e) => write!(f, "frame write error: {}", e), + } + } +} +impl Error for MessageWriteError {} +impl From<io::Error> for MessageWriteError { + fn from(value: io::Error) -> Self { + Self::IoError(value) + } +} +impl From<FrameWriteError> for MessageWriteError { + fn from(value: FrameWriteError) -> Self { + Self::FrameWriteError(value) + } +} + +impl<R: Read, W: Write> MessageWritable for WebsocketStream<R, W> { + type Err = MessageWriteError; + + fn write_message(&mut self, msg: impl AsFrame) -> Result<(), Self::Err> { + if self.closed { + return Err(MessageWriteError::ConnectionClosed { + code: self.close_code, + message: self.close_message.clone() + }); + } + + self.write_frame(&msg.as_frame(self.enable_masking))?; + + Ok(()) + } +} + +impl<R: Read, W: Write> WebsocketStream<R, W> { + pub fn close(&mut self, code: Option<u16>, message: Option<String>) -> Result<(), MessageWriteError> { + self.closing = true; + self.close_code = code; + self.close_message = message; + + let mut payload = vec![]; + if let Some(c) = code { + payload.extend_from_slice(&c.to_be_bytes()); + } + if let Some(t) = self.close_message.as_ref() { + payload.extend_from_slice(&t.as_bytes()) + } + + self.write_frame(&Frame { + fin: true, + rsv1: false, + rsv2: false, + rsv3: false, + opcode: Opcode::ConnectionClose, + mask: self.enable_masking, + payload_len: payload.len() as u64, + masking_key: if self.enable_masking { Some(masking_key()) } else { None }, + payload_data: payload, + })?; + + Ok(()) + } } \ No newline at end of file