2016-10-23 | Paul Boddie | raw files shortlog changelog graph | Changed scheduling function registries to map names to collections of functions. Introduced common event update/removal scheduling functions in the quota module. Introduced common free/busy modification functionality in the quota module for different scheduling functions to use. Added the common module to the reserved modules list in the update tool. Added tests of recurring events and indefinitely-recurring events requiring scheduling using the quota functionality. | |
imiptools/handlers/scheduling/__init__.py (file) imiptools/handlers/scheduling/access.py (file) imiptools/handlers/scheduling/freebusy.py (file) imiptools/handlers/scheduling/quota.py (file) tests/test_resource_invitation_constraints_quota_recurring_group.sh (file) tests/test_resource_invitation_recurring_indefinitely_group.sh (file) tools/update_scheduling_modules.py (file) |
1.1 --- a/imiptools/handlers/scheduling/__init__.py Sat Oct 08 23:45:25 2016 +0200 1.2 +++ b/imiptools/handlers/scheduling/__init__.py Sun Oct 23 23:21:01 2016 +0200 1.3 @@ -179,7 +179,13 @@ 1.4 1.5 for line in lines: 1.6 parts = parse_line(line) 1.7 - functions.append((registry.get(parts[0]), tuple(parts[1:]))) 1.8 + 1.9 + # A sequence of functions is provided for each name. 1.10 + 1.11 + l = registry.get(parts[0]) 1.12 + if l: 1.13 + for function in l: 1.14 + functions.append((function, tuple(parts[1:]))) 1.15 1.16 return functions 1.17
2.1 --- a/imiptools/handlers/scheduling/access.py Sat Oct 08 23:45:25 2016 +0200 2.2 +++ b/imiptools/handlers/scheduling/access.py Sun Oct 23 23:21:01 2016 +0200 2.3 @@ -145,8 +145,8 @@ 2.4 # Registry of scheduling functions. 2.5 2.6 scheduling_functions = { 2.7 - "access_control_list" : access_control_list, 2.8 - "same_domain_only" : same_domain_only, 2.9 + "access_control_list" : [access_control_list], 2.10 + "same_domain_only" : [same_domain_only], 2.11 } 2.12 2.13 # Registries of locking and unlocking functions.
3.1 --- a/imiptools/handlers/scheduling/freebusy.py Sat Oct 08 23:45:25 2016 +0200 3.2 +++ b/imiptools/handlers/scheduling/freebusy.py Sun Oct 23 23:21:01 2016 +0200 3.3 @@ -247,9 +247,9 @@ 3.4 # Registry of scheduling functions. 3.5 3.6 scheduling_functions = { 3.7 - "schedule_in_freebusy" : schedule_in_freebusy, 3.8 - "schedule_corrected_in_freebusy" : schedule_corrected_in_freebusy, 3.9 - "schedule_next_available_in_freebusy" : schedule_next_available_in_freebusy, 3.10 + "schedule_in_freebusy" : [schedule_in_freebusy], 3.11 + "schedule_corrected_in_freebusy" : [schedule_corrected_in_freebusy], 3.12 + "schedule_next_available_in_freebusy" : [schedule_next_available_in_freebusy], 3.13 } 3.14 3.15 # Registries of locking and unlocking functions.
4.1 --- a/imiptools/handlers/scheduling/quota.py Sat Oct 08 23:45:25 2016 +0200 4.2 +++ b/imiptools/handlers/scheduling/quota.py Sun Oct 23 23:21:01 2016 +0200 4.3 @@ -81,17 +81,7 @@ 4.4 """ 4.5 4.6 quota, group = _get_quota_and_group(handler, args) 4.7 - 4.8 - # Update the journal entries. 4.9 - 4.10 - journal = handler.get_journal() 4.11 - entries = journal.get_entries_for_update(quota, group) 4.12 - handler.update_freebusy(entries, handler.user, False) 4.13 - journal.set_entries(quota, group, entries) 4.14 - 4.15 - # Store/update the object so that recurring events can be maintained. 4.16 - 4.17 - _update_object(handler, args) 4.18 + _add_to_quota(handler, quota, group, handler.user, False) 4.19 4.20 def remove_from_quota(handler, args): 4.21 4.22 @@ -101,26 +91,9 @@ 4.23 """ 4.24 4.25 quota, group = _get_quota_and_group(handler, args) 4.26 - 4.27 - # Update the journal entries. 4.28 - 4.29 - journal = handler.get_journal() 4.30 - entries = journal.get_entries_for_update(quota, group) 4.31 - 4.32 - # Remove only the entries associated with this recipient. 4.33 + _remove_from_quota(handler, quota, group, handler.user) 4.34 4.35 - removed = handler.remove_from_freebusy(entries) 4.36 - for p in removed: 4.37 - if p.attendee != handler.user: 4.38 - entries.insert_period(p) 4.39 - 4.40 - journal.set_entries(quota, group, entries) 4.41 - 4.42 - # Remove participation from the object to stop recurring event generation. 4.43 - 4.44 - _remove_object(handler, args) 4.45 - 4.46 -def _update_object(handler, args): 4.47 +def update_event(handler, args): 4.48 4.49 "Update a stored version of the current object of the given 'handler'." 4.50 4.51 @@ -145,7 +118,7 @@ 4.52 4.53 journal.set_event(quota, handler.uid, handler.recurrenceid, obj.to_node()) 4.54 4.55 -def _remove_object(handler, args): 4.56 +def remove_event(handler, args): 4.57 4.58 "Remove a stored version of the current object of the given 'handler'." 4.59 4.60 @@ -252,6 +225,53 @@ 4.61 total += period.get_duration() 4.62 return total 4.63 4.64 +def _add_to_quota(handler, quota, user, participant, is_organiser): 4.65 + 4.66 + """ 4.67 + Record details of the current object of the 'handler' in the applicable 4.68 + free/busy resource. 4.69 + """ 4.70 + 4.71 + journal = handler.get_journal() 4.72 + freebusy = journal.get_entries_for_update(quota, user) 4.73 + handler.update_freebusy(freebusy, participant, is_organiser) 4.74 + 4.75 + # Remove original recurrence details replaced by additional 4.76 + # recurrences, as well as obsolete additional recurrences. 4.77 + 4.78 + handler.remove_freebusy_for_recurrences(freebusy, journal.get_recurrences(quota, handler.uid)) 4.79 + 4.80 + # Update free/busy provider information if the event may recur indefinitely. 4.81 + 4.82 + if handler.possibly_recurring_indefinitely(): 4.83 + journal.append_freebusy_provider(quota, handler.obj) 4.84 + 4.85 + journal.set_entries(quota, user, freebusy) 4.86 + 4.87 +def _remove_from_quota(handler, quota, user, participant): 4.88 + 4.89 + """ 4.90 + Remove details of the current object of the 'handler' from the applicable 4.91 + free/busy resource. 4.92 + """ 4.93 + 4.94 + journal = handler.get_journal() 4.95 + freebusy = journal.get_entries_for_update(quota, user) 4.96 + 4.97 + # Remove only the entries associated with this recipient. 4.98 + 4.99 + removed = handler.remove_from_freebusy(freebusy) 4.100 + for p in removed: 4.101 + if p.attendee != participant: 4.102 + freebusy.insert_period(p) 4.103 + 4.104 + # Update free/busy provider information if the event may recur indefinitely. 4.105 + 4.106 + if handler.possibly_recurring_indefinitely(): 4.107 + journal.remove_freebusy_provider(quota, handler.obj) 4.108 + 4.109 + journal.set_entries(quota, user, freebusy) 4.110 + 4.111 # Collective free/busy maintenance. 4.112 4.113 def schedule_across_quota(handler, args): 4.114 @@ -281,11 +301,7 @@ 4.115 """ 4.116 4.117 quota, organiser = _get_quota_and_identity(handler, args) 4.118 - 4.119 - journal = handler.get_journal() 4.120 - freebusy = journal.get_entries_for_update(quota, organiser) 4.121 - handler.update_freebusy(freebusy, organiser, True) 4.122 - journal.set_entries(quota, organiser, freebusy) 4.123 + _add_to_quota(handler, quota, organiser, organiser, True) 4.124 4.125 def remove_from_quota_freebusy(handler, args): 4.126 4.127 @@ -295,11 +311,7 @@ 4.128 """ 4.129 4.130 quota, organiser = _get_quota_and_identity(handler, args) 4.131 - 4.132 - journal = handler.get_journal() 4.133 - freebusy = journal.get_entries_for_update(quota, organiser) 4.134 - handler.remove_from_freebusy(freebusy) 4.135 - journal.set_entries(quota, organiser, freebusy) 4.136 + _remove_from_quota(handler, quota, organiser, organiser) 4.137 4.138 def _get_quota_and_identity(handler, args): 4.139 4.140 @@ -428,37 +440,37 @@ 4.141 # Registry of scheduling functions. 4.142 4.143 scheduling_functions = { 4.144 - "check_quota" : check_quota, 4.145 - "schedule_across_quota" : schedule_across_quota, 4.146 - "schedule_for_delegate" : schedule_for_delegate, 4.147 + "check_quota" : [check_quota], 4.148 + "schedule_across_quota" : [schedule_across_quota], 4.149 + "schedule_for_delegate" : [schedule_for_delegate], 4.150 } 4.151 4.152 # Registries of locking and unlocking functions. 4.153 4.154 locking_functions = { 4.155 - "check_quota" : lock_journal, 4.156 - "schedule_across_quota" : lock_journal, 4.157 - "schedule_for_delegate" : lock_journal, 4.158 + "check_quota" : [lock_journal], 4.159 + "schedule_across_quota" : [lock_journal], 4.160 + "schedule_for_delegate" : [lock_journal], 4.161 } 4.162 4.163 unlocking_functions = { 4.164 - "check_quota" : unlock_journal, 4.165 - "schedule_across_quota" : unlock_journal, 4.166 - "schedule_for_delegate" : unlock_journal, 4.167 + "check_quota" : [unlock_journal], 4.168 + "schedule_across_quota" : [unlock_journal], 4.169 + "schedule_for_delegate" : [unlock_journal], 4.170 } 4.171 4.172 # Registries of listener functions. 4.173 4.174 confirmation_functions = { 4.175 - "check_quota" : add_to_quota, 4.176 - "schedule_across_quota" : add_to_quota_freebusy, 4.177 - "schedule_for_delegate" : add_to_quota, 4.178 + "check_quota" : [add_to_quota, update_event], 4.179 + "schedule_across_quota" : [add_to_quota_freebusy, update_event], 4.180 + "schedule_for_delegate" : [add_to_quota, update_event], 4.181 } 4.182 4.183 retraction_functions = { 4.184 - "check_quota" : remove_from_quota, 4.185 - "schedule_across_quota" : remove_from_quota_freebusy, 4.186 - "schedule_for_delegate" : remove_from_quota, 4.187 + "check_quota" : [remove_from_quota, remove_event], 4.188 + "schedule_across_quota" : [remove_from_quota_freebusy, remove_event], 4.189 + "schedule_for_delegate" : [remove_from_quota, remove_event], 4.190 } 4.191 4.192 # vim: tabstop=4 expandtab shiftwidth=4
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 5.2 +++ b/tests/test_resource_invitation_constraints_quota_recurring_group.sh Sun Oct 23 23:21:01 2016 +0200 5.3 @@ -0,0 +1,161 @@ 5.4 +#!/bin/sh 5.5 + 5.6 +. "`dirname \"$0\"`/common.sh" 5.7 + 5.8 +USER="mailto:resource-car-porsche911@example.com" 5.9 +SENDER="mailto:paul.boddie@example.com" 5.10 +QUOTA=cars 5.11 + 5.12 +mkdir -p "$PREFS/$USER" 5.13 +echo 'Europe/Oslo' > "$PREFS/$USER/TZID" 5.14 +echo 'share' > "$PREFS/$USER/freebusy_sharing" 5.15 +cat > "$PREFS/$USER/scheduling_function" <<EOF 5.16 +schedule_in_freebusy 5.17 +check_quota $QUOTA 5.18 +EOF 5.19 + 5.20 +# Employ a quota. 5.21 + 5.22 +cat <<EOF | "$SET_QUOTA_LIMITS" "$QUOTA" $SET_QUOTA_LIMITS_ARGS 5.23 +* PT10H 5.24 +EOF 5.25 + 5.26 + "$RESOURCE_SCRIPT" $ARGS < "$TEMPLATES/fb-request-car-all.txt" 2>> $ERROR \ 5.27 +| "$SHOWMAIL" \ 5.28 +> out0.tmp 5.29 + 5.30 + grep -q 'METHOD:REPLY' out0.tmp \ 5.31 +&& ! grep -q '^FREEBUSY' out0.tmp \ 5.32 +&& echo "Success" \ 5.33 +|| echo "Failed" 5.34 + 5.35 +# Attempt to schedule an event. 5.36 + 5.37 +"$OUTGOING_SCRIPT" $ARGS < "$TEMPLATES/event-request-car-recurring.txt" 2>> $ERROR 5.38 + 5.39 + "$LIST_SCRIPT" $LIST_ARGS "$SENDER" "freebusy" \ 5.40 +> out0f.tmp 5.41 + 5.42 + grep -q "^20141126T150000Z${TAB}20141126T160000Z" "out0f.tmp" \ 5.43 +&& grep -q "^20141206T150000Z${TAB}20141206T160000Z" "out0f.tmp" \ 5.44 +&& echo "Success" \ 5.45 +|| echo "Failed" 5.46 + 5.47 +# Present the request to the resource. 5.48 + 5.49 + "$RESOURCE_SCRIPT" $ARGS < "$TEMPLATES/event-request-car-recurring.txt" 2>> $ERROR \ 5.50 +| tee out1r.tmp \ 5.51 +| "$SHOWMAIL" \ 5.52 +> out1.tmp 5.53 + 5.54 + grep -q 'METHOD:REPLY' out1.tmp \ 5.55 +&& grep -q 'ATTENDEE.*;PARTSTAT=DECLINED' out1.tmp \ 5.56 +&& echo "Success" \ 5.57 +|| echo "Failed" 5.58 + 5.59 + "$LIST_SCRIPT" $LIST_ARGS "$USER" "freebusy" \ 5.60 +> out1f.tmp 5.61 + 5.62 + ! grep -q "^20141126T150000Z${TAB}20141126T160000Z" "out1f.tmp" \ 5.63 +&& ! grep -q "^20141206T150000Z${TAB}20141206T160000Z" "out1f.tmp" \ 5.64 +&& echo "Success" \ 5.65 +|| echo "Failed" 5.66 + 5.67 +# Check the quota (event is not confirmed). 5.68 + 5.69 + "$LIST_SCRIPT" $LIST_ARGS "$QUOTA" "entries" "$SENDER" \ 5.70 +> out1e.tmp 5.71 + 5.72 + ! grep -q "event24@example.com" "out1e.tmp" \ 5.73 +&& echo "Success" \ 5.74 +|| echo "Failed" 5.75 + 5.76 +# Modify the event and attempt to schedule it again. 5.77 + 5.78 + sed 's/FREQ=DAILY/FREQ=DAILY;COUNT=11/;' "$TEMPLATES/event-request-car-recurring.txt" \ 5.79 +| "$OUTGOING_SCRIPT" $ARGS 2>> $ERROR 5.80 + 5.81 + "$LIST_SCRIPT" $LIST_ARGS "$SENDER" "freebusy" \ 5.82 +> out1s.tmp 5.83 + 5.84 + grep -q "^20141126T150000Z${TAB}20141126T160000Z" "out1s.tmp" \ 5.85 +&& grep -q "^20141205T150000Z${TAB}20141205T160000Z" "out1s.tmp" \ 5.86 +&& grep -q "^20141206T150000Z${TAB}20141206T160000Z" "out1s.tmp" \ 5.87 +&& echo "Success" \ 5.88 +|| echo "Failed" 5.89 + 5.90 +# Present the request to the resource. 5.91 + 5.92 + sed 's/FREQ=DAILY/FREQ=DAILY;COUNT=11/;' "$TEMPLATES/event-request-car-recurring.txt" \ 5.93 +| "$RESOURCE_SCRIPT" $ARGS 2>> $ERROR \ 5.94 +| tee out2r.tmp \ 5.95 +| "$SHOWMAIL" \ 5.96 +> out2.tmp 5.97 + 5.98 + grep -q 'METHOD:REPLY' out2.tmp \ 5.99 +&& grep -q 'ATTENDEE.*;PARTSTAT=DECLINED' out2.tmp \ 5.100 +&& echo "Success" \ 5.101 +|| echo "Failed" 5.102 + 5.103 + "$LIST_SCRIPT" $LIST_ARGS "$USER" "freebusy" \ 5.104 +> out2f.tmp 5.105 + 5.106 + ! grep -q "^20141126T150000Z${TAB}20141126T160000Z" "out2f.tmp" \ 5.107 +&& ! grep -q "^20141205T150000Z${TAB}20141205T160000Z" "out2f.tmp" \ 5.108 +&& ! grep -q "^20141206T150000Z${TAB}20141206T160000Z" "out2f.tmp" \ 5.109 +&& echo "Success" \ 5.110 +|| echo "Failed" 5.111 + 5.112 +# Check the quota (event is confirmed). 5.113 + 5.114 + "$LIST_SCRIPT" $LIST_ARGS "$QUOTA" "entries" "$SENDER" \ 5.115 +> out2e.tmp 5.116 + 5.117 + ! grep -q "event24@example.com" "out2e.tmp" \ 5.118 +&& echo "Success" \ 5.119 +|| echo "Failed" 5.120 + 5.121 +# Modify the event and attempt to schedule it again. 5.122 + 5.123 + sed 's/FREQ=DAILY/FREQ=DAILY;COUNT=10/;' "$TEMPLATES/event-request-car-recurring.txt" \ 5.124 +| "$OUTGOING_SCRIPT" $ARGS 2>> $ERROR 5.125 + 5.126 + "$LIST_SCRIPT" $LIST_ARGS "$SENDER" "freebusy" \ 5.127 +> out2s.tmp 5.128 + 5.129 + grep -q "^20141126T150000Z${TAB}20141126T160000Z" "out2s.tmp" \ 5.130 +&& grep -q "^20141205T150000Z${TAB}20141205T160000Z" "out2s.tmp" \ 5.131 +&& ! grep -q "^20141206T150000Z${TAB}20141206T160000Z" "out2s.tmp" \ 5.132 +&& echo "Success" \ 5.133 +|| echo "Failed" 5.134 + 5.135 +# Present the request to the resource. 5.136 + 5.137 + sed 's/FREQ=DAILY/FREQ=DAILY;COUNT=10/;' "$TEMPLATES/event-request-car-recurring.txt" \ 5.138 +| "$RESOURCE_SCRIPT" $ARGS 2>> $ERROR \ 5.139 +| tee out3r.tmp \ 5.140 +| "$SHOWMAIL" \ 5.141 +> out3.tmp 5.142 + 5.143 + grep -q 'METHOD:REPLY' out3.tmp \ 5.144 +&& grep -q 'ATTENDEE.*;PARTSTAT=ACCEPTED' out3.tmp \ 5.145 +&& echo "Success" \ 5.146 +|| echo "Failed" 5.147 + 5.148 + "$LIST_SCRIPT" $LIST_ARGS "$USER" "freebusy" \ 5.149 +> out3f.tmp 5.150 + 5.151 + grep -q "^20141126T150000Z${TAB}20141126T160000Z" "out3f.tmp" \ 5.152 +&& grep -q "^20141205T150000Z${TAB}20141205T160000Z" "out3f.tmp" \ 5.153 +&& ! grep -q "^20141206T150000Z${TAB}20141206T160000Z" "out3f.tmp" \ 5.154 +&& echo "Success" \ 5.155 +|| echo "Failed" 5.156 + 5.157 +# Check the quota (event is confirmed). 5.158 + 5.159 + "$LIST_SCRIPT" $LIST_ARGS "$QUOTA" "entries" "$SENDER" \ 5.160 +> out3e.tmp 5.161 + 5.162 + grep -q "event24@example.com" "out3e.tmp" \ 5.163 +&& echo "Success" \ 5.164 +|| echo "Failed"
6.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 6.2 +++ b/tests/test_resource_invitation_recurring_indefinitely_group.sh Sun Oct 23 23:21:01 2016 +0200 6.3 @@ -0,0 +1,108 @@ 6.4 +#!/bin/sh 6.5 + 6.6 +. "`dirname \"$0\"`/common.sh" 6.7 + 6.8 +USER="mailto:resource-room-confroom@example.com" 6.9 +QUOTA=rooms 6.10 + 6.11 +mkdir -p "$PREFS/$USER" 6.12 +echo 'Europe/Oslo' > "$PREFS/$USER/TZID" 6.13 +echo 'share' > "$PREFS/$USER/freebusy_sharing" 6.14 + 6.15 +# Add collective scheduling tests. 6.16 + 6.17 +cat > "$PREFS/$USER/scheduling_function" <<EOF 6.18 +schedule_across_quota $QUOTA 6.19 +EOF 6.20 + 6.21 +# Set delegates for recurring event handling. 6.22 + 6.23 +cat <<EOF | "$SET_DELEGATES" "$QUOTA" $SET_DELEGATES_ARGS 6.24 +$USER 6.25 +EOF 6.26 + 6.27 + "$RESOURCE_SCRIPT" $ARGS < "$TEMPLATES/fb-request-all.txt" 2>> $ERROR \ 6.28 +| "$SHOWMAIL" \ 6.29 +> out0.tmp 6.30 + 6.31 + grep -q 'METHOD:REPLY' out0.tmp \ 6.32 +&& ! grep -q '^FREEBUSY' out0.tmp \ 6.33 +&& echo "Success" \ 6.34 +|| echo "Failed" 6.35 + 6.36 + "$RESOURCE_SCRIPT" $ARGS < "$TEMPLATES/event-request-recurring-indefinitely.txt" 2>> $ERROR \ 6.37 +| "$SHOWMAIL" \ 6.38 +> out2.tmp 6.39 + 6.40 + grep -q 'METHOD:REPLY' out2.tmp \ 6.41 +&& grep -q 'ATTENDEE;PARTSTAT=ACCEPTED' out2.tmp \ 6.42 +&& echo "Success" \ 6.43 +|| echo "Failed" 6.44 + 6.45 + "$RESOURCE_SCRIPT" $ARGS < "$TEMPLATES/fb-request-all.txt" 2>> $ERROR \ 6.46 +| "$SHOWMAIL" \ 6.47 +> out3.tmp 6.48 + 6.49 + grep -q 'METHOD:REPLY' out3.tmp \ 6.50 +&& grep -q 'FREEBUSY;FBTYPE=BUSY:20141114T090000Z/20141114T100000Z' out3.tmp \ 6.51 +&& grep -q 'FREEBUSY;FBTYPE=BUSY:20141212T090000Z/20141212T100000Z' out3.tmp \ 6.52 +&& grep -q 'FREEBUSY;FBTYPE=BUSY:20150109T090000Z/20150109T100000Z' out3.tmp \ 6.53 +&& echo "Success" \ 6.54 +|| echo "Failed" 6.55 + 6.56 +"$FREEBUSY_SCRIPT" "$USER" $FREEBUSY_ARGS $ARGS 2>> $ERROR 6.57 + 6.58 + "$LIST_SCRIPT" $LIST_ARGS "$USER" "freebusy_providers" \ 6.59 +| tee out3p.tmp \ 6.60 +| grep -q 'event14@example.com' \ 6.61 +&& echo "Success" \ 6.62 +|| echo "Failed" 6.63 + 6.64 + "$RESOURCE_SCRIPT" $ARGS < "$TEMPLATES/event-cancel-recurring-indefinitely.txt" 2>> $ERROR 6.65 +echo "Cancel..." 6.66 + 6.67 + "$RESOURCE_SCRIPT" $ARGS < "$TEMPLATES/fb-request-all.txt" 2>> $ERROR \ 6.68 +| "$SHOWMAIL" \ 6.69 +> out4.tmp 6.70 + 6.71 + grep -q 'METHOD:REPLY' out4.tmp \ 6.72 +&& ! grep -q 'FREEBUSY;FBTYPE=BUSY:20141114T090000Z/20141114T100000Z' out4.tmp \ 6.73 +&& ! grep -q 'FREEBUSY;FBTYPE=BUSY:20141212T090000Z/20141212T100000Z' out4.tmp \ 6.74 +&& ! grep -q 'FREEBUSY;FBTYPE=BUSY:20150109T090000Z/20150109T100000Z' out4.tmp \ 6.75 +&& echo "Success" \ 6.76 +|| echo "Failed" 6.77 + 6.78 + "$LIST_SCRIPT" $LIST_ARGS "$USER" "freebusy_providers" \ 6.79 +> out4p.tmp 6.80 + 6.81 + ! grep -q 'event14@example.com' "out4p.tmp" \ 6.82 +&& echo "Success" \ 6.83 +|| echo "Failed" 6.84 + 6.85 +# Re-add event to test scheduling and presence in the freebusy-providers file. 6.86 + 6.87 + "$RESOURCE_SCRIPT" $ARGS < "$TEMPLATES/event-request-recurring-indefinitely.txt" 2>> $ERROR \ 6.88 +| "$SHOWMAIL" \ 6.89 +> out5.tmp 6.90 + 6.91 + grep -q 'METHOD:REPLY' out5.tmp \ 6.92 +&& grep -q 'ATTENDEE;PARTSTAT=ACCEPTED' out5.tmp \ 6.93 +&& echo "Success" \ 6.94 +|| echo "Failed" 6.95 + 6.96 + "$RESOURCE_SCRIPT" $ARGS < "$TEMPLATES/fb-request-all.txt" 2>> $ERROR \ 6.97 +| "$SHOWMAIL" \ 6.98 +> out6.tmp 6.99 + 6.100 + grep -q 'METHOD:REPLY' out6.tmp \ 6.101 +&& grep -q 'FREEBUSY;FBTYPE=BUSY:20141114T090000Z/20141114T100000Z' out6.tmp \ 6.102 +&& grep -q 'FREEBUSY;FBTYPE=BUSY:20141212T090000Z/20141212T100000Z' out6.tmp \ 6.103 +&& grep -q 'FREEBUSY;FBTYPE=BUSY:20150109T090000Z/20150109T100000Z' out6.tmp \ 6.104 +&& echo "Success" \ 6.105 +|| echo "Failed" 6.106 + 6.107 + "$LIST_SCRIPT" $LIST_ARGS "$USER" "freebusy_providers" \ 6.108 +| tee out6p.tmp \ 6.109 +| grep -q 'event14@example.com' \ 6.110 +&& echo "Success" \ 6.111 +|| echo "Failed"
7.1 --- a/tools/update_scheduling_modules.py Sat Oct 08 23:45:25 2016 +0200 7.2 +++ b/tools/update_scheduling_modules.py Sun Oct 23 23:21:01 2016 +0200 7.3 @@ -23,7 +23,7 @@ 7.4 from os.path import join, split, splitext 7.5 import imiptools.handlers 7.6 7.7 -reserved = ["__init__.py", "manifest.py"] 7.8 +reserved = ["__init__.py", "common.py", "manifest.py"] 7.9 7.10 # The main program generating a new version of the manifest module. 7.11