Ejemplo n.º 1
0
    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"]))
Ejemplo n.º 2
0
 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"]))
Ejemplo n.º 3
0
 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
Ejemplo n.º 4
0
 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"]))
Ejemplo n.º 5
0
 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"]))
Ejemplo n.º 6
0
 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"]
Ejemplo n.º 7
0
  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")
Ejemplo n.º 8
0
  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")
Ejemplo n.º 9
0
    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()
Ejemplo n.º 10
0
 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)