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 <[email protected]>
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

Reply via email to