xref: /unit/test/test_asgi_lifespan.py (revision 1730)
11628Szelenkov@nginx.comimport os
21628Szelenkov@nginx.comfrom distutils.version import LooseVersion
31628Szelenkov@nginx.com
41635Szelenkov@nginx.comimport pytest
51635Szelenkov@nginx.com
61635Szelenkov@nginx.comfrom conftest import public_dir
71654Szelenkov@nginx.comfrom conftest import unit_stop
81628Szelenkov@nginx.comfrom unit.applications.lang.python import TestApplicationPython
9*1730Szelenkov@nginx.comfrom unit.option import option
101628Szelenkov@nginx.com
111628Szelenkov@nginx.com
121628Szelenkov@nginx.comclass TestASGILifespan(TestApplicationPython):
131628Szelenkov@nginx.com    prerequisites = {
141628Szelenkov@nginx.com        'modules': {'python': lambda v: LooseVersion(v) >= LooseVersion('3.5')}
151628Szelenkov@nginx.com    }
161628Szelenkov@nginx.com    load_module = 'asgi'
171628Szelenkov@nginx.com
181628Szelenkov@nginx.com    def test_asgi_lifespan(self):
191628Szelenkov@nginx.com        self.load('lifespan/empty')
201628Szelenkov@nginx.com
211628Szelenkov@nginx.com        startup_path = option.test_dir + '/python/lifespan/empty/startup'
221628Szelenkov@nginx.com        shutdown_path = option.test_dir + '/python/lifespan/empty/shutdown'
231628Szelenkov@nginx.com        version_path = option.test_dir + '/python/lifespan/empty/version'
241628Szelenkov@nginx.com
251635Szelenkov@nginx.com        os.chmod(option.test_dir + '/python/lifespan/empty', 0o777)
261635Szelenkov@nginx.com
271628Szelenkov@nginx.com        open(startup_path, 'a').close()
281635Szelenkov@nginx.com        os.chmod(startup_path, 0o777)
291635Szelenkov@nginx.com
301628Szelenkov@nginx.com        open(shutdown_path, 'a').close()
311635Szelenkov@nginx.com        os.chmod(shutdown_path, 0o777)
321635Szelenkov@nginx.com
331628Szelenkov@nginx.com        open(version_path, 'a').close()
341635Szelenkov@nginx.com        os.chmod(version_path, 0o777)
351632Szelenkov@nginx.com
361628Szelenkov@nginx.com        assert self.get()['status'] == 204
371628Szelenkov@nginx.com
381654Szelenkov@nginx.com        unit_stop()
391628Szelenkov@nginx.com
401628Szelenkov@nginx.com        is_startup = os.path.isfile(startup_path)
411628Szelenkov@nginx.com        is_shutdown = os.path.isfile(shutdown_path)
421628Szelenkov@nginx.com
431628Szelenkov@nginx.com        if is_startup:
441628Szelenkov@nginx.com            os.remove(startup_path)
451628Szelenkov@nginx.com
461628Szelenkov@nginx.com        if is_shutdown:
471628Szelenkov@nginx.com            os.remove(shutdown_path)
481628Szelenkov@nginx.com
491628Szelenkov@nginx.com        with open(version_path, 'r') as f:
501628Szelenkov@nginx.com            version = f.read()
511628Szelenkov@nginx.com
521628Szelenkov@nginx.com        os.remove(version_path)
531628Szelenkov@nginx.com
541628Szelenkov@nginx.com        assert not is_startup, 'startup'
551628Szelenkov@nginx.com        assert not is_shutdown, 'shutdown'
561628Szelenkov@nginx.com        assert version == '3.0 2.0', 'version'
571628Szelenkov@nginx.com
581628Szelenkov@nginx.com    def test_asgi_lifespan_failed(self):
591628Szelenkov@nginx.com        self.load('lifespan/failed')
601628Szelenkov@nginx.com
611628Szelenkov@nginx.com        assert self.get()['status'] == 503
621628Szelenkov@nginx.com
631628Szelenkov@nginx.com        assert (
641628Szelenkov@nginx.com            self.wait_for_record(r'\[error\].*Application startup failed')
651628Szelenkov@nginx.com            is not None
661628Szelenkov@nginx.com        ), 'error message'
671628Szelenkov@nginx.com        assert self.wait_for_record(r'Exception blah') is not None, 'exception'
681628Szelenkov@nginx.com
691628Szelenkov@nginx.com    def test_asgi_lifespan_error(self):
701628Szelenkov@nginx.com        self.load('lifespan/error')
711628Szelenkov@nginx.com
721628Szelenkov@nginx.com        self.get()
731628Szelenkov@nginx.com
741628Szelenkov@nginx.com        assert self.wait_for_record(r'Exception blah') is not None, 'exception'
751628Szelenkov@nginx.com
761628Szelenkov@nginx.com    def test_asgi_lifespan_error_auto(self):
771628Szelenkov@nginx.com        self.load('lifespan/error_auto')
781628Szelenkov@nginx.com
791628Szelenkov@nginx.com        self.get()
801628Szelenkov@nginx.com
811628Szelenkov@nginx.com        assert self.wait_for_record(r'AssertionError') is not None, 'assertion'
82