1 | #!/usr/bin/python
|
---|
2 |
|
---|
3 | import re
|
---|
4 | import comfychair, stf
|
---|
5 | from samba import spoolss
|
---|
6 |
|
---|
7 | class PrintServerTest(comfychair.TestCase):
|
---|
8 | """An abstract class requiring a print server."""
|
---|
9 | def setUp(self):
|
---|
10 | # TODO: create a test printer
|
---|
11 | self.server = stf.get_server(platform = "nt")
|
---|
12 | self.require(self.server != None, "print server required")
|
---|
13 | # TODO: remove hardcoded printer name
|
---|
14 | self.printername = "p"
|
---|
15 | self.uncname = "\\\\%s\\%s" % \
|
---|
16 | (self.server["hostname"], self.printername)
|
---|
17 |
|
---|
18 | class W2kPrintServerTest(comfychair.TestCase):
|
---|
19 | """An abstract class requiring a print server."""
|
---|
20 | def setUp(self):
|
---|
21 | # TODO: create a test printer
|
---|
22 | self.server = stf.get_server(platform = "nt5")
|
---|
23 | self.require(self.server != None, "print server required")
|
---|
24 | # TODO: remove hardcoded printer name
|
---|
25 | self.printername = "p"
|
---|
26 | self.uncname = "\\\\%s\\%s" % \
|
---|
27 | (self.server["hostname"], self.printername)
|
---|
28 |
|
---|
29 | class CredentialTest(PrintServerTest):
|
---|
30 | """An class that calls a function with various sets of credentials."""
|
---|
31 | def runTest(self):
|
---|
32 |
|
---|
33 | bad_user_creds = {"username": "spotty",
|
---|
34 | "domain": "dog",
|
---|
35 | "password": "bone"}
|
---|
36 |
|
---|
37 | cases = ((self.server["administrator"], "Admin credentials", 1),
|
---|
38 | (bad_user_creds, "Bad credentials", 0))
|
---|
39 |
|
---|
40 | # TODO: add unpriv user case
|
---|
41 |
|
---|
42 | for creds, testname, result in cases:
|
---|
43 | try:
|
---|
44 | self.runTestArg(creds)
|
---|
45 | except:
|
---|
46 | if result:
|
---|
47 | import traceback
|
---|
48 | traceback.print_exc()
|
---|
49 | self.fail("rpc with creds %s failed when it "
|
---|
50 | "should have suceeded" % creds)
|
---|
51 | return
|
---|
52 |
|
---|
53 | if not result:
|
---|
54 | self.fail("rpc with creds %s suceeded when it should "
|
---|
55 | "have failed" % creds)
|
---|
56 |
|
---|
57 | class ArgTestServer(PrintServerTest):
|
---|
58 | """Test a RPC that takes a UNC print server name."""
|
---|
59 | def runTest(self):
|
---|
60 |
|
---|
61 | # List of test cases, %s substituted for server name
|
---|
62 |
|
---|
63 | cases = (("", "No server name", 0),
|
---|
64 | ("\\\\%s", "Valid server name", 1),
|
---|
65 | ("\\%s", "Invalid unc server name", 0),
|
---|
66 | ("\\\\%s__", "Invalid unc server name", 0))
|
---|
67 |
|
---|
68 | for unc, testname, result in cases:
|
---|
69 | unc = re.sub("%s", self.server["hostname"], unc)
|
---|
70 | try:
|
---|
71 | self.runTestArg(unc)
|
---|
72 | except:
|
---|
73 | if result:
|
---|
74 | self.fail("rpc(\"%s\") failed when it should have "
|
---|
75 | "suceeded" % unc)
|
---|
76 | return
|
---|
77 |
|
---|
78 | if not result:
|
---|
79 | # Suceeded when we should have failed
|
---|
80 | self.fail("rpc(\"%s\") suceeded when it should have "
|
---|
81 | "failed" % unc)
|
---|
82 |
|
---|
83 | class ArgTestServerAndPrinter(ArgTestServer):
|
---|
84 | """Test a RPC that takes a UNC print server or UNC printer name."""
|
---|
85 | def runTest(self):
|
---|
86 |
|
---|
87 | ArgTestServer.runTest(self)
|
---|
88 |
|
---|
89 | # List of test cases, %s substituted for server name, %p substituted
|
---|
90 | # for printer name.
|
---|
91 |
|
---|
92 | cases = (("\\\\%s\\%p", "Valid server and printer name", 1),
|
---|
93 | ("\\\\%s\\%p__", "Valid server, invalid printer name", 0),
|
---|
94 | ("\\\\%s__\\%p", "Invalid server, valid printer name", 0))
|
---|
95 |
|
---|
96 | for unc, testname, result in cases:
|
---|
97 | unc = re.sub("%s", self.server["hostname"], unc)
|
---|
98 | unc = re.sub("%p", self.printername, unc)
|
---|
99 | try:
|
---|
100 | self.runTestArg(unc)
|
---|
101 | except:
|
---|
102 | if result:
|
---|
103 | self.fail("openprinter(\"%s\") failed when it should have "
|
---|
104 | "suceeded" % unc)
|
---|
105 | return
|
---|
106 |
|
---|
107 | if not result:
|
---|
108 | # Suceeded when we should have failed
|
---|
109 | self.fail("openprinter(\"%s\") suceeded when it should have "
|
---|
110 | "failed" % unc)
|
---|
111 |
|
---|
112 | class OpenPrinterArg(ArgTestServerAndPrinter):
|
---|
113 | """Test the OpenPrinter RPC with combinations of valid and invalid
|
---|
114 | server and printer names."""
|
---|
115 | def runTestArg(self, unc):
|
---|
116 | spoolss.openprinter(unc)
|
---|
117 |
|
---|
118 | class OpenPrinterCred(CredentialTest):
|
---|
119 | """Test opening printer with good and bad credentials."""
|
---|
120 | def runTestArg(self, creds):
|
---|
121 | spoolss.openprinter(self.uncname, creds = creds)
|
---|
122 |
|
---|
123 | class ClosePrinter(PrintServerTest):
|
---|
124 | """Test the ClosePrinter RPC on a printer handle."""
|
---|
125 | def runTest(self):
|
---|
126 | hnd = spoolss.openprinter(self.uncname)
|
---|
127 | spoolss.closeprinter(hnd)
|
---|
128 |
|
---|
129 | class ClosePrinterServer(PrintServerTest):
|
---|
130 | """Test the ClosePrinter RPC on a print server handle."""
|
---|
131 | def runTest(self):
|
---|
132 | hnd = spoolss.openprinter("\\\\%s" % self.server["hostname"])
|
---|
133 | spoolss.closeprinter(hnd)
|
---|
134 |
|
---|
135 | class GetPrinterInfo(PrintServerTest):
|
---|
136 | """Retrieve printer info at various levels."""
|
---|
137 |
|
---|
138 | # Sample printer data
|
---|
139 |
|
---|
140 | sample_info = {
|
---|
141 | 0: {'printer_errors': 0, 'unknown18': 0, 'unknown13': 0, 'unknown26': 0, 'cjobs': 0, 'unknown11': 0, 'server_name': '\\\\win2kdc1', 'total_pages': 0, 'unknown15': 586, 'unknown16': 0, 'month': 2, 'unknown20': 0, 'second': 23, 'unknown22': 983040, 'unknown25': 0, 'total_bytes': 0, 'unknown27': 0, 'year': 2003, 'build_version': 2195, 'unknown28': 0, 'global_counter': 4, 'day': 13, 'minute': 53, 'total_jobs': 0, 'unknown29': 1114112, 'name': '\\\\win2kdc1\\p', 'hour': 2, 'level': 0, 'c_setprinter': 0, 'change_id': 522454169, 'major_version': 5, 'unknown23': 15, 'day_of_week': 4, 'unknown14': 1, 'session_counter': 2, 'status': 1, 'unknown7': 1, 'unknown8': 0, 'unknown9': 0, 'milliseconds': 421, 'unknown24': 0},
|
---|
142 | 1: {'comment': "I'm a teapot!", 'level': 1, 'flags': 8388608, 'name': '\\\\win2kdc1\\p', 'description': '\\\\win2kdc1\\p,HP LaserJet 4,Canberra office'},
|
---|
143 | 2: {'comment': "I'm a teapot!", 'status': 1, 'print_processor': 'WinPrint', 'until_time': 0, 'share_name': 'p', 'start_time': 0, 'device_mode': {'icm_method': 1, 'bits_per_pel': 0, 'log_pixels': 0, 'orientation': 1, 'panning_width': 0, 'color': 2, 'pels_width': 0, 'print_quality': 600, 'driver_version': 24, 'display_flags': 0, 'y_resolution': 600, 'media_type': 0, 'display_frequency': 0, 'icm_intent': 0, 'pels_height': 0, 'reserved1': 0, 'size': 220, 'scale': 100, 'dither_type': 0, 'panning_height': 0, 'default_source': 7, 'duplex': 1, 'fields': 16131, 'spec_version': 1025, 'copies': 1, 'device_name': '\\\\win2kdc1\\p', 'paper_size': 1, 'paper_length': 0, 'private': 'private', 'collate': 0, 'paper_width': 0, 'form_name': 'Letter', 'reserved2': 0, 'tt_option': 0}, 'port_name': 'LPT1:', 'sepfile': '', 'parameters': '', 'security_descriptor': {'group_sid': 'S-1-5-21-1606980848-1677128483-854245398-513', 'sacl': None, 'dacl': {'ace_list': [{'flags': 0, 'type': 0, 'mask': 983052, 'trustee': 'S-1-5-32-544'}, {'flags': 9, 'type': 0, 'mask': 983056, 'trustee': 'S-1-5-32-544'}, {'flags': 0, 'type': 0, 'mask': 131080, 'trustee': 'S-1-5-21-1606980848-1677128483-854245398-1121'}, {'flags': 10, 'type': 0, 'mask': 131072, 'trustee': 'S-1-3-0'}, {'flags': 9, 'type': 0, 'mask': 983056, 'trustee': 'S-1-3-0'}, {'flags': 0, 'type': 0, 'mask': 131080, 'trustee': 'S-1-5-21-1606980848-1677128483-854245398-1124'}, {'flags': 0, 'type': 0, 'mask': 131080, 'trustee': 'S-1-1-0'}, {'flags': 0, 'type': 0, 'mask': 983052, 'trustee': 'S-1-5-32-550'}, {'flags': 9, 'type': 0, 'mask': 983056, 'trustee': 'S-1-5-32-550'}, {'flags': 0, 'type': 0, 'mask': 983052, 'trustee': 'S-1-5-32-549'}, {'flags': 9, 'type': 0, 'mask': 983056, 'trustee': 'S-1-5-32-549'}, {'flags': 0, 'type': 0, 'mask': 983052, 'trustee': 'S-1-5-21-1606980848-1677128483-854245398-1106'}], 'revision': 2}, 'owner_sid': 'S-1-5-32-544', 'revision': 1}, 'name': '\\\\win2kdc1\\p', 'server_name': '\\\\win2kdc1', 'level': 2, 'datatype': 'RAW', 'cjobs': 0, 'average_ppm': 0, 'priority': 1, 'driver_name': 'HP LaserJet 4', 'location': 'Canberra office', 'attributes': 8776, 'default_priority': 0},
|
---|
144 | 3: {'flags': 4, 'security_descriptor': {'group_sid': 'S-1-5-21-1606980848-1677128483-854245398-513', 'sacl': None, 'dacl': {'ace_list': [{'flags': 0, 'type': 0, 'mask': 983052, 'trustee': 'S-1-5-32-544'}, {'flags': 9, 'type': 0, 'mask': 983056, 'trustee': 'S-1-5-32-544'}, {'flags': 0, 'type': 0, 'mask': 131080, 'trustee': 'S-1-5-21-1606980848-1677128483-854245398-1121'}, {'flags': 10, 'type': 0, 'mask': 131072, 'trustee': 'S-1-3-0'}, {'flags': 9, 'type': 0, 'mask': 983056, 'trustee': 'S-1-3-0'}, {'flags': 0, 'type': 0, 'mask': 131080, 'trustee': 'S-1-5-21-1606980848-1677128483-854245398-1124'}, {'flags': 0, 'type': 0, 'mask': 131080, 'trustee': 'S-1-1-0'}, {'flags': 0, 'type': 0, 'mask': 983052, 'trustee': 'S-1-5-32-550'}, {'flags': 9, 'type': 0, 'mask': 983056, 'trustee': 'S-1-5-32-550'}, {'flags': 0, 'type': 0, 'mask': 983052, 'trustee': 'S-1-5-32-549'}, {'flags': 9, 'type': 0, 'mask': 983056, 'trustee': 'S-1-5-32-549'}, {'flags': 0, 'type': 0, 'mask': 983052, 'trustee': 'S-1-5-21-1606980848-1677128483-854245398-1106'}], 'revision': 2}, 'owner_sid': 'S-1-5-32-544', 'revision': 1}, 'level': 3}
|
---|
145 | }
|
---|
146 |
|
---|
147 | def runTest(self):
|
---|
148 | self.hnd = spoolss.openprinter(self.uncname)
|
---|
149 |
|
---|
150 | # Everyone should have getprinter levels 0-3
|
---|
151 |
|
---|
152 | for i in (0, 1, 2, 3):
|
---|
153 | info = self.hnd.getprinter(level = i)
|
---|
154 | try:
|
---|
155 | stf.dict_check(self.sample_info[i], info)
|
---|
156 | except ValueError, msg:
|
---|
157 | raise "info%d: %s" % (i, msg)
|
---|
158 |
|
---|
159 | class EnumPrinters(PrintServerTest):
|
---|
160 | """Enumerate print info at various levels."""
|
---|
161 |
|
---|
162 | sample_info = {
|
---|
163 |
|
---|
164 | 0: {'q': {'printer_errors': 0, 'unknown18': 0, 'unknown13': 0, 'unknown26': 0, 'cjobs': 0, 'unknown11': 0, 'server_name': '', 'total_pages': 0, 'unknown15': 586, 'unknown16': 0, 'month': 2, 'unknown20': 0, 'second': 23, 'unknown22': 983040, 'unknown25': 0, 'total_bytes': 0, 'unknown27': 0, 'year': 2003, 'build_version': 2195, 'unknown28': 0, 'global_counter': 4, 'day': 13, 'minute': 53, 'total_jobs': 0, 'unknown29': -1833435136, 'name': 'q', 'hour': 2, 'level': 0, 'c_setprinter': 0, 'change_id': 522454169, 'major_version': 5, 'unknown23': 15, 'day_of_week': 4, 'unknown14': 1, 'session_counter': 1, 'status': 0, 'unknown7': 1, 'unknown8': 0, 'unknown9': 0, 'milliseconds': 421, 'unknown24': 0}, 'p': {'printer_errors': 0, 'unknown18': 0, 'unknown13': 0, 'unknown26': 0, 'cjobs': 0, 'unknown11': 0, 'server_name': '', 'total_pages': 0, 'unknown15': 586, 'unknown16': 0, 'month': 2, 'unknown20': 0, 'second': 23, 'unknown22': 983040, 'unknown25': 0, 'total_bytes': 0, 'unknown27': 0, 'year': 2003, 'build_version': 2195, 'unknown28': 0, 'global_counter': 4, 'day': 13, 'minute': 53, 'total_jobs': 0, 'unknown29': -1831337984, 'name': 'p', 'hour': 2, 'level': 0, 'c_setprinter': 0, 'change_id': 522454169, 'major_version': 5, 'unknown23': 15, 'day_of_week': 4, 'unknown14': 1, 'session_counter': 1, 'status': 1, 'unknown7': 1, 'unknown8': 0, 'unknown9': 0, 'milliseconds': 421, 'unknown24': 0}, 'magpie': {'printer_errors': 0, 'unknown18': 0, 'unknown13': 0, 'unknown26': 0, 'cjobs': 0, 'unknown11': 0, 'server_name': '', 'total_pages': 0, 'unknown15': 586, 'unknown16': 0, 'month': 2, 'unknown20': 0, 'second': 23, 'unknown22': 983040, 'unknown25': 0, 'total_bytes': 0, 'unknown27': 0, 'year': 2003, 'build_version': 2195, 'unknown28': 0, 'global_counter': 4, 'day': 13, 'minute': 53, 'total_jobs': 0, 'unknown29': 1114112, 'name': 'magpie', 'hour': 2, 'level': 0, 'c_setprinter': 0, 'change_id': 522454169, 'major_version': 5, 'unknown23': 15, 'day_of_week': 4, 'unknown14': 1, 'session_counter': 1, 'status': 0, 'unknown7': 1, 'unknown8': 0, 'unknown9': 0, 'milliseconds': 421, 'unknown24': 0}},
|
---|
165 |
|
---|
166 | 1: {'q': {'comment': 'cheepy birds', 'level': 1, 'flags': 8388608, 'name': 'q', 'description': 'q,HP LaserJet 4,'}, 'p': {'comment': "I'm a teapot!", 'level': 1, 'flags': 8388608, 'name': 'p', 'description': 'p,HP LaserJet 4,Canberra office'}, 'magpie': {'comment': '', 'level': 1, 'flags': 8388608, 'name': 'magpie', 'description': 'magpie,Generic / Text Only,'}}
|
---|
167 | }
|
---|
168 |
|
---|
169 | def runTest(self):
|
---|
170 | for i in (0, 1):
|
---|
171 | info = spoolss.enumprinters(
|
---|
172 | "\\\\%s" % self.server["hostname"], level = i)
|
---|
173 | try:
|
---|
174 | stf.dict_check(self.sample_info[i], info)
|
---|
175 | except ValueError, msg:
|
---|
176 | raise "info%d: %s" % (i, msg)
|
---|
177 |
|
---|
178 | class EnumPrintersArg(ArgTestServer):
|
---|
179 | def runTestArg(self, unc):
|
---|
180 | spoolss.enumprinters(unc)
|
---|
181 |
|
---|
182 | class EnumPrintersCred(CredentialTest):
|
---|
183 | """Test opening printer with good and bad credentials."""
|
---|
184 | def runTestArg(self, creds):
|
---|
185 | spoolss.enumprinters(
|
---|
186 | "\\\\%s" % self.server["hostname"], creds = creds)
|
---|
187 |
|
---|
188 | class EnumPrinterdrivers(PrintServerTest):
|
---|
189 |
|
---|
190 | sample_info = {
|
---|
191 | 1: {'Okipage 10ex (PCL5E) : STANDARD': {'name': 'Okipage 10ex (PCL5E) : STANDARD', 'level': 1}, 'Generic / Text Only': {'name': 'Generic / Text Only', 'level': 1}, 'Brother HL-1030 series': {'name': 'Brother HL-1030 series', 'level': 1}, 'Brother HL-1240 series': {'name': 'Brother HL-1240 series', 'level': 1}, 'HP DeskJet 1220C Printer': {'name': 'HP DeskJet 1220C Printer', 'level': 1}, 'HP LaserJet 4100 PCL 6': {'name': 'HP LaserJet 4100 PCL 6', 'level': 1}, 'HP LaserJet 4': {'name': 'HP LaserJet 4', 'level': 1}},
|
---|
192 | 2: {'Okipage 10ex (PCL5E) : STANDARD': {'version': 2, 'config_file': '\\\\WIN2KDC1\\print$\\W32X86\\2\\RASDDUI.DLL', 'name': 'Okipage 10ex (PCL5E) : STANDARD', 'driver_path': '\\\\WIN2KDC1\\print$\\W32X86\\2\\RASDD.DLL', 'data_file': '\\\\WIN2KDC1\\print$\\W32X86\\2\\OKIPAGE.DLL', 'level': 2, 'architecture': 'Windows NT x86'}, 'Generic / Text Only': {'version': 3, 'config_file': '\\\\WIN2KDC1\\print$\\W32X86\\3\\UNIDRVUI.DLL', 'name': 'Generic / Text Only', 'driver_path': '\\\\WIN2KDC1\\print$\\W32X86\\3\\UNIDRV.DLL', 'data_file': '\\\\WIN2KDC1\\print$\\W32X86\\3\\TTY.GPD', 'level': 2, 'architecture': 'Windows NT x86'}, 'Brother HL-1030 series': {'version': 3, 'config_file': '\\\\WIN2KDC1\\print$\\W32X86\\3\\BRUHL99A.DLL', 'name': 'Brother HL-1030 series', 'driver_path': '\\\\WIN2KDC1\\print$\\W32X86\\3\\BROHL99A.DLL', 'data_file': '\\\\WIN2KDC1\\print$\\W32X86\\3\\BROHL103.PPD', 'level': 2, 'architecture': 'Windows NT x86'}, 'Brother HL-1240 series': {'version': 3, 'config_file': '\\\\WIN2KDC1\\print$\\W32X86\\3\\BRUHL99A.DLL', 'name': 'Brother HL-1240 series', 'driver_path': '\\\\WIN2KDC1\\print$\\W32X86\\3\\BROHL99A.DLL', 'data_file': '\\\\WIN2KDC1\\print$\\W32X86\\3\\BROHL124.PPD', 'level': 2, 'architecture': 'Windows NT x86'}, 'HP DeskJet 1220C Printer': {'version': 3, 'config_file': '\\\\WIN2KDC1\\print$\\W32X86\\3\\HPW8KMD.DLL', 'name': 'HP DeskJet 1220C Printer', 'driver_path': '\\\\WIN2KDC1\\print$\\W32X86\\3\\HPW8KMD.DLL', 'data_file': '\\\\WIN2KDC1\\print$\\W32X86\\3\\HPW8KMD.DLL', 'level': 2, 'architecture': 'Windows NT x86'}, 'HP LaserJet 4100 PCL 6': {'version': 3, 'config_file': '\\\\WIN2KDC1\\print$\\W32X86\\3\\HPBF042E.DLL', 'name': 'HP LaserJet 4100 PCL 6', 'driver_path': '\\\\WIN2KDC1\\print$\\W32X86\\3\\HPBF042G.DLL', 'data_file': '\\\\WIN2KDC1\\print$\\W32X86\\3\\HPBF042I.PMD', 'level': 2, 'architecture': 'Windows NT x86'}, 'HP LaserJet 4': {'version': 2, 'config_file': '\\\\WIN2KDC1\\print$\\W32X86\\2\\hpblff0.dll', 'name': 'HP LaserJet 4', 'driver_path': '\\\\WIN2KDC1\\print$\\W32X86\\2\\hpblff2.dll', 'data_file': '\\\\WIN2KDC1\\print$\\W32X86\\2\\hpblff39.pmd', 'level': 2, 'architecture': 'Windows NT x86'}}
|
---|
193 | }
|
---|
194 |
|
---|
195 | def runTest(self):
|
---|
196 | for i in (1, 2):
|
---|
197 | info = spoolss.enumprinterdrivers(
|
---|
198 | "\\\\%s" % self.server["hostname"], level = i)
|
---|
199 | try:
|
---|
200 | if not self.sample_info.has_key(i):
|
---|
201 | self.log("%s" % info)
|
---|
202 | self.fail()
|
---|
203 | stf.dict_check(self.sample_info[i], info)
|
---|
204 | except ValueError, msg:
|
---|
205 | raise "info%d: %s" % (i, msg)
|
---|
206 |
|
---|
207 | class EnumPrinterdriversArg(ArgTestServer):
|
---|
208 | def runTestArg(self, unc):
|
---|
209 | spoolss.enumprinterdrivers(unc)
|
---|
210 |
|
---|
211 | class EnumPrinterdriversCred(CredentialTest):
|
---|
212 | """Test opening printer with good and bad credentials."""
|
---|
213 | def runTestArg(self, creds):
|
---|
214 | spoolss.enumprinterdrivers(
|
---|
215 | "\\\\%s" % self.server["hostname"], creds = creds)
|
---|
216 |
|
---|
217 | def usage():
|
---|
218 | print "Usage: spoolss.py [options] [test1[,test2...]]"
|
---|
219 | print "\t -v/--verbose Display debugging information"
|
---|
220 | print "\t -l/--list-tests List available tests"
|
---|
221 | print
|
---|
222 | print "A list of comma separated test names or regular expressions"
|
---|
223 | print "can be used to filter the tests performed."
|
---|
224 |
|
---|
225 | def test_match(subtest_list, test_name):
|
---|
226 | """Return true if a test matches a comma separated list of regular
|
---|
227 | expression of test names."""
|
---|
228 | # re.match does an implicit ^ at the start of the pattern.
|
---|
229 | # Explicitly anchor to end to avoid matching substrings.
|
---|
230 | for s in string.split(subtest_list, ","):
|
---|
231 | if re.match(s + "$", test_name):
|
---|
232 | return 1
|
---|
233 | return 0
|
---|
234 |
|
---|
235 | if __name__ == "__main__":
|
---|
236 | import os, sys, string
|
---|
237 | import getopt
|
---|
238 |
|
---|
239 | try:
|
---|
240 | opts, args = getopt.getopt(sys.argv[1:], "vl", \
|
---|
241 | ["verbose", "list-tests"])
|
---|
242 | except getopt.GetoptError:
|
---|
243 | usage()
|
---|
244 | sys.exit(0)
|
---|
245 |
|
---|
246 | verbose = 0
|
---|
247 | list_tests = 0
|
---|
248 |
|
---|
249 | for opt, arg in opts:
|
---|
250 | if opt in ("-v", "--verbose"):
|
---|
251 | verbose = 1
|
---|
252 | if opt in ("-l", "--list-tests"):
|
---|
253 | list_tests = 1
|
---|
254 |
|
---|
255 | if len(args) > 1:
|
---|
256 | usage()
|
---|
257 | sys.exit(0)
|
---|
258 |
|
---|
259 | test_list = [
|
---|
260 | OpenPrinterArg,
|
---|
261 | OpenPrinterCred,
|
---|
262 | ClosePrinter,
|
---|
263 | ClosePrinterServer,
|
---|
264 | GetPrinterInfo,
|
---|
265 | EnumPrinters,
|
---|
266 | EnumPrintersCred,
|
---|
267 | EnumPrintersArg,
|
---|
268 | EnumPrinterdrivers,
|
---|
269 | EnumPrinterdriversCred,
|
---|
270 | EnumPrinterdriversArg,
|
---|
271 | ]
|
---|
272 |
|
---|
273 | if len(args):
|
---|
274 | t = []
|
---|
275 | for test in test_list:
|
---|
276 | if test_match(args[0], test.__name__):
|
---|
277 | t.append(test)
|
---|
278 | test_list = t
|
---|
279 |
|
---|
280 | if os.environ.has_key("SAMBA_DEBUG"):
|
---|
281 | spoolss.setup_logging(interactive = 1)
|
---|
282 | spoolss.set_debuglevel(10)
|
---|
283 |
|
---|
284 | if list_tests:
|
---|
285 | for test in test_list:
|
---|
286 | print test.__name__
|
---|
287 | else:
|
---|
288 | comfychair.runtests(test_list, verbose = verbose)
|
---|