Expand examples for responses, remove dupes from pathod doc.

This commit is contained in:
Aldo Cortesi 2012-07-25 12:18:36 +12:00
parent 0b916ebbb1
commit 87306164a6
3 changed files with 31 additions and 109 deletions

View File

@ -32,97 +32,6 @@ various other goodies. Try it by visiting the server root:</p>
<pre class="example">http://localhost:9999</pre> <pre class="example">http://localhost:9999</pre>
<section id="specifying_responses">
<div class="page-header">
<h1>Specifying Responses</h1>
</div>
<p>The general form of a response is as follows:
<pre class="example">code[MESSAGE]:[colon-separated list of features]</pre></p>
<p>Here's the simplest possible response specification, returning just an HTTP 200
OK message with no headers and no content:
<pre class="example">200</pre></p>
<p>We can embellish this a bit by specifying an optional custom HTTP response
message (if we don't, pathod automatically creates an appropriate one). By
default for a 200 response code the message is "OK", but we can change it like
this:</p>
<pre class="example">200"YAY"</pre>
<p>The quoted string here is an example of a <a href=/docs/language#valuespec>Value
Specifier</a>, a syntax that is used throughout the pathod response
specification language. In this case, the quotes mean we're specifying a
literal string, but there are many other fun things we can do. For example, we
can tell pathod to generate 100k of random ASCII letters instead:</p>
<pre class="example">200:@100k,ascii_letters</pre>
<p>Full documentation on the value specification syntax can be found in the next
section.
Following the response code specifier is a colon-separated list of features.
For instance, this specifies a response with a body consisting of 1 megabyte of
random data:</p>
<pre class="example">200:b@1m</pre>
<p>And this is the same response with an ETag header added:</p>
<pre class="example">200:b@1m:h"Etag"="foo"</pre>
<p>Both the header name and the header value are full value specifiers. Here's the
same response again, but with a 1k randomly generated header name:</p>
<pre class="example">200:b@1m:h@1k,ascii_letters="foo"</pre>
<p>A few specific headers have shortcuts, because they're used so often. The
shortcut for the content-type header is "c":</p>
<pre class="example">200:b@1m:c"text/json"</pre>
<p>That's it for the basic response definition. Now we can start mucking with the
responses to break clients. One common hard-to-test circumstance is hangs or
slow responses. pathod has a pause operator that you can use to define
precisely when and how long the server should hang. Here, for instance, we hang
for 120 seconds after sending 50 bytes (counted from the first byte of the HTTP
response):</p>
<pre class="example">200:b@1m:p50,120</pre>
<p>If that's not long enough, we can tell pathod to hang forever:</p>
<pre class="example">200:b@1m:pf,120</pre>
<p>Or to send all data, and then hang without disconnecting:</p>
<pre class="example">200:b@1m:pa,120</pre>
<p>We can also ask pathod to hang randomly:</p>
<pre class="example">200:b@1m:pr,10</pre>
<p>There is a similar mechanism for dropping connections mid-response. So, we can
tell pathod to disconnect after sending 50 bytes:</p>
<pre class="example">200:b@1m:d50</pre>
<p>Or randomly:</p>
<pre class="example">200:b@1m:dr</pre>
<p>All of these features can be combined. Here's a response that pauses twice,
once at 10 bytes and once at 20, then disconnects at 5000:</p>
<pre class="example">200:b@1m:p10,10:p20,10:d5000</pre>
<section id="api"> <section id="api">
<div class="page-header"> <div class="page-header">
<h1>API</h1> <h1>API</h1>

View File

@ -10,34 +10,34 @@
<input type="submit" class="btn" value="preview"> <input type="submit" class="btn" value="preview">
</form> </form>
<a data-toggle="collapse" data-target="#requestexamples">more examples...</a> <a data-toggle="collapse" data-target="#requestexamples">Don't know what to type?</a>
<div id="requestexamples" class="collapse"> <div id="requestexamples" class="collapse">
<p>Check out the <a href="/docs/language">complete language docs</a>. Here
are some examples to get you started:</p>
<table class="table table-bordered"> <table class="table table-bordered">
<tbody > <tbody >
<tr> <tr>
<td><a href="/request_preview?spec=get:/">get:/</a></td> <td><a href="/request_preview?spec=get:/">get:/</a></td>
<td>Get path /</td> <td>Get path /</td>
</tr> </tr>
</tbody>
<tbody >
<tr> <tr>
<td><a href="/request_preview?spec=get:/:b@100">get:/:b@100</a></td> <td><a href="/request_preview?spec=get:/:b@100">get:/:b@100</a></td>
<td>100 random bytes as the body</td> <td>100 random bytes as the body</td>
</tr> </tr>
</tbody>
<tbody >
<tr> <tr>
<td><a href='/request_preview?spec=get:/:h"User-Agent"="&apos;;drop table browsers;"'>get:/:h"User-Agent"="';drop table browsers;"</a></td> <td><a href='/request_preview?spec=get:/:h"User-Agent"="&apos;;drop table browsers;"'>get:/:h"User-Agent"="';drop table browsers;"</a></td>
<td>Add a User-Agent header</td> <td>Add a User-Agent header</td>
</tr> </tr>
</tbody>
<tbody>
<tr> <tr>
<td><a href="/request_preview?spec=get:/:b@100:dr">get:/:b@100:dr</a></td> <td><a href="/request_preview?spec=get:/:b@100:dr">get:/:b@100:dr</a></td>
<td>Drop the connection randomly</td> <td>Drop the connection randomly</td>
</tr> </tr>
</tbody> <tr>
<tbody> <td><a href="/request_preview?spec="></a></td>
<td></td>
</tr>
<tr> <tr>
<td><a href="/request_preview?spec=get:/:b@100,ascii:ir,@1">get:/:b@100,ascii:ir,@1</a></td> <td><a href="/request_preview?spec=get:/:b@100,ascii:ir,@1">get:/:b@100,ascii:ir,@1</a></td>
<td>100 ASCII bytes as the body, and randomly inject a random byte</td> <td>100 ASCII bytes as the body, and randomly inject a random byte</td>

View File

@ -13,38 +13,51 @@
{% endif %} {% endif %}
</form> </form>
<a data-toggle="collapse" data-target="#responseexamples">more examples...</a> <a data-toggle="collapse" data-target="#responseexamples">Don't know what to type?</a>
<div id="responseexamples" class="collapse"> <div id="responseexamples" class="collapse">
<p>Check out the <a href="/docs/language">complete language docs</a>. Here
are some examples to get you started:</p>
<table class="table table-bordered"> <table class="table table-bordered">
<tbody > <tbody >
<tr> <tr>
<td><a href="/response_preview?spec=200">200</a></td> <td><a href="/response_preview?spec=200">200</a></td>
<td>A basic HTTP 200 response</td> <td>A basic HTTP 200 response</td>
</tr> </tr>
</tbody>
<tbody >
<tr> <tr>
<td><a href="/response_preview?spec=200:b@100">200:b@100</a></td> <td><a href="/response_preview?spec=200:b@100">200:b@100</a></td>
<td>100 random bytes as the body</td> <td>100 random bytes as the body</td>
</tr> </tr>
</tbody>
<tbody >
<tr> <tr>
<td><a href='/response_preview?spec=200:b@100:h"Server"="&apos;;drop table servers;"'>200:b@100:h"Etag"="';drop table servers;"</a></td> <td><a href='/response_preview?spec=200:b@100:h"Server"="&apos;;drop table servers;"'>200:b@100:h"Etag"="';drop table servers;"</a></td>
<td>Add a Server header</td> <td>Add a Server header</td>
</tr> </tr>
</tbody>
<tbody>
<tr> <tr>
<td><a href="/response_preview?spec=200:b@100:dr">200:b@100:dr</a></td> <td><a href="/response_preview?spec=200:b@100:dr">200:b@100:dr</a></td>
<td>Drop the connection randomly</td> <td>Drop the connection randomly</td>
</tr> </tr>
</tbody>
<tbody>
<tr> <tr>
<td><a href="/response_preview?spec=200:b@100,ascii:ir,@1">200:b@100,ascii:ir,@1</a></td> <td><a href="/response_preview?spec=200:b@100,ascii:ir,@1">200:b@100,ascii:ir,@1</a></td>
<td>100 ASCII bytes as the body, and randomly inject a random byte</td> <td>100 ASCII bytes as the body, and randomly inject a random byte</td>
</tr> </tr>
<tr>
<td><a href='/response_preview?spec=200:b@1k:c"text/json"'>200:b@1k:c"text/json"</a></td>
<td>1k of random bytes, with a text/json content type</td>
</tr>
<tr>
<td><a href='/response_preview?spec=200:b@1k:p50,120'>200:b@1k:p50,120</a></td>
<td>1k of random bytes, pause for 120 seconds after 50 bytes</td>
</tr>
<tr>
<td><a href='/response_preview?spec=200:b@1k:pr,f'>200:b@1k:pr,f</a></td>
<td>1k of random bytes, but hang forever at a random location</td>
</tr>
<tr>
<td>
<a href="/response_preview?spec=200:b@100:h@1k,ascii_letters='foo'">200:b@100:h@1k,ascii_letters='foo'</a>
</td>
<td>100 ASCII bytes as the body, randomly generated 100k header name, with the value 'foo'.</td>
</tr>
</tbody> </tbody>
</table> </table>
</div> </div>