source: server/lib/gutenbach_test/server/printer.py @ 3c0760f

Last change on this file since 3c0760f was 3c0760f, checked in by Steven Allen <steven@…>, 12 years ago

Block instead of looping and sleeping.

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