The branch, master has been updated via 6f36e9d... testprogs: add EnumPrinterData test to win32 spoolss test. via 08ec9b7... s4-smbtorture: fill PrinterDriverData with more values for consistency test. from 386f15c... s3:smbd: make sure we always have a valid talloc stackframe
http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master - Log ----------------------------------------------------------------- commit 6f36e9d5045a062784d21dbfdd720df4cbb91182 Author: Günther Deschner <g...@samba.org> Date: Mon Mar 15 17:08:23 2010 +0100 testprogs: add EnumPrinterData test to win32 spoolss test. Guenther commit 08ec9b7e734dcdd46440abba49e980cae01b1e44 Author: Günther Deschner <g...@samba.org> Date: Mon Mar 15 16:11:43 2010 +0100 s4-smbtorture: fill PrinterDriverData with more values for consistency test. Guenther ----------------------------------------------------------------------- Summary of changes: source4/torture/rpc/spoolss.c | 25 ++++++++++++-- testprogs/win32/spoolss/error.c | 2 + testprogs/win32/spoolss/spoolss.c | 65 +++++++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+), 3 deletions(-) Changeset truncated at 500 lines: diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c index e9b4327..ee937db 100644 --- a/source4/torture/rpc/spoolss.c +++ b/source4/torture/rpc/spoolss.c @@ -3179,10 +3179,23 @@ static bool test_EnumPrinterData_consistency(struct torture_context *tctx, torture_assert(tctx, reg_string_to_val(tctx, lp_iconv_convenience(tctx->lp_ctx), - "REG_SZ", "torture_data", &type, &blob), ""); + "REG_SZ", "torture_data1", &type, &blob), ""); torture_assert(tctx, - test_SetPrinterData(tctx, p, handle, "torture_value", type, blob.data, blob.length), + test_SetPrinterData(tctx, p, handle, "torture_value1", type, blob.data, blob.length), + "SetPrinterData failed"); + + blob = data_blob_string_const("torture_data2"); + + torture_assert(tctx, + test_SetPrinterData(tctx, p, handle, "torture_value2", REG_BINARY, blob.data, blob.length), + "SetPrinterData failed"); + + blob = data_blob_talloc(tctx, NULL, 4); + SIVAL(blob.data, 0, 0x11223344); + + torture_assert(tctx, + test_SetPrinterData(tctx, p, handle, "torture_value3", type, blob.data, blob.length), "SetPrinterData failed"); torture_assert(tctx, @@ -3250,7 +3263,13 @@ static bool test_EnumPrinterData_consistency(struct torture_context *tctx, } torture_assert(tctx, - test_DeletePrinterData(tctx, p, handle, "torture_value"), + test_DeletePrinterData(tctx, p, handle, "torture_value1"), + "DeletePrinterData failed"); + torture_assert(tctx, + test_DeletePrinterData(tctx, p, handle, "torture_value2"), + "DeletePrinterData failed"); + torture_assert(tctx, + test_DeletePrinterData(tctx, p, handle, "torture_value3"), "DeletePrinterData failed"); torture_comment(tctx, "EnumPrinterData vs EnumPrinterDataEx consistency test succeeded\n\n"); diff --git a/testprogs/win32/spoolss/error.c b/testprogs/win32/spoolss/error.c index a74312a..e5ad661 100644 --- a/testprogs/win32/spoolss/error.c +++ b/testprogs/win32/spoolss/error.c @@ -45,6 +45,8 @@ const char *errstr(DWORD error) return "ERROR_INVALID_DATA"; case ERROR_MORE_DATA: return "ERROR_MORE_DATA"; + case ERROR_NO_MORE_ITEMS: + return "ERROR_NO_MORE_ITEMS"; #ifdef ERROR_INVALID_DATATYPE case ERROR_INVALID_DATATYPE: return "ERROR_INVALID_DATATYPE"; diff --git a/testprogs/win32/spoolss/spoolss.c b/testprogs/win32/spoolss/spoolss.c index c4c5017..d98aee2 100644 --- a/testprogs/win32/spoolss/spoolss.c +++ b/testprogs/win32/spoolss/spoolss.c @@ -682,6 +682,70 @@ static BOOL test_EnumJobs(struct torture_context *tctx, /**************************************************************************** ****************************************************************************/ +static BOOL test_EnumPrinterData(struct torture_context *tctx, + LPSTR servername, + HANDLE handle) +{ + DWORD err = 0; + LPTSTR value_name; + LPBYTE data; + DWORD index = 0; + DWORD type; + DWORD value_offered = 0, value_needed; + DWORD data_offered = 0, data_needed; + char tmp[1024]; + + torture_comment(tctx, "Testing EnumPrinterData(%d) (value offered: %d, data_offered: %d)\n", + index, value_offered, data_offered); + + err = EnumPrinterData(handle, 0, NULL, 0, &value_needed, NULL, NULL, 0, &data_needed); + if (err) { + sprintf(tmp, "EnumPrinterData(%d) failed on [%s] (value size = %d, data size = %d), error: %s\n", + index, servername, value_offered, data_offered, errstr(err)); + torture_fail(tctx, tmp); + } + + value_name = malloc(value_needed); + torture_assert(tctx, value_name, "malloc failed"); + data = malloc(data_needed); + torture_assert(tctx, data, "malloc failed"); + + value_offered = value_needed; + data_offered = data_needed; + + do { + + value_needed = 0; + data_needed = 0; + + torture_comment(tctx, "Testing EnumPrinterData(%d) (value offered: %d, data_offered: %d)\n", + index, value_offered, data_offered); + + err = EnumPrinterData(handle, index++, value_name, value_offered, &value_needed, &type, data, data_offered, &data_needed); + if (err == ERROR_NO_MORE_ITEMS) { + break; + } + if (err) { + sprintf(tmp, "EnumPrinterData(%d) failed on [%s] (value size = %d, data size = %d), error: %s\n", + index, servername, value_offered, data_offered, errstr(err)); + torture_fail(tctx, tmp); + } + + if (tctx->print) { + print_printer_data(NULL, value_name, data_needed, data, type); + } + + } while (err != ERROR_NO_MORE_ITEMS); + + free(value_name); + free(data); + + return TRUE; +} + +/**************************************************************************** +****************************************************************************/ + static BOOL test_EnumPrinterDataEx(struct torture_context *tctx, LPSTR servername, LPSTR keyname, @@ -985,6 +1049,7 @@ static BOOL test_OnePrinter(struct torture_context *tctx, ret &= test_EachJob(tctx, printername, handle); ret &= test_EnumPrinterKey(tctx, printername, handle, ""); ret &= test_EnumPrinterKey(tctx, printername, handle, "PrinterDriverData"); + ret &= test_EnumPrinterData(tctx, printername, handle); ret &= test_EnumPrinterDataEx(tctx, printername, "PrinterDriverData", handle, NULL, NULL); ret &= test_DeviceModes(tctx, printername, handle); ret &= test_PrinterData(tctx, printername, handle); -- Samba Shared Repository