The branch, master has been updated
       via  bb4693d... s4-smbtorture: completely rework RPC-SPOOLSS-PRINTER.
       via  789125f... s4-smbtorture: rework order of test in 
RPC-SPOOLSS-PRINTSERVER a bit.
      from  e8576ef... ѕ3:Makefile: use PIC instead of PIE flags for shared 
libs

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


- Log -----------------------------------------------------------------
commit bb4693d15e18d7ee775d45cf7519b2352d9d5d7a
Author: Günther Deschner <g...@samba.org>
Date:   Thu Jun 3 21:39:51 2010 +0200

    s4-smbtorture: completely rework RPC-SPOOLSS-PRINTER.
    
    This is now a child testsuite to RPC-SPOOLSS. You can call simple tests via
    RPC-SPOOLSS-{addprinter,addprinterex}-testname.
    
    Guenther

commit 789125f9a4fedaf31968893e77a19316a47186fe
Author: Günther Deschner <g...@samba.org>
Date:   Thu Jun 3 20:48:49 2010 +0200

    s4-smbtorture: rework order of test in RPC-SPOOLSS-PRINTSERVER a bit.
    
    Guenther

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

Summary of changes:
 source4/torture/rpc/rpc.c     |    1 -
 source4/torture/rpc/spoolss.c |  848 +++++++++++++++++++++++++----------------
 2 files changed, 522 insertions(+), 327 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/torture/rpc/rpc.c b/source4/torture/rpc/rpc.c
index 63ebe6c..746698e 100644
--- a/source4/torture/rpc/rpc.c
+++ b/source4/torture/rpc/rpc.c
@@ -444,7 +444,6 @@ NTSTATUS torture_rpc_init(void)
        torture_suite_add_suite(suite, torture_rpc_spoolss(suite));
        torture_suite_add_suite(suite, torture_rpc_spoolss_notify(suite));
        torture_suite_add_suite(suite, torture_rpc_spoolss_win(suite));
-       torture_suite_add_suite(suite, torture_rpc_spoolss_printer(suite));
        torture_suite_add_suite(suite, torture_rpc_spoolss_driver(suite));
        torture_suite_add_simple_test(suite, "SAMR", torture_rpc_samr);
        torture_suite_add_simple_test(suite, "SAMR-USERS", 
torture_rpc_samr_users);
diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
index 6d04690..7154b83 100644
--- a/source4/torture/rpc/spoolss.c
+++ b/source4/torture/rpc/spoolss.c
@@ -96,6 +96,7 @@ struct torture_driver_context {
 };
 
 struct torture_printer_context {
+       struct dcerpc_pipe *spoolss_pipe;
        struct spoolss_SetPrinterInfo2 info2;
        struct torture_driver_context driver;
        bool ex;
@@ -103,6 +104,7 @@ struct torture_printer_context {
        bool added_driver;
        bool have_driver;
        struct spoolss_DeviceMode *devmode;
+       struct policy_handle handle;
 };
 
 static bool upload_printer_driver(struct torture_context *tctx,
@@ -1383,6 +1385,8 @@ static bool test_PrinterInfo(struct torture_context *tctx,
        bool ret = true;
        int i;
 
+       torture_skip(tctx, "Printer Info test is currently broken, skipping");
+
        uint32_t status_list[] = {
                /* these do not stick
                PRINTER_STATUS_PAUSED,
@@ -5623,10 +5627,12 @@ static bool call_OpenPrinterEx(struct torture_context 
*tctx,
 }
 
 static bool test_printer_rename(struct torture_context *tctx,
-                               struct dcerpc_pipe *p,
-                               struct policy_handle *handle,
-                               const char *name)
+                               void *private_data)
 {
+       struct torture_printer_context *t =
+               (struct torture_printer_context 
*)talloc_get_type_abort(private_data, struct torture_printer_context);
+       struct dcerpc_pipe *p = t->spoolss_pipe;
+
        bool ret = true;
        union spoolss_PrinterInfo info;
        union spoolss_SetPrinterInfo sinfo;
@@ -5646,7 +5652,7 @@ static bool test_printer_rename(struct torture_context 
*tctx,
        torture_comment(tctx, "Testing Printer rename operations\n");
 
        torture_assert(tctx,
-               test_GetPrinter_level(tctx, b, handle, 2, &info),
+               test_GetPrinter_level(tctx, b, &t->handle, 2, &info),
                "failed to call GetPrinter level 2");
 
        printer_name_orig = talloc_strdup(tctx, info.info2.printername);
@@ -5666,11 +5672,11 @@ static bool test_printer_rename(struct torture_context 
*tctx,
        info_ctr.info = sinfo;
 
        torture_assert(tctx,
-               test_SetPrinter(tctx, b, handle, &info_ctr, &devmode_ctr, 
&secdesc_ctr, 0),
+               test_SetPrinter(tctx, b, &t->handle, &info_ctr, &devmode_ctr, 
&secdesc_ctr, 0),
                "failed to call SetPrinter level 2");
 
        torture_assert(tctx,
-               test_GetPrinter_level(tctx, b, handle, 2, &info),
+               test_GetPrinter_level(tctx, b, &t->handle, 2, &info),
                "failed to call GetPrinter level 2");
 
        printer_name = talloc_strdup(tctx, info.info2.printername);
@@ -5765,7 +5771,7 @@ static bool test_OpenPrinterEx(struct torture_context 
*tctx,
                ret = false;
        }
 
-       if (!test_printer_keys(tctx, b, &handle)) {
+       if (!test_printer_all_keys(tctx, b, &handle)) {
                ret = false;
        }
 
@@ -6371,20 +6377,24 @@ static bool test_AddPrinter_normal(struct 
torture_context *tctx,
 }
 
 static bool test_printer_info(struct torture_context *tctx,
-                             struct dcerpc_binding_handle *b,
-                             struct policy_handle *handle)
+                             void *private_data)
 {
+       struct torture_printer_context *t =
+               (struct torture_printer_context 
*)talloc_get_type_abort(private_data, struct torture_printer_context);
+       struct dcerpc_pipe *p = t->spoolss_pipe;
+       struct dcerpc_binding_handle *b = p->binding_handle;
+
        bool ret = true;
 
        if (torture_setting_bool(tctx, "samba3", false)) {
                torture_skip(tctx, "skipping printer info cross tests against 
samba 3");
        }
 
-       if (!test_PrinterInfo(tctx, b, handle)) {
+       if (!test_PrinterInfo(tctx, b, &t->handle)) {
                ret = false;
        }
 
-       if (!test_SetPrinter_errors(tctx, b, handle)) {
+       if (!test_SetPrinter_errors(tctx, b, &t->handle)) {
                ret = false;
        }
 
@@ -6476,9 +6486,9 @@ static bool test_EnumPrinterKey(struct torture_context 
*tctx,
        return true;
 }
 
-bool test_printer_keys(struct torture_context *tctx,
-                      struct dcerpc_binding_handle *b,
-                      struct policy_handle *handle)
+bool test_printer_all_keys(struct torture_context *tctx,
+                          struct dcerpc_binding_handle *b,
+                          struct policy_handle *handle)
 {
        const char **key_array = NULL;
        int i;
@@ -6502,94 +6512,17 @@ bool test_printer_keys(struct torture_context *tctx,
        return true;
 }
 
-static bool test_one_printer(struct torture_context *tctx,
-                            struct dcerpc_pipe *p,
-                            struct policy_handle *handle,
-                            const char *name,
-                            const char *drivername,
-                            const char *environment,
-                            bool have_driver,
-                            struct spoolss_DeviceMode *devmode)
+static bool test_csetprinter(struct torture_context *tctx,
+                            void *private_data)
 {
-       bool ret = true;
-       struct dcerpc_binding_handle *b = p->binding_handle;
-
-       if (!test_PausePrinter(tctx, b, handle)) {
-               ret = false;
-       }
-
-       if (!test_DoPrintTest(tctx, b, handle)) {
-               ret = false;
-       }
-
-       if (!test_DoPrintTest_extended(tctx, b, handle)) {
-               torture_comment(tctx, "extended printing test failed!\n");
-       }
-
-       if (!test_ResumePrinter(tctx, b, handle)) {
-               ret = false;
-       }
-
-       if (!test_printer_info(tctx, b, handle)) {
-               ret = false;
-       }
-
-       if (!test_PrinterInfo_SD(tctx, b, handle)) {
-               ret = false;
-       }
-
-       if (!test_PrinterInfo_DevMode(tctx, p, handle, name, devmode)) {
-               ret = false;
-       }
-
-       if (!test_PrinterInfo_winreg(tctx, p, handle, name)) {
-               ret = false;
-       }
-
-       if (!test_ChangeID(tctx, p, handle)) {
-               ret = false;
-       }
-
-       if (!test_printer_keys(tctx, b, handle)) {
-               ret = false;
-       }
-
-       if (!test_EnumPrinterData_consistency(tctx, p, handle)) {
-               ret = false;
-       }
-
-       if (!test_SetPrinterDataEx_matrix(tctx, p, handle, name, NULL, NULL)) {
-               ret = false;
-       }
-
-       if (!test_PrinterData_winreg(tctx, p, handle, name)) {
-               ret = false;
-       }
-
-       if (!test_PrinterData_DsSpooler(tctx, p, handle, name)) {
-               ret = false;
-       }
-
-       if (have_driver) {
-               if (!test_DriverInfo_winreg(tctx, p, handle, name, drivername, 
environment)) {
-                       ret = false;
-               }
-       }
-
-       if (!test_printer_rename(tctx, p, handle, name)) {
-               ret = false;
-       }
+       struct torture_printer_context *t =
+               (struct torture_printer_context 
*)talloc_get_type_abort(private_data, struct torture_printer_context);
+       struct dcerpc_pipe *p = t->spoolss_pipe;
 
-       return ret;
-}
+       const char *printername = talloc_asprintf(tctx, "%s2", 
t->info2.printername);
+       const char *drivername = t->added_driver ? t->driver.info8.driver_name 
: t->info2.drivername;
+       const char *portname = t->info2.portname;
 
-static bool test_csetprinter(struct torture_context *tctx,
-                            struct dcerpc_pipe *p,
-                            struct policy_handle *handle,
-                            const char *printername,
-                            const char *drivername,
-                            const char *portname)
-{
        union spoolss_PrinterInfo info;
        struct policy_handle new_handle, new_handle2;
        struct dcerpc_binding_handle *b = p->binding_handle;
@@ -6597,7 +6530,7 @@ static bool test_csetprinter(struct torture_context *tctx,
        torture_comment(tctx, "Testing c_setprinter\n");
 
        torture_assert(tctx,
-               test_GetPrinter_level(tctx, b, handle, 0, &info),
+               test_GetPrinter_level(tctx, b, &t->handle, 0, &info),
                "failed to get level 0 printer info");
        torture_comment(tctx, "csetprinter on initial printer handle: %d\n",
                info.info0.c_setprinter);
@@ -6609,7 +6542,7 @@ static bool test_csetprinter(struct torture_context *tctx,
                test_AddPrinter_normal(tctx, p, &new_handle, printername, 
drivername, portname, NULL, false),
                "failed to add new printer");
        torture_assert(tctx,
-               test_GetPrinter_level(tctx, b, handle, 0, &info),
+               test_GetPrinter_level(tctx, b, &t->handle, 0, &info),
                "failed to get level 0 printer info");
        torture_comment(tctx, "csetprinter on initial printer handle (after 
add): %d\n",
                info.info0.c_setprinter);
@@ -6646,51 +6579,6 @@ static bool test_csetprinter(struct torture_context 
*tctx,
        return true;
 }
 
-static bool test_add_printer_args_with_driver(struct torture_context *tctx,
-                                             struct dcerpc_pipe *p,
-                                             struct torture_printer_context *t)
-{
-       bool ret = true;
-       struct policy_handle handle;
-       bool found = false;
-       struct dcerpc_binding_handle *b = p->binding_handle;
-       const char *printer_name = t->info2.printername;
-       const char *driver_name = t->added_driver ? t->driver.info8.driver_name 
: t->info2.drivername;
-       const char *port_name = t->info2.portname;
-       const char *printer_name2 = talloc_asprintf(tctx, "%s2", printer_name);
-
-       if (t->wellknown) {
-               torture_assert(tctx,
-                       test_AddPrinter_wellknown(tctx, p, printer_name, t->ex),
-                       "failed to add wellknown printer");
-       } else {
-               torture_assert(tctx,
-                       test_AddPrinter_normal(tctx, p, &handle, printer_name, 
driver_name, port_name, t->devmode, t->ex),
-                       "failed to add printer");
-       }
-
-       if (!test_csetprinter(tctx, p, &handle, printer_name2, driver_name, 
port_name)) {
-               ret = false;
-       }
-
-       if (!test_one_printer(tctx, p, &handle, printer_name, driver_name, 
t->driver.remote.environment, t->have_driver, t->devmode)) {
-               ret = false;
-       }
-
-       if (!test_DeletePrinter(tctx, b, &handle)) {
-               ret = false;
-       }
-
-       if (!test_EnumPrinters_findname(tctx, b, PRINTER_ENUM_LOCAL, 1,
-                                       printer_name, &found)) {
-               ret = false;
-       }
-
-       torture_assert(tctx, !found, "deleted printer still there");
-
-       return ret;
-}
-
 static bool compose_local_driver_directory(struct torture_context *tctx,
                                           const char *environment,
                                           const char *local_dir,
@@ -6719,127 +6607,6 @@ static bool compose_local_driver_directory(struct 
torture_context *tctx,
        return true;
 }
 
-static bool test_add_printer_args(struct torture_context *tctx,
-                                 struct dcerpc_pipe *p,
-                                 struct torture_printer_context *t)
-{
-       bool ret = true;
-       struct dcerpc_binding_handle *b = p->binding_handle;
-       const char *server_name_slash = talloc_asprintf(tctx, "\\\\%s", 
dcerpc_server_name(p));
-
-       if (t->wellknown && torture_setting_bool(tctx, "samba3", false)) {
-               torture_skip(tctx, "skipping AddPrinter level 1 against samba");
-       }
-
-       torture_assert(tctx,
-               fillup_printserver_info(tctx, p, &t->driver),
-               "failed to fillup printserver info");
-
-       t->driver.info8.architecture = talloc_strdup(t, 
t->driver.remote.environment);
-
-       torture_assert(tctx,
-               compose_local_driver_directory(tctx, 
t->driver.remote.environment,
-                                              t->driver.local.driver_directory,
-                                              
&t->driver.local.driver_directory),
-               "failed to compose local driver directory");
-
-       if (test_EnumPrinterDrivers_findone(tctx, b, server_name_slash, 
t->driver.remote.environment, 3, t->info2.drivername)) {
-               t->have_driver = true;
-               goto try_run;
-       }
-
-       torture_comment(tctx, "driver '%s' (architecture: %s, version: 3) does 
not exist on the server\n",
-               t->info2.drivername, t->driver.remote.environment);
-       torture_comment(tctx, "trying to upload own driver\n");
-
-       if (!directory_exist(t->driver.local.driver_directory)) {
-               torture_warning(tctx, "no local driver is available!");
-               t->have_driver = false;
-               goto try_run;
-       }
-
-       torture_assert(tctx,
-               upload_printer_driver(tctx, dcerpc_server_name(p), &t->driver),
-               "failed to upload printer driver");
-
-       torture_assert(tctx,
-               test_AddPrinterDriver_args_level_3(tctx, b, server_name_slash, 
&t->driver.info8, 0, false),
-               "failed to add driver");
-
-       t->added_driver = true;
-       t->have_driver = true;
-
- try_run:
-       ret = test_add_printer_args_with_driver(tctx, p, t);
-
-       if (t->added_driver) {
-               torture_assert(tctx,
-                       remove_printer_driver(tctx, dcerpc_server_name(p), 
&t->driver),
-                       "failed to remove printer driver");
-       }
-
-       return ret;
-}
-
-static bool test_add_printer(struct torture_context *tctx,
-                            struct dcerpc_pipe *p,
-                            void *private_data)
-{
-       struct torture_printer_context *t =
-               (struct torture_printer_context 
*)talloc_get_type_abort(private_data, struct torture_printer_context);
-
-       t->ex                   = false;
-       t->wellknown            = false;
-       t->info2.printername    = TORTURE_PRINTER;
-
-       return test_add_printer_args(tctx, p, t);
-}
-
-static bool test_add_printer_wellknown(struct torture_context *tctx,
-                                      struct dcerpc_pipe *p,
-                                      void *private_data)
-{
-       struct torture_printer_context *t =
-               (struct torture_printer_context 
*)talloc_get_type_abort(private_data, struct torture_printer_context);
-
-       t->ex                   = false;
-       t->wellknown            = true;
-       t->info2.printername    = TORTURE_WELLKNOWN_PRINTER;
-       t->devmode              = NULL;
-
-       return test_add_printer_args(tctx, p, t);
-}
-
-static bool test_add_printer_ex(struct torture_context *tctx,
-                               struct dcerpc_pipe *p,
-                               void *private_data)
-{
-       struct torture_printer_context *t =
-               (struct torture_printer_context 
*)talloc_get_type_abort(private_data, struct torture_printer_context);
-
-       t->ex                   = true;
-       t->wellknown            = false;
-       t->info2.printername    = TORTURE_PRINTER_EX;
-       t->devmode              = NULL;
-
-       return test_add_printer_args(tctx, p, t);
-}
-
-static bool test_add_printer_ex_wellknown(struct torture_context *tctx,
-                                         struct dcerpc_pipe *p,
-                                         void *private_data)
-{
-       struct torture_printer_context *t =
-               (struct torture_printer_context 
*)talloc_get_type_abort(private_data, struct torture_printer_context);
-
-       t->ex                   = true;
-       t->wellknown            = true;
-       t->info2.printername    = TORTURE_WELLKNOWN_PRINTER_EX;
-       t->devmode              = NULL;
-
-       return test_add_printer_args(tctx, p, t);
-}
-
 static struct spoolss_DeviceMode *torture_devicemode(TALLOC_CTX *mem_ctx,
                                                     const char *devicename)
 {
@@ -6881,21 +6648,6 @@ static struct spoolss_DeviceMode 
*torture_devicemode(TALLOC_CTX *mem_ctx,
        return r;
 }
 
-static bool test_add_printer_with_devmode(struct torture_context *tctx,
-                                         struct dcerpc_pipe *p,
-                                         void *private_data)
-{
-       struct torture_printer_context *t =
-               (struct torture_printer_context 
*)talloc_get_type_abort(private_data, struct torture_printer_context);
-
-       t->ex                   = true;
-       t->wellknown            = false;
-       t->info2.printername    = TORTURE_PRINTER_EX;
-       t->devmode              = torture_devicemode(t, TORTURE_PRINTER_EX);
-
-       return test_add_printer_args(tctx, p, t);
-}
-
 static bool test_architecture_buffer(struct torture_context *tctx,
                                     void *private_data)
 {
@@ -7050,48 +6802,22 @@ static bool torture_rpc_spoolss_teardown(struct 
torture_context *tctx, void *dat
        return ret;
 }
 
-struct torture_suite *torture_rpc_spoolss(TALLOC_CTX *mem_ctx)
-{
-       struct torture_suite *suite = torture_suite_create(mem_ctx, "SPOOLSS");
-       struct torture_tcase *tcase = torture_suite_add_tcase(suite, 
"PRINTSERVER");
-
-       torture_tcase_set_fixture(tcase,
-                                 torture_rpc_spoolss_setup,
-                                 torture_rpc_spoolss_teardown);
-
-       torture_tcase_add_simple_test(tcase, "printer_data_list", 
test_GetPrinterData_list);
-       torture_tcase_add_simple_test(tcase, "enum_forms", 
test_PrintServer_EnumForms);
-       torture_tcase_add_simple_test(tcase, "forms", test_PrintServer_Forms);
-       torture_tcase_add_simple_test(tcase, "forms_winreg", 
test_PrintServer_Forms_Winreg);
-       torture_tcase_add_simple_test(tcase, "enum_ports", test_EnumPorts);
-       torture_tcase_add_simple_test(tcase, "get_printer_driver_directory", 
test_GetPrinterDriverDirectory);
-       torture_tcase_add_simple_test(tcase, "get_print_processor_directory", 
test_GetPrintProcessorDirectory);
-       torture_tcase_add_simple_test(tcase, "enum_printer_drivers", 
test_EnumPrinterDrivers);
-       torture_tcase_add_simple_test(tcase, "enum_monitors", 
test_EnumMonitors);
-       torture_tcase_add_simple_test(tcase, "enum_print_processors", 
test_EnumPrintProcessors);
-       torture_tcase_add_simple_test(tcase, "enum_printprocdata", 
test_EnumPrintProcDataTypes);
-       torture_tcase_add_simple_test(tcase, "enum_printers", 
test_EnumPrinters);
-       torture_tcase_add_simple_test(tcase, "openprinter_badnamelist", 
test_OpenPrinter_badname_list);
-       torture_tcase_add_simple_test(tcase, "add_port", test_AddPort);
-       torture_tcase_add_simple_test(tcase, "enum_ports_old", 
test_EnumPorts_old);
-       torture_tcase_add_simple_test(tcase, "enum_printers_old", 
test_EnumPrinters_old);
-       torture_tcase_add_simple_test(tcase, "enum_printer_drivers_old", 
test_EnumPrinterDrivers_old);
-       torture_tcase_add_simple_test(tcase, "architecture_buffer", 
test_architecture_buffer);
-       torture_tcase_add_simple_test(tcase, "printprocessors_winreg", 
test_print_processors_winreg);
-
-       return suite;
-}
-
-struct torture_suite *torture_rpc_spoolss_printer(TALLOC_CTX *mem_ctx)
+static bool torture_rpc_spoolss_printer_setup_common(struct torture_context 
*tctx, struct torture_printer_context *t)
 {
-       struct torture_suite *suite = torture_suite_create(mem_ctx, 
"SPOOLSS-PRINTER");
-
-       struct torture_rpc_tcase *tcase = 
torture_suite_add_rpc_iface_tcase(suite,
-                                                       "printer", 
&ndr_table_spoolss);
+       struct dcerpc_pipe *p;
+       struct dcerpc_binding_handle *b;
+       const char *server_name_slash;


-- 
Samba Shared Repository

Reply via email to