1 #!/bin/sh 2 3 . "`dirname \"$0\"`/common_minimal.sh" 4 5 ACCEPT_SCRIPT="$THIS_DIR/test_handle.py" 6 ACCEPT_ARGS="accept $STORE_TYPE $STORE $JOURNAL $PREFS" 7 8 COUNTER_SCRIPT="$THIS_DIR/test_handle.py" 9 COUNTER_ARGS="counter $STORE_TYPE $STORE $JOURNAL $PREFS" 10 11 DECLINE_SCRIPT="$THIS_DIR/test_handle.py" 12 DECLINE_ARGS="decline $STORE_TYPE $STORE $JOURNAL $PREFS" 13 14 FREEBUSY_SCRIPT="$BASE_DIR/tools/make_freebusy.py" 15 FREEBUSY_ARGS="-s -n" 16 FREEBUSY_QUOTA_ARGS="-s -q" 17 18 LIST_SCRIPT="$THIS_DIR/list_table.py" 19 LIST_ARGS="$STORE_TYPE $STORE $JOURNAL" 20 21 OUTGOING_SCRIPT="$BASE_DIR/imip_person_outgoing.py" 22 23 PERSON_SCRIPT="$BASE_DIR/imip_person.py" 24 25 SET_DELEGATES="$BASE_DIR/tools/set_delegates.py" 26 SET_DELEGATES_ARGS="-T $STORE_TYPE -j $JOURNAL" 27 28 SET_QUOTA_GROUPS="$BASE_DIR/tools/set_quota_groups.py" 29 SET_QUOTA_GROUPS_ARGS="-T $STORE_TYPE -j $JOURNAL" 30 31 SET_QUOTA_LIMITS="$BASE_DIR/tools/set_quota_limits.py" 32 SET_QUOTA_LIMITS_ARGS="-T $STORE_TYPE -j $JOURNAL" 33 34 TEXT_CLIENT="$BASE_DIR/imip_text_client.py" 35 36 TAB=`printf '\t'` 37 38 PYTHONPATH="$BASE_DIR" 39 export PYTHONPATH 40 41 42 43 # Helper functions. 44 45 failed() { 46 # [ <filename> ] 47 echo -n "Failed" 48 if [ "$1" ]; then 49 echo ": $1" 50 else 51 echo 52 fi 53 } 54 55 success() { 56 echo "Success" 57 } 58 59 is_absent() { 60 # <string> [ <filename> ] 61 if [ "$2" ]; then 62 ! grep -q "$1" "$2" 63 else 64 ! grep -q "$1" 65 fi 66 } 67 68 is_present() { 69 # <string> [ <filename> ] 70 if [ "$2" ]; then 71 grep -q "$1" "$2" 72 else 73 grep -q "$1" 74 fi 75 } 76 77 list_script() { 78 # <filename> <arg>... 79 FILENAME=$1 80 shift 1 81 "$LIST_SCRIPT" $LIST_ARGS $* > "$FILENAME" 82 } 83 84 outgoing_script() { 85 # [ <filename> ] 86 if [ "$1" ]; then 87 "$OUTGOING_SCRIPT" < "$1" $ARGS 2>> $ERROR 88 else 89 "$OUTGOING_SCRIPT" $ARGS 2>> $ERROR 90 fi 91 } 92 93 person_script() { 94 # <filename> <output filename> [ <raw output filename> ] 95 OUTFILE="$3" 96 "$PERSON_SCRIPT" $ARGS < "$1" 2>> $ERROR \ 97 | tee $OUTFILE \ 98 | "$SHOWMAIL" \ 99 > "$2" 100 } 101 102 showmail() { 103 # <filename> 104 "$SHOWMAIL" < "$1" 105 } 106 107 test_freebusy() { 108 # <start> <end> <filename> 109 is_present "^$1${TAB}$2" "$3" && success || failed "$3" 110 } 111 112 test_freebusy_missing() { 113 # <start> <end> <filename> 114 is_absent "^$1${TAB}$2" "$3" && success || failed "$3" 115 } 116 117 text_client() { 118 # <user> <command filename> [ <event filename> ] 119 LOG=`basename "$2" .tmp`_log.tmp 120 if [ "$3" ]; then 121 "$TEXT_CLIENT" $ARGS -u "$1" -f "$3" --echo < "$2" > "$LOG" 122 else 123 "$TEXT_CLIENT" $ARGS -u "$1" --echo < "$2" > "$LOG" 124 fi 125 } 126 127 text_client_specific() { 128 # <user> <command filename> <uid> [ <recurrence-id> ] 129 LOG=`basename "$2" .tmp`_log.tmp 130 if [ "$4" ]; then 131 "$TEXT_CLIENT" $ARGS -u "$1" --uid "$3" --recurrence-id "$4" --echo < "$2" > "$LOG" 132 else 133 "$TEXT_CLIENT" $ARGS -u "$1" --uid "$3" --echo < "$2" > "$LOG" 134 fi 135 } 136 137 test_initial_freebusy() { 138 person_script "$TEMPLATES/fb-request-person-all.txt" "init_fb.tmp" 139 140 # Expect a reply with no periods. 141 142 is_present 'METHOD:REPLY' "init_fb.tmp" \ 143 && is_absent '^FREEBUSY' "init_fb.tmp" \ 144 && success || failed "init_fb.tmp" 145 } 146 147 test_initial_freebusy_limited() { 148 person_script "$TEMPLATES/fb-request-person.txt" "init_fb_limited.tmp" 149 150 # Expect a reply with no periods. 151 152 is_present 'METHOD:REPLY' "init_fb_limited.tmp" \ 153 && is_absent '^FREEBUSY' "init_fb_limited.tmp" \ 154 && success || failed "init_fb_limited.tmp" 155 } 156 157 158 159 # Test environment initialisation. 160 161 if [ "$STORE_TYPE" = "file" ]; then 162 rm -rf "$STORE" 163 rm -rf "$JOURNAL" 164 elif [ "$STORE_TYPE" = "postgresql" ]; then 165 dropdb "$DBNAME" 166 createdb "$DBNAME" 167 psql -q -f "$BASE_DIR/conf/postgresql/schema.sql" "$DBNAME" 2>> $DBERROR 168 fi 169 170 rm -rf "$STATIC" 171 rm -rf "$PREFS" 172 rm -f "$ERROR" 173 rm -f out*.tmp