svn commit: samba r16147 - in branches/SOC/bnh: . expect
brad at samba.org
brad at samba.org
Mon Jun 12 04:28:55 GMT 2006
Author: brad
Date: 2006-06-12 04:28:55 +0000 (Mon, 12 Jun 2006)
New Revision: 16147
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16147
Log:
For now, these scripts assume:
* The microsoft telnet server is enabled and running on the host specified in wintest_run.sh.
* The user specified in wintest_run.sh exists, has admin rights, and can login through telnet.
Given this, these scripts:
1. Log into the windows host though telnet, prepare a directory and a share on the windows host.
2. Run the RAW-QFILEINFO smbtorture test against that share.
3. Log into the windows host through telnet, remove the share and the directory.
Running wintest_run.sh will start the process.
Added:
branches/SOC/bnh/expect/
branches/SOC/bnh/expect/common.exp
branches/SOC/bnh/expect/wintest_remove.exp
branches/SOC/bnh/expect/wintest_run.sh
branches/SOC/bnh/expect/wintest_setup.exp
Changeset:
Added: branches/SOC/bnh/expect/common.exp
===================================================================
--- branches/SOC/bnh/expect/common.exp 2006-06-12 02:23:57 UTC (rev 16146)
+++ branches/SOC/bnh/expect/common.exp 2006-06-12 04:28:55 UTC (rev 16147)
@@ -0,0 +1,108 @@
+# A library of commonly used functions written in expect.
+# Copyright Brad Henry <brad at samba.org> 2006
+# Released under the GNU GPL v2 or later.
+
+# This function will create a telnet login shell to $remote_host as $username.
+# If expected dialogue is not recieved, return with a specific error if one
+# is recognized. Otherwise return a generic error indicating the function
+# name.
+proc telnet_login { remote_prompt remote_host username password } {
+
+ set err_str "Unknown error in function telnet_login"
+
+ set cmd "telnet $remote_host\r"
+ send -- $cmd
+ expect "login: " {
+ set err_str "OK"
+ } \
+ "Connection refused" {
+ return "Connection refused"
+ } \
+ "No route to host" {
+ return "No route to host"
+ }
+ if { $err_str != "OK" } {
+ # Return because we encountered an unrecognized error.
+ return $err_str
+ } else {
+ # Reset err_str
+ set err_str "Unknown error in function telnet_login"
+ }
+
+ set cmd "$username\r"
+ send -- $cmd
+ expect "password: "
+
+ set cmd "$password\r"
+ send -- $cmd
+ expect $remote_prompt {
+ set err_str "OK"
+ } \
+ "Login Failed" {
+ set err_str "Login Failed"
+ }
+ return $err_str
+}
+
+proc create_directory { remote_prompt sharepath } {
+
+ set err_str "Unknown error in function create_directory"
+
+ set cmd "mkdir $sharepath\r"
+ send -- $cmd
+ expect "already exists" {
+ return "Directory already exists"
+ } \
+ $remote_prompt {
+ set err_str "OK"
+ }
+ return $err_str
+}
+
+proc delete_directory { remote_prompt sharepath } {
+
+ set err_str "Unknown error in function delete_directory"
+
+ set cmd "rmdir $sharepath\r"
+ send -- $cmd
+ expect $remote_prompt {
+ set err_str "OK"
+ }
+
+# I don't understand why I have to send an extra 'enter' here.
+# There isn't any real error checking in this function either.
+ send -- "\r"
+ expect $remote_prompt
+
+ return $err_str
+}
+
+proc create_share { remote_prompt username sharepath sharename } {
+
+ set err_str "Unknown error in function create_share"
+
+ set cmd "net share $sharename=$sharepath /GRANT:$username,FULL\r"
+ send -- $cmd
+ expect "was shared successfully." {
+ set err_str "OK"
+ } \
+ "already been shared." {
+ return "The name has already been shared"
+ }
+ return $err_str
+}
+
+proc delete_share { remote_prompt sharename } {
+
+ set err_str "Unknown error in function delete_share"
+
+ set cmd "net share $sharename /DELETE\r"
+ send -- $cmd
+ expect "was deleted successfully." {
+ set err_str "OK"
+ } \
+ "does not exist." {
+ return "The share does not exist"
+ }
+ return $err_str
+}
Added: branches/SOC/bnh/expect/wintest_remove.exp
===================================================================
--- branches/SOC/bnh/expect/wintest_remove.exp 2006-06-12 02:23:57 UTC (rev 16146)
+++ branches/SOC/bnh/expect/wintest_remove.exp 2006-06-12 04:28:55 UTC (rev 16147)
@@ -0,0 +1,51 @@
+# An expect script to remove a directory and share which was
+# previously setup for an smbtorture test.
+# Copyright Brad Henry <brad at samba.org> 2006
+# Released under the GNU GPL v2 or later.
+
+proc remove_test { remote_prompt sharepath sharename } {
+
+ puts stderr "Removing share $sharename."
+
+ set err_str [delete_share $remote_prompt $sharename]
+ if { $err_str != "OK" } {
+ return $err_str
+ }
+
+ puts stderr "Removing directory $sharepath."
+
+ set err_str [delete_directory $remote_prompt $sharepath]
+ if { $err_str != "OK" } {
+ return $err_str
+ }
+ return $err_str
+}
+
+# read parameters
+set remote_host $env(SMBTORTURE_REMOTE_HOST)
+set remote_prompt $env(SMBTORTURE_REMOTE_PROMPT)
+
+set username $env(SMBTORTURE_USERNAME)
+set password $env(SMBTORTURE_PASSWORD)
+
+set timeout $env(SMBTORTURE_EXPECT_TIMEOUT)
+
+set sharepath $env(SMBTORTURE_SHARE_PATH)
+set sharename $env(SMBTORTURE_SHARE_NAME)
+
+spawn $env(SHELL)
+
+set err_str [telnet_login $remote_prompt $remote_host $username $password]
+if {$err_str != "OK"} {
+ puts stderr "\nFunction telnet_login failed.\nError was: $err_str"
+ exit 1
+}
+
+set err_str [remove_test $remote_prompt $sharepath $sharename]
+if {$err_str != "OK"} {
+ puts stderr "\nFunction remove_test failed.\nError was: $err_str"
+ exit 1
+}
+
+send -- "exit\r"
+exit 0
Added: branches/SOC/bnh/expect/wintest_run.sh
===================================================================
--- branches/SOC/bnh/expect/wintest_run.sh 2006-06-12 02:23:57 UTC (rev 16146)
+++ branches/SOC/bnh/expect/wintest_run.sh 2006-06-12 04:28:55 UTC (rev 16147)
@@ -0,0 +1,64 @@
+#!/bin/sh
+
+# A shell script to connect to a windows host over telnet,
+# setup for a smbtorture test,
+# run the test,
+# and remove the previously configured directory and share.
+# Copyright Brad Henry <brad at samba.org> 2006
+# Released under the GNU GPL v2 or later.
+
+WINTEST_SETUP_ERROR_LOG="/tmp/wintest_setup.exp.err"
+WINTEST_REMOVE_ERROR_LOG="/tmp/wintest_remove.exp.err"
+
+export SMBTORTURE_REMOTE_HOST=192.168.0.1
+export SMBTORTURE_REMOTE_PROMPT=">"
+
+export SMBTORTURE_USERNAME="tortureuser"
+export SMBTORTURE_PASSWORD="torturepass"
+
+export SMBTORTURE_SHARE_NAME="smbtorture_share"
+export SMBTORTURE_SHARE_PATH="c:\torture_share"
+
+export SMBTORTURE_EXPECT_TIMEOUT=30
+
+# Setup the windows environment.
+# This was the best way I could figure out including library files for the moment.
+cat common.exp wintest_setup.exp | expect -f - 2> $WINTEST_SETUP_ERROR_LOG
+err_setup=$?
+
+echo "wintest_setup.exp stderr output:"
+cat $WINTEST_SETUP_ERROR_LOG
+#rm -f $WINTEST_SETUP_ERROR_LOG
+
+if [ $err_setup -ne 0 ]
+then
+ exit $err_setup
+fi
+
+# Run the smbtorture test.
+/usr/local/samba/bin/smbtorture \
+ -U $SMBTORTURE_USERNAME%$SMBTORTURE_PASSWORD \
+ -d 10 -W SMBTEST \
+ //$SMBTORTURE_REMOTE_HOST/$SMBTORTURE_SHARE_NAME \
+ RAW-QFILEINFO
+err_smbtorture=$?
+
+if [ $err_smbtorture -ne 0 ]
+then
+ exit $err_smbtorture
+fi
+
+# Cleanup the windows environment.
+cat common.exp wintest_remove.exp | expect -f - 2> $WINTEST_REMOVE_ERROR_LOG
+err_remove=$?
+
+echo "wintest_remove.exp stderr output:"
+cat $WINTEST_REMOVE_ERROR_LOG
+#rm -f $WINTEST_REMOVE_ERROR_LOG
+
+if [ $err_remove -ne 0 ]
+then
+ exit $err_remove
+fi
+
+exit 0
Property changes on: branches/SOC/bnh/expect/wintest_run.sh
___________________________________________________________________
Name: svn:executable
+ *
Added: branches/SOC/bnh/expect/wintest_setup.exp
===================================================================
--- branches/SOC/bnh/expect/wintest_setup.exp 2006-06-12 02:23:57 UTC (rev 16146)
+++ branches/SOC/bnh/expect/wintest_setup.exp 2006-06-12 04:28:55 UTC (rev 16147)
@@ -0,0 +1,74 @@
+# An expect script to setup a directory and share for an smbtorture test.
+# Copyright Brad Henry <brad at samba.org> 2006
+# Released under the GNU GPL v2 or later.
+
+proc setup_test { remote_prompt sharepath sharename username } {
+
+ puts stderr "Creating directory $sharepath."
+
+ # if creating the directory fails, remove, then
+ # re-create the directory.
+ set err_str [create_directory $remote_prompt $sharepath]
+ if { $err_str != "OK" } {
+ puts stderr "Directory $sharepath exists."
+ puts stderr "Deleting directory $sharepath."
+ set err_str [delete_directory $remote_prompt $sharepath]
+ if { $err_str != "OK" } {
+ return $err_str
+ }
+ puts stderr "Creating directory $sharepath."
+ set err_str [create_directory $remote_prompt $sharepath]
+ if { $err_str != "OK" } {
+ return $err_str
+ }
+ }
+
+ puts stderr "Creating share $sharename."
+
+ # if creating the share fails, remove, then
+ # re-create the share.
+ set err_str [create_share $remote_prompt $username $sharepath $sharename]
+ if { $err_str != "OK" } {
+ puts stderr "Share $sharename exists."
+ puts stderr "Removing share $sharename."
+ set err_str [delete_share $remote_prompt $sharename]
+ if { $err_str != "OK" } {
+ return $err_str
+ }
+ puts stderr "Creating share $sharename."
+ set err_str [create_share $remote_prompt $username $sharepath $sharename]
+ if { $err_str != "OK" } {
+ return $err_str
+ }
+ }
+ return $err_str
+}
+
+# read parameters
+set remote_host $env(SMBTORTURE_REMOTE_HOST)
+set remote_prompt $env(SMBTORTURE_REMOTE_PROMPT)
+
+set username $env(SMBTORTURE_USERNAME)
+set password $env(SMBTORTURE_PASSWORD)
+
+set timeout $env(SMBTORTURE_EXPECT_TIMEOUT)
+
+set sharepath $env(SMBTORTURE_SHARE_PATH)
+set sharename $env(SMBTORTURE_SHARE_NAME)
+
+spawn $env(SHELL)
+
+set err_str [telnet_login $remote_prompt $remote_host $username $password]
+if {$err_str != "OK"} {
+ puts stderr "\nFunction telnet_login failed.\nError was: $err_str"
+ exit 1
+}
+
+set err_str [setup_test $remote_prompt $sharepath $sharename $username]
+if {$err_str != "OK"} {
+ puts stderr "\nFunction setup_test failed.\nError was: $err_str"
+ exit 1
+}
+
+send -- "exit\r"
+exit 0
More information about the samba-cvs
mailing list