def testSUAccess(self): """create, read, modify, delete for superuser""" event = event_template % { "class": "PUBLIC", "filename": self.filename, "organizer_line": "", "attendee_line": "" } # 1. Create put = webdavlib.HTTPPUT(self.url, event) put.content_type = "text/calendar; charset=utf-8" self.client.execute(put) self.assertEquals( put.response["status"], 201, "%s: event creation/modification:" " expected status code '201' (received '%d')" % (self.filename, put.response["status"])) # 2. Read readEvent = self._getEvent() self.assertEquals(readEvent, event, "GET: returned event does not match") readEvent = self._propfindEvent() self.assertEquals(readEvent, event, "PROPFIND: returned event does not match") readEvent = self._multigetEvent() self.assertEquals(readEvent, event, "MULTIGET: returned event does not match") readEvent = self._webdavSyncEvent() self.assertEquals(readEvent, event, "WEBDAV-SYNC: returned event does not match") # 3. Modify for eventClass in ["CONFIDENTIAL", "PRIVATE", "PUBLIC"]: event = event_template % { "class": eventClass, "filename": self.filename, "organizer_line": "", "attendee_line": "" } put = webdavlib.HTTPPUT(self.url, event) put.content_type = "text/calendar; charset=utf-8" self.client.execute(put) self.assertEquals( put.response["status"], 204, "%s: event modification failed" " expected status code '204' (received '%d')" % (self.filename, put.response["status"])) # 4. Delete delete = webdavlib.WebDAVDELETE(self.url) self.client.execute(delete) self.assertEquals( delete.response["status"], 204, "%s: event deletion failed" " expected status code '204' (received '%d')" % (self.filename, put.response["status"]))
def _putEvent(self, client, filename, event_class="PUBLIC", exp_status=201, organizer=None, attendee=None, partstat="NEEDS-ACTION"): url = "%s%s" % (self.resource, filename) if organizer is not None: organizer_line = "ORGANIZER:%s\n" % organizer else: organizer_line = "" if attendee is not None: attendee_line = "ATTENDEE;PARTSTAT=%s:%s\n" % (partstat, attendee) else: attendee_line = "" event = event_template % { "class": event_class, "filename": filename, "organizer_line": organizer_line, "attendee_line": attendee_line } put = webdavlib.HTTPPUT(url, event) put.content_type = "text/calendar; 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"]))
def testPUT(self): gen = ev_generator.ev_generator(testput_nbrdays) counter = 1 while gen.iter(): event = gen.event url = self.resource + "event-%d.ics" % counter put = webdavlib.HTTPPUT(url, event) put.content_type = "text/calendar; charset=utf-8" self.client.execute(put) counter = counter + 1
def _putTask(self, client, filename, task_class="PUBLIC", exp_status=201): url = "%s%s" % (self.resource, filename) task = task_template % {"class": task_class, "filename": filename} put = webdavlib.HTTPPUT(url, task) put.content_type = "text/calendar; charset=utf-8" client.execute(put) self.assertEquals( put.response["status"], exp_status, "%s: task creation/modification:" " expected status code '%d' (received '%d')" % (filename, exp_status, put.response["status"]))
def _putCard(self, client, filename, exp_status, real_card = None): url = "%s%s" % (self.resource, filename) if real_card is None: real_card = filename card = self.cards[real_card] put = webdavlib.HTTPPUT(url, card) put.content_type = "text/x-vcard; charset=utf-8" client.execute(put) self.assertEquals(put.response["status"], exp_status, "%s: card creation/modification:" " expected status code '%d' (received '%d')" % (filename, exp_status, put.response["status"]))
def _putMessage(self, client, folder, message, exp_status = 201): url = "%sfolder%s" % (self.resource, folder) put = webdavlib.HTTPPUT(url, message) put.content_type = "message/rfc822" client.execute(put) if (exp_status is not None): self.assertEquals(put.response["status"], exp_status, "message creation/modification:" " expected status code '%d' (received '%d')" % (exp_status, put.response["status"])) return put.response["headers"]["location"]
def testPUT(self): """Message creation""" self._deleteCollection("test-dav-mail") self._makeCollection("test-dav-mail") # message creation on collection url url = "%s%s" % (self.resource, "foldertest-dav-mail/") put = webdavlib.HTTPPUT(url, message1) put.content_type = "message/rfc822" self.client.execute(put) self.assertEquals(put.response["status"], 201, "failure putting message" "(code = %d)" % put.response["status"]) itemLocation = put.response["headers"]["location"] get = webdavlib.WebDAVGET(itemLocation) self.client.execute(get) self.assertEquals(get.response["status"], 200, "failure getting item" "(code = %d)" % get.response["status"]) # message creation with explicit filename url = "%s%s" %(self.resource, "foldertest-dav-mail/blabla.eml") put = webdavlib.HTTPPUT(url, message1) put.content_type = "message/rfc822" self.client.execute(put) self.assertEquals(put.response["status"], 201, "failure putting message" "(code = %d)" % put.response["status"]) itemLocation = put.response["headers"]["location"] get = webdavlib.WebDAVGET(itemLocation) self.client.execute(get) self.assertEquals(get.response["status"], 200, "failure getting item" "(code = %d)" % get.response["status"]) self._deleteCollection("test-dav-mail")
def testPROPFIND(self): """Message properties""" self._deleteCollection ("test-dav-mail") self._makeCollection ("test-dav-mail") url = "%s%s" % (self.resource, "foldertest-dav-mail/") put = webdavlib.HTTPPUT (url, message1) put.content_type = "message/rfc822" self.client.execute (put) self.assertEquals(put.response["status"], 201, "failure putting message" "(code = %d)" % put.response["status"]) itemLocation = put.response["headers"]["location"] tests = (("{urn:schemas:httpmail:}date", 1254156134, 1), ("{urn:schemas:httpmail:}hasattachment", "0", 0), ("{urn:schemas:httpmail:}read", "0", 0), ("{urn:schemas:httpmail:}textdescription", "<![CDATA[%s]]>" % message1, 0), ("{urn:schemas:httpmail:}unreadcount", None, 0), ("{urn:schemas:mailheader:}cc", "[email protected], [email protected]", 0), ("{urn:schemas:mailheader:}date", "Mon, 28 Sep 2009 11:42:14 GMT", 0), ("{urn:schemas:mailheader:}from", "Cyril <*****@*****.**>", 0), ("{urn:schemas:mailheader:}in-reply-to", None, 0), ("{urn:schemas:mailheader:}message-id", "<*****@*****.**>", 0), ("{urn:schemas:mailheader:}received", message1_received, 0), ("{urn:schemas:mailheader:}references", "<*****@*****.**>", 0), ("{urn:schemas:mailheader:}subject", "message1subject", 0), ("{urn:schemas:mailheader:}to", "*****@*****.**", 0)) for test in tests: property, expected, isDate = test self._testProperty(itemLocation, property, expected, isDate) self._deleteCollection ("test-dav-mail")
def uploadEntries(self, entries, extension, mimeType): isatty = sys.stdout.isatty() # enable progressive display of summary success = 0 failure = 0 client = webdavlib.WebDAVClient(self.webdavConfig["hostname"], self.webdavConfig["port"], self.webdavConfig["username"], self.webdavConfig["password"]) collection = '/SOGo/dav/%s/Contacts/personal' % self.currentUser mkcol = webdavlib.WebDAVMKCOL(collection) client.execute(mkcol) for entryName in entries.keys(): entry = entries[entryName] if entry.has_key("data"): fullFilename = "%s.%s" % (entry["filename"], extension) url = "%s/%s" % (collection, fullFilename) put = webdavlib.HTTPPUT(url, entry["data"]) put.content_type = mimeType client.execute(put) if (put.response["status"] < 200 or put.response["status"] > 399): failure = failure + 1 print " error uploading '%s': %d" \ % (fullFilename, put.response["status"]) else: success = success + 1 if isatty: print "\r successes: %d; failures: %d" % (success, failure), if (success + failure) % 5 == 0: sys.stdout.flush() if isatty: print "" else: if (success + failure) > 0: print " successes: %d; failures: %d\n" % (success, failure) sys.stdout.flush()
def _putEvent(self, client, filename, event, exp_status=201): put = webdavlib.HTTPPUT(filename, event.serialize()) put.content_type = "text/calendar; charset=utf-8" client.execute(put) if exp_status is not None: self.assertEquals(put.response["status"], exp_status)