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 # Output testing. 60 61 have_occurrences() { 62 # <string> <number> [ <filename> ] 63 if [ "$3" ]; then 64 [ `grep "$1" "$3" | wc -l` = "$2" ] 65 else 66 [ `grep "$1" | wc -l` = "$2" ] 67 fi 68 } 69 70 is_absent() { 71 # <string> [ <filename> ] 72 if [ "$2" ]; then 73 ! grep -q "$1" "$2" 74 else 75 ! grep -q "$1" 76 fi 77 } 78 79 is_present() { 80 # <string> [ <filename> ] 81 if [ "$2" ]; then 82 grep -q "$1" "$2" 83 else 84 grep -q "$1" 85 fi 86 } 87 88 # Specific operations. 89 90 freebusy_request() { 91 # <filename> <scope> [ resource ] 92 if [ "$2" ]; then 93 SCOPE="-$2" 94 else 95 SCOPE= 96 fi 97 if [ "$3" = 'resource' ]; then 98 resource_script "$TEMPLATES/fb-request$SCOPE.txt" "$1" 99 else 100 person_script "$TEMPLATES/fb-request-person$SCOPE.txt" "$1" 101 fi 102 } 103 104 list_script() { 105 # <filename> <arg>... 106 FILENAME=$1 107 shift 1 108 "$LIST_SCRIPT" $LIST_ARGS $* > "$FILENAME" 109 } 110 111 outgoing_script() { 112 # [ <filename> ] 113 if [ "$1" ]; then 114 "$OUTGOING_SCRIPT" < "$1" $ARGS 2>> $ERROR 115 else 116 "$OUTGOING_SCRIPT" $ARGS 2>> $ERROR 117 fi 118 } 119 120 person_script() { 121 # <filename> <output filename> [ <raw output filename> ] 122 OUTFILE="$3" 123 "$PERSON_SCRIPT" $ARGS < "$1" 2>> $ERROR \ 124 | tee $OUTFILE \ 125 | "$SHOWMAIL" \ 126 > "$2" 127 } 128 129 resource_script() { 130 # <filename> <output filename> [ <raw output filename> ] 131 OUTFILE="$3" 132 "$RESOURCE_SCRIPT" $ARGS < "$1" 2>> $ERROR \ 133 | tee $OUTFILE \ 134 | "$SHOWMAIL" \ 135 > "$2" 136 } 137 138 showmail() { 139 # <filename> [ <messages to skip> ] 140 "$SHOWMAIL" $2 < "$1" 2>> $ERROR 141 } 142 143 test_freebusy() { 144 # <start> <end> <filename> 145 is_present "^$1${TAB}$2" "$3" && success || failed "$3" 146 } 147 148 test_freebusy_missing() { 149 # <start> <end> <filename> 150 is_absent "^$1${TAB}$2" "$3" && success || failed "$3" 151 } 152 153 text_client() { 154 # <user> <command filename> [ <event filename> ] 155 LOG=`basename "$2" .tmp`_log.tmp 156 if [ "$3" ]; then 157 "$TEXT_CLIENT" $ARGS -u "$1" -f "$3" --echo < "$2" > "$LOG" 158 else 159 "$TEXT_CLIENT" $ARGS -u "$1" --echo < "$2" > "$LOG" 160 fi 161 } 162 163 text_client_specific() { 164 # <user> <command filename> <uid> [ <recurrence-id> ] 165 LOG=`basename "$2" .tmp`_log.tmp 166 if [ "$4" ]; then 167 "$TEXT_CLIENT" $ARGS -u "$1" --uid "$3" --recurrence-id "$4" --echo < "$2" > "$LOG" 168 else 169 "$TEXT_CLIENT" $ARGS -u "$1" --uid "$3" --echo < "$2" > "$LOG" 170 fi 171 } 172 173 test_initial_freebusy() { 174 # [ resource ] 175 freebusy_request "init_fb.tmp" 'all' "$1" 176 177 # Expect a reply with no periods. 178 179 is_present 'METHOD:REPLY' "init_fb.tmp" \ 180 && is_absent '^FREEBUSY' "init_fb.tmp" \ 181 && success || failed "init_fb.tmp" 182 } 183 184 test_initial_freebusy_limited() { 185 # [ resource ] 186 freebusy_request "init_fb_limited.tmp" '' "$1" 187 188 # Expect a reply with no periods. 189 190 is_present 'METHOD:REPLY' "init_fb_limited.tmp" \ 191 && is_absent '^FREEBUSY' "init_fb_limited.tmp" \ 192 && success || failed "init_fb_limited.tmp" 193 } 194 195 196 197 # Test environment initialisation. 198 199 if [ "$STORE_TYPE" = "file" ]; then 200 rm -rf "$STORE" 201 rm -rf "$JOURNAL" 202 elif [ "$STORE_TYPE" = "postgresql" ]; then 203 dropdb "$DBNAME" 204 createdb "$DBNAME" 205 psql -q -f "$BASE_DIR/conf/postgresql/schema.sql" "$DBNAME" 2>> $DBERROR 206 fi 207 208 rm -rf "$STATIC" 209 rm -rf "$PREFS" 210 rm -f "$ERROR" 211 rm -f out*.tmp