static bool test_netprintqenum(struct torture_context *tctx, struct smbcli_state *cli) { struct rap_NetPrintQEnum r; int i, q; uint16_t levels[] = { 0, 1, 2, 3, 4, 5 }; for (i=0; i < ARRAY_SIZE(levels); i++) { r.in.level = levels[i]; r.in.bufsize = 8192; torture_comment(tctx, "Testing rap_NetPrintQEnum level %d\n", r.in.level); torture_assert_ntstatus_ok(tctx, smbcli_rap_netprintqenum(cli->tree, tctx, &r), "smbcli_rap_netprintqenum failed"); torture_assert_werr_ok(tctx, W_ERROR(r.out.status), "failed to enum printq"); for (q=0; q<r.out.count; q++) { switch (r.in.level) { case 0: printf("%s\n", r.out.info[q].info0.PrintQName); break; } } } return true; }
static bool test_netprintjobsetinfo(struct torture_context *tctx, struct smbcli_state *cli) { struct rap_NetPrintQEnum r; int i; r.in.level = 5; r.in.bufsize = 8192; torture_assert_ntstatus_ok(tctx, smbcli_rap_netprintqenum(cli->tree, tctx, &r), "failed to enum printq"); torture_assert_werr_ok(tctx, W_ERROR(r.out.status), "failed to enum printq"); for (i=0; i < r.out.count; i++) { const char *printqname = r.out.info[i].info5.PrintQueueName; torture_assert(tctx, test_netprintjobsetinfo_byqueue(tctx, cli, printqname), "failed to set printjobs on print queue"); } return true; }
static bool test_netprintqgetinfo(struct torture_context *tctx, struct smbcli_state *cli) { struct rap_NetPrintQGetInfo r; struct rap_NetPrintQEnum r_enum; int i, p; uint16_t levels[] = { 0, 1, 2, 3, 4, 5 }; r.in.level = 0; r.in.bufsize = 0; r.in.PrintQueueName = ""; torture_assert_ntstatus_ok(tctx, smbcli_rap_netprintqgetinfo(cli->tree, tctx, &r), "smbcli_rap_netprintqgetinfo failed"); torture_assert_werr_equal(tctx, W_ERROR(r.out.status), WERR_INVALID_PARAMETER, "smbcli_rap_netprintqgetinfo failed"); r_enum.in.level = 5; r_enum.in.bufsize = 8192; torture_assert_ntstatus_ok(tctx, smbcli_rap_netprintqenum(cli->tree, tctx, &r_enum), "failed to enum printq"); torture_assert_werr_ok(tctx, W_ERROR(r_enum.out.status), "failed to enum printq"); for (p=0; p < r_enum.out.count; p++) { for (i=0; i < ARRAY_SIZE(levels); i++) { r.in.level = levels[i]; r.in.bufsize = 8192; r.in.PrintQueueName = r_enum.out.info[p].info5.PrintQueueName; torture_comment(tctx, "Testing rap_NetPrintQGetInfo(%s) level %d\n", r.in.PrintQueueName, r.in.level); torture_assert_ntstatus_ok(tctx, smbcli_rap_netprintqgetinfo(cli->tree, tctx, &r), "smbcli_rap_netprintqgetinfo failed"); torture_assert_werr_ok(tctx, W_ERROR(r.out.status), "smbcli_rap_netprintqgetinfo failed"); switch (r.in.level) { case 0: printf("%s\n", r.out.info.info0.PrintQName); break; } } } return true; }
static bool test_rap_print(struct torture_context *tctx, struct smbcli_state *cli) { struct rap_NetPrintQEnum r; int i; r.in.level = 5; r.in.bufsize = 8192; torture_assert_ntstatus_ok(tctx, smbcli_rap_netprintqenum(cli->tree, tctx, &r), "failed to enum printq"); torture_assert_werr_ok(tctx, W_ERROR(r.out.status), "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; }