import os import unittest from pyramid.tests.test_scripts import dummy here = os.path.abspath(os.path.dirname(__file__)) class TestPServeCommand(unittest.TestCase): def setUp(self): from pyramid.compat import NativeIO self.out_ = NativeIO() def out(self, msg): self.out_.write(msg) def _getTargetClass(self): from pyramid.scripts.pserve import PServeCommand return PServeCommand def _makeOne(self, *args): effargs = ['pserve'] effargs.extend(args) cmd = self._getTargetClass()(effargs) cmd.out = self.out self.loader = dummy.DummyLoader() cmd._get_config_loader = self.loader return cmd def test_run_no_args(self): inst = self._makeOne() result = inst.run() self.assertEqual(result, 2) self.assertEqual(self.out_.getvalue(), 'You must give a config file') def test_parse_vars_good(self): inst = self._makeOne('development.ini', 'a=1', 'b=2') app = dummy.DummyApp() def get_app(name, global_conf): app.name = name app.global_conf = global_conf return app self.loader.get_wsgi_app = get_app self.loader.server = lambda x: x inst.run() self.assertEqual(app.global_conf, {'a': '1', 'b': '2'}) def test_parse_vars_bad(self): inst = self._makeOne('development.ini', 'a') self.assertRaises(ValueError, inst.run) def test_config_file_finds_watch_files(self): inst = self._makeOne('development.ini') loader = self.loader('/base/path.ini') loader.settings = {'pserve': { 'watch_files': 'foo\n/baz\npyramid.tests.test_scripts:*.py', }} inst.pserve_file_config(loader, global_conf={'a': '1'}) self.assertEqual(loader.calls[0]['defaults'], { 'a': '1', }) self.assertEqual(inst.watch_files, set([ os.path.abspath('/base/foo'), os.path.abspath('/baz'), os.path.abspath(os.path.join(here, '*.py')), ])) def test_config_file_finds_open_url(self): inst = self._makeOne('development.ini') loader = self.loader('/base/path.ini') loader.settings = {'pserve': { 'open_url': 'http://127.0.0.1:8080/', }} inst.pserve_file_config(loader, global_conf={'a': '1'}) self.assertEqual(loader.calls[0]['defaults'], { 'a': '1', }) self.assertEqual(inst.open_url, 'http://127.0.0.1:8080/') def test_guess_server_url(self): inst = self._makeOne('development.ini') loader = self.loader('/base/path.ini') loader.settings = {'server:foo': { 'port': '8080', }} url = inst.guess_server_url(loader, 'foo', global_conf={'a': '1'}) self.assertEqual(loader.calls[0]['defaults'], { 'a': '1', }) self.assertEqual(url, 'http://127.0.0.1:8080') def test_reload_call_hupper_with_correct_args(self): from pyramid.scripts import pserve class AttrDict(dict): def __init__(self, *args, **kwargs): super(AttrDict, self).__init__(*args, **kwargs) self.__dict__ = self def dummy_start_reloader(*args, **kwargs): dummy_start_reloader.args = args dummy_start_reloader.kwargs = kwargs orig_hupper = pserve.hupper try: pserve.hupper = AttrDict(is_active=lambda: False, start_reloader=dummy_start_reloader) inst = self._makeOne('--reload', 'development.ini') inst.run() finally: pserve.hupper = orig_hupper self.assertEquals(dummy_start_reloader.args, ('pyramid.scripts.pserve.main',)) self.assertEquals(dummy_start_reloader.kwargs, { 'reload_interval': 1, 'verbose': 1, 'worker_kwargs': {'argv': ['pserve', '--reload', 'development.ini'], 'quiet': False}}) class Test_main(unittest.TestCase): def _callFUT(self, argv): from pyramid.scripts.pserve import main return main(argv, quiet=True) def test_it(self): result = self._callFUT(['pserve']) self.assertEqual(result, 2)