[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Tue May 4 09:19:30 MDT 2010


The branch, master has been updated
       via  7e5fee9... s4-smbtorture: fill in test_rap_print().
      from  cc46f4a... s3-libnetjoin: omit admin password in generated ndr_print function.

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 7e5fee98be728eab1c20a2da12c1eb0bab9a8ac2
Author: Günther Deschner <gd at samba.org>
Date:   Tue May 4 17:18:22 2010 +0200

    s4-smbtorture: fill in test_rap_print().
    
    This tests pauses a printer over RAP, prints a file, enumerates the job, deletes
    the job and resumes the print queue.
    
    Guenther

-----------------------------------------------------------------------

Summary of changes:
 source4/torture/rap/printing.c |  110 +++++++++++++++++++++++++++++++++++----
 1 files changed, 98 insertions(+), 12 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/torture/rap/printing.c b/source4/torture/rap/printing.c
index 72adb40..e18378d 100644
--- a/source4/torture/rap/printing.c
+++ b/source4/torture/rap/printing.c
@@ -34,15 +34,17 @@
 
 #define TORTURE_PRINT_FILE "torture_print_file"
 
-static bool test_raw_print(struct torture_context *tctx,
-			   struct smbcli_state *cli)
+static bool print_printjob(struct torture_context *tctx,
+			   struct smbcli_tree *tree)
 {
 	int fnum;
 	DATA_BLOB data;
 	ssize_t size_written;
 	const char *str;
 
-	fnum = smbcli_open(cli->tree, TORTURE_PRINT_FILE, O_RDWR|O_CREAT|O_TRUNC, DENY_NONE);
+	torture_comment(tctx, "creating printjob %s\n", TORTURE_PRINT_FILE);
+
+	fnum = smbcli_open(tree, TORTURE_PRINT_FILE, O_RDWR|O_CREAT|O_TRUNC, DENY_NONE);
 	if (fnum == -1) {
 		torture_fail(tctx, "failed to open file");
 	}
@@ -51,18 +53,24 @@ static bool test_raw_print(struct torture_context *tctx,
 
 	data = data_blob_string_const(str);
 
-	size_written = smbcli_write(cli->tree, fnum, 0, data.data, 0, data.length);
+	size_written = smbcli_write(tree, fnum, 0, data.data, 0, data.length);
 	if (size_written != data.length) {
 		torture_fail(tctx, "failed to write file");
 	}
 
 	torture_assert_ntstatus_ok(tctx,
-		smbcli_close(cli->tree, fnum),
+		smbcli_close(tree, fnum),
 		"failed to close file");
 
 	return true;
 }
 
+static bool test_raw_print(struct torture_context *tctx,
+			   struct smbcli_state *cli)
+{
+	return print_printjob(tctx, cli->tree);
+}
+
 static bool test_netprintqenum(struct torture_context *tctx,
 			       struct smbcli_state *cli)
 {
@@ -267,6 +275,36 @@ static bool test_netprintq(struct torture_context *tctx,
 	return true;
 }
 
+static bool test_netprintjobenum_args(struct torture_context *tctx,
+				      struct smbcli_state *cli,
+				      const char *PrintQueueName,
+				      uint16_t level,
+				      uint16_t *count_p,
+				      union rap_printj_info **info_p)
+{
+	struct rap_NetPrintJobEnum r;
+
+	r.in.PrintQueueName = PrintQueueName;
+	r.in.bufsize = 8192;
+	r.in.level = level;
+
+	torture_comment(tctx,
+		"Testing rap_NetPrintJobEnum(%s) level %d\n", r.in.PrintQueueName, r.in.level);
+
+	torture_assert_ntstatus_ok(tctx,
+		smbcli_rap_netprintjobenum(cli->tree, lp_iconv_convenience(tctx->lp_ctx), tctx, &r),
+		"smbcli_rap_netprintjobenum failed");
+
+	if (count_p) {
+		*count_p = r.out.count;
+	}
+	if (info_p) {
+		*info_p = r.out.info;
+	}
+
+	return true;
+}
+
 static bool test_netprintjobenum_one(struct torture_context *tctx,
 				     struct smbcli_state *cli,
 				     const char *PrintQueueName)
@@ -551,13 +589,61 @@ static bool test_netprintdestgetinfo(struct torture_context *tctx,
 static bool test_rap_print(struct torture_context *tctx,
 			   struct smbcli_state *cli)
 {
-	/*
-	pause printer
-	print printfile
-	enumjobs printer
-	delete job
-	start printer
-	*/
+	struct rap_NetPrintQEnum r;
+	int i;
+
+	r.in.level = 5;
+	r.in.bufsize = 8192;
+
+	torture_assert_ntstatus_ok(tctx,
+		smbcli_rap_netprintqenum(cli->tree, lp_iconv_convenience(tctx->lp_ctx), tctx, &r),
+		"failed to enum printq");
+
+	for (i=0; i < r.out.count; i++) {
+
+		const char *printqname = r.out.info[i].info5.PrintQueueName;
+		struct smbcli_tree *res_queue = NULL;
+		uint16_t num_jobs;
+		union rap_printj_info *job_info;
+		int j;
+
+		torture_assert(tctx,
+			test_netprintq_pause(tctx, cli, printqname),
+			"failed to set printjobs on print queue");
+
+		torture_assert_ntstatus_ok(tctx,
+			torture_second_tcon(tctx, cli->session, printqname, &res_queue),
+			"failed to open 2nd connection");
+
+		torture_assert(tctx,
+			print_printjob(tctx, res_queue),
+			"failed to print job on 2nd connection");
+
+		talloc_free(res_queue);
+
+		torture_assert(tctx,
+			test_netprintjobenum_args(tctx, cli, printqname, 1,
+			&num_jobs, &job_info),
+			"failed to enum printjobs on print queue");
+
+		for (j=0; j < num_jobs; j++) {
+
+			uint16_t job_id = job_info[j].info1.JobID;
+
+			torture_assert(tctx,
+				test_netprintjobgetinfo_byid(tctx, cli, job_id),
+				"failed to getinfo on new printjob");
+
+			torture_assert(tctx,
+				test_netprintjob_delete(tctx, cli, job_id),
+				"failed to delete job");
+		}
+
+		torture_assert(tctx,
+			test_netprintq_resume(tctx, cli, printqname),
+			"failed to resume print queue");
+
+	}
 
 	return true;
 }


-- 
Samba Shared Repository


More information about the samba-cvs mailing list