2 Unix SMB/CIFS implementation.
3 test suite for spoolss rpc operations
5 Copyright (C) Guenther Deschner 2009-2010
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version.
12 This program is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with this program. If not, see <http://www.gnu.org/licenses/>.
21 /****************************************************************************
22 ****************************************************************************/
28 /****************************************************************************
29 ****************************************************************************/
31 static BOOL
test_OpenPrinter(struct torture_context
*tctx
,
33 LPPRINTER_DEFAULTS defaults
,
36 torture_comment(tctx
, "Testing OpenPrinter(%s)", printername
);
38 if (!OpenPrinter(printername
, handle
, defaults
)) {
40 sprintf(tmp
, "failed to open printer %s, error was: 0x%08x\n",
41 printername
, GetLastError());
42 torture_fail(tctx
, tmp
);
48 /****************************************************************************
49 ****************************************************************************/
51 static BOOL
test_ClosePrinter(struct torture_context
*tctx
,
54 torture_comment(tctx
, "Testing ClosePrinter");
56 if (!ClosePrinter(handle
)) {
58 sprintf(tmp
, "failed to close printer, error was: %s\n",
59 errstr(GetLastError()));
60 torture_fail(tctx
, tmp
);
67 /****************************************************************************
68 ****************************************************************************/
70 static BOOL
test_EnumPrinters(struct torture_context
*tctx
,
73 DWORD levels
[] = { 1, 2, 5 };
74 DWORD success
[] = { 1, 1, 1 };
76 DWORD flags
= PRINTER_ENUM_NAME
;
79 for (i
=0; i
< ARRAY_SIZE(levels
); i
++) {
86 torture_comment(tctx
, "Testing EnumPrinters level %d", levels
[i
]);
88 EnumPrinters(flags
, servername
, levels
[i
], NULL
, 0, &needed
, &returned
);
90 if (err
== ERROR_INSUFFICIENT_BUFFER
) {
92 buffer
= malloc(needed
);
93 torture_assert(tctx
, buffer
, "malloc failed");
94 if (!EnumPrinters(flags
, servername
, levels
[i
], buffer
, needed
, &needed
, &returned
)) {
99 sprintf(tmp
, "EnumPrinters failed level %d on [%s] (buffer size = %d), error: %s\n",
100 levels
[i
], servername
, needed
, errstr(err
));
102 torture_fail(tctx
, tmp
);
104 torture_warning(tctx
, tmp
);
109 print_printer_info_bylevel(levels
[i
], buffer
, returned
);
119 /****************************************************************************
120 ****************************************************************************/
122 static BOOL
test_EnumDrivers(struct torture_context
*tctx
,
126 DWORD levels
[] = { 1, 2, 3, 4, 5, 6 };
127 DWORD success
[] = { 1, 1, 1, 1, 1, 1 };
129 LPBYTE buffer
= NULL
;
131 for (i
=0; i
< ARRAY_SIZE(levels
); i
++) {
138 torture_comment(tctx
, "Testing EnumPrinterDrivers level %d", levels
[i
]);
140 EnumPrinterDrivers(servername
, architecture
, levels
[i
], NULL
, 0, &needed
, &returned
);
141 err
= GetLastError();
142 if (err
== ERROR_INSUFFICIENT_BUFFER
) {
144 buffer
= malloc(needed
);
145 torture_assert(tctx
, buffer
, "malloc failed");
146 if (!EnumPrinterDrivers(servername
, architecture
, levels
[i
], buffer
, needed
, &needed
, &returned
)) {
147 err
= GetLastError();
151 sprintf(tmp
, "EnumPrinterDrivers failed level %d on [%s] (buffer size = %d), error: %s\n",
152 levels
[i
], servername
, needed
, errstr(err
));
154 torture_fail(tctx
, tmp
);
156 torture_warning(tctx
, tmp
);
161 print_driver_info_bylevel(levels
[i
], buffer
, returned
);
171 /****************************************************************************
172 ****************************************************************************/
174 static BOOL
test_GetForm(struct torture_context
*tctx
,
179 DWORD levels
[] = { 1, 2 };
180 DWORD success
[] = { 1, 0 };
182 LPBYTE buffer
= NULL
;
184 for (i
=0; i
< ARRAY_SIZE(levels
); i
++) {
190 torture_comment(tctx
, "Testing GetForm(%s) level %d", formname
, levels
[i
]);
192 GetForm(handle
, formname
, levels
[i
], NULL
, 0, &needed
);
193 err
= GetLastError();
194 if (err
== ERROR_INSUFFICIENT_BUFFER
) {
196 buffer
= malloc(needed
);
197 torture_assert(tctx
, buffer
, "malloc failed");
198 if (!GetForm(handle
, formname
, levels
[i
], buffer
, needed
, &needed
)) {
199 err
= GetLastError();
203 sprintf(tmp
, "GetForm failed level %d on [%s] (buffer size = %d), error: %s\n",
204 levels
[i
], servername
, needed
, errstr(err
));
206 torture_fail(tctx
, tmp
);
208 torture_warning(tctx
, tmp
);
213 print_form_info_bylevel(levels
[i
], buffer
, 1);
223 /****************************************************************************
224 ****************************************************************************/
226 static BOOL
test_EnumForms(struct torture_context
*tctx
,
230 DWORD levels
[] = { 1, 2 };
231 DWORD success
[] = { 1, 0 };
233 LPBYTE buffer
= NULL
;
235 for (i
=0; i
< ARRAY_SIZE(levels
); i
++) {
242 torture_comment(tctx
, "Testing EnumForms level %d", levels
[i
]);
244 EnumForms(handle
, levels
[i
], NULL
, 0, &needed
, &returned
);
245 err
= GetLastError();
246 if (err
== ERROR_INSUFFICIENT_BUFFER
) {
248 buffer
= malloc(needed
);
249 torture_assert(tctx
, buffer
, "malloc failed");
250 if (!EnumForms(handle
, levels
[i
], buffer
, needed
, &needed
, &returned
)) {
251 err
= GetLastError();
255 sprintf(tmp
, "EnumForms failed level %d on [%s] (buffer size = %d), error: %s\n",
256 levels
[i
], servername
, needed
, errstr(err
));
258 torture_fail(tctx
, tmp
);
260 torture_warning(tctx
, tmp
);
265 print_form_info_bylevel(levels
[i
], buffer
, returned
);
275 /****************************************************************************
276 ****************************************************************************/
278 static BOOL
test_EnumPorts(struct torture_context
*tctx
,
281 DWORD levels
[] = { 1, 2 };
282 DWORD success
[] = { 1, 1 };
284 LPBYTE buffer
= NULL
;
286 for (i
=0; i
< ARRAY_SIZE(levels
); i
++) {
293 torture_comment(tctx
, "Testing EnumPorts level %d", levels
[i
]);
295 EnumPorts(servername
, levels
[i
], NULL
, 0, &needed
, &returned
);
296 err
= GetLastError();
297 if (err
== ERROR_INSUFFICIENT_BUFFER
) {
299 buffer
= malloc(needed
);
300 torture_assert(tctx
, buffer
, "malloc failed");
301 if (!EnumPorts(servername
, levels
[i
], buffer
, needed
, &needed
, &returned
)) {
302 err
= GetLastError();
306 sprintf(tmp
, "EnumPorts failed level %d on [%s] (buffer size = %d), error: %s\n",
307 levels
[i
], servername
, needed
, errstr(err
));
309 torture_fail(tctx
, tmp
);
311 torture_warning(tctx
, tmp
);
316 print_port_info_bylevel(levels
[i
], buffer
, returned
);
326 /****************************************************************************
327 ****************************************************************************/
329 static BOOL
test_EnumMonitors(struct torture_context
*tctx
,
332 DWORD levels
[] = { 1, 2 };
333 DWORD success
[] = { 1, 1 };
335 LPBYTE buffer
= NULL
;
337 for (i
=0; i
< ARRAY_SIZE(levels
); i
++) {
344 torture_comment(tctx
, "Testing EnumMonitors level %d", levels
[i
]);
346 EnumMonitors(servername
, levels
[i
], NULL
, 0, &needed
, &returned
);
347 err
= GetLastError();
348 if (err
== ERROR_INSUFFICIENT_BUFFER
) {
350 buffer
= malloc(needed
);
351 torture_assert(tctx
, buffer
, "malloc failed");
352 if (!EnumMonitors(servername
, levels
[i
], buffer
, needed
, &needed
, &returned
)) {
353 err
= GetLastError();
357 sprintf(tmp
, "EnumMonitors failed level %d on [%s] (buffer size = %d), error: %s\n",
358 levels
[i
], servername
, needed
, errstr(err
));
360 torture_fail(tctx
, tmp
);
362 torture_warning(tctx
, tmp
);
367 print_monitor_info_bylevel(levels
[i
], buffer
, returned
);
377 /****************************************************************************
378 ****************************************************************************/
380 static BOOL
test_EnumPrintProcessors(struct torture_context
*tctx
,
384 DWORD levels
[] = { 1 };
385 DWORD success
[] = { 1 };
387 LPBYTE buffer
= NULL
;
389 for (i
=0; i
< ARRAY_SIZE(levels
); i
++) {
396 torture_comment(tctx
, "Testing EnumPrintProcessors level %d", levels
[i
]);
398 EnumPrintProcessors(servername
, architecture
, levels
[i
], NULL
, 0, &needed
, &returned
);
399 err
= GetLastError();
400 if (err
== ERROR_INSUFFICIENT_BUFFER
) {
402 buffer
= malloc(needed
);
403 torture_assert(tctx
, buffer
, "malloc failed");
404 if (!EnumPrintProcessors(servername
, architecture
, levels
[i
], buffer
, needed
, &needed
, &returned
)) {
405 err
= GetLastError();
409 sprintf(tmp
, "EnumPrintProcessors failed level %d on [%s] (buffer size = %d), error: %s\n",
410 levels
[i
], servername
, needed
, errstr(err
));
412 torture_fail(tctx
, tmp
);
414 torture_warning(tctx
, tmp
);
419 print_printprocessor_info_bylevel(levels
[i
], buffer
, returned
);
429 /****************************************************************************
430 ****************************************************************************/
432 static BOOL
test_EnumPrintProcessorDatatypes(struct torture_context
*tctx
,
435 DWORD levels
[] = { 1 };
436 DWORD success
[] = { 1 };
438 LPBYTE buffer
= NULL
;
440 for (i
=0; i
< ARRAY_SIZE(levels
); i
++) {
447 torture_comment(tctx
, "Testing EnumPrintProcessorDatatypes level %d", levels
[i
]);
449 EnumPrintProcessorDatatypes(servername
, "winprint", levels
[i
], NULL
, 0, &needed
, &returned
);
450 err
= GetLastError();
451 if (err
== ERROR_INSUFFICIENT_BUFFER
) {
453 buffer
= malloc(needed
);
454 torture_assert(tctx
, buffer
, "malloc failed");
455 if (!EnumPrintProcessorDatatypes(servername
, "winprint", levels
[i
], buffer
, needed
, &needed
, &returned
)) {
456 err
= GetLastError();
460 sprintf(tmp
, "EnumPrintProcessorDatatypes failed level %d on [%s] (buffer size = %d), error: %s\n",
461 levels
[i
], servername
, needed
, errstr(err
));
463 torture_fail(tctx
, tmp
);
465 torture_warning(tctx
, tmp
);
470 print_datatypes_info_bylevel(levels
[i
], buffer
, returned
);
480 /****************************************************************************
481 ****************************************************************************/
483 static BOOL
test_EnumPrinterKey(struct torture_context
*tctx
,
493 torture_comment(tctx
, "Testing EnumPrinterKey(%s)", key
);
495 err
= EnumPrinterKey(handle
, key
, NULL
, 0, &needed
);
496 if (err
== ERROR_MORE_DATA
) {
497 buffer
= (LPTSTR
)malloc(needed
);
498 torture_assert(tctx
, buffer
, "malloc failed");
499 err
= EnumPrinterKey(handle
, key
, buffer
, needed
, &needed
);
502 sprintf(tmp
, "EnumPrinterKey(%s) failed on [%s] (buffer size = %d), error: %s\n",
503 key
, servername
, needed
, errstr(err
));
504 torture_fail(tctx
, tmp
);
508 print_printer_keys(buffer
);
516 /****************************************************************************
517 ****************************************************************************/
519 static BOOL
test_GetPrinter(struct torture_context
*tctx
,
523 DWORD levels
[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
524 DWORD success
[] = { 1, 1, 1, 1, 1, 1, 1, 1 };
526 LPBYTE buffer
= NULL
;
528 for (i
=0; i
< ARRAY_SIZE(levels
); i
++) {
534 torture_comment(tctx
, "Testing GetPrinter level %d", levels
[i
]);
536 GetPrinter(handle
, levels
[i
], NULL
, 0, &needed
);
537 err
= GetLastError();
538 if (err
== ERROR_INSUFFICIENT_BUFFER
) {
540 buffer
= malloc(needed
);
541 torture_assert(tctx
, buffer
, "malloc failed");
542 if (!GetPrinter(handle
, levels
[i
], buffer
, needed
, &needed
)) {
543 err
= GetLastError();
547 sprintf(tmp
, "GetPrinter failed level %d on [%s] (buffer size = %d), error: %s\n",
548 levels
[i
], printername
, needed
, errstr(err
));
550 torture_fail(tctx
, tmp
);
552 torture_warning(tctx
, tmp
);
557 print_printer_info_bylevel(levels
[i
], buffer
, 1);
567 /****************************************************************************
568 ****************************************************************************/
570 static BOOL
test_GetPrinterDriver(struct torture_context
*tctx
,
575 DWORD levels
[] = { 1, 2, 3, 4, 5, 6, 8 };
576 DWORD success
[] = { 1, 1, 1, 1, 1, 1, 1 };
578 LPBYTE buffer
= NULL
;
580 for (i
=0; i
< ARRAY_SIZE(levels
); i
++) {
586 torture_comment(tctx
, "Testing GetPrinterDriver level %d", levels
[i
]);
588 GetPrinterDriver(handle
, architecture
, levels
[i
], NULL
, 0, &needed
);
589 err
= GetLastError();
590 if (err
== ERROR_INSUFFICIENT_BUFFER
) {
592 buffer
= malloc(needed
);
593 torture_assert(tctx
, buffer
, "malloc failed");
594 if (!GetPrinterDriver(handle
, architecture
, levels
[i
], buffer
, needed
, &needed
)) {
595 err
= GetLastError();
599 sprintf(tmp
, "GetPrinterDriver failed level %d on [%s] (buffer size = %d), error: %s\n",
600 levels
[i
], printername
, needed
, errstr(err
));
602 torture_fail(tctx
, tmp
);
604 torture_warning(tctx
, tmp
);
609 print_driver_info_bylevel(levels
[i
], buffer
, 1);
620 /****************************************************************************
621 ****************************************************************************/
623 static BOOL
test_EnumJobs(struct torture_context
*tctx
,
627 DWORD levels
[] = { 1, 2, 3, 4 };
628 DWORD success
[] = { 1, 1, 1, 1 };
630 LPBYTE buffer
= NULL
;
632 for (i
=0; i
< ARRAY_SIZE(levels
); i
++) {
639 torture_comment(tctx
, "Testing EnumJobs level %d", levels
[i
]);
641 EnumJobs(handle
, 0, 100, levels
[i
], NULL
, 0, &needed
, &returned
);
642 err
= GetLastError();
643 if (err
== ERROR_INSUFFICIENT_BUFFER
) {
645 buffer
= malloc(needed
);
646 torture_assert(tctx
, buffer
, "malloc failed");
647 if (!EnumJobs(handle
, 0, 100, levels
[i
], buffer
, needed
, &needed
, &returned
)) {
648 err
= GetLastError();
652 sprintf(tmp
, "EnumJobs failed level %d on [%s] (buffer size = %d), error: %s\n",
653 levels
[i
], printername
, needed
, errstr(err
));
655 torture_fail(tctx
, tmp
);
657 torture_warning(tctx
, tmp
);
662 print_job_info_bylevel(levels
[i
], buffer
, returned
);
672 /****************************************************************************
673 ****************************************************************************/
675 static BOOL
test_EnumPrinterDataEx(struct torture_context
*tctx
,
682 LPBYTE buffer
= NULL
;
688 torture_comment(tctx
, "Testing EnumPrinterDataEx(%s)", keyname
);
690 err
= EnumPrinterDataEx(handle
, keyname
, NULL
, 0, &needed
, &returned
);
691 if (err
== ERROR_MORE_DATA
) {
692 buffer
= malloc(needed
);
693 torture_assert(tctx
, buffer
, "malloc failed");
694 err
= EnumPrinterDataEx(handle
, keyname
, buffer
, needed
, &needed
, &returned
);
697 sprintf(tmp
, "EnumPrinterDataEx(%s) failed on [%s] (buffer size = %d), error: %s\n",
698 keyname
, servername
, needed
, errstr(err
));
699 torture_fail(tctx
, tmp
);
704 LPPRINTER_ENUM_VALUES v
= (LPPRINTER_ENUM_VALUES
)buffer
;
705 for (i
=0; i
< returned
; i
++) {
706 print_printer_enum_values(&v
[i
]);
711 *returned_p
= returned
;
724 /****************************************************************************
725 ****************************************************************************/
727 static BOOL
test_OnePrinter(struct torture_context
*tctx
,
730 LPPRINTER_DEFAULTS defaults
)
735 torture_comment(tctx
, "Testing Printer %s", printername
);
737 ret
&= test_OpenPrinter(tctx
, printername
, defaults
, &handle
);
738 ret
&= test_GetPrinter(tctx
, printername
, handle
);
739 ret
&= test_GetPrinterDriver(tctx
, printername
, architecture
, handle
);
740 ret
&= test_EnumForms(tctx
, printername
, handle
);
741 ret
&= test_EnumJobs(tctx
, printername
, handle
);
742 ret
&= test_EnumPrinterKey(tctx
, printername
, handle
, "");
743 ret
&= test_EnumPrinterKey(tctx
, printername
, handle
, "PrinterDriverData");
744 ret
&= test_EnumPrinterDataEx(tctx
, printername
, "PrinterDriverData", handle
, NULL
, NULL
);
745 ret
&= test_ClosePrinter(tctx
, handle
);
750 /****************************************************************************
751 ****************************************************************************/
753 static BOOL
test_EachPrinter(struct torture_context
*tctx
,
756 LPPRINTER_DEFAULTS defaults
)
763 DWORD flags
= PRINTER_ENUM_NAME
;
764 PPRINTER_INFO_1 buffer
= NULL
;
767 torture_comment(tctx
, "Testing EnumPrinters level %d", 1);
769 EnumPrinters(flags
, servername
, 1, NULL
, 0, &needed
, &returned
);
770 err
= GetLastError();
771 if (err
== ERROR_INSUFFICIENT_BUFFER
) {
773 buffer
= (PPRINTER_INFO_1
)malloc(needed
);
774 torture_assert(tctx
, buffer
, "malloc failed");
775 if (!EnumPrinters(flags
, servername
, 1, (LPBYTE
)buffer
, needed
, &needed
, &returned
)) {
776 err
= GetLastError();
780 sprintf(tmp
, "EnumPrinters failed level %d on [%s] (buffer size = %d), error: %s\n",
781 1, servername
, needed
, errstr(err
));
782 torture_fail(tctx
, tmp
);
785 for (i
=0; i
< returned
; i
++) {
786 ret
&= test_OnePrinter(tctx
, buffer
[i
].pName
, architecture
, defaults
);
794 /****************************************************************************
795 ****************************************************************************/
797 static BOOL
test_GetPrintProcessorDirectory(struct torture_context
*tctx
,
801 DWORD levels
[] = { 1 };
802 DWORD success
[] = { 1 };
804 LPBYTE buffer
= NULL
;
806 for (i
=0; i
< ARRAY_SIZE(levels
); i
++) {
812 torture_comment(tctx
, "Testing GetPrintProcessorDirectory level %d", levels
[i
]);
814 GetPrintProcessorDirectory(servername
, architecture
, levels
[i
], NULL
, 0, &needed
);
815 err
= GetLastError();
816 if (err
== ERROR_INSUFFICIENT_BUFFER
) {
818 buffer
= malloc(needed
);
819 torture_assert(tctx
, buffer
, "malloc failed");
820 if (!GetPrintProcessorDirectory(servername
, architecture
, levels
[i
], buffer
, needed
, &needed
)) {
821 err
= GetLastError();
825 sprintf(tmp
, "GetPrintProcessorDirectory failed level %d on [%s] (buffer size = %d), error: %s\n",
826 levels
[i
], servername
, needed
, errstr(err
));
828 torture_fail(tctx
, tmp
);
830 torture_warning(tctx
, tmp
);
841 /****************************************************************************
842 ****************************************************************************/
844 static BOOL
test_GetPrinterDriverDirectory(struct torture_context
*tctx
,
848 DWORD levels
[] = { 1 };
849 DWORD success
[] = { 1 };
851 LPBYTE buffer
= NULL
;
853 for (i
=0; i
< ARRAY_SIZE(levels
); i
++) {
859 torture_comment(tctx
, "Testing GetPrinterDriverDirectory level %d", levels
[i
]);
861 GetPrinterDriverDirectory(servername
, architecture
, levels
[i
], NULL
, 0, &needed
);
862 err
= GetLastError();
863 if (err
== ERROR_INSUFFICIENT_BUFFER
) {
865 buffer
= malloc(needed
);
866 torture_assert(tctx
, buffer
, "malloc failed");
867 if (!GetPrinterDriverDirectory(servername
, architecture
, levels
[i
], buffer
, needed
, &needed
)) {
868 err
= GetLastError();
872 sprintf(tmp
, "GetPrinterDriverDirectory failed level %d on [%s] (buffer size = %d), error: %s\n",
873 levels
[i
], servername
, needed
, errstr(err
));
875 torture_fail(tctx
, tmp
);
877 torture_warning(tctx
, tmp
);
888 /****************************************************************************
889 ****************************************************************************/
891 static BOOL
test_GetPrinterData(struct torture_context
*tctx
,
899 LPBYTE buffer
= NULL
;
905 torture_comment(tctx
, "Testing GetPrinterData(%s)", valuename
);
907 err
= GetPrinterData(handle
, valuename
, &type
, NULL
, 0, &needed
);
908 if (err
== ERROR_MORE_DATA
) {
909 buffer
= (LPBYTE
)malloc(needed
);
910 torture_assert(tctx
, buffer
, "malloc failed");
911 err
= GetPrinterData(handle
, valuename
, &type
, buffer
, needed
, &needed
);
914 sprintf(tmp
, "GetPrinterData(%s) failed on [%s] (buffer size = %d), error: %s\n",
915 valuename
, servername
, needed
, errstr(err
));
916 torture_fail(tctx
, tmp
);
920 print_printer_data("PrinterDriverData", valuename
, needed
, buffer
, type
);
940 /****************************************************************************
941 ****************************************************************************/
943 static BOOL
test_GetPrinterDataEx(struct torture_context
*tctx
,
952 LPBYTE buffer
= NULL
;
958 torture_comment(tctx
, "Testing GetPrinterDataEx(%s - %s)", keyname
, valuename
);
960 err
= GetPrinterDataEx(handle
, keyname
, valuename
, &type
, NULL
, 0, &needed
);
961 if (err
== ERROR_MORE_DATA
) {
962 buffer
= (LPBYTE
)malloc(needed
);
963 torture_assert(tctx
, buffer
, "malloc failed");
964 err
= GetPrinterDataEx(handle
, keyname
, valuename
, &type
, buffer
, needed
, &needed
);
967 sprintf(tmp
, "GetPrinterDataEx(%s) failed on [%s] (buffer size = %d), error: %s\n",
968 valuename
, servername
, needed
, errstr(err
));
969 torture_fail(tctx
, tmp
);
973 print_printer_data(keyname
, valuename
, needed
, buffer
, type
);
993 /****************************************************************************
994 ****************************************************************************/
996 static BOOL
test_PrinterData(struct torture_context
*tctx
,
1002 DWORD type
, type_ex
;
1003 LPBYTE buffer
, buffer_ex
;
1004 DWORD size
, size_ex
;
1005 LPSTR valuenames
[] = {
1006 SPLREG_DEFAULT_SPOOL_DIRECTORY
,
1007 SPLREG_MAJOR_VERSION
,
1008 SPLREG_MINOR_VERSION
,
1010 SPLREG_DNS_MACHINE_NAME
,
1011 SPLREG_ARCHITECTURE
,
1015 for (i
=0; i
< ARRAY_SIZE(valuenames
); i
++) {
1016 ret
&= test_GetPrinterData(tctx
, servername
, valuenames
[i
], handle
, &type
, &buffer
, &size
);
1017 ret
&= test_GetPrinterDataEx(tctx
, servername
, "random", valuenames
[i
], handle
, &type_ex
, &buffer_ex
, &size_ex
);
1018 torture_assert_int_equal(tctx
, type
, type_ex
, "type mismatch");
1019 torture_assert_int_equal(tctx
, size
, size_ex
, "size mismatch");
1020 torture_assert_mem_equal(tctx
, buffer
, buffer_ex
, size
, "buffer mismatch");
1028 /****************************************************************************
1029 ****************************************************************************/
1031 int main(int argc
, char *argv
[])
1035 LPSTR architecture
= "Windows NT x86";
1036 HANDLE server_handle
;
1037 PRINTER_DEFAULTS defaults_admin
, defaults_use
;
1038 struct torture_context
*tctx
;
1041 fprintf(stderr
, "usage: %s <servername> [print]\n", argv
[0]);
1045 tctx
= malloc(sizeof(struct torture_context
));
1047 fprintf(stderr
, "out of memory\n");
1050 memset(tctx
, '\0', sizeof(*tctx
));
1052 servername
= argv
[1];
1055 if (strcmp(argv
[2], "print") == 0) {
1060 defaults_admin
.pDatatype
= NULL
;
1061 defaults_admin
.pDevMode
= NULL
;
1062 defaults_admin
.DesiredAccess
= PRINTER_ACCESS_ADMINISTER
;
1064 defaults_use
.pDatatype
= NULL
;
1065 defaults_use
.pDevMode
= NULL
;
1066 defaults_use
.DesiredAccess
= PRINTER_ACCESS_USE
;
1068 ret
&= test_EnumPrinters(tctx
, servername
);
1069 ret
&= test_EnumDrivers(tctx
, servername
, architecture
);
1070 ret
&= test_OpenPrinter(tctx
, servername
, NULL
, &server_handle
);
1071 /* ret &= test_EnumPrinterKey(tctx, servername, server_handle, ""); */
1072 ret
&= test_PrinterData(tctx
, servername
, server_handle
);
1073 ret
&= test_EnumForms(tctx
, servername
, server_handle
);
1074 ret
&= test_ClosePrinter(tctx
, server_handle
);
1075 ret
&= test_EnumPorts(tctx
, servername
);
1076 ret
&= test_EnumMonitors(tctx
, servername
);
1077 ret
&= test_EnumPrintProcessors(tctx
, servername
, architecture
);
1078 ret
&= test_EnumPrintProcessorDatatypes(tctx
, servername
);
1079 ret
&= test_GetPrintProcessorDirectory(tctx
, servername
, architecture
);
1080 ret
&= test_GetPrinterDriverDirectory(tctx
, servername
, architecture
);
1081 ret
&= test_EachPrinter(tctx
, servername
, architecture
, NULL
);
1084 if (tctx
->last_reason
) {
1085 fprintf(stderr
, "failed: %s\n", tctx
->last_reason
);
1091 printf("%s run successfully\n", argv
[0]);