def testGetHtAccess(self): os.environ['REQUEST_METHOD'] = 'GET' os.environ['QUERY_STRING'] = 'path=/.htaccess' sys.stdin = StringIO("") (headers, body) = generic.GenericMain() self.assertEqual(headers['Status'], "403 Forbidden") self.assertEqual(headers['Content-Type'], "text/plain")
def testInvalidRangeUnit(self): os.environ['REQUEST_METHOD'] = 'GET' os.environ['QUERY_STRING'] = 'path=/' os.environ['HTTP_RANGE'] = 'updated=3-7,9-123' (headers, body) = generic.GenericMain() self.assertEqual(headers['Status'], "500 Internal Server Error") self.assertFalse(headers.has_key('Vary'))
def testGet(self): os.environ['REQUEST_METHOD'] = 'GET' os.environ['QUERY_STRING'] = 'path=/3.txt' sys.stdin = StringIO("") (headers, body) = generic.GenericMain() self.assertEqual(headers['Status'], "200 Ok") self.assertEqual(headers['Content-Type'], "text/plain") self.assertEqual(body.read(), "Hello World\n")
def testDeleteNonExistent(self): os.environ['REQUEST_METHOD'] = 'DELETE' os.environ['QUERY_STRING'] = 'path=//fred.txt' sys.stdin = StringIO("Hi Planet!") fullpath = os.path.join(generic.datadir, '.htaccess') self.assert_(os.path.exists(fullpath)) (headers, body) = generic.GenericMain() self.assertEqual(headers['Status'], "403 Forbidden") self.assert_(os.path.exists(fullpath))
def testDelete(self): os.environ['REQUEST_METHOD'] = 'DELETE' os.environ['QUERY_STRING'] = 'path=/2.txt' sys.stdin = StringIO("Hi Planet!") fullpath = os.path.join(generic.datadir, '2.txt') self.assert_(os.path.exists(fullpath)) (headers, body) = generic.GenericMain() self.assertEqual(headers['Status'], "200 Ok") self.assertFalse(os.path.exists(fullpath))
def testCreateNewMember(self): os.environ['REQUEST_METHOD'] = 'POST' os.environ['QUERY_STRING'] = 'path=/' os.environ['CONTENT_TYPE'] = 'text/plain' sys.stdin = StringIO("Hi Planet!") (headers, body) = generic.GenericMain() self.assertEqual(headers['Status'], "201 Created") self.assertTrue(headers.has_key('Location')) (doc, ctxt) = parseBody(body)
def testPutHtAccess(self): os.environ['REQUEST_METHOD'] = 'PUT' os.environ['QUERY_STRING'] = 'path=/.htaccess' sys.stdin = StringIO("") (headers, body) = generic.GenericMain() self.assertEqual(headers['Status'], "403 Forbidden") self.assertEqual(headers['Content-Type'], "text/plain") fullpath = os.path.join(generic.datadir, '3.txt') f = file(fullpath, "r") self.assertEqual(f.read(), "Hello World\n") f.close()
def testPut(self): os.environ['REQUEST_METHOD'] = 'PUT' os.environ['QUERY_STRING'] = 'path=/3.txt' sys.stdin = StringIO("This is a replacement.") (headers, body) = generic.GenericMain() self.assertEqual(headers['Status'], "200 Ok") self.assertEqual(headers['Content-Type'], "text/plain") fullpath = os.path.join(generic.datadir, '3.txt') f = file(fullpath, "r") self.assertEqual(f.read(), "This is a replacement.") f.close()
def testCreateNoDirSymbols(self): os.environ['REQUEST_METHOD'] = 'POST' os.environ['QUERY_STRING'] = 'path=/' os.environ['CONTENT_TYPE'] = 'text/plain' os.environ['HTTP_NAME'] = '.fred/../.htaccess' sys.stdin = StringIO("Hi Planet!") (headers, body) = generic.GenericMain() self.assertEqual(headers['Status'], "201 Created") self.assertTrue(headers.has_key('Location')) (doc, ctxt) = parseBody(body) self.assertEqual("fred...htaccess.asc", ctxt.xpathEval("//ac:member/@title")[0].get_content())
def testUnknownRangeUnit(self): os.environ['REQUEST_METHOD'] = 'GET' os.environ['QUERY_STRING'] = 'path=/' os.environ['HTTP_RANGE'] = 'znarfbits=3-7,9-123' (headers, body) = generic.GenericMain() self.assertEqual(headers['Status'], "200 Ok") self.assertFalse(headers.has_key('Vary')) self.assertEqual(headers['Accept-Ranges'], "updated") (doc, ctxt) = parseBody(body) self.assertEqual(3, len(ctxt.xpathEval("//ac:collection/ac:member"))) self.assertEqual( 'http://bitworking.org/projects/pyapp/genericedit/_/3', ctxt.xpathEval("//ac:collection/@next")[0].get_content())
def testAllInRanges(self): os.environ['REQUEST_METHOD'] = 'GET' os.environ['QUERY_STRING'] = 'path=/' os.environ[ 'HTTP_RANGE'] = 'updated=2005-08-15T15:19:45+05:00/2005-08-15T15:19:49+05:00' (headers, body) = generic.GenericMain() self.assertEqual(headers['Status'], "200 Ok") self.assertEqual(headers['Vary'], "Range") (doc, ctxt) = parseBody(body) self.assertEqual(5, len(ctxt.xpathEval("//ac:collection/ac:member"))) self.assertEqual( '', ctxt.xpathEval("//ac:collection/@next")[0].get_content())
def testGetBasic2(self): os.environ['REQUEST_METHOD'] = 'GET' os.environ['QUERY_STRING'] = 'path=/&block=3' os.environ['HTTP_RANGE'] = '' (headers, body) = generic.GenericMain() self.assertEqual(headers['Status'], "200 Ok") self.assertEqual(headers['Content-Type'], "application/atomcoll+xml") self.assertEqual(headers['Accept-Ranges'], "updated") (doc, ctxt) = parseBody(body) self.assertEqual(2, len(ctxt.xpathEval("//ac:collection/ac:member"))) self.assertEqual( '', ctxt.xpathEval("//ac:collection/@next")[0].get_content())
def testCreateWithName(self): os.environ['REQUEST_METHOD'] = 'POST' os.environ['QUERY_STRING'] = 'path=/' os.environ['CONTENT_TYPE'] = 'text/plain' os.environ['HTTP_NAME'] = 'fred.txt' sys.stdin = StringIO("Hi Planet!") (headers, body) = generic.GenericMain() self.assertEqual(headers['Status'], "201 Created") self.assertTrue(headers.has_key('Location')) (doc, ctxt) = parseBody(body) self.assertEqual("fred.txt", ctxt.xpathEval("//ac:member/@title")[0].get_content()) self.assertEqual( generic.static + "fred.txt", ctxt.xpathEval("//ac:member/@hrefreadonly")[0].get_content()) self.assertEqual(generic.dynamic + "fred.txt", ctxt.xpathEval("//ac:member/@href")[0].get_content())
def testGetBasic(self): os.environ['REQUEST_METHOD'] = 'GET' os.environ['QUERY_STRING'] = 'path=/&block=0' os.environ['HTTP_RANGE'] = '' (headers, body) = generic.GenericMain() self.assertEqual(headers['Status'], "200 Ok") self.assertEqual(headers['Content-Type'], "application/atomcoll+xml") self.assertEqual(headers['Accept-Ranges'], "updated") (doc, ctxt) = parseBody(body) # Only 3 member's are returned self.assertEqual(3, len(ctxt.xpathEval("//ac:collection/ac:member"))) # The second member is 2.txt self.assertEqual("2.txt", ctxt.xpathEval("//ac:member/@title")[1].get_content()) # We have the right pointer to the 'next' document self.assertEqual( 'http://bitworking.org/projects/pyapp/genericedit/_/3', ctxt.xpathEval("//ac:collection/@next")[0].get_content())