pop3d.exp 5.13 KB
# -*- tcl -*-
# This file is part of Mailutils testsuite.
# Copyright (C) 2002, 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 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 

source $top_srcdir/testsuite/lib/mailutils.exp

    
mu_init "--authentication generic --authorization virtdomain"
mu_version
if ![mu_check_capability USE_VIRTUAL_DOMAINS] {
    clone_output "WARNING: Support for virtual domains not compiled in"
    clone_output "WARNING: Skipping tests for pop3d"
    exit 0
}

set POP3D_ETC_DIR "$MU_DATA_DIR/etc"

set output [remote_exec host "$MU_MAKESPOOL \
	          -subst \"s,@MU_SPOOL_DIR@,$MU_SPOOL_DIR,\" \
		  $MU_RC_DIR $POP3D_ETC_DIR" ]
if [lindex $output 0] {
    perror "Cannot create $POP3D_ETC_DIR: [lindex $output 1]"
    exit 1
}
append MU_TOOL_FLAGS " --virtual-passwd-dir $POP3D_ETC_DIR"

### Only procedures should come after this point.

proc pop3d_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_pop3d_start {args} {
    global verbose
    global MU_TOOL
    global MU_TOOL_FLAGS
    global expect_out
    
    mu_version

    set args [lindex $args 0]
    if [info exists MU_TOOL_FLAGS] {
	set sw $MU_TOOL_FLAGS
    } else {
	set sw ""
    }
    
    if [llength $args] {
	append sw $args
    } 
    
    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 pop3d_cmd "$MU_TOOL $sw"
    verbose "Spawning $pop3d_cmd"

    set res [remote_spawn host $pop3d_cmd]
    if { $res < 0 || $res == "" } {
	perror "Spawning $pop3d_cmd failed."
	return 1;
    }

    mu_expect 360 {
	-re "\\+OK.*" {
	    verbose "pop3d initialized."
	}
	default {
	    perror "pop3d not initialized"
            exit 1
	}
    }
    return 0
}

proc default_pop3d_stop {} {

    verbose "Stopping pop3d"

}

proc pop3d_start {args} {
    global MU_SPOOL_DIR
    
    verbose "Starting pop3d"

    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
	set output [remote_exec host \
		         "cp $MU_SPOOL_DIR/teaparty.mbox $MU_SPOOL_DIR/INBOX"]
	if [lindex $output 0] {
		perror "Cannot create $MU_SPOOL_DIR/INBOX: [lindex $output 1]"
		exit 1
	}
    }
    return [default_pop3d_start [concat [lrange $args $i end]]]
}
    
proc pop3d_stop {} {
    return [default_pop3d_stop];
}

##

proc pop3d_send { string } {
    return [mu_send "$string"]
}

proc pop3d_command { cmd } {
    return [mu_command $cmd]
}

proc pop3d_exit {} {
    set res [pop3d_send "quit\n"]
    mu_expect 360 {
	-re "\\+OK.*$"  { }
	default {
	    perror "quit failed"
	    exit 1
	}
    }
    return res
}

proc pop3d_auth {args} {
    set user [lindex $args 0]
    set pass [lindex $args 1]
    pop3d_test "USER $user" 
    if [pop3d_test "PASS $pass"] {
	perror "Failed to authorize."
	exit 1
    }
}    
    
# pop3d_test [-message MESSAGE][-default (FAIL|XFAIL)]
#            COMMAND [PATTERN...]
# COMMAND   - Command to send.
# PATTERN   - Sequence to expect in return. Defaults to "+OK"
# MESSAGE   - [optional] message to output
proc pop3d_test { args } {
    global verbose
    global suppress_flag;
    upvar timeout timeout

    set default ""
    set message ""
    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
	} 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]
    if {[llength $args] >= 2} {
	set pattern [lrange $args 1 end]
    } else {
	set pattern "+OK"
    }
    set result [mu_test $command $pattern]

    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
}