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