Summary: 0 errors, 10 warnings.
TESTING: Service document and collections.
✓ Retrieval of Service Document: it exists and is served properly. [Dialog]
Found these collections:
'My AtomPub Collection 0' accepts application/atom+xml;type=entry
'My AtomPub Collection 1' accepts application/atom+xml;type=entry
'My AtomPub Collection 2' accepts application/atom+xml;type=entry
Will use collection 'My AtomPub Collection 0' for entry creation.
✓ Page 1 of Entry collection: it exists and is served properly. [Dialog]
✓ Entry collection has correct app:edited value order.
TESTING: Entry-posting basics.
Now in the Entries feed:
✓ Posting of new entry to the Entries collection reported success, Location: http://0.0.0.0:1234/my_collection_0/38173b72e05e76dbcd598b06e8459e6d [Dialog]
Examining the new entry as returned in the POST response
✓ Returned entry is consistent with posted entry.
✓ Provided categories included in Returned entry.
✓ Server preserved foreign markup in Returned entry.
✓ Retrieval of newly created entry: it exists and is served properly. [Dialog]
Examining the new entry as retrieved using Location header in POST response:
? Client-provided slug 'ape-20124' not used in server-generated URI.
? 'summary' has type='html' in entry as posted, type='text' in Retrieved entry.
? 'content' has type='xhtml' in entry as posted, type='text' in Retrieved entry.
? Provided category not in Retrieved entry: <atom:category term='simians' scheme='http://tbray.org/cat-test' xmlns:atom='http://www.w3.org/2005/Atom'/>
? Server discarded foreign markup in Retrieved entry.
Examining the new entry as it appears in the collection feed:
? 'summary' has type='html' in entry as posted, type='text' in Entry from collection feed.
? 'content' has type='xhtml' in entry as posted, type='text' in Entry from collection feed.
? Provided category not in Entry from collection feed: <atom:category term='simians' scheme='http://tbray.org/cat-test' xmlns:atom='http://www.w3.org/2005/Atom'/>
? Server discarded foreign markup in Entry from collection feed.
✓ Update of new entry reported success. [Dialog]
✓ Title of new entry successfully updated.
✓ Entry deletion reported success. [Dialog]
✓ Entry not found in feed after deletion.
TESTING: Collection re-ordering after PUT.
✓ Page 1 of Entries with multi-post: it exists and is served properly. [Dialog]
✓ Entries with multi-post has correct app:edited value order.
✓ Entries correctly ordered after multi-post.
✓ Page 1 of Entries post-update: it exists and is served properly. [Dialog]
✓ Entries post-update has correct app:edited value order.
✓ Entry deletion reported success.
✓ Entry deletion reported success.
✓ Entry deletion reported success.
✓ Entries correctly ordered after update of multi-post.
TESTING: Content sanitization
✓ Retrieval of unclean XHTML entry: it exists and is served properly. [Dialog]
✓ Entry deletion reported success.
✓ Published entry appears to be sanitized.
? No collection for 'image/jpeg', won't test media posting.
To server:
GET /my_collection_0 HTTP/1.1\r
Accept: */*\r
Host: 0.0.0.0:1234\r
\r
From Server:
HTTP/1.1 200 OK\r
Connection: close\r
Date: Thu, 30 Oct 2008 04:01:51 GMT\r
Content-Type: application/atom+xml\r
Content-Length: 1839\r
\r
<feed xml:base='http://0.0.0.0:1234/my_collection_0' xmlns='http://www.w3.org/2005/Atom'><title type='text'>My AtomPub Collection 0</title><entry><id>http://0.0.0.0:1234/my_collection_0/ab5d084ee590fe778ce1b6255cf4b81c</id><title type='text'>Entry Mini-4</title><content type='text'>Content of Mini-4</content><published>2008-10-30T05:01:47+01:00</published><updated>2008-10-30T05:01:51+01:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2008-10-30T05:01:51+01:00</app:edited><link href='http://0.0.0.0:1234/my_collection_0/ab5d084ee590fe778ce1b6255cf4b81c' rel='edit'/></entry><entry><id>http://0.0.0.0:1234/my_collection_0/79e8150b08aec56c7fe3644287a0c648</id><title type='text'>Entry Mini Three</title><content type='text'>Content of Mini Three</content><published>2008-10-30T05:01:49+01:00</published><updated>2008-10-30T05:01:49+01:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2008-10-30T05:01:49+01:00</app:edited><link href='http://0.0.0.0:1234/my_collection_0/79e8150b08aec56c7fe3644287a0c648' rel='edit'/></entry><entry><id>http://0.0.0.0:1234/my_collection_0/a93b87f5177e332afba381475abad764</id><title type='text'>Entry Mini One</title><content type='text'>Content of Mini One</content><published>2008-10-30T05:01:45+01:00</published><updated>2008-10-30T05:01:45+01:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2008-10-30T05:01:45+01:00</app:edited><link href='http://0.0.0.0:1234/my_collection_0/a93b87f5177e332afba381475abad764' rel='edit'/></entry><entry><title type='text'>Sample Entry 0</title><content type='text'>Content of the entry number 0.</content><updated>2008-01-01T00:00:00+01:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2008-01-01T00:00:00+01:00</app:edited><link href='http://0.0.0.0:1234/my_collection_0/entry_0' rel='edit'/></entry></feed>
To server:
PUT /my_collection_0/38173b72e05e76dbcd598b06e8459e6d HTTP/1.1\r
Accept: */*\r
Content-Type: application/atom+xml;type=entry\r
Content-Length: 822\r
Host: 0.0.0.0:1234\r
\r
<?xml version="1.0" ?>
<entry xmlns="http://www.w3.org/2005/Atom">
<id>http://0.0.0.0:1234/my_collection_0/38173b72e05e76dbcd598b06e8459e6d</id>
<title>Let\342\200\231s all do the Ape!</title>
<author><name>The Atom Protocol Exerciser</name></author>
<updated>2008-10-30T05:01:43+01:00</updated>
<link href='http://www.tbray.org/ape'/>
<summary type='html'>Summary from the <b>&lt;&nbsp;APE&nbsp;></b> at 2008-10-30T05:01:43+01:00</summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>A test post from the <APE> at \#{updated}</p>
<p>If you see this in an entry, it's probably a left-over from an
unsuccessful Ape run; feel free to delete it.</p>
</div>
</content>
<dc:subject xmlns:dc='http://purl.org/dc/elements/1.1/'>Simians</dc:subject>
</entry>
From Server:
HTTP/1.1 200 OK\r
Connection: close\r
Date: Thu, 30 Oct 2008 04:01:43 GMT\r
Location: http://0.0.0.0:1234/my_collection_0/38173b72e05e76dbcd598b06e8459e6d\r
Content-Type: application/atom+xml;type=entry\r
Content-Length: 991\r
\r
<entry xmlns='http://www.w3.org/2005/Atom'><id>http://0.0.0.0:1234/my_collection_0/38173b72e05e76dbcd598b06e8459e6d</id><title type='text'>Let\342\200\231s all do the Ape!</title><summary type='html'>Summary from the <b>&lt;&nbsp;APE&nbsp;></b> at 2008-10-30T05:01:43+01:00</summary><content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>A test post from the <APE> at \#{updated}</p>
<p>If you see this in an entry, it's probably a left-over from an
unsuccessful Ape run; feel free to delete it.</p>
</div></content><updated>2008-10-30T05:01:43+01:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2008-10-30T05:01:43+01:00</app:edited><author><name>The Atom Protocol Exerciser</name></author><link href='http://www.tbray.org/ape' rel='alternate'/><link href='http://0.0.0.0:1234/my_collection_0/38173b72e05e76dbcd598b06e8459e6d' rel='edit'/><dc:subject xmlns:dc='http://purl.org/dc/elements/1.1/'>Simians</dc:subject></entry>
To server:
POST /my_collection_0 HTTP/1.1\r
Slug: ape-20124\r
Accept: */*\r
Content-Type: application/atom+xml;type=entry\r
Content-Length: 915\r
Host: 0.0.0.0:1234\r
\r
<?xml version='1.0' ?>
<entry xmlns='http://www.w3.org/2005/Atom'>
<id>tag:tbray.org,2005:73678781421751768713544278734</id>
<title>From the <APE> (\343\202\265\343\203\253)</title>
<author><name>The Atom Protocol Exerciser</name></author>
<updated>2008-10-30T05:01:43+01:00</updated>
<link href='http://www.tbray.org/ape'/>
<summary type='html'>Summary from the <b>&lt;&nbsp;APE&nbsp;></b> at 2008-10-30T05:01:43+01:00</summary>
<content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>A test post from the <APE> at \#{updated}</p>
<p>If you see this in an entry, it's probably a left-over from an
unsuccessful Ape run; feel free to delete it.</p>
</div>
</content>
<dc:subject xmlns:dc='http://purl.org/dc/elements/1.1/'>Simians</dc:subject>
<atom:category term='simians' scheme='http://tbray.org/cat-test' xmlns:atom='http://www.w3.org/2005/Atom'/></entry>
From Server:
HTTP/1.1 201 Created\r
Connection: close\r
Date: Thu, 30 Oct 2008 04:01:43 GMT\r
Location: http://0.0.0.0:1234/my_collection_0/38173b72e05e76dbcd598b06e8459e6d\r
Content-Type: application/atom+xml;type=entry\r
Content-Length: 1127\r
\r
<entry xmlns='http://www.w3.org/2005/Atom'><id>tag:tbray.org,2005:73678781421751768713544278734</id><title type='text'>From the <APE> (\343\202\265\343\203\253)</title><summary type='html'>Summary from the <b>&lt;&nbsp;APE&nbsp;></b> at 2008-10-30T05:01:43+01:00</summary><content type='xhtml'><div xmlns='http://www.w3.org/1999/xhtml'>
<p>A test post from the <APE> at \#{updated}</p>
<p>If you see this in an entry, it's probably a left-over from an
unsuccessful Ape run; feel free to delete it.</p>
</div></content><published>2008-10-30T05:01:43+01:00</published><updated>2008-10-30T05:01:43+01:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2008-10-30T05:01:43+01:00</app:edited><author><name>The Atom Protocol Exerciser</name></author><category term='simians' scheme='http://tbray.org/cat-test' xmlns:atom='http://www.w3.org/2005/Atom'/><link href='http://www.tbray.org/ape' rel='alternate'/><link href='http://0.0.0.0:1234/my_collection_0/38173b72e05e76dbcd598b06e8459e6d' rel='edit'/><dc:subject xmlns:dc='http://purl.org/dc/elements/1.1/'>Simians</dc:subject></entry>
To server:
GET /my_collection_0 HTTP/1.1\r
Accept: */*\r
Host: 0.0.0.0:1234\r
\r
From Server:
HTTP/1.1 200 OK\r
Connection: close\r
Date: Thu, 30 Oct 2008 04:01:49 GMT\r
Content-Type: application/atom+xml\r
Content-Length: 1843\r
\r
<feed xml:base='http://0.0.0.0:1234/my_collection_0' xmlns='http://www.w3.org/2005/Atom'><title type='text'>My AtomPub Collection 0</title><entry><id>http://0.0.0.0:1234/my_collection_0/79e8150b08aec56c7fe3644287a0c648</id><title type='text'>Entry Mini Three</title><content type='text'>Content of Mini Three</content><published>2008-10-30T05:01:49+01:00</published><updated>2008-10-30T05:01:49+01:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2008-10-30T05:01:49+01:00</app:edited><link href='http://0.0.0.0:1234/my_collection_0/79e8150b08aec56c7fe3644287a0c648' rel='edit'/></entry><entry><id>http://0.0.0.0:1234/my_collection_0/ab5d084ee590fe778ce1b6255cf4b81c</id><title type='text'>Entry Mini Two</title><content type='text'>Content of Mini Two</content><published>2008-10-30T05:01:47+01:00</published><updated>2008-10-30T05:01:47+01:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2008-10-30T05:01:47+01:00</app:edited><link href='http://0.0.0.0:1234/my_collection_0/ab5d084ee590fe778ce1b6255cf4b81c' rel='edit'/></entry><entry><id>http://0.0.0.0:1234/my_collection_0/a93b87f5177e332afba381475abad764</id><title type='text'>Entry Mini One</title><content type='text'>Content of Mini One</content><published>2008-10-30T05:01:45+01:00</published><updated>2008-10-30T05:01:45+01:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2008-10-30T05:01:45+01:00</app:edited><link href='http://0.0.0.0:1234/my_collection_0/a93b87f5177e332afba381475abad764' rel='edit'/></entry><entry><title type='text'>Sample Entry 0</title><content type='text'>Content of the entry number 0.</content><updated>2008-01-01T00:00:00+01:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2008-01-01T00:00:00+01:00</app:edited><link href='http://0.0.0.0:1234/my_collection_0/entry_0' rel='edit'/></entry></feed>
To server:
GET /my_collection_0 HTTP/1.1\r
Accept: */*\r
Host: 0.0.0.0:1234\r
\r
From Server:
HTTP/1.1 200 OK\r
Connection: close\r
Date: Thu, 30 Oct 2008 04:01:42 GMT\r
Content-Type: application/atom+xml\r
Content-Length: 465\r
\r
<feed xml:base='http://0.0.0.0:1234/my_collection_0' xmlns='http://www.w3.org/2005/Atom'><title type='text'>My AtomPub Collection 0</title><entry><title type='text'>Sample Entry 0</title><content type='text'>Content of the entry number 0.</content><updated>2008-01-01T00:00:00+01:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2008-01-01T00:00:00+01:00</app:edited><link href='http://0.0.0.0:1234/my_collection_0/entry_0' rel='edit'/></entry></feed>
To server:
GET / HTTP/1.1\r
Accept: */*\r
Host: 0.0.0.0:1234\r
\r
From Server:
HTTP/1.1 200 OK\r
Connection: close\r
Date: Thu, 30 Oct 2008 04:01:42 GMT\r
Content-Type: application/atomsvc+xml\r
Content-Length: 728\r
\r
<service xmlns='http://www.w3.org/2007/app'><workspace><collection href='http://0.0.0.0:1234/my_collection_0'><accept>application/atom+xml;type=entry</accept><atom:title type='text' xmlns:atom='http://www.w3.org/2005/Atom'>My AtomPub Collection 0</atom:title></collection><collection href='http://0.0.0.0:1234/my_collection_1'><accept>application/atom+xml;type=entry</accept><atom:title type='text' xmlns:atom='http://www.w3.org/2005/Atom'>My AtomPub Collection 1</atom:title></collection><collection href='http://0.0.0.0:1234/my_collection_2'><accept>application/atom+xml;type=entry</accept><atom:title type='text' xmlns:atom='http://www.w3.org/2005/Atom'>My AtomPub Collection 2</atom:title></collection></workspace></service>
To server:
GET /my_collection_0/6adc36f839a1733afbac5113a9d24731 HTTP/1.1\r
Accept: */*\r
Host: 0.0.0.0:1234\r
\r
From Server:
HTTP/1.1 200 OK\r
Connection: close\r
Date: Thu, 30 Oct 2008 04:01:52 GMT\r
Content-Type: application/atom+xml;type=entry\r
Content-Length: 993\r
\r
<entry xmlns='http://www.w3.org/2005/Atom'><id>http://0.0.0.0:1234/my_collection_0/6adc36f839a1733afbac5113a9d24731</id><title type='text'>Unclean!</title><summary type='text'>
<p>hey</p>
<script src='http://www.example.com/xxx'/>
<script>alert('XXX')</script>
<p background='javascript:alert(&apos;XSS&apos;)' id='x1'>Hey</p>
</summary><content type='text'>
<p id='x2' style='...whatever...'>OK</p><object>No No No</object>
<a href='/no-problemo'>aah</a><a href='javascript:evil'>ouch</a>
</content><published>2008-10-30T05:01:52+01:00</published><updated>2008-10-30T05:01:52+01:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2008-10-30T05:01:52+01:00</app:edited><link href='http://0.0.0.0:1234/my_collection_0/6adc36f839a1733afbac5113a9d24731' rel='edit'/></entry>
To server:
GET /my_collection_0/38173b72e05e76dbcd598b06e8459e6d HTTP/1.1\r
Accept: */*\r
Host: 0.0.0.0:1234\r
\r
From Server:
HTTP/1.1 200 OK\r
Connection: close\r
Date: Thu, 30 Oct 2008 04:01:43 GMT\r
Content-Type: application/atom+xml;type=entry\r
Content-Length: 900\r
\r
<entry xmlns='http://www.w3.org/2005/Atom'><id>http://0.0.0.0:1234/my_collection_0/38173b72e05e76dbcd598b06e8459e6d</id><title type='text'>From the <APE> (\343\202\265\343\203\253)</title><summary type='text'>Summary from the <b>&lt;&nbsp;APE&nbsp;></b> at 2008-10-30T05:01:43+01:00</summary><content type='text'>
<p>A test post from the &lt;APE&gt; at \#{updated}</p>
<p>If you see this in an entry, it's probably a left-over from an
unsuccessful Ape run; feel free to delete it.</p>
</content><published>2008-10-30T05:01:43+01:00</published><updated>2008-10-30T05:01:43+01:00</updated><app:edited xmlns:app='http://www.w3.org/2007/app'>2008-10-30T05:01:43+01:00</app:edited><link href='http://www.tbray.org/ape' rel='alternate'/><link href='http://0.0.0.0:1234/my_collection_0/38173b72e05e76dbcd598b06e8459e6d' rel='edit'/></entry>