pass 1.1 and 1.2 of the autobahn

This commit is contained in:
core 2023-08-10 17:51:29 -04:00
parent bdeb371b1a
commit 41fcd2223f
Signed by: core
GPG Key ID: FDBF740DADDCEECF
528 changed files with 135812 additions and 48 deletions

View File

@ -2,6 +2,7 @@
<module type="CPP_MODULE" version="4"> <module type="CPP_MODULE" version="4">
<component name="NewModuleRootManager"> <component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$"> <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-client/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/hornbeam/src" isTestSource="false" /> <sourceFolder url="file://$MODULE_DIR$/hornbeam/src" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" /> <excludeFolder url="file://$MODULE_DIR$/target" />

10
Cargo.lock generated
View File

@ -166,6 +166,16 @@ dependencies = [
"url", "url",
] ]
[[package]]
name = "hornbeam-autobahn-client"
version = "0.1.0"
dependencies = [
"hornbeam",
"log",
"simple_logger",
"url",
]
[[package]] [[package]]
name = "hornbeam-client" name = "hornbeam-client"
version = "0.1.0" version = "0.1.0"

View File

@ -1,5 +1,6 @@
[workspace] [workspace]
members = [ members = [
"hornbeam", "hornbeam",
"hornbeam-client" "hornbeam-client",
"hornbeam-autobahn-client"
] ]

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

File diff suppressed because it is too large Load Diff

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

File diff suppressed because it is too large Load Diff

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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
]
]
}

View File

@ -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>

View File

@ -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
]
]
}

View File

@ -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>

View File

@ -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
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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
]
]
}

View File

@ -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>

View File

@ -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
]
]
}

View File

@ -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>

View File

@ -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
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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"
]
]
}

View File

@ -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>

View File

@ -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
]
]
}

View File

@ -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>

View File

@ -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
]
]
}

View File

@ -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>

View File

@ -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
]
]
}

View File

@ -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>

View File

@ -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
]
]
}

View File

@ -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>

View File

@ -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
]
]
}

View File

@ -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>

Some files were not shown because too many files have changed in this diff Show More