From 674f0f908fa4c44f986b151a6447066ccdb7a3c0 Mon Sep 17 00:00:00 2001 From: Ludovic Marcotte Date: Thu, 10 May 2012 21:33:39 +0000 Subject: [PATCH 1/2] Slightly updated to guide Monotone-Parent: 0240947c2fe36b028b988b7133a239ffbc323558 Monotone-Revision: 82335b9404ce69f30e311f831868f8d13e598a46 Monotone-Author: ludovic@Sophos.ca Monotone-Date: 2012-05-10T21:33:39 --- Documentation/SOGo Installation Guide.odt | Bin 156092 -> 155987 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/Documentation/SOGo Installation Guide.odt b/Documentation/SOGo Installation Guide.odt index d2e057c278e4b5e5522bc681cee7469b74cd7b11..c9f49e63a8a8b4a3556a308bdfcf0278c140b442 100644 GIT binary patch delta 41000 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 delta 41210 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 YCp6Qit)uJ1=}dw2DES6YQWD_50IF-IeE Date: Fri, 11 May 2012 16:20:45 +0000 Subject: [PATCH 2/2] * SoObjects/Appointments/SOGoAppointmentObject.m (PUTAction): Delete bitrotten code that could end up duplicating attendees. Behavior exposed by the new caldav tests * Tests/Integration/config.py.in * Tests/Integration/test-caldav-scheduling.py * Tests/Integration/test-ical.py * Tests/Integration/test-davacl.py: Use an unprivileged webdavclient where possible. This would have uncovered the resources calendar autocreation bug. * Tests/Integration/test-caldav-scheduling.py: New tests to excercise somewhat fragile code in dav autoscheduling. Monotone-Parent: 82335b9404ce69f30e311f831868f8d13e598a46 Monotone-Revision: 1ed6d11b3a404920b5f62a1b03c4a035d5bd53b3 Monotone-Author: jraby@inverse.ca Monotone-Date: 2012-05-11T16:20:45 --- ChangeLog | 16 + .../Appointments/SOGoAppointmentObject.m | 10 - Tests/Integration/config.py.in | 14 +- Tests/Integration/test-caldav-scheduling.py | 401 +++++++++++++----- Tests/Integration/test-davacl.py | 11 +- Tests/Integration/test-ical.py | 13 +- 6 files changed, 345 insertions(+), 120 deletions(-) diff --git a/ChangeLog b/ChangeLog index cf5e3dbdb..edcca9b9d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2012-05-09 Jean Raby + + * SoObjects/Appointments/SOGoAppointmentObject.m (PUTAction): + Delete bitrotten code that could end up duplicating attendees. + Behavior exposed by the new caldav tests + + * Tests/Integration/config.py.in + * Tests/Integration/test-caldav-scheduling.py + * Tests/Integration/test-ical.py + * Tests/Integration/test-davacl.py: + Use an unprivileged webdavclient where possible. + This would have uncovered the resources calendar autocreation bug. + + * Tests/Integration/test-caldav-scheduling.py: + New tests to excercise somewhat fragile code in dav autoscheduling. + 2012-05-09 Jean Raby * SoObject/SOGo/SOGoParentFolder.m (_createPersonalFolder): diff --git a/SoObjects/Appointments/SOGoAppointmentObject.m b/SoObjects/Appointments/SOGoAppointmentObject.m index 50f02bc98..37924103b 100644 --- a/SoObjects/Appointments/SOGoAppointmentObject.m +++ b/SoObjects/Appointments/SOGoAppointmentObject.m @@ -1891,16 +1891,6 @@ inRecurrenceExceptionsForEvent: (iCalEvent *) theEvent // one from the request. [rq setContent: [[[newEvent parent] versitString] dataUsingEncoding: [rq contentEncoding]]]; } - - // A RECURRENCE-ID was removed so there has to be a change in the master event - // We could also have an EXDATE added in the master component of the attendees - // so we always compare the MASTER event. - if (!master) - { - newEvent = [newEvents objectAtIndex: 0]; - oldEvent = [oldEvents objectAtIndex: 0]; - [self _handleUpdatedEvent: newEvent fromOldEvent: oldEvent]; - } } // // else => attendee is responding diff --git a/Tests/Integration/config.py.in b/Tests/Integration/config.py.in index 149dff65d..0de6d4a4f 100644 --- a/Tests/Integration/config.py.in +++ b/Tests/Integration/config.py.in @@ -1,16 +1,24 @@ -# setup: username must be super-user or have read-access to PUBLIC events in -# both attendee and delegate's personal calendar +# setup: 4 user are needed: username, superuser, attendee1, attendee1_delegate +# superuser must be a sogo superuser... hostname = "localhost" port = "80" username = "myuser" password = "mypass" +superuser = "super" +superuser_password="pass" + subscriber_username = "otheruser" subscriber_password = "otherpass" attendee1 = "user@domain.com" -attendee1_delegate = "otheruser@domain.com" +attendee1_username = "user" +attendee1_password = "pass" + +attendee1_delegate = "user2@domain.com" +attendee1_delegate_username = "sogo2" +attendee1_delegate_password = "sogo" resource_no_overbook = "res" resource_can_overbook = "res-nolimit" diff --git a/Tests/Integration/test-caldav-scheduling.py b/Tests/Integration/test-caldav-scheduling.py index 559bd9753..513b6e19e 100755 --- a/Tests/Integration/test-caldav-scheduling.py +++ b/Tests/Integration/test-caldav-scheduling.py @@ -1,10 +1,15 @@ #!/usr/bin/python -# setup: username must be super-user or have read-access to PUBLIC events in -# both attendee and delegate's personal calendar +# setup: 4 users are needed: username, attendee1_username, +# attendee1_delegate_username and superuser. +# when writing new tests, avoid using superuser when not absolutely needed from config import hostname, port, username, password, \ - attendee1, attendee1_delegate, \ + superuser, superuser_password, \ + attendee1, attendee1_username, \ + attendee1_password, \ + attendee1_delegate, attendee1_delegate_username, \ + attendee1_delegate_password, \ resource_no_overbook, resource_can_overbook import datetime @@ -98,10 +103,17 @@ class CalDAVPropertiesTest(unittest.TestCase): % (proppatch.response["status"], proppatch.response["body"])) -class CalDAVITIPDelegationTest(unittest.TestCase): +class CalDAVSchedulingTest(unittest.TestCase): def setUp(self): + self.superuser_client = webdavlib.WebDAVClient(hostname, port, + superuser, superuser_password) self.client = webdavlib.WebDAVClient(hostname, port, username, password) + self.attendee1_client = webdavlib.WebDAVClient(hostname, port, + attendee1_username, attendee1_password) + self.attendee1_delegate_client = webdavlib.WebDAVClient(hostname, port, + attendee1_delegate_username, attendee1_password) + utility = utilities.TestUtility(self, self.client) (self.user_name, self.user_email) = utility.fetchUserInfo(username) (self.attendee1_name, self.attendee1_email) = utility.fetchUserInfo(attendee1) @@ -117,14 +129,14 @@ class CalDAVITIPDelegationTest(unittest.TestCase): def tearDown(self): self._deleteEvent(self.client, "%stest-delegation.ics" % self.user_calendar, None) - self._deleteEvent(self.client, + self._deleteEvent(self.attendee1_client, "%stest-delegation.ics" % self.attendee1_calendar, None) - self._deleteEvent(self.client, + self._deleteEvent(self.attendee1_delegate_client, "%stest-delegation.ics" % self.attendee1_delegate_calendar, None) self._deleteEvent(self.client, "%stest-add-attendee.ics" % self.user_calendar, None) - self._deleteEvent(self.client, + self._deleteEvent(self.attendee1_client, "%stest-add-attendee.ics" % self.attendee1_calendar, None) self._deleteEvent(self.client, "%stest-no-overbook.ics" % self.user_calendar, None) @@ -135,9 +147,13 @@ class CalDAVITIPDelegationTest(unittest.TestCase): self._deleteEvent(self.client, "%stest-can-overbook-overlap.ics" % self.user_calendar, None) self._deleteEvent(self.client, - "%stest-remove-attendee.ics" % self.user_calendar, None) + "%stest-rrule-exception-invitation-dance.ics" % self.user_calendar, None) + self._deleteEvent(self.attendee1_client, + "%stest-rrule-exception-invitation-dance.ics" % self.attendee1_calendar, None) self._deleteEvent(self.client, - "%stest-remove-attendee-no-org.ics" % self.user_calendar, None) + "%stest-rrule-invitation-deleted-exdate-dance.ics" % self.user_calendar, None) + self._deleteEvent(self.attendee1_client, + "%stest-rrule-invitation-deleted-exdate-dance.ics" % self.attendee1_calendar, None) def _newEvent(self, summary="test event", uid="test", transp=0): transparency = ("OPAQUE", "TRANSPARENT") @@ -156,7 +172,7 @@ class CalDAVITIPDelegationTest(unittest.TestCase): vevent.add('dtstamp').value = now vevent.add('last-modified').value = now vevent.add('created').value = now - + vevent.add('class').value = "PUBLIC" vevent.add('sequence').value = "0" return newCal @@ -242,6 +258,41 @@ class CalDAVITIPDelegationTest(unittest.TestCase): % (email, compared_attendees[email], attendees[email])) + def testAddAttendee(self): + """ add attendee after event creation """ + + # make sure the event doesn't exist + ics_name = "test-add-attendee.ics" + self._deleteEvent(self.client, + "%s%s" % (self.user_calendar,ics_name), None) + self._deleteEvent(self.attendee1_client, + "%s%s" % (self.attendee1_calendar,ics_name), None) + + # 1. create an event in the organiser's calendar + event = self._newEvent(summary="Test add attendee", uid="Test add attendee") + organizer = event.vevent.add('organizer') + organizer.cn_param = self.user_name + organizer.value = self.user_email + self._putEvent(self.client, "%s%s" % (self.user_calendar, ics_name), event) + + # 2. add an attendee + event.add("method").value = "REQUEST" + attendee = event.vevent.add('attendee') + attendee.cn_param = self.attendee1_name + attendee.rsvp_param = "TRUE" + attendee.partstat_param = "NEEDS-ACTION" + attendee.value = self.attendee1_email + self._putEvent(self.client, "%s%s" % (self.user_calendar, ics_name), event, + exp_status=204) + + + # 3. verify that the attendee has the event + attendee_event = self._getEvent(self.attendee1_client, "%s%s" % (self.attendee1_calendar, ics_name)) + + # 4. make sure the received event match the original one + # XXX is this enough? + self.assertEquals(event.vevent.uid, attendee_event.vevent.uid) + def testUninviteAttendee(self): """ Remove attendee after event creation """ @@ -249,7 +300,7 @@ class CalDAVITIPDelegationTest(unittest.TestCase): ics_name = "test-remove-attendee.ics" self._deleteEvent(self.client, "%s%s" % (self.user_calendar,ics_name), None) - self._deleteEvent(self.client, + self._deleteEvent(self.attendee1_client, "%s%s" % (self.attendee1_calendar,ics_name), None) # 1. create an event in the organiser's calendar @@ -275,7 +326,7 @@ class CalDAVITIPDelegationTest(unittest.TestCase): exp_status=204) # 3. verify that the attendee has the event - attendee_event = self._getEvent(self.client, "%s%s" % (self.attendee1_calendar, ics_name)) + attendee_event = self._getEvent(self.attendee1_client, "%s%s" % (self.attendee1_calendar, ics_name)) # 4. make sure the received event match the original one self.assertEquals(event.vevent.uid, attendee_event.vevent.uid) @@ -287,92 +338,42 @@ class CalDAVITIPDelegationTest(unittest.TestCase): exp_status=204) # 6. verify that the attendee doesn't have the event anymore - attendee_event = self._getEvent(self.client, "%s%s" % (self.attendee1_calendar, ics_name), 404) + attendee_event = self._getEvent(self.attendee1_client, "%s%s" % (self.attendee1_calendar, ics_name), 404) - def testUninviteAttendeeNoOrganizer(self): - """ Remove attendee and organizer after event creation """ + def testAddAttendee(self): + """ add attendee after event creation """ # make sure the event doesn't exist - ics_name = "test-remove-attendee-no-org.ics" + ics_name = "test-add-attendee.ics" self._deleteEvent(self.client, "%s%s" % (self.user_calendar,ics_name), None) self._deleteEvent(self.client, "%s%s" % (self.attendee1_calendar,ics_name), None) # 1. create an event in the organiser's calendar - event = self._newEvent(summary="Test uninvite attendee no org", uid="Test uninvite attendee no org") - # keep a copy around for updates without other attributes - plainEvent = vobject.iCalendar() - plainEvent.copy(event) - + event = self._newEvent(summary="Test add attendee", uid="Test add attendee") organizer = event.vevent.add('organizer') organizer.cn_param = self.user_name organizer.value = self.user_email - self._putEvent(self.client, "%s%s" % (self.user_calendar, ics_name), event) - # 2. add an attendee - event.add("method").value = "REQUEST" attendee = event.vevent.add('attendee') attendee.cn_param = self.attendee1_name attendee.rsvp_param = "TRUE" attendee.partstat_param = "NEEDS-ACTION" attendee.value = self.attendee1_email self._putEvent(self.client, "%s%s" % (self.user_calendar, ics_name), event, - exp_status=204) + exp_status=204) + # 3. verify that the attendee has the event - attendee_event = self._getEvent(self.client, "%s%s" % (self.attendee1_calendar, ics_name)) - + attendee_event = self._getEvent(self.attendee1_client, "%s%s" % (self.attendee1_calendar, ics_name)) + # 4. make sure the received event match the original one + # XXX is this enough? self.assertEquals(event.vevent.uid, attendee_event.vevent.uid) - # 5. put the event back without attendee or organizer - now = datetime.datetime.now(dateutil.tz.gettz("America/Montreal")) - plainEvent.vevent.last_modified.value = now - self._putEvent(self.client, "%s%s" % (self.user_calendar, ics_name), plainEvent, - exp_status=204) - - # 6. verify that the attendee doesn't have the event anymore - attendee_event = self._getEvent(self.client, "%s%s" % (self.attendee1_calendar, ics_name), 404) - - - def testAddAttendee(self): - """ add attendee after event creation """ - - # make sure the event doesn't exist - ics_name = "test-add-attendee.ics" - self._deleteEvent(self.client, - "%s%s" % (self.user_calendar,ics_name), None) - self._deleteEvent(self.client, - "%s%s" % (self.attendee1_calendar,ics_name), None) - - # 1. create an event in the organiser's calendar - event = self._newEvent(summary="Test add attendee", uid="Test add attendee") - organizer = event.vevent.add('organizer') - organizer.cn_param = self.user_name - organizer.value = self.user_email - self._putEvent(self.client, "%s%s" % (self.user_calendar, ics_name), event) - - # 2. add an attendee - event.add("method").value = "REQUEST" - attendee = event.vevent.add('attendee') - attendee.cn_param = self.attendee1_name - attendee.rsvp_param = "TRUE" - attendee.partstat_param = "NEEDS-ACTION" - attendee.value = self.attendee1_email - self._putEvent(self.client, "%s%s" % (self.user_calendar, ics_name), event, - exp_status=204) - - - # 3. verify that the attendee has the event - attendee_event = self._getEvent(self.client, "%s%s" % (self.attendee1_calendar, ics_name)) - - # 4. make sure the received event match the original one - # XXX is this enough? - self.assertEquals(event.vevent.uid, attendee_event.vevent.uid) - def testResourceNoOverbook(self): """ try to overbook a resource """ @@ -450,15 +451,219 @@ class CalDAVITIPDelegationTest(unittest.TestCase): self._putEvent(self.client, "%s%s" % (self.user_calendar, ob_ics_name), event) + def testRruleExceptionInvitationDance(self): + """ RRULE exception invitation dance """ + + # This workflow is based on what lightning 1.2.1 does + # create a reccurring event + # add an exception + # invite bob to the exception: + # bob is declined in the master event + # bob needs-action in the exception + # bob accepts + # bob is declined in the master event + # bob is accepted in the exception + # the organizer 'uninvites' bob + # the event disappears from bob's calendar + # bob isn't in the master+exception event + + ics_name = "test-rrule-exception-invitation-dance.ics" + self._deleteEvent(self.client, + "%s%s" % (self.user_calendar, ics_name), None) + self._deleteEvent(self.attendee1_client, + "%s%s" % (self.attendee1_calendar, ics_name), None) + + # 1. create a recurring event in the organiser's calendar + summary="Test reccuring exception invite cancel" + uid="Test-recurring-exception-invite-cancel" + event = self._newEvent(summary, uid) + event.vevent.add('rrule').value = "FREQ=DAILY;COUNT=5" + + self._putEvent(self.client, "%s%s" % (self.user_calendar, ics_name), event) + + # read the event back from the server + org_ev = self._getEvent(self.client, "%s%s" % (self.user_calendar, ics_name)) + + # 2. Add an exception to the master event and invite attendee1 to it + now = datetime.datetime.now(dateutil.tz.gettz("America/Montreal")) + org_ev.vevent.last_modified.value = now + orig_dtstart = org_ev.vevent.dtstart.value + orig_dtend = org_ev.vevent.dtend.value + + ev_exception = org_ev.add("vevent") + ev_exception.add('created').value = now + ev_exception.add('last-modified').value = now + ev_exception.add('dtstamp').value = now + ev_exception.add('uid').value = uid + ev_exception.add('summary').value = summary + # out of laziness, add the exception for the first occurence of the event + recurrence_id = orig_dtstart + ev_exception.add('recurrence-id').value = recurrence_id + + ev_exception.add('transp').value = "OPAQUE" + ev_exception.add('description').value = "Exception" + ev_exception.add('sequence').value = "1" + ev_exception.add('dtstart').value = orig_dtstart + ev_exception.add('dtend').value = orig_dtend + + # 2.1 Add attendee1 and organizer to the exception + organizer = ev_exception.add('organizer') + organizer.cn_param = self.user_name + organizer.partstat_param = "ACCEPTED" + organizer.value = self.user_email + attendee = ev_exception.add('attendee') + attendee.cn_param = self.attendee1_name + attendee.rsvp_param = "TRUE" + attendee.role_param = "REQ-PARTICIPANT" + attendee.partstat_param = "NEEDS-ACTION" + attendee.value = self.attendee1_email + + self._putEvent(self.client, "%s%s" % (self.user_calendar, ics_name), org_ev, + exp_status=204) + + # 3. Make sure the attendee got the event + attendee_ev = self._getEvent(self.attendee1_client, "%s%s" % (self.attendee1_calendar, ics_name)) + + for ev in attendee_ev.vevent_list: + try: + if (ev.recurrence_id.value): + attendee_ev_exception = ev + except: + attendee_ev_master = ev + + # make sure sogo doesn't duplicate attendees - yes, we've seen that + self.assertEquals(len(attendee_ev_master.attendee_list), 1) + self.assertEquals(len(attendee_ev_exception.attendee_list), 1) + + # 4. The master event must contain the invitation, declined + self.assertEquals(attendee_ev_master.attendee.partstat_param, "DECLINED") + + # 5. The exception event contain the invitation, NEEDS-ACTION + self.assertEquals(attendee_ev_exception.attendee.partstat_param, "NEEDS-ACTION") + + # 6. attendee accepts invitation + attendee_ev_exception.attendee.partstat_param = "ACCEPTED" + self._putEvent(self.attendee1_client, "%s%s" % (self.attendee1_calendar, ics_name), + attendee_ev, exp_status=204) + + # fetch the organizer's event + org_ev = self._getEvent(self.client, "%s%s" % (self.user_calendar, ics_name)) + for ev in org_ev.vevent_list: + try: + if (ev.recurrence_id.value): + org_ev_exception = ev + except: + org_ev_master = ev + + # make sure sogo doesn't duplicate attendees + self.assertEquals(len(org_ev_master.attendee_list), 1) + self.assertEquals(len(org_ev_exception.attendee_list), 1) + + # 7. Make sure organizer got the accept for the exception and + # that the attendee is still declined in the master + self.assertEquals(org_ev_exception.attendee.partstat_param, "ACCEPTED") + self.assertEquals(org_ev_master.attendee.partstat_param, "DECLINED") + + # 8. delete the attendee from the master event (uninvite) + # The event should be deleted from the attendee's calendar + del org_ev_exception.attendee + del org_ev_master.attendee + self._putEvent(self.client, "%s%s" % (self.user_calendar, ics_name), + org_ev, exp_status=204) + + self._getEvent(self.client, "%s%s" % (self.attendee1_calendar, ics_name), + exp_status=404) + + # now be happy + + def testRruleInvitationDeleteExdate(self): + """RRULE invitation delete exdate dance""" + + # Workflow: + # Create an recurring event and invite Bob + # Add an exdate to the master event + # Verify that the exdate has propagated to Bob's calendar + # Add an exdate to bob's version of the event + # Verify that an exception has been created in the org's calendar + # and that bob is 'declined' + + ics_name = "test-rrule-invitation-deleted-exdate-dance.ics" + self._deleteEvent(self.client, + "%s%s" % (self.user_calendar, ics_name), None) + self._deleteEvent(self.attendee1_client, + "%s%s" % (self.attendee1_calendar, ics_name), None) + + # 1. create a recurring event in the organiser's calendar + summary="Test-rrule-invitation-deleted-exdate-dance" + uid=summary + event = self._newEvent(summary, uid) + event.vevent.add('rrule').value = "FREQ=DAILY;COUNT=5" + organizer = event.vevent.add('organizer') + organizer.cn_param = self.user_name + organizer.partstat_param = "ACCEPTED" + organizer.value = self.user_email + attendee = event.vevent.add('attendee') + attendee.cn_param = self.attendee1_name + attendee.rsvp_param = "TRUE" + attendee.role_param = "REQ-PARTICIPANT" + attendee.partstat_param = "NEEDS-ACTION" + attendee.value = self.attendee1_email + + self._putEvent(self.client, "%s%s" % (self.user_calendar, ics_name), event) + + # 2. Make sure the attendee got it + self._getEvent(self.attendee1_client, "%s%s" % (self.attendee1_calendar, ics_name)) + + # 3. Add exdate to master event + org_ev=self._getEvent(self.client, "%s%s" % (self.user_calendar, ics_name)) + orig_dtstart = org_ev.vevent.dtstart.value + # exdate is a list in vobject.icalendar + org_exdate = [orig_dtstart.astimezone(dateutil.tz.gettz("UTC"))] + org_ev.vevent.add('exdate').value = org_exdate + self._putEvent(self.client, "%s%s" % (self.user_calendar, ics_name), org_ev, exp_status=204) + + # 4. make sure the attendee has the exdate + attendee_ev = self._getEvent(self.attendee1_client, "%s%s" % + (self.attendee1_calendar, ics_name)) + self.assertEqual(org_exdate, attendee_ev.vevent.exdate.value) + + # 5. Create an exdate in the attendee's calendar + new_exdate = orig_dtstart + datetime.timedelta(days=2) + attendee_exdate = [new_exdate.astimezone(dateutil.tz.gettz("UTC"))] + attendee_ev.vevent.add('exdate').value = attendee_exdate + now = datetime.datetime.now(dateutil.tz.gettz("America/Montreal")) + attendee_ev.vevent.last_modified.value = now + self._putEvent(self.attendee1_client, "%s%s" % (self.attendee1_calendar, ics_name), + attendee_ev, exp_status=204) + + # 6. Make sure the attendee is: + # needs-action in master event + # declined in the new exception created by the exdate above + org_ev=self._getEvent(self.client, "%s%s" % (self.user_calendar, ics_name)) + for ev in org_ev.vevent_list: + try: + if (ev.recurrence_id.value == attendee_exdate[0]): + org_ev_exception = ev + except: + org_ev_master = ev + + self.assertTrue(org_ev_exception) + # make sure sogo doesn't duplicate attendees + self.assertEquals(len(org_ev_master.attendee_list), 1) + self.assertEquals(len(org_ev_exception.attendee_list), 1) + + self.assertEqual(org_ev_master.attendee.partstat_param, "NEEDS-ACTION"); + self.assertEqual(org_ev_exception.attendee.partstat_param, "DECLINED"); + def testInvitationDelegation(self): """ invitation delegation """ # the invitation must not exist self._deleteEvent(self.client, "%stest-delegation.ics" % self.user_calendar, None) - self._deleteEvent(self.client, + self._deleteEvent(self.attendee1_client, "%stest-delegation.ics" % self.attendee1_calendar, None) - self._deleteEvent(self.client, + self._deleteEvent(self.attendee1_delegate_client, "%stest-delegation.ics" % self.attendee1_delegate_calendar, None) @@ -482,7 +687,7 @@ class CalDAVITIPDelegationTest(unittest.TestCase): "%stest-delegation.ics" % self.user_calendar, invitation) - att_inv = self._getEvent(self.client, + att_inv = self._getEvent(self.attendee1_client, "%stest-delegation.ics" % self.attendee1_calendar) self._compareAttendees(att_inv, invitation) @@ -502,19 +707,19 @@ class CalDAVITIPDelegationTest(unittest.TestCase): delegate.partstat_param = "NEEDS-ACTION" delegate.value = self.attendee1_delegate_email - self._postEvent(self.client, + self._postEvent(self.attendee1_client, self.attendee1_calendar, invitation, self.attendee1_email, [self.attendee1_delegate_email]) invitation.method.value = "REPLY" - self._postEvent(self.client, + self._postEvent(self.attendee1_client, self.attendee1_calendar, invitation, self.attendee1_email, [self.user_email]) del invitation.method - self._putEvent(self.client, + self._putEvent(self.attendee1_client, "%stest-delegation.ics" % self.attendee1_calendar, invitation, 204) - del_inv = self._getEvent(self.client, + del_inv = self._getEvent(self.attendee1_delegate_client, "%stest-delegation.ics" % self.attendee1_delegate_calendar) self._compareAttendees(del_inv, invitation) @@ -528,18 +733,18 @@ class CalDAVITIPDelegationTest(unittest.TestCase): invitation.add("method").value = "REPLY" delegate.partstat_param = "ACCEPTED" - self._postEvent(self.client, + self._postEvent(self.attendee1_delegate_client, self.attendee1_delegate_calendar, invitation, self.attendee1_delegate_email, [self.user_email, self.attendee1_email]) del invitation.method - self._putEvent(self.client, + self._putEvent(self.attendee1_delegate_client, "%stest-delegation.ics" % self.attendee1_delegate_calendar, invitation, 204) org_inv = self._getEvent(self.client, "%stest-delegation.ics" % self.user_calendar) self._compareAttendees(org_inv, invitation) - att_inv = self._getEvent(self.client, + att_inv = self._getEvent(self.attendee1_client, "%stest-delegation.ics" % self.attendee1_calendar) self._compareAttendees(att_inv, invitation) @@ -551,7 +756,7 @@ class CalDAVITIPDelegationTest(unittest.TestCase): cancellation.copy(invitation) cancellation.add("method").value = "CANCEL" cancellation.vevent.sequence.value = "1" - self._postEvent(self.client, + self._postEvent(self.attendee1_client, self.attendee1_calendar, cancellation, self.attendee1_email, [self.attendee1_delegate_email]) @@ -560,12 +765,12 @@ class CalDAVITIPDelegationTest(unittest.TestCase): del attendee1.delegated_to_param invitation.add("method").value = "REPLY" invitation.vevent.remove(delegate) - self._postEvent(self.client, + self._postEvent(self.attendee1_client, self.attendee1_calendar, invitation, self.attendee1_email, [self.user_email]) del invitation.method - self._putEvent(self.client, + self._putEvent(self.attendee1_client, "%stest-delegation.ics" % self.attendee1_calendar, invitation, 204) @@ -573,7 +778,7 @@ class CalDAVITIPDelegationTest(unittest.TestCase): "%stest-delegation.ics" % self.user_calendar) self._compareAttendees(org_inv, invitation) - del_inv = self._getEvent(self.client, + del_inv = self._getEvent(self.attendee1_delegate_client, "%stest-delegation.ics" % self.attendee1_delegate_calendar, 404) # 5. org updates inv. @@ -595,7 +800,7 @@ class CalDAVITIPDelegationTest(unittest.TestCase): "%stest-delegation.ics" % self.user_calendar, invitation, 204) - att_inv = self._getEvent(self.client, + att_inv = self._getEvent(self.attendee1_client, "%stest-delegation.ics" % self.attendee1_calendar) self._compareAttendees(att_inv, invitation) @@ -613,22 +818,22 @@ class CalDAVITIPDelegationTest(unittest.TestCase): delegate.partstat_param = "NEEDS-ACTION" delegate.value = self.attendee1_delegate_email - self._postEvent(self.client, + self._postEvent(self.attendee1_client, self.attendee1_calendar, invitation, self.attendee1_email, [self.attendee1_delegate_email]) invitation.method.value = "REPLY" - self._postEvent(self.client, + self._postEvent(self.attendee1_client, self.attendee1_calendar, invitation, self.attendee1_email, [self.user_email]) del invitation.method - self._putEvent(self.client, + self._putEvent(self.attendee1_client, "%stest-delegation.ics" % self.attendee1_calendar, invitation, 204) org_inv = self._getEvent(self.client, "%stest-delegation.ics" % self.user_calendar) self._compareAttendees(org_inv, invitation) - del_inv = self._getEvent(self.client, + del_inv = self._getEvent(self.attendee1_delegate_client, "%stest-delegation.ics" % self.attendee1_delegate_calendar) self._compareAttendees(del_inv, invitation) @@ -638,19 +843,19 @@ class CalDAVITIPDelegationTest(unittest.TestCase): invitation.add("method").value = "REPLY" delegate.partstat_param = "ACCEPTED" - self._postEvent(self.client, + self._postEvent(self.attendee1_delegate_client, self.attendee1_delegate_calendar, invitation, self.attendee1_delegate_email, [self.user_email, self.attendee1_email]) del invitation.method - self._putEvent(self.client, + self._putEvent(self.attendee1_delegate_client, "%stest-delegation.ics" % self.attendee1_delegate_calendar, invitation, 204) org_inv = self._getEvent(self.client, "%stest-delegation.ics" % self.user_calendar) self._compareAttendees(org_inv, invitation) - att_inv = self._getEvent(self.client, + att_inv = self._getEvent(self.attendee1_client, "%stest-delegation.ics" % self.attendee1_calendar) self._compareAttendees(att_inv, invitation) @@ -674,10 +879,10 @@ class CalDAVITIPDelegationTest(unittest.TestCase): "%stest-delegation.ics" % self.user_calendar, invitation, 204) - att_inv = self._getEvent(self.client, + att_inv = self._getEvent(self.attendee1_client, "%stest-delegation.ics" % self.attendee1_calendar) self._compareAttendees(att_inv, invitation) - del_inv = self._getEvent(self.client, + del_inv = self._getEvent(self.attendee1_client, "%stest-delegation.ics" % self.attendee1_calendar) self._compareAttendees(del_inv, invitation) @@ -702,9 +907,9 @@ class CalDAVITIPDelegationTest(unittest.TestCase): "%stest-delegation.ics" % self.user_calendar, invitation, 204) - att_inv = self._getEvent(self.client, + att_inv = self._getEvent(self.attendee1_client, "%stest-delegation.ics" % self.attendee1_calendar, 404) - del_inv = self._getEvent(self.client, + del_inv = self._getEvent(self.attendee1_delegate_client, "%stest-delegation.ics" % self.attendee1_delegate_calendar, 404) if __name__ == "__main__": diff --git a/Tests/Integration/test-davacl.py b/Tests/Integration/test-davacl.py index d1fddc6a0..0a8ecd787 100755 --- a/Tests/Integration/test-davacl.py +++ b/Tests/Integration/test-davacl.py @@ -1,6 +1,7 @@ #!/usr/bin/python -from config import hostname, port, username, password, subscriber_username, subscriber_password +from config import hostname, port, username, password, subscriber_username, subscriber_password, \ + superuser, superuser_password import sys import unittest @@ -25,7 +26,7 @@ import utilities class DAVCalendarSuperUserAclTest(unittest.TestCase): def __init__(self, arg): self.client = webdavlib.WebDAVClient(hostname, port, - username, password) + superuser, superuser_password) self.resource = "/SOGo/dav/%s/Calendar/test-dav-superuser-acl/" % subscriber_username self.filename = "suevent.ics" self.url = "%s%s" % (self.resource, self.filename) @@ -949,6 +950,8 @@ class DAVPublicAccessTest(unittest.TestCase): class DAVCalendarPublicAclTest(unittest.TestCase): def setUp(self): self.createdRsrc = None + self.superuser_client = webdavlib.WebDAVClient(hostname, port, + superuser, superuser_password) self.client = webdavlib.WebDAVClient(hostname, port, username, password) self.subscriber_client = webdavlib.WebDAVClient(hostname, port, @@ -959,7 +962,7 @@ class DAVCalendarPublicAclTest(unittest.TestCase): def tearDown(self): if self.createdRsrc is not None: delete = webdavlib.WebDAVDELETE(self.createdRsrc) - self.client.execute(delete) + self.superuser_client.execute(delete) def testCollectionAccessNormalUser(self): """normal user access to (non-)shared resource from su""" @@ -1091,7 +1094,7 @@ class DAVCalendarPublicAclTest(unittest.TestCase): for rsrc in [ 'personal', 'test-dav-acl' ]: resource = '%s%s/' % (parentColl, rsrc) mkcol = webdavlib.WebDAVMKCOL(resource) - self.client.execute(mkcol) + self.superuser_client.execute(mkcol) acl_utility = utilities.TestCalendarACLUtility(self, self.subscriber_client, resource) diff --git a/Tests/Integration/test-ical.py b/Tests/Integration/test-ical.py index 8c9c76871..6f128de7c 100755 --- a/Tests/Integration/test-ical.py +++ b/Tests/Integration/test-ical.py @@ -1,6 +1,9 @@ #!/usr/bin/python -from config import hostname, port, username, password, subscriber_username +# FIXME: we should avoid using superuser if possible + +from config import hostname, port, username, password, subscriber_username, \ + superuser, superuser_password import unittest import sogotests @@ -48,7 +51,7 @@ class iCalTest(unittest.TestCase): for x in members ] props = { "{DAV:}group-member-set": membersHref } proppatch = webdavlib.WebDAVPROPPATCH(resource, props) - client = webdavlib.WebDAVClient(hostname, port, username, password) + client = webdavlib.WebDAVClient(hostname, port, superuser, superuser_password) client.user_agent = "DAVKit/4.0.1 (730); CalendarStore/4.0.1 (973); iCal/4.0.1 (1374); Mac OS X/10.6.2 (10C540)" client.execute(proppatch) self.assertEquals(proppatch.response["status"], 207, @@ -60,7 +63,7 @@ class iCalTest(unittest.TestCase): resource = '/SOGo/dav/%s/' % user propfind = webdavlib.WebDAVPROPFIND(resource, ["{DAV:}group-membership"], 0) - client = webdavlib.WebDAVClient(hostname, port, username, password) + client = webdavlib.WebDAVClient(hostname, port, superuser, superuser_password) client.user_agent = "DAVKit/4.0.1 (730); CalendarStore/4.0.1 (973); iCal/4.0.1 (1374); Mac OS X/10.6.2 (10C540)" client.execute(propfind) @@ -73,7 +76,7 @@ class iCalTest(unittest.TestCase): resource = '/SOGo/dav/%s/' % user prop = "{http://calendarserver.org/ns/}calendar-proxy-%s-for" % perm propfind = webdavlib.WebDAVPROPFIND(resource, [prop], 0) - client = webdavlib.WebDAVClient(hostname, port, username, password) + client = webdavlib.WebDAVClient(hostname, port, superuser, superuser_password) client.user_agent = "DAVKit/4.0.1 (730); CalendarStore/4.0.1 (973); iCal/4.0.1 (1374); Mac OS X/10.6.2 (10C540)" client.execute(propfind) @@ -136,7 +139,7 @@ class iCalTest(unittest.TestCase): def testCalendarProxy2(self): """calendar-proxy as used from SOGo""" - client = webdavlib.WebDAVClient(hostname, port, username, password) + client = webdavlib.WebDAVClient(hostname, port, superuser, superuser_password) client.user_agent = "DAVKit/4.0.1 (730); CalendarStore/4.0.1 (973); iCal/4.0.1 (1374); Mac OS X/10.6.2 (10C540)" personal_resource = "/SOGo/dav/%s/Calendar/personal/" % username dav_utility = utilities.TestCalendarACLUtility(self,