svn commit: samba r16526 - in branches/SAMBA_4_0/source/torture: . local

jelmer at samba.org jelmer at samba.org
Mon Jun 26 19:30:00 GMT 2006


Author: jelmer
Date: 2006-06-26 19:30:00 +0000 (Mon, 26 Jun 2006)
New Revision: 16526

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=16526

Log:
Add torture_setup_server() with test.

Modified:
   branches/SAMBA_4_0/source/torture/local/torture.c
   branches/SAMBA_4_0/source/torture/util.c


Changeset:
Modified: branches/SAMBA_4_0/source/torture/local/torture.c
===================================================================
--- branches/SAMBA_4_0/source/torture/local/torture.c	2006-06-26 19:29:43 UTC (rev 16525)
+++ branches/SAMBA_4_0/source/torture/local/torture.c	2006-06-26 19:30:00 UTC (rev 16526)
@@ -22,6 +22,7 @@
 
 #include "includes.h"
 #include "torture/torture.h"
+#include "system/wait.h"
 #include "torture/util.h"
 
 static BOOL test_tempdir(struct torture_context *torture, 
@@ -38,12 +39,42 @@
 	return True;
 }
 
+static BOOL test_setup_server(struct torture_context *torture, 
+							   const void *_data)
+{
+	pid_t pid;
+
+	torture_assert_ntstatus_ok(torture, torture_setup_server(torture, 
+									"./script/tests/mktestsetup.sh",
+									"./bin/smbd", &pid),
+							   "starting smbd failed");
+
+	torture_assert(torture, pid > 0, "Pid invalid");
+
+	torture_comment(torture, "Created smbd with pid %d", pid);
+
+	kill(pid, SIGINT);
+
+	waitpid(pid, NULL, 0);
+
+	torture_assert_ntstatus_equal(torture, torture_setup_server(torture, 
+									"./invalid-script",
+									"./bin/smbd", &pid), 
+								  NT_STATUS_UNSUCCESSFUL,
+							   "invalid script specified");
+
+	torture_assert(torture, pid == -1, "Pid not -1 after failure");
+
+	return True;
+}
+
 struct torture_suite *torture_local_torture(TALLOC_CTX *mem_ctx)
 {
 	struct torture_suite *suite = torture_suite_create(mem_ctx, 
 													   "LOCAL-TORTURE");
 
 	torture_suite_add_simple_tcase(suite, "tempdir", test_tempdir, NULL);
+	torture_suite_add_simple_tcase(suite, "setup server", test_setup_server, NULL);
 
 	return suite;
 }

Modified: branches/SAMBA_4_0/source/torture/util.c
===================================================================
--- branches/SAMBA_4_0/source/torture/util.c	2006-06-26 19:29:43 UTC (rev 16525)
+++ branches/SAMBA_4_0/source/torture/util.c	2006-06-26 19:30:00 UTC (rev 16526)
@@ -20,8 +20,12 @@
 
 #include "includes.h"
 #include "system/filesys.h"
+#include "system/wait.h"
 #include "torture/torture.h"
 
+/**
+ create a temporary directory.
+*/
 _PUBLIC_ NTSTATUS torture_temp_dir(TALLOC_CTX *mem_ctx, char **tempdir)
 {
 	*tempdir = talloc_strdup(mem_ctx, "torture-tmp.XXXXXX");
@@ -33,11 +37,79 @@
 }
 
 /**
-  check if 2 NTTIMEs are equal
+  check if 2 NTTIMEs are equal.
 */
 BOOL nt_time_equal(NTTIME *t1, NTTIME *t2)
 {
 	return *t1 == *t2;
 }
 
+/**
+ * Provision a Samba installation using @param setupdir_script and start smbd.
+ */
+NTSTATUS torture_setup_server(TALLOC_CTX *mem_ctx, 
+							  const char *setupdir_script,
+							  const char *smbd_path,
+							  pid_t *smbd_pid)
+{
+	char *tempdir;
+	NTSTATUS status;
+	pid_t pid;
+	int child_status;
+	char *configfile, *configparam;
+	pid_t closed_pid;
 
+	*smbd_pid = -1;
+
+	status = torture_temp_dir(mem_ctx, &tempdir);
+	if (NT_STATUS_IS_ERR(status)) {
+		return status;
+	}
+
+	if ((pid = fork()) == 0) {
+		execl(setupdir_script, setupdir_script, tempdir, NULL);
+		exit(1);
+	} else if (pid == -1) {
+		DEBUG(0, ("Unable to fork()\n"));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	closed_pid = waitpid(pid, &child_status, 0);
+
+	if (closed_pid == -1) {
+		DEBUG(1, ("Error waiting for child"));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	SMB_ASSERT(closed_pid == pid);
+
+	if (!WIFEXITED(child_status) || WEXITSTATUS(child_status) != 0) {
+		DEBUG(1, ("Invalid return code from setup script %s: %d\n", 
+				  setupdir_script,
+				  WEXITSTATUS(child_status)));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	configfile = talloc_asprintf(mem_ctx, "%s/etc/smb.conf", 
+								 tempdir);
+	if (!file_exist(configfile)) {
+		DEBUG(1, ("Setup script didn't create %s\n", configfile));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	configparam = talloc_asprintf(mem_ctx, "--configfile=%s", configfile);
+	talloc_free(configfile);
+
+	if ((pid = fork()) == 0) {
+		execl(smbd_path, smbd_path, "-i", "--model=single", 
+						configparam, NULL);
+		exit(1);
+	} else if (pid == -1) {
+		DEBUG(0, ("Unable to fork()\n"));
+		return NT_STATUS_UNSUCCESSFUL;
+	}
+
+	*smbd_pid = pid;
+
+	return NT_STATUS_OK;
+}



More information about the samba-cvs mailing list