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