Mercurial > cgi-bin > hgweb.cgi > tincan
comparison tests/__init__.py @ 71:88adf10be709 draft
Add tests.
author | David Barts <n5jrn@me.com> |
---|---|
date | Mon, 15 Jul 2019 13:16:31 -0700 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
70:a78c74c73d98 | 71:88adf10be709 |
---|---|
1 #!/usr/bin/env python3 | |
2 | |
3 # I m p o r t s | |
4 | |
5 import unittest | |
6 import tincan | |
7 import logging | |
8 import subprocess | |
9 import time | |
10 | |
11 # V a r i a b l e s | |
12 | |
13 LOGGERNAME = "run-tests-server" | |
14 LOGNAME = "run-tests-server.log" | |
15 | |
16 # F u n c t i o n s | |
17 | |
18 def _flush(logger): | |
19 for handler in logger.handlers: | |
20 handler.flush() | |
21 | |
22 # C l a s s e s | |
23 | |
24 class ServerFixture(unittest.TestCase): | |
25 """ | |
26 This tests if we can launch something successfully or not. It is intended | |
27 to have but a single test case, which checks that cls.errors is 0. | |
28 """ | |
29 files = None | |
30 port = None | |
31 app = None | |
32 errors = None | |
33 | |
34 @classmethod | |
35 def setUpClass(cls): | |
36 mylog = logging.getLogger(LOGGERNAME) | |
37 mylog.info("*** BEGIN %s.%s", cls.__module__, cls.__name__) | |
38 cls.app, cls.errors = tincan.launch(fsroot=cls.files, logger=mylog) | |
39 mylog.info("*** END %s.%s", cls.__module__, cls.__name__) | |
40 | |
41 @classmethod | |
42 def tearDownClass(cls): | |
43 pass | |
44 | |
45 class RoutesFixture(unittest.TestCase): | |
46 """ | |
47 This is for testing routes. It assumes the server will start and run, | |
48 and runs that server in a separate process. It can (and often will) have | |
49 multiple test cases, which will use requests and html.parser to verify | |
50 the output is as expected. | |
51 """ | |
52 files = None | |
53 port = None | |
54 server = None | |
55 logger = None | |
56 | |
57 @classmethod | |
58 def setUpClass(cls): | |
59 mylog = logging.getLogger(LOGGERNAME) | |
60 mylog.info("*** BEGIN %s.%s", cls.__module__, cls.__name__) | |
61 _flush(mylog) | |
62 cls.logger = open(LOGNAME, "a") | |
63 cls.server = subprocess.Popen( | |
64 [ "bin/launch", "--port={0}".format(cls.port), cls.files, ], | |
65 stdin=subprocess.DEVNULL, stdout=cls.logger, stderr=cls.logger) | |
66 time.sleep(3) # xxx | |
67 | |
68 @classmethod | |
69 def tearDownClass(cls): | |
70 cls.server.terminate() | |
71 cls.server.wait() | |
72 cls.logger.close() | |
73 mylog = logging.getLogger(LOGGERNAME) | |
74 mylog.info("*** END %s.%s", cls.__module__, cls.__name__) |