]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s4:torture: Add test_init_driver_info function
authorJustin Stephenson <jstephen@redhat.com>
Mon, 15 Oct 2018 17:55:37 +0000 (13:55 -0400)
committerBjoern Jacke <bjacke@samba.org>
Mon, 28 Jan 2019 14:44:19 +0000 (15:44 +0100)
Validate torture options, obtain and retrieve driver information, and
call driver parsing function to retrieve driver info needed for
performing the test.

Signed-off-by: Justin Stephenson <jstephen@redhat.com>
Reviewed-by: Andreas Schneider <asn@samba.org>
Reviewed-by: Bjoern Jacke <bjacke@samba.org>
source4/torture/rpc/iremotewinspool_common.h
source4/torture/rpc/iremotewinspool_driver.c

index b68b70f4052cb7e271e092ac9613ecfc2cbba7bc..de1bd959fc19d02eed418f4549ab640e7c6fa396 100644 (file)
 
 #include "torture/rpc/torture_rpc.h"
 
+struct test_driver_info {
+       struct smbcli_state *cli;
+       struct spoolss_AddDriverInfo8 *info;
+       const char *local_driver_path;
+       size_t driver_path_len;
+       char *server_name;
+       char *share_name;
+       char *print_upload_guid_dir;
+       const char *inf_file;
+       const char *uploaded_inf_path;
+       const char *driver_name;
+       const char *driver_arch;
+       const char *core_driver_inf;
+};
+
 struct test_iremotewinspool_context {
        struct GUID object_uuid;
        struct dcerpc_pipe *iremotewinspool_pipe;
        struct policy_handle server_handle;
+       struct test_driver_info *dinfo;
        const char *environment;
 };
 
index f7562e418c4cc1cd255f9e7718a11e37987ea860..8e80d1bb0fc7079a21f13101a488343e8e4902f0 100644 (file)
 #include "libcli/registry/util_reg.h"
 #include "torture/rpc/iremotewinspool_common.h"
 
+static bool test_get_driver_torture_options(struct torture_context *tctx,
+                                           const char **_local_driver_path,
+                                           const char **_inf_file,
+                                           const char **_driver_name,
+                                           const char **_driver_arch,
+                                           const char **_core_driver_inf)
+{
+       const char *local_driver_path = NULL;
+       const char *inf_file = NULL;
+       const char *driver_name = NULL;
+       const char *driver_arch = NULL;
+       const char *core_driver_inf = NULL;
+       const char *arches_list[] = {
+               SPOOLSS_ARCHITECTURE_x64,
+               SPOOLSS_ARCHITECTURE_NT_X86,
+               SPOOLSS_ARCHITECTURE_IA_64,
+               SPOOLSS_ARCHITECTURE_ARM,
+               SPOOLSS_ARCHITECTURE_4_0,
+               NULL,
+       };
+       const char **p;
+       bool valid = false;
+       bool ok = true;
+
+       local_driver_path = torture_setting_string(tctx, "driver_path", NULL);
+       if (local_driver_path == NULL) {
+               torture_fail(tctx,
+                            "option --option=torture:driver_path="
+                            "/full/path/to/local/driver/dir\n");
+       }
+
+       inf_file = torture_setting_string(tctx, "inf_file", NULL);
+       if (inf_file == NULL) {
+               torture_fail(tctx,
+                            "option --option=torture:inf_file="
+                            "filename.inf\n");
+       }
+
+       driver_name = torture_setting_string(tctx, "driver_name", NULL);
+       if (driver_name == NULL) {
+               torture_fail(tctx,
+                            "option --option=torture:driver_name="
+                            "driver name\n");
+       }
+
+       driver_arch = torture_setting_string(tctx, "driver_arch", NULL);
+       if (driver_arch == NULL) {
+               torture_fail(tctx,
+                            "option --option=torture:driver_arch="
+                            "driver arch\n");
+       }
+
+       core_driver_inf = torture_setting_string(tctx, "core_driver_inf", NULL);
+
+       for (p = arches_list; *p != NULL; p++) {
+               if (strequal(*p, driver_arch) == 0) {
+                       valid = true;
+                       break;
+               }
+       }
+       torture_assert_goto(tctx, valid, ok, done, "Invalid driver arch provided");
+
+       *_local_driver_path = local_driver_path;
+       *_inf_file = inf_file;
+       *_driver_name = driver_name;
+       *_driver_arch = driver_arch;
+       *_core_driver_inf = core_driver_inf;
+done:
+       return ok;
+}
+
+
+static bool test_get_misc_driver_info(struct torture_context *tctx,
+                                     struct test_driver_info *dinfo,
+                                     const char **_abs_inf_path,
+                                     size_t *_driver_path_len)
+{
+       const char *abs_inf_path;
+       size_t driver_path_len;
+       bool ok = true;
+
+       driver_path_len = strlen(dinfo->local_driver_path);
+       torture_assert_int_not_equal_goto(tctx, driver_path_len, 0, ok, done, "driver path length is 0");
+
+       abs_inf_path = talloc_asprintf(tctx, "%s/%s", dinfo->local_driver_path, dinfo->inf_file);
+       torture_assert_not_null_goto(tctx, abs_inf_path, ok, done, "Cannot allocate memory");
+
+       *_abs_inf_path = abs_inf_path;
+       *_driver_path_len = driver_path_len;
+done:
+
+       return ok;
+}
+
 static bool test_init_iremotewinspool_conn(struct torture_context *tctx,
                                           struct test_iremotewinspool_context *t)
 {
@@ -80,6 +174,40 @@ done:
        return ok;
 }
 
+static bool test_init_driver_info(struct torture_context *tctx,
+                                 struct test_iremotewinspool_context *t)
+{
+       bool ok = true;
+       const char *abs_inf_path;
+       struct test_driver_info *drv_info = {0};
+
+       drv_info = talloc_zero(tctx, struct test_driver_info);
+       torture_assert_not_null_goto(tctx, drv_info, ok, done, "Cannot allocate memory");
+
+       t->dinfo = drv_info;
+
+       ok = test_get_driver_torture_options(tctx,
+                                            &drv_info->local_driver_path,
+                                            &drv_info->inf_file,
+                                            &drv_info->driver_name,
+                                            &drv_info->driver_arch,
+                                            &drv_info->core_driver_inf);
+       torture_assert_goto(tctx, ok, ok, done, "Failed to get driver torture options");
+
+       ok = test_get_misc_driver_info(tctx, drv_info,
+                                      &abs_inf_path,
+                                      &drv_info->driver_path_len);
+       torture_assert_goto(tctx, ok, ok, done, "Failed to get misc driver info");
+
+       ok = parse_inf_driver(tctx, drv_info->driver_name, abs_inf_path, drv_info->driver_arch,
+                             drv_info->core_driver_inf, &drv_info->info);
+       torture_assert_goto(tctx, ok, ok, done, "Failed to parse inf driver");
+
+done:
+       return ok;
+
+}
+
 static bool torture_rpc_iremotewinspool_drv_setup_common(struct torture_context *tctx,
                                                     struct test_iremotewinspool_context *t)
 {