Michael Merickel
2018-10-15 2b024920847481592b1a13d4006d2a9fa8881d72
commit | author | age
3f1309 1 import os
d20324 2 import unittest
3f1309 3 from pyramid.tests.test_scripts import dummy
1702da 4
7fcc30 5
9cab0e 6 here = os.path.abspath(os.path.dirname(__file__))
b2a749 7
9cab0e 8
2e6d63 9 class TestPServeCommand(unittest.TestCase):
CM 10     def setUp(self):
11         from pyramid.compat import NativeIO
12         self.out_ = NativeIO()
13
14     def out(self, msg):
15         self.out_.write(msg)
49fb77 16
2e6d63 17     def _getTargetClass(self):
CM 18         from pyramid.scripts.pserve import PServeCommand
19         return PServeCommand
20
21     def _makeOne(self, *args):
22         effargs = ['pserve']
23         effargs.extend(args)
24         cmd = self._getTargetClass()(effargs)
25         cmd.out = self.out
3e489b 26         self.loader = dummy.DummyLoader()
MM 27         cmd._get_config_loader = self.loader
2e6d63 28         return cmd
CM 29
442c1e 30     def test_run_no_args(self):
2e6d63 31         inst = self._makeOne()
CM 32         result = inst.run()
d58614 33         self.assertEqual(result, 2)
2e6d63 34         self.assertEqual(self.out_.getvalue(), 'You must give a config file')
8f4fcc 35
442c1e 36     def test_parse_vars_good(self):
49fb77 37         inst = self._makeOne('development.ini', 'a=1', 'b=2')
3f1309 38         app = dummy.DummyApp()
b2a749 39
3e489b 40         def get_app(name, global_conf):
MM 41             app.name = name
42             app.global_conf = global_conf
43             return app
44         self.loader.get_wsgi_app = get_app
45         self.loader.server = lambda x: x
49fb77 46
3f1309 47         inst.run()
49fb77 48         self.assertEqual(app.global_conf, {'a': '1', 'b': '2'})
d20324 49
442c1e 50     def test_parse_vars_bad(self):
49fb77 51         inst = self._makeOne('development.ini', 'a')
JA 52         self.assertRaises(ValueError, inst.run)
8c2aaf 53
3f1309 54     def test_config_file_finds_watch_files(self):
MM 55         inst = self._makeOne('development.ini')
3e489b 56         loader = self.loader('/base/path.ini')
MM 57         loader.settings = {'pserve': {
58             'watch_files': 'foo\n/baz\npyramid.tests.test_scripts:*.py',
59         }}
60         inst.pserve_file_config(loader, global_conf={'a': '1'})
61         self.assertEqual(loader.calls[0]['defaults'], {
9cab0e 62             'a': '1',
MM 63         })
50cebd 64         self.assertEqual(inst.watch_files, set([
9cab0e 65             os.path.abspath('/base/foo'),
MM 66             os.path.abspath('/baz'),
67             os.path.abspath(os.path.join(here, '*.py')),
50cebd 68         ]))
3f1309 69
248669 70     def test_config_file_finds_open_url(self):
MM 71         inst = self._makeOne('development.ini')
3e489b 72         loader = self.loader('/base/path.ini')
MM 73         loader.settings = {'pserve': {
74             'open_url': 'http://127.0.0.1:8080/',
75         }}
76         inst.pserve_file_config(loader, global_conf={'a': '1'})
77         self.assertEqual(loader.calls[0]['defaults'], {
248669 78             'a': '1',
MM 79         })
80         self.assertEqual(inst.open_url, 'http://127.0.0.1:8080/')
81
3e489b 82     def test_guess_server_url(self):
248669 83         inst = self._makeOne('development.ini')
3e489b 84         loader = self.loader('/base/path.ini')
MM 85         loader.settings = {'server:foo': {
86             'port': '8080',
87         }}
88         url = inst.guess_server_url(loader, 'foo', global_conf={'a': '1'})
89         self.assertEqual(loader.calls[0]['defaults'], {
248669 90             'a': '1',
MM 91         })
92         self.assertEqual(url, 'http://127.0.0.1:8080')
93
b2a749 94     def test_reload_call_hupper_with_correct_args(self):
1702da 95         from pyramid.scripts import pserve
RH 96
97         class AttrDict(dict):
98             def __init__(self, *args, **kwargs):
99                 super(AttrDict, self).__init__(*args, **kwargs)
100                 self.__dict__ = self
101
102         def dummy_start_reloader(*args, **kwargs):
103             dummy_start_reloader.args = args
104             dummy_start_reloader.kwargs = kwargs
105
2798f2 106         orig_hupper = pserve.hupper
RH 107         try:
108             pserve.hupper = AttrDict(is_active=lambda: False,
109                                      start_reloader=dummy_start_reloader)
1702da 110
2798f2 111             inst = self._makeOne('--reload', 'development.ini')
RH 112             inst.run()
113         finally:
114             pserve.hupper = orig_hupper
1702da 115
RH 116         self.assertEquals(dummy_start_reloader.args, ('pyramid.scripts.pserve.main',))
117         self.assertEquals(dummy_start_reloader.kwargs, {
118             'reload_interval': 1,
119             'verbose': 1,
120             'worker_kwargs': {'argv': ['pserve', '--reload', 'development.ini'],
121                               'quiet': False}})
b2a749 122
RH 123
442c1e 124 class Test_main(unittest.TestCase):
CM 125     def _callFUT(self, argv):
126         from pyramid.scripts.pserve import main
eac060 127         return main(argv, quiet=True)
442c1e 128
CM 129     def test_it(self):
130         result = self._callFUT(['pserve'])
d58614 131         self.assertEqual(result, 2)