|
3 | 3 | import shutil |
4 | 4 | import sys |
5 | 5 | import errno |
| 6 | +import logging |
6 | 7 |
|
7 | 8 | from time import sleep |
8 | 9 | from datetime import datetime, timedelta |
@@ -76,6 +77,10 @@ def dst(self, dt): |
76 | 77 |
|
77 | 78 | class TestCase(): |
78 | 79 |
|
| 80 | + @pytest.fixture(autouse=True) |
| 81 | + def inject_fixtures(self, caplog): |
| 82 | + self._caplog = caplog |
| 83 | + |
79 | 84 | backend = None |
80 | 85 | url_pfx = 'http://tracker.example/cgi-bin/roundup.cgi/bugs/rest/data/' |
81 | 86 |
|
@@ -291,7 +296,8 @@ def setUp(self): |
291 | 296 | 'HTTP_ORIGIN': 'http://tracker.example' |
292 | 297 | } |
293 | 298 | self.dummy_client = client.Client(self.instance, MockNull(), |
294 | | - self.client_env, [], None) |
| 299 | + self.client_env, |
| 300 | + cgi.FieldStorage(), None) |
295 | 301 | self.dummy_client.request.headers.get = self.get_header |
296 | 302 | self.dummy_client.db = self.db |
297 | 303 |
|
@@ -2294,6 +2300,30 @@ def testdetermine_output_formatBadAccept(self): |
2294 | 2300 | self.assertNotIn("X-Content-Type-Options", |
2295 | 2301 | self.server.client.additional_headers) |
2296 | 2302 |
|
| 2303 | + def testBadFormAttributeErrorException(self): |
| 2304 | + env = { |
| 2305 | + 'PATH_INFO': 'rest/data/user', |
| 2306 | + 'HTTP_HOST': 'localhost', |
| 2307 | + 'TRACKER_NAME': 'rounduptest', |
| 2308 | + "REQUEST_METHOD": "GET" |
| 2309 | + } |
| 2310 | + |
| 2311 | + |
| 2312 | + with self._caplog.at_level(logging.ERROR, logger="roundup"): |
| 2313 | + with self.assertRaises(AttributeError) as exc: |
| 2314 | + self.dummy_client = client.Client( |
| 2315 | + self.instance, MockNull(), env, [], None) |
| 2316 | + |
| 2317 | + self.assertEqual(exc.exception.args[0], |
| 2318 | + "'list' object has no attribute 'list'") |
| 2319 | + |
| 2320 | + # log should look like (with string not broken into parts): |
| 2321 | + # [('roundup', 40, |
| 2322 | + # 'Invalid self.form found (please report to the ' |
| 2323 | + # 'roundup-users mailing list): []')] |
| 2324 | + log = self._caplog.record_tuples[:] |
| 2325 | + self.assertIn("Invalid self.form found", log[0][2]) |
| 2326 | + |
2297 | 2327 | def testDispatchBadAccept(self): |
2298 | 2328 | # simulate: /rest/data/issue expect failure unknown accept settings |
2299 | 2329 | body=b'{ "title": "Joe Doe has problems", \ |
@@ -4508,16 +4538,16 @@ def wh(s): |
4508 | 4538 | 'TRACKER_NAME': 'rounduptest', |
4509 | 4539 | "REQUEST_METHOD": "GET" |
4510 | 4540 | } |
| 4541 | + |
4511 | 4542 | self.dummy_client = client.Client(self.instance, MockNull(), env, |
4512 | | - [], None) |
| 4543 | + cgi.FieldStorage(), None) |
4513 | 4544 | self.dummy_client.db = self.db |
4514 | 4545 | self.dummy_client.request.headers.get = self.get_header |
4515 | 4546 | self.empty_form = cgi.FieldStorage() |
4516 | 4547 | self.terse_form = cgi.FieldStorage() |
4517 | 4548 | self.terse_form.list = [ |
4518 | 4549 | cgi.MiniFieldStorage('@verbose', '0'), |
4519 | 4550 | ] |
4520 | | - self.dummy_client.form = cgi.FieldStorage() |
4521 | 4551 | self.dummy_client.form.list = [ |
4522 | 4552 | cgi.MiniFieldStorage('@fields', 'username,address'), |
4523 | 4553 | ] |
@@ -4575,7 +4605,7 @@ def wh(s): |
4575 | 4605 | ) |
4576 | 4606 |
|
4577 | 4607 | self.dummy_client = client.Client(self.instance, MockNull(), env, |
4578 | | - [], None) |
| 4608 | + cgi.FieldStorage(), None) |
4579 | 4609 | self.dummy_client.db = self.db |
4580 | 4610 | self.dummy_client.request.headers.get = self.get_header |
4581 | 4611 | self.empty_form = cgi.FieldStorage() |
@@ -4645,7 +4675,7 @@ def wh(s): |
4645 | 4675 | } |
4646 | 4676 |
|
4647 | 4677 | self.dummy_client = client.Client(self.instance, MockNull(), env, |
4648 | | - [], None) |
| 4678 | + cgi.FieldStorage(), None) |
4649 | 4679 | self.dummy_client.db = self.db |
4650 | 4680 | self.dummy_client.request.headers.get = self.get_header |
4651 | 4681 | self.empty_form = cgi.FieldStorage() |
@@ -4710,7 +4740,7 @@ def wh(s): |
4710 | 4740 | "REQUEST_METHOD": "GET" |
4711 | 4741 | } |
4712 | 4742 | self.dummy_client = client.Client(self.instance, MockNull(), env, |
4713 | | - [], None) |
| 4743 | + cgi.FieldStorage(), None) |
4714 | 4744 | self.dummy_client.db = self.db |
4715 | 4745 | self.dummy_client.request.headers.get = self.get_header |
4716 | 4746 | self.empty_form = cgi.FieldStorage() |
@@ -4781,7 +4811,7 @@ def wh(s): |
4781 | 4811 | "REQUEST_METHOD": "GET" |
4782 | 4812 | } |
4783 | 4813 | self.dummy_client = client.Client(self.instance, MockNull(), env, |
4784 | | - [], None) |
| 4814 | + cgi.FieldStorage(), None) |
4785 | 4815 | self.dummy_client.db = self.db |
4786 | 4816 | self.dummy_client.request.headers.get = self.get_header |
4787 | 4817 | self.empty_form = cgi.FieldStorage() |
@@ -4849,7 +4879,7 @@ def wh(s): |
4849 | 4879 | "REQUEST_METHOD": "GET" |
4850 | 4880 | } |
4851 | 4881 | self.dummy_client = client.Client(self.instance, MockNull(), env, |
4852 | | - [], None) |
| 4882 | + cgi.FieldStorage(), None) |
4853 | 4883 | self.dummy_client.db = self.db |
4854 | 4884 | self.dummy_client.request.headers.get = self.get_header |
4855 | 4885 | self.empty_form = cgi.FieldStorage() |
@@ -4891,7 +4921,7 @@ def wh(s): |
4891 | 4921 | "REQUEST_METHOD": "GET" |
4892 | 4922 | } |
4893 | 4923 | self.dummy_client = client.Client(self.instance, MockNull(), env, |
4894 | | - [], None) |
| 4924 | + cgi.FieldStorage(), None) |
4895 | 4925 | self.dummy_client.db = self.db |
4896 | 4926 | self.dummy_client.request.headers.get = self.get_header |
4897 | 4927 | self.empty_form = cgi.FieldStorage() |
@@ -4930,7 +4960,7 @@ def wh(s): |
4930 | 4960 | "REQUEST_METHOD": "GET" |
4931 | 4961 | } |
4932 | 4962 | self.dummy_client = client.Client(self.instance, MockNull(), env, |
4933 | | - [], None) |
| 4963 | + cgi.FieldStorage(), None) |
4934 | 4964 | self.dummy_client.db = self.db |
4935 | 4965 | self.dummy_client.request.headers.get = self.get_header |
4936 | 4966 | self.empty_form = cgi.FieldStorage() |
@@ -4966,7 +4996,7 @@ def wh(s): |
4966 | 4996 | "REQUEST_METHOD": "GET" |
4967 | 4997 | } |
4968 | 4998 | self.dummy_client = client.Client(self.instance, MockNull(), env, |
4969 | | - [], None) |
| 4999 | + cgi.FieldStorage(), None) |
4970 | 5000 | self.dummy_client.db = self.db |
4971 | 5001 | self.dummy_client.request.headers.get = self.get_header |
4972 | 5002 | self.empty_form = cgi.FieldStorage() |
@@ -5003,7 +5033,7 @@ def wh(s): |
5003 | 5033 | "REQUEST_METHOD": "GET" |
5004 | 5034 | } |
5005 | 5035 | self.dummy_client = client.Client(self.instance, MockNull(), env, |
5006 | | - [], None) |
| 5036 | + cgi.FieldStorage(), None) |
5007 | 5037 | self.dummy_client.db = self.db |
5008 | 5038 | self.dummy_client.request.headers.get = self.get_header |
5009 | 5039 | self.empty_form = cgi.FieldStorage() |
@@ -5039,7 +5069,7 @@ def wh(s): |
5039 | 5069 | "REQUEST_METHOD": "GET" |
5040 | 5070 | } |
5041 | 5071 | self.dummy_client = client.Client(self.instance, MockNull(), env, |
5042 | | - [], None) |
| 5072 | + cgi.FieldStorage(), None) |
5043 | 5073 | self.dummy_client.db = self.db |
5044 | 5074 | self.dummy_client.request.headers.get = self.get_header |
5045 | 5075 | self.empty_form = cgi.FieldStorage() |
|
0 commit comments