[SCM] Samba Shared Repository - branch master updated

Günther Deschner gd at samba.org
Tue Jun 22 08:08:22 MDT 2010


The branch, master has been updated
       via  1e897f6... s4-smbtorture: add "printerdata_values" test to RPC-SPOOLSS-PRINTER.
       via  13ede2b... s4-smbtorture: also test keynames with '/' in it in SetPrinterDataEx keyname tests.
       via  e439b6c... s4-smbtorture: activate all keys in SetPrinterData keys test.
       via  c31ffaf... s4-smbtorture: split out a "printerdata_keys" test for RPC-SPOOLSS-PRINTER.
      from  df96f18... testprogs/win32: add prepare_dcpromo tool

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


- Log -----------------------------------------------------------------
commit 1e897f656104f29769b204dc443f1684395d8173
Author: Günther Deschner <gd at samba.org>
Date:   Tue Jun 22 15:45:45 2010 +0200

    s4-smbtorture: add "printerdata_values" test to RPC-SPOOLSS-PRINTER.
    
    Guenther

commit 13ede2bf7a75b2b52132954684f23ad5a89a83a1
Author: Günther Deschner <gd at samba.org>
Date:   Tue Jun 22 15:25:01 2010 +0200

    s4-smbtorture: also test keynames with '/' in it in SetPrinterDataEx keyname tests.
    
    Guenther

commit e439b6cb8ceb01d930bd8ec2d7b9c79ebca5647e
Author: Günther Deschner <gd at samba.org>
Date:   Tue Jun 22 15:22:03 2010 +0200

    s4-smbtorture: activate all keys in SetPrinterData keys test.
    
    (just skip some of them still against s3).
    
    Guenther

commit c31ffaf5872292c610394406cf8e8ce61d8439c5
Author: Günther Deschner <gd at samba.org>
Date:   Tue Jun 22 14:55:20 2010 +0200

    s4-smbtorture: split out a "printerdata_keys" test for RPC-SPOOLSS-PRINTER.
    
    This separates key and value tests for SetPrinterDataEx and GetPrinterDataEx
    (and also speeds up the whole testsuite).
    
    Guenther

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

Summary of changes:
 source4/torture/rpc/spoolss.c |  287 ++++++++++++++++++++++++++++++++---------
 1 files changed, 226 insertions(+), 61 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
index e61adfe..a797e24 100644
--- a/source4/torture/rpc/spoolss.c
+++ b/source4/torture/rpc/spoolss.c
@@ -4797,36 +4797,210 @@ static bool test_SetPrinterDataEx(struct torture_context *tctx,
 	return true;
 }
 
-static bool test_SetPrinterDataEx_matrix(struct torture_context *tctx,
-					 struct dcerpc_pipe *p,
-					 struct policy_handle *handle,
-					 const char *printername,
-					 struct dcerpc_binding_handle *winreg_handle,
-					 struct policy_handle *hive_handle)
+static bool test_SetPrinterDataEx_keys(struct torture_context *tctx,
+				       struct dcerpc_pipe *p,
+				       struct policy_handle *handle)
 {
 	struct dcerpc_binding_handle *b = p->binding_handle;
 	const char *value_name = "dog";
 	const char *keys[] = {
 		"torturedataex",
 		"torture data ex",
-#if 0
-	/* FIXME: not working with s3 atm. */
 		"torturedataex_with_subkey\\subkey",
 		"torturedataex_with_subkey\\subkey:0",
 		"torturedataex_with_subkey\\subkey:1",
 		"torturedataex_with_subkey\\subkey\\subsubkey",
 		"torturedataex_with_subkey\\subkey\\subsubkey:0",
 		"torturedataex_with_subkey\\subkey\\subsubkey:1",
-#endif
 		"torture,data",
-#if 0
-	/* FIXME: not working with s3 atm. */
-
 		"torture,data,ex",
 		"torture,data\\ex",
-		"torture\\data,ex"
-#endif
+		"torture\\data,ex",
+		"torture/data",
+		"torture/data ex",
+		"torture/data ex/sub",
+		"torture//data",
+		"torture//data ex",
+		"torture//data ex/sub",
+		"torture//data ex//sub",
+	};
+	int i;
+
+	for (i=0; i < ARRAY_SIZE(keys); i++) {
+
+		char *c;
+		const char *key;
+		enum winreg_Type type;
+		DATA_BLOB blob_in, blob_out;
+		const char **subkeys;
+		uint32_t ecount;
+		struct spoolss_PrinterEnumValues *einfo;
+		uint32_t needed;
+
+		if (torture_setting_bool(tctx, "samba3", false)) {
+			char *q;
+			q = strrchr(keys[i], '\\');
+			if (q) {
+				torture_skip(tctx,
+					talloc_asprintf(tctx, "skipping keyname '%s' including '\\' character against Samba3\n",
+						keys[i]));
+			}
+		}
+
+		blob_in = data_blob_talloc(tctx, NULL, 42);
+
+		generate_random_buffer(blob_in.data, blob_in.length);
+
+		torture_assert(tctx,
+			test_SetPrinterDataEx(tctx, b, handle, keys[i], value_name, REG_BINARY, blob_in.data, blob_in.length),
+			"failed to call SetPrinterDataEx");
+
+		torture_assert(tctx,
+			test_GetPrinterDataEx(tctx, p, handle, keys[i], value_name, &type, &blob_out.data, &needed),
+			"failed to call GetPrinterDataEx");
+
+		blob_out.length = needed;
+		torture_assert(tctx,
+			test_EnumPrinterDataEx(tctx, b, handle, keys[i], &ecount, &einfo),
+			"failed to call EnumPrinterDataEx");
+
+		torture_assert_int_equal(tctx, type, REG_BINARY, "type mismatch");
+		torture_assert_int_equal(tctx, blob_out.length, blob_in.length, "size mismatch");
+		torture_assert_mem_equal(tctx, blob_out.data, blob_in.data, blob_in.length, "buffer mismatch");
+
+		torture_assert_int_equal(tctx, ecount, 1, "unexpected enum count");
+		torture_assert_str_equal(tctx, einfo[0].value_name, value_name, "value_name mismatch");
+		torture_assert_int_equal(tctx, einfo[0].value_name_len, strlen_m_term(value_name)*2, "unexpected value_name_len");
+		torture_assert_int_equal(tctx, einfo[0].type, REG_BINARY, "type mismatch");
+		torture_assert_int_equal(tctx, einfo[0].data_length, blob_in.length, "size mismatch");
+		if (einfo[0].data_length > 0) {
+			torture_assert_mem_equal(tctx, einfo[0].data->data, blob_in.data, blob_in.length, "buffer mismatch");
+		}
+
+		key = talloc_strdup(tctx, keys[i]);
+
+		if (!test_DeletePrinterDataEx(tctx, b, handle, keys[i], value_name)) {
+			return false;
+		}
+
+		c = strchr(key, '\\');
+		if (c) {
+			int k;
+
+			/* we have subkeys */
+
+			*c = 0;
+
+			if (!test_EnumPrinterKey(tctx, b, handle, key, &subkeys)) {
+				return false;
+			}
+
+			for (k=0; subkeys && subkeys[k]; k++) {
+
+				const char *current_key = talloc_asprintf(tctx, "%s\\%s", key, subkeys[k]);
+
+				if (!test_DeletePrinterKey(tctx, b, handle, current_key)) {
+					return false;
+				}
+			}
+
+			if (!test_DeletePrinterKey(tctx, b, handle, key)) {
+				return false;
+			}
+
+		} else {
+			if (!test_DeletePrinterKey(tctx, b, handle, key)) {
+				return false;
+			}
+		}
+	}
+
+	return true;
+}
+
+static bool test_SetPrinterDataEx_values(struct torture_context *tctx,
+					 struct dcerpc_pipe *p,
+					 struct policy_handle *handle)
+{
+	struct dcerpc_binding_handle *b = p->binding_handle;
+	const char *key = "torturedataex";
+	const char *values[] = {
+		"torture_value",
+		"torture value",
+		"torture,value",
+		"torture/value",
+		"torture\\value",
+		"torture\\\\value"
 	};
+	int i;
+
+	for (i=0; i < ARRAY_SIZE(values); i++) {
+
+		enum winreg_Type type;
+		DATA_BLOB blob_in, blob_out;
+		uint32_t ecount;
+		struct spoolss_PrinterEnumValues *einfo;
+		uint32_t needed;
+
+		if (torture_setting_bool(tctx, "samba3", false)) {
+			char *q;
+			q = strrchr(values[i], ',');
+			if (q) {
+				torture_skip(tctx,
+					talloc_asprintf(tctx, "skipping valuename '%s' including ',' character against Samba3\n",
+						values[i]));
+			}
+		}
+
+		blob_in = data_blob_talloc(tctx, NULL, 42);
+
+		generate_random_buffer(blob_in.data, blob_in.length);
+
+		torture_assert(tctx,
+			test_SetPrinterDataEx(tctx, b, handle, key, values[i], REG_BINARY, blob_in.data, blob_in.length),
+			"failed to call SetPrinterDataEx");
+
+		torture_assert(tctx,
+			test_GetPrinterDataEx(tctx, p, handle, key, values[i], &type, &blob_out.data, &needed),
+			"failed to call GetPrinterDataEx");
+
+		blob_out.length = needed;
+		torture_assert(tctx,
+			test_EnumPrinterDataEx(tctx, b, handle, key, &ecount, &einfo),
+			"failed to call EnumPrinterDataEx");
+
+		torture_assert_int_equal(tctx, type, REG_BINARY, "type mismatch");
+		torture_assert_int_equal(tctx, blob_out.length, blob_in.length, "size mismatch");
+		torture_assert_mem_equal(tctx, blob_out.data, blob_in.data, blob_in.length, "buffer mismatch");
+
+		torture_assert_int_equal(tctx, ecount, 1, "unexpected enum count");
+		torture_assert_str_equal(tctx, einfo[0].value_name, values[i], "value_name mismatch");
+		torture_assert_int_equal(tctx, einfo[0].value_name_len, strlen_m_term(values[i])*2, "unexpected value_name_len");
+		torture_assert_int_equal(tctx, einfo[0].type, REG_BINARY, "type mismatch");
+		torture_assert_int_equal(tctx, einfo[0].data_length, blob_in.length, "size mismatch");
+		if (einfo[0].data_length > 0) {
+			torture_assert_mem_equal(tctx, einfo[0].data->data, blob_in.data, blob_in.length, "buffer mismatch");
+		}
+
+		torture_assert(tctx,
+			test_DeletePrinterDataEx(tctx, b, handle, key, values[i]),
+			"failed to call DeletePrinterDataEx");
+	}
+
+	return true;
+}
+
+
+static bool test_SetPrinterDataEx_matrix(struct torture_context *tctx,
+					 struct dcerpc_pipe *p,
+					 struct policy_handle *handle,
+					 const char *printername,
+					 struct dcerpc_binding_handle *winreg_handle,
+					 struct policy_handle *hive_handle)
+{
+	struct dcerpc_binding_handle *b = p->binding_handle;
+	const char *value_name = "dog";
+	const char *key_name = "torturedataex";
 	enum winreg_Type types[] = {
 		REG_SZ,
 		REG_MULTI_SZ,
@@ -4834,20 +5008,15 @@ static bool test_SetPrinterDataEx_matrix(struct torture_context *tctx,
 		REG_BINARY
 	};
 	const char *str = "abcdefghi";
-	int i, t, s;
-
+	int t, s;
 
-	for (i=0; i < ARRAY_SIZE(keys); i++) {
 	for (t=0; t < ARRAY_SIZE(types); t++) {
 	for (s=0; s < strlen(str); s++) {
 
-		char *c;
-		const char *key;
 		enum winreg_Type type;
 		const char *string = talloc_strndup(tctx, str, s);
 		const char *array[2];
 		DATA_BLOB blob = data_blob_string_const(string);
-		const char **subkeys;
 		DATA_BLOB data;
 		uint8_t *data_out;
 		uint32_t needed, offered = 0;
@@ -4894,15 +5063,15 @@ static bool test_SetPrinterDataEx_matrix(struct torture_context *tctx,
 		}
 
 		torture_assert(tctx,
-			test_SetPrinterDataEx(tctx, b, handle, keys[i], value_name, types[t], data.data, offered),
+			test_SetPrinterDataEx(tctx, b, handle, key_name, value_name, types[t], data.data, offered),
 			"failed to call SetPrinterDataEx");
 
 		torture_assert(tctx,
-			test_GetPrinterDataEx(tctx, p, handle, keys[i], value_name, &type, &data_out, &needed),
+			test_GetPrinterDataEx(tctx, p, handle, key_name, value_name, &type, &data_out, &needed),
 			"failed to call GetPrinterDataEx");
 
 		torture_assert(tctx,
-			test_EnumPrinterDataEx(tctx, b, handle, keys[i], &ecount, &einfo),
+			test_EnumPrinterDataEx(tctx, b, handle, key_name, &ecount, &einfo),
 			"failed to call EnumPrinterDataEx");
 
 		torture_assert_int_equal(tctx, types[t], type, "type mismatch");
@@ -4926,7 +5095,7 @@ static bool test_SetPrinterDataEx_matrix(struct torture_context *tctx,
 
 			torture_assert(tctx,
 				test_winreg_query_printerdata(tctx, winreg_handle, hive_handle,
-					printername, keys[i], value_name,
+					printername, key_name, value_name,
 					&w_type, &w_size, &w_length, &w_data), "");
 
 			torture_assert_int_equal(tctx, w_type, types[t], "winreg type mismatch");
@@ -4935,43 +5104,9 @@ static bool test_SetPrinterDataEx_matrix(struct torture_context *tctx,
 			torture_assert_mem_equal(tctx, w_data, data.data, offered, "winreg buffer mismatch");
 		}
 
-		key = talloc_strdup(tctx, keys[i]);
-
-		if (!test_DeletePrinterDataEx(tctx, b, handle, keys[i], value_name)) {
-			return false;
-		}
-
-		c = strchr(key, '\\');
-		if (c) {
-			int k;
-
-			/* we have subkeys */
-
-			*c = 0;
-
-			if (!test_EnumPrinterKey(tctx, b, handle, key, &subkeys)) {
-				return false;
-			}
-
-			for (k=0; subkeys && subkeys[k]; k++) {
-
-				const char *current_key = talloc_asprintf(tctx, "%s\\%s", key, subkeys[k]);
-
-				if (!test_DeletePrinterKey(tctx, b, handle, current_key)) {
-					return false;
-				}
-			}
-
-			if (!test_DeletePrinterKey(tctx, b, handle, key)) {
-				return false;
-			}
-
-		} else {
-			if (!test_DeletePrinterKey(tctx, b, handle, key)) {
-				return false;
-			}
-		}
-	}
+		torture_assert(tctx,
+			test_DeletePrinterDataEx(tctx, b, handle, key_name, value_name),
+			"failed to call DeletePrinterDataEx");
 	}
 	}
 
@@ -7158,6 +7293,34 @@ static bool test_printer_data_consistency(struct torture_context *tctx,
 	return true;
 }
 
+static bool test_printer_data_keys(struct torture_context *tctx,
+				   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;
+
+	torture_assert(tctx,
+		test_SetPrinterDataEx_keys(tctx, p, &t->handle),
+		"failed to test printer data keys");
+
+	return true;
+}
+
+static bool test_printer_data_values(struct torture_context *tctx,
+				     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;
+
+	torture_assert(tctx,
+		test_SetPrinterDataEx_values(tctx, p, &t->handle),
+		"failed to test printer data values");
+
+	return true;
+}
+
 static bool test_printer_data_set(struct torture_context *tctx,
 				  void *private_data)
 {
@@ -7231,6 +7394,8 @@ void torture_tcase_printer(struct torture_tcase *tcase)
 	torture_tcase_add_simple_test(tcase, "change_id", test_printer_change_id);
 	torture_tcase_add_simple_test(tcase, "keys", test_printer_keys);
 	torture_tcase_add_simple_test(tcase, "printerdata_consistency", test_printer_data_consistency);
+	torture_tcase_add_simple_test(tcase, "printerdata_keys", test_printer_data_keys);
+	torture_tcase_add_simple_test(tcase, "printerdata_values", test_printer_data_values);
 	torture_tcase_add_simple_test(tcase, "printerdata_set", test_printer_data_set);
 	torture_tcase_add_simple_test(tcase, "printerdata_winreg", test_printer_data_winreg);
 	torture_tcase_add_simple_test(tcase, "printerdata_dsspooler", test_printer_data_dsspooler);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list