summaryrefslogtreecommitdiff
path: root/source4/torture/rpc
diff options
context:
space:
mode:
Diffstat (limited to 'source4/torture/rpc')
-rw-r--r--source4/torture/rpc/spoolss.c33
1 files changed, 28 insertions, 5 deletions
diff --git a/source4/torture/rpc/spoolss.c b/source4/torture/rpc/spoolss.c
index bfe667240c..464049405c 100644
--- a/source4/torture/rpc/spoolss.c
+++ b/source4/torture/rpc/spoolss.c
@@ -304,9 +304,14 @@ static bool test_EnumPrinterDrivers(struct torture_context *tctx,
NTSTATUS status;
struct spoolss_EnumPrinterDrivers r;
uint16_t levels[] = { 1, 2, 3, 4, 5, 6 };
- int i, j;
+ int i, j, a;
+ const char *architectures[] = {
+ SPOOLSS_ARCHITECTURE_NT_X86,
+ SPOOLSS_ARCHITECTURE_ALL
+ };
for (i=0;i<ARRAY_SIZE(levels);i++) {
+ for (a=0;a<ARRAY_SIZE(architectures);a++) {
int level = levels[i];
DATA_BLOB blob;
uint32_t needed;
@@ -318,7 +323,7 @@ static bool test_EnumPrinterDrivers(struct torture_context *tctx,
* server */
r.in.server = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
- r.in.environment = SPOOLSS_ARCHITECTURE_NT_X86;
+ r.in.environment = architectures[a];
r.in.level = level;
r.in.buffer = NULL;
r.in.offered = 0;
@@ -326,7 +331,7 @@ static bool test_EnumPrinterDrivers(struct torture_context *tctx,
r.out.count = &count;
r.out.info = &info;
- torture_comment(tctx, "Testing EnumPrinterDrivers level %u\n", r.in.level);
+ torture_comment(tctx, "Testing EnumPrinterDrivers level %u (%s)\n", r.in.level, r.in.environment);
status = dcerpc_spoolss_EnumPrinterDrivers(p, ctx, &r);
torture_assert_ntstatus_ok(tctx, status,
@@ -347,19 +352,37 @@ static bool test_EnumPrinterDrivers(struct torture_context *tctx,
torture_assert_werr_ok(tctx, r.out.result, "EnumPrinterDrivers failed");
+ /* don't do cross-architecture comparison */
+ if (strequal(r.in.environment, SPOOLSS_ARCHITECTURE_ALL)) {
+ continue;
+ }
+
ctx->driver_count[level] = count;
ctx->drivers[level] = info;
}
+ }
for (i=1;i<ARRAY_SIZE(levels);i++) {
int level = levels[i];
int old_level = levels[i-1];
+
+ /* don't do cross-architecture comparison */
+ if (strequal(r.in.environment, SPOOLSS_ARCHITECTURE_ALL)) {
+ continue;
+ }
+
torture_assert_int_equal(tctx, ctx->driver_count[level], ctx->driver_count[old_level],
"EnumPrinterDrivers invalid value");
}
for (i=0;i<ARRAY_SIZE(levels);i++) {
int level = levels[i];
+
+ /* don't do cross-architecture comparison */
+ if (strequal(r.in.environment, SPOOLSS_ARCHITECTURE_ALL)) {
+ continue;
+ }
+
for (j=0;j<ctx->driver_count[level];j++) {
union spoolss_DriverInfo *cur = &ctx->drivers[level][j];
union spoolss_DriverInfo *ref = &ctx->drivers[6][j];
@@ -513,7 +536,7 @@ static bool test_EnumPrintProcessors(struct torture_context *tctx,
union spoolss_PrintProcessorInfo *info;
r.in.servername = "";
- r.in.environment = "Windows NT x86";
+ r.in.environment = SPOOLSS_ARCHITECTURE_NT_X86;
r.in.level = level;
r.in.buffer = NULL;
r.in.offered = 0;
@@ -1965,7 +1988,7 @@ static bool test_EnumPrinterDrivers_old(struct torture_context *tctx,
union spoolss_DriverInfo *info;
r.in.server = talloc_asprintf(tctx, "\\\\%s", dcerpc_server_name(p));
- r.in.environment = "Windows NT x86";
+ r.in.environment = SPOOLSS_ARCHITECTURE_NT_X86;
r.in.level = levels[i];
r.in.buffer = NULL;
r.in.offered = 0;