1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208
|
# -*- tcl -*-
# This file is part of Mailutils testsuite.
# Copyright (C) 2002, 2007 Free Software Foundation
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA.
source $top_srcdir/testsuite/lib/mailutils.exp
mu_init "--nosum --norc"
#FIXME: this doesn't work with remote testing
set env(MAILRC) $MU_RC_DIR/mail.rc
set env(MBOX) "$MU_SPOOL_DIR/mbox"
# The variable mail_prompt is a regexp which matches the mail prompt.
global mail_prompt
if ![info exists mail_prompt] then {
set mail_prompt "\\? "
}
### Only procedures should come after this point.
proc mail_version {} {
global MU_TOOL
global MU_TOOL_FLAGS
global MU_TOOL_VERSION
mu_version
if ![is_remote host] {
clone_output "[which $MU_TOOL] version $MU_TOOL_VERSION"
} else {
clone_output "$MU_TOOL on remote host version $MU_TOOL_VERSION"
}
}
proc default_mail_start {args} {
global verbose
global MU_TOOL
global MU_TOOL_FLAGS
global mail_prompt
global expect_out
global mail_spawn_id
mu_version
set sw $args
append sw " "
if [info exists MU_TOOL_FLAGS] {
append sw $MU_TOOL_FLAGS
}
if [info exists host_board] {
if [board_info $host_board exists top_srcdir] {
append sw " --mail-spool [board_info $host_board top_srcdir]/mail/testsuite/spool"
}
}
set mail_cmd "$MU_TOOL $sw"
verbose "Spawning $mail_cmd"
set mail_spawn_id [remote_spawn host $mail_cmd]
if { $mail_spawn_id < 0 || $mail_spawn_id == "" } {
perror "Spawning $mail_cmd failed."
return 1;
}
mu_expect 360 {
-re "\[\r\n\]?${mail_prompt}$" {
verbose "mail initialized."
}
default {
perror "mail not initialized"
return 1
}
}
return 0
}
proc default_mail_stop {} {
verbose "Stopping mail"
mail_command "exit"
remote_close host
}
proc mail_start {args} {
verbose "Starting mail"
set reuse_spool 0
for {set i 0} {$i < [llength $args]} {incr i} {
set a [lindex $args $i]
if {"$a" == "-reuse-spool"} {
set reuse_spool 1
} else {
break;
}
}
if {$reuse_spool == 0} {
mu_prepare_spools
}
return [default_mail_start [lrange $args $i end]]
}
proc mail_stop {} {
global mail_spawn_id
if {[info exists mail_spawn_id] && $mail_spawn_id > 0} {
default_mail_stop
unset mail_spawn_id
}
}
##
proc mail_send { string } {
return [mu_send "$string"]
}
proc mail_command { cmd } {
return [mu_command $cmd]
}
proc mail_exit {} {
mail_stop
}
# mail_test [-message MESSAGE][-default (FAIL|XFAIL)][-noprompt]
# COMMAND PATTERN [PATTERN...]
# COMMAND - Command to send to mail.
# PATTERN - Sequence to expect in return.
# MESSAGE - [optional] message to output
proc mail_test { args } {
global verbose
global mail_prompt
global suppress_flag;
upvar timeout timeout
set default ""
set message ""
set wait_for_prompt 1
for {set i 0} {$i < [llength $args]} {incr i} {
set a [lindex $args $i]
if {"$a" == "-default"} {
set default [lindex $args [expr $i + 1]]
incr i
} elseif {"$a" == "-message"} {
set message [lindex $args [expr $i + 1]]
incr i
} elseif {"$a" == "-noprompt"} {
set wait_for_prompt 0
} else {
set args [lrange $args $i end]
break
}
}
if {"$message" == ""} {
set message [lindex $args 0]
}
if $verbose>2 then {
send_user "Message is \"$message\"\n"
}
set command [lindex $args 0]
set pattern [lrange $args 1 end]
set result [mu_test $command $pattern]
if {$wait_for_prompt} {
mu_expect 30 {
-re "\[\r\n\]?${mail_prompt}$" {}
default {
perror "mail not initialized"
return 1
}
}
}
if {$result == 0} {
pass "$message"
} elseif {$result == 1} {
if { "$default" == "" || "$default" != "FAIL" } {
fail "$message"
} else {
xfail "$message"
set result 0
}
} elseif {$result == -2} {
fail "$message (timeout)"
} elseif {$result == -3} {
fail "$message (eof)"
} else {
fail "$message"
}
return $result
}
|