]> diplodocus.org Git - nmh/blob - test/imap/test-search
expect this commit to be force-replaced periodically
[nmh] / test / imap / test-search
1 #!/bin/sh
2
3 if test -z "$MH_OBJ_DIR"; then
4 srcdir=`dirname "$0"`/../..
5 MH_OBJ_DIR=`cd "$srcdir" && pwd`; export MH_OBJ_DIR
6 fi
7
8 . "$MH_OBJ_DIR/test/common.sh"
9
10 # common.sh sets this to something crazy; did i do that?!
11 testname=${0#$srcdir/}
12
13 setup_test_without_data Mail
14
15 imap_cleanup() {
16 #### Save exit status to use as status for this program.
17 status=$?
18 set +e
19
20 rm -f "$imapd"
21
22 [ -n "$imapd_pid" ] && kill $imapd_pid
23 "$MH_OBJ_DIR/target/debug/mhimap" imap shutdown
24
25 # TODO have cleanup allow additional cleanup registration?
26 # Or just allow it to accept status as argument.
27 (exit $status)
28 cleanup
29 }
30 trap imap_cleanup 0
31
32 covdir="$MH_OBJ_DIR/covdata/${MH_COVERAGE_PROFILE:-default}/$testname"
33 install -d "$covdir"
34 export LLVM_PROFILE_FILE="$covdir/$profile-%m.profraw"
35
36 imapd="$MH_TEST_DIR/$$.imapd"
37 start_fakeinetd "$imapd"
38 imapd_pid=$fakeinetd_pid
39
40 cat >> "$MH" <<EOF
41 Managed-Folders: imap
42 imap-manager: $MH_OBJ_DIR/target/debug/imap-folder-manager
43 imap-socket: $MH_TEST_DIR/Mail/imap.d/socket
44 imap-db: $MH_TEST_DIR/Mail/imap.d
45 imap-host: 127.0.0.1
46 imap-port: $fakeinetd_port
47 imap-tls: don't protect my data i know what i'm doing
48 imap-auth: PREAUTH
49 imap-mailbox-root: test/
50 EOF
51 if [ -n "$MH_TEST_IMAP_LOG_LEVEL" ]; then
52 echo "imap-log-level: $MH_TEST_IMAP_LOG_LEVEL" >> "$MH"
53 echo "imap-log-$MH_TEST_IMAP_LOG_LEVEL-to: $MH_TEST_DIR/$profile/imap.d/log.$MH_TEST_IMAP_LOG_LEVEL" >> "$MH"
54 fi
55
56 expected="$MH_TEST_DIR/$$.expected"
57 actual="$MH_TEST_DIR/$$.actual"
58
59 cat > "$imapd" <<EOSCRIPT
60 #!/bin/sh
61 cat <<EOF
62 * PREAUTH [CAPABILITY IMAP4REV1 UIDPLUS] authenticated
63 * LIST (\NoInferiors \UnMarked) "/" test/fold
64 1 OK LIST completed
65 * 6 EXISTS
66 * OK [UIDVALIDITY 1633920336] UID validity status
67 * OK [UIDNEXT 11] Predicted next UID
68 1 OK [READ-WRITE] SELECT for inc completed
69 * 2 FETCH (UID 6)
70 * 3 FETCH (UID 7)
71 * 4 FETCH (UID 8)
72 * 5 FETCH (UID 9)
73 * 6 FETCH (UID 10)
74 1 OK UID FETCH completed
75 * 2 FETCH (UID 6 FLAGS (\Seen) BODY[] {9}
76 from:me
77 )
78 f6 OK UID FETCH completed
79 * 3 FETCH (UID 7 FLAGS (\Seen) BODY[] {9}
80 from:me
81 )
82 f7 OK UID FETCH completed
83 * 4 FETCH (UID 8 FLAGS (\Seen) BODY[] {9}
84 from:me
85 )
86 f8 OK UID FETCH completed
87 * 5 FETCH (UID 9 FLAGS (\Seen) BODY[] {9}
88 from:me
89 )
90 f9 OK UID FETCH completed
91 * 6 FETCH (UID 10 FLAGS (\Seen) BODY[] {9}
92 from:me
93 )
94 f10 OK UID FETCH completed
95 * SEARCH 9
96 * SEARCH 7 6 10
97 * SEARCH 8
98 1 OK UID SEARCH completed
99 close OK CLOSE for inc completed
100 * 6 EXISTS
101 * OK [UIDVALIDITY 1633920336] UID validity status
102 * OK [UIDNEXT 11] Predicted next UID
103 1 OK [READ-WRITE] SELECT for scan completed
104 1 OK nothing for SEARCH NOT SEEN
105 close OK CLOSE for scan completed
106 EOF
107 while read line; do :; done
108 EOSCRIPT
109 chmod 755 "$imapd"
110
111 ################################################################################
112 start_test 'out of order SEARCH response - inc'
113
114 check_exit '-eq 0' inc +imap
115
116 check_exit '-eq 0' "$MH_OBJ_DIR/target/debug/mhimap" imap check imap/fold
117
118 ################################################################################
119 start_test 'out of order SEARCH response - scan finds all 5 messages'
120
121 cat > "$expected" <<EOF
122 1 10/11*me
123 2 10/11*me
124 3 10/11*me
125 4 10/11*me
126 5 10/11*me
127 EOF
128 scan +imap/fold > "$actual"
129 check "$actual" "$expected"
130
131 finish_test
132 exit ${failed:-0}