From 7d27853a4d21041b0b759289345cd5edae524d40 Mon Sep 17 00:00:00 2001 From: C Robert Date: Mon, 28 Sep 2009 20:47:27 +0000 Subject: [PATCH] Added maildav test script, added definition for MOVE command in webdavlib Monotone-Parent: fcece651323f876baef1d1d08bc52772b67ce6a4 Monotone-Revision: aaff100260149e4a5e6eec5c546d0f957293c6a9 Monotone-Author: crobert@inverse.ca Monotone-Date: 2009-09-28T20:47:27 Monotone-Branch: ca.inverse.sogo --- Tests/test-maildav.py | 113 ++++++++++++++++++++++++++++++++++++++++++ Tests/webdavlib.py | 15 ++++++ 2 files changed, 128 insertions(+) create mode 100755 Tests/test-maildav.py diff --git a/Tests/test-maildav.py b/Tests/test-maildav.py new file mode 100755 index 000000000..847ffc6bb --- /dev/null +++ b/Tests/test-maildav.py @@ -0,0 +1,113 @@ +#!/usr/bin/python + +from config import hostname, port, username, password, subscriber_username, subscriber_password + +import sys +import unittest +import webdavlib +import time + +def fetchUserEmail(login): + client = webdavlib.WebDAVClient(hostname, port, + username, password) + resource = '/SOGo/dav/%s/' % login + propfind = webdavlib.WebDAVPROPFIND(resource, + ["{urn:ietf:params:xml:ns:caldav}calendar-user-address-set"], + 0) + propfind.xpath_namespace = { "D": "DAV:", + "C": "urn:ietf:params:xml:ns:caldav" } + client.execute(propfind) + nodes = propfind.xpath_evaluate('/D:multistatus/D:response/D:propstat/D:prop/C:calendar-user-address-set/D:href', + None) + + return nodes[0].childNodes[0].nodeValue + +class DAVMailTest(unittest.TestCase): + resource = None + + def setUp(self): + self.client = webdavlib.WebDAVClient(hostname, port, + username, password) + #delete = webdavlib.WebDAVDELETE(self.davResource) + #self.client.execute(delete) + #mkcol = webdavlib.WebDAVMKCOL(self.resource) + #self.client.execute(mkcol) + #self.assertEquals(mkcol.response["status"], 201, + # "preparation: failure creating collection" + # "(code = %d)" % mkcol.response["status"]) + #self.subscriber_client = webdavlib.WebDAVClient(hostname, port, + # subscriber_username, + # subscriber_password) + +# def tearDown(self): + #delete = webdavlib.WebDAVDELETE(self.davResource) + #self.client.execute(delete) + + +class DAVMailCollectionTest(DAVMailTest): + resource = '/SOGo/dav/%s/Mail/' % username + user_email = None + + def setUp(self): + if self.user_email is None: + self.user_email = fetchUserEmail(username) + if self.user_email.startswith ("mailto:"): + self.user_email = self.user_email[7:] + + self.resource = '/SOGo/dav/%s/Mail/%s/' \ + % (username, self.user_email) + self.davResource = '/SOGo/dav/%s/Mail/%s/' \ + % (username, self.user_email) + + DAVMailTest.setUp(self) + + def testGeneric(self): + """Test folder creation / listing""" + self._makeCollection ("test-dav-mail-%40-abc") + self._deleteCollection ("test-dav-mail-%40-abc") + self._makeCollection ("test-dav-mail-@-def") + self._deleteCollection ("test-dav-mail-@-def") + self._makeCollection ("test-dav-mail-%20-ghi") + self._deleteCollection ("test-dav-mail-%20-ghi") + self._makeCollection ("test-dav-mail-%25-jkl", 500) + +# self._makeCollection ("test-dav-mail-movable") +# url = "%sfolder%s" % (self.resource, "test-dav-mail-movable") +# move = webdavlib.WebDAVMOVE (url) +# move.destination = "http://cyril.dev%s%s2" % (self.resource, "test-dav-mail-movable") +# move.host = "cyril.dev" +# self.client.execute (move) +# self.assertEquals(move.response["status"], 204, +# "failure creating collection" +# "(code = %d)" % move.response["status"]) + + def _makeCollection (self, name, status = 201): + url = "%s%s" % (self.davResource, name) + mkcol = webdavlib.WebDAVMKCOL(url) + self.client.execute(mkcol) + self.assertEquals(mkcol.response["status"], status, + "failure creating collection" + "(code = %d)" % mkcol.response["status"]) + + def _deleteCollection (self, name, status = 204): + url = "%sfolder%s" % (self.davResource, name) + delete = webdavlib.WebDAVDELETE(url) + self.client.execute(delete) + self.assertEquals(delete.response["status"], status, + "failure deleting collection" + "(code = %d)" % delete.response["status"]) + + def _putMessage(self, client, filename, + exp_status = 201): + url = "%s%s" % (self.davResource, filename) + put = webdavlib.HTTPPUT(url, message) + put.content_type = "text/plain; charset=utf-8" + client.execute(put) + self.assertEquals(put.response["status"], exp_status, + "%s: event creation/modification:" + " expected status code '%d' (received '%d')" + % (filename, exp_status, put.response["status"])) + +if __name__ == "__main__": + unittest.main() + diff --git a/Tests/webdavlib.py b/Tests/webdavlib.py index d82703b5b..e0860757b 100644 --- a/Tests/webdavlib.py +++ b/Tests/webdavlib.py @@ -167,6 +167,21 @@ class WebDAVPROPFIND(WebDAVQuery): prop_tag = self.render_tag(prop) props.append(_WD_XMLTreeElement(prop_tag)) +class WebDAVMOVE(WebDAVQuery): + method = "MOVE" + destination = None + host = None + + def prepare_headers(self): + headers = WebDAVQuery.prepare_headers(self) + print "DESTINATION", self.destination + if self.destination is not None: + headers["Destination"] = self.destination + if self.host is not None: + headers["Host"] = self.host + return headers + + class CalDAVPOST(WebDAVQuery): method = "POST"