1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-25 17:57:42 +03:00

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
This commit is contained in:
Günther Deschner 2010-05-04 17:18:22 +02:00
parent cc46f4a319
commit 7e5fee98be

View File

@ -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;
}