source: server/test/server/printer.py @ d42236e

no-cups
Last change on this file since d42236e was d42236e, checked in by Jessica B. Hamrick <jhamrick@…>, 12 years ago

Fix a few more bugs in printer.py and update test cases for printer.py

  • Property mode set to 100644
File size: 8.7 KB
Line 
1from gutenbach.server import GutenbachJob
2from gutenbach.server import GutenbachPrinter
3from gutenbach.server import errors
4
5from gutenbach.ipp import PrinterStates as States
6import unittest
7import tempfile
8import time
9import logging
10import threading
11
12def make_tempfile():
13    fh = tempfile.NamedTemporaryFile()
14    fh.write("test\n")
15    fh.seek(0)
16    return fh
17
18class TestEmptyGutenbachPrinter(unittest.TestCase):
19
20    testJobName = "unique_test_job"
21    testJobRequestingUserName = "unique_test_username"
22    testPrinterConfig = {
23        'ipp-versions': ["1.0", "1.1"]
24        }
25
26    def setUp(self):
27        self.printer = GutenbachPrinter("test", self.testPrinterConfig)
28
29    def testName(self):
30        self.assertEqual(self.printer.name, "test")
31    def testConfig(self):
32        self.assertEqual(self.printer.config, self.testPrinterConfig)
33    def testTimeCreated(self):
34        self.assertTrue(self.printer.time_created is not None)
35    def testFinishedJobs(self):
36        self.assertEqual(self.printer.finished_jobs, [])
37    def testPendingJobs(self):
38        self.assertEqual(self.printer.pending_jobs, [])
39    def testCurrentJob(self):
40        self.assertEqual(self.printer.current_job, None)
41    def testJobs(self):
42        self.assertEqual(self.printer.jobs, {})
43    def testActiveJobs(self):
44        self.assertEqual(self.printer.active_jobs, [])
45    def testRunning(self):
46        self.assertEqual(self.printer.is_running, False)
47    def testPaused(self):
48        self.assertEqual(self.printer.paused, False)
49    def testNextJobId(self):
50        self.assertEqual(self.printer._next_job_id, 1)
51    def testState(self):
52        self.assertEqual(self.printer.state, States.STOPPED)
53
54    def testStartJob(self):
55        self.assertRaises(RuntimeError, self.printer.start_job)
56    def testCompleteJob(self):
57        self.assertRaises(RuntimeError, self.printer.complete_job)
58    def testGetJob(self):
59        self.assertRaises(RuntimeError, self.printer.get_job, 0)
60
61    def testIPPAttributes(self):
62        for attribute in self.printer.printer_attributes:
63            attr = attribute.replace("-", "_")
64            self.assertRaises(RuntimeError, getattr, self.printer, attr)
65            self.assertRaises(RuntimeError, setattr, self.printer, attr, None)
66        for attribute in self.printer.job_attributes:
67            attr = getattr(self.printer, attribute.replace("-", "_"))
68            self.assertRaises(RuntimeError, attr, 0)
69
70    def testIPPOperations(self):
71        self.assertRaises(RuntimeError, self.printer.print_job, None)
72        self.assertRaises(RuntimeError, self.printer.validate_job)
73        self.assertRaises(RuntimeError, self.printer.get_jobs)
74        self.assertRaises(RuntimeError, self.printer.print_uri)
75        self.assertRaises(RuntimeError, self.printer.create_job)
76        self.assertRaises(RuntimeError, self.printer.pause_printer)
77        self.assertRaises(RuntimeError, self.printer.resume_printer)
78        self.assertRaises(RuntimeError, self.printer.get_printer_attributes)
79        self.assertRaises(RuntimeError, self.printer.set_printer_attributes, {})
80        self.assertRaises(RuntimeError, self.printer.cancel_job, 0)
81        self.assertRaises(RuntimeError, self.printer.send_document, 0, None)
82        self.assertRaises(RuntimeError, self.printer.send_uri, 0, "")
83        self.assertRaises(RuntimeError, self.printer.get_job_attributes, 0)
84        self.assertRaises(RuntimeError, self.printer.set_job_attributes, 0, {})
85        self.assertRaises(RuntimeError, self.printer.restart_job, 0)
86        self.assertRaises(RuntimeError, self.printer.promote_job, 0)
87
88class TestBadEmptyGutenbachPrinter(unittest.TestCase):
89
90    testJobName = "unique_test_job"
91    testJobRequestingUserName = "unique_test_username"
92    testPrinterConfig = {
93        'ipp-versions': ["1.0", "1.1"]
94        }
95
96    def testBadPrinterName(self):
97        printer = GutenbachPrinter(None, self.testPrinterConfig)
98        self.assertEqual(printer.name, "None")
99        printer.name = "foo"
100        self.assertEqual(printer.name, "foo")
101        printer.name = 1234
102        self.assertEqual(printer.name, "1234")
103        printer.name = []
104        self.assertEqual(printer.name, "[]")
105
106    def testBadConfig(self):
107        self.assertRaises(ValueError, GutenbachPrinter, "test", {})
108        self.assertRaises(ValueError, GutenbachPrinter, "test", {"hello": 1234})
109        self.assertRaises(ValueError, GutenbachPrinter, "test", [])
110        self.assertRaises(ValueError, GutenbachPrinter, "test", 1234)
111        self.assertRaises(ValueError, GutenbachPrinter, "test", "hello")
112        conf = self.testPrinterConfig.copy()
113        printer = GutenbachPrinter("test", conf)
114        printer.config = conf.items()
115        self.assertEqual(printer.config, conf)
116        conf["hello"] = "goodbye"
117        self.assertNotEqual(printer.config, conf)
118        printer.config = conf
119        self.assertEqual(printer.config, conf)
120
121class TestGutenbachPrinter(unittest.TestCase):
122
123    testJobName = "unique_test_job"
124    testJobRequestingUserName = "unique_test_username"
125    testPrinterConfig = {
126        'ipp-versions': ["1.0", "1.1"],
127        'dryrun': True
128        }
129
130    def setUp(self):
131        self.printer = GutenbachPrinter("test", self.testPrinterConfig)
132        self.printer.start()
133        while not self.printer.is_running:
134            time.sleep(0.01)
135
136    def tearDown(self):
137        self.printer.stop()
138
139    def createTestJob(self):
140        job_id = self.printer.create_job(
141            self.testJobRequestingUserName,
142            self.testJobName)
143        return job_id
144
145    def testPrintJob(self):
146        pass
147
148    def testValidateJob(self):
149        pass
150
151    def testGetJobs(self):
152        pass
153
154    def testPrintUri(self):
155        pass
156
157    def testCreateJob(self):
158        for i in xrange(2):
159            countBeforeAdded = len(self.printer.jobs)
160            job = self.createTestJob()
161            self.assertEqual(len(self.printer.jobs) - 1, countBeforeAdded)
162            self.printer.send_document(job, make_tempfile())
163            self.assertTrue(job in self.printer.pending_jobs)
164            self.assertFalse(job in self.printer.finished_jobs)
165            self.assertEqual(self.printer.state, States.PROCESSING)
166
167        while len(self.printer.active_jobs) > 0:
168            time.sleep(0.01)
169        self.assertEqual(self.printer.state, States.IDLE)
170
171    def testPausePrinter(self):
172        job = self.createTestJob()
173        self.printer.send_document(job, make_tempfile())
174        job = self.createTestJob()
175        self.printer.send_document(job, make_tempfile())
176        self.assertTrue(self.printer.is_running)
177        self.assertEqual(self.printer.state, States.PROCESSING)
178        self.assertFalse(self.printer.paused)
179
180        while self.printer.current_job is None:
181            time.sleep(0.01)
182
183        self.printer.pause_printer()
184        self.assertTrue(self.printer.paused)
185        time.sleep(0.6)
186        self.assertTrue(self.printer.current_job is not None)
187        self.assertEqual(self.printer.state, States.STOPPED)
188
189        # check that no jobs are playing
190        for job_id, job in self.printer.jobs.items():
191            self.assertEqual(job.is_paused, job.is_playing)
192
193    def testResumePrinter(self):
194        job = self.createTestJob()
195        self.printer.send_document(job, make_tempfile())
196        job = self.createTestJob()
197        self.printer.send_document(job, make_tempfile())
198        self.assertTrue(self.printer.is_running)
199        self.assertEqual(self.printer.state, States.PROCESSING)
200        self.assertFalse(self.printer.paused)
201
202        while self.printer.current_job is None:
203            time.sleep(0.01)
204
205        self.printer.pause_printer()
206        self.assertTrue(self.printer.paused)
207        time.sleep(0.6)
208        self.assertTrue(self.printer.current_job is not None)
209        self.assertEqual(self.printer.state, States.STOPPED)
210
211        # check that no jobs are playing
212        for job_id, job in self.printer.jobs.items():
213            self.assertEqual(job.is_paused, job.is_playing)
214
215        self.printer.resume_printer()
216        self.assertFalse(self.printer.paused)
217        self.assertEqual(self.printer.state, States.PROCESSING)
218
219        while len(self.printer.active_jobs) > 0:
220            time.sleep(0.01)
221        self.assertEqual(self.printer.state, States.IDLE)
222
223    def testGetPrinterAttributes(self):
224        pass
225
226    def testSetPrinterAttributes(self):
227        pass
228
229    def testCancelJob(self):
230        pass
231
232    def testSendDocument(self):
233        pass
234
235    def testSendUri(self):
236        pass
237
238    def testGetJobAttributes(self):
239        pass
240
241    def testSetJobAttributes(self):
242        pass
243
244    def testRestartJob(self):
245        pass
246
247    def testPromoteJob(self):
248        pass
249
250if __name__ == "__main__":
251    logging.basicConfig(loglevel=logging.DEBUG)
252    unittest.main()
Note: See TracBrowser for help on using the repository browser.