blob: 23a71825c2e1aac6fbb365dbc08485b79e5e1227 [file] [log] [blame]
#!/usr/bin/env python
#
# Copyright 2007 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""Tests for google.appengine.tools.devappserver2.shutdown."""
import os
import signal
import time
import unittest
import google
import mox
from google.appengine.tools.devappserver2 import shutdown
class ShutdownTest(unittest.TestCase):
def setUp(self):
self.mox = mox.Mox()
self.mox.StubOutWithMock(os, 'abort')
shutdown._shutting_down = False
shutdown._num_terminate_requests = 0
self._sigint_handler = signal.getsignal(signal.SIGINT)
self._sigterm_handler = signal.getsignal(signal.SIGTERM)
def tearDown(self):
self.mox.UnsetStubs()
signal.signal(signal.SIGINT, self._sigint_handler)
signal.signal(signal.SIGTERM, self._sigterm_handler)
def test_async_quit(self):
self.mox.ReplayAll()
shutdown.async_quit()
self.assertTrue(shutdown._shutting_down)
self.mox.VerifyAll()
def test_async_terminate(self):
self.mox.ReplayAll()
shutdown._async_terminate()
self.assertTrue(shutdown._shutting_down)
shutdown._async_terminate()
self.mox.VerifyAll()
def test_async_terminate_abort(self):
os.abort()
self.mox.ReplayAll()
shutdown._async_terminate()
self.assertTrue(shutdown._shutting_down)
shutdown._async_terminate()
shutdown._async_terminate()
self.mox.VerifyAll()
def test_install_signal_handlers(self):
shutdown.install_signal_handlers()
self.assertEqual(shutdown._async_terminate, signal.getsignal(signal.SIGINT))
self.assertEqual(shutdown._async_terminate,
signal.getsignal(signal.SIGTERM))
def test_wait_until_shutdown(self):
self.mox.StubOutWithMock(time, 'sleep')
time.sleep(1).WithSideEffects(lambda _: shutdown.async_quit())
self.mox.ReplayAll()
shutdown.wait_until_shutdown()
self.mox.VerifyAll()
def test_wait_until_shutdown_raise_interrupted_io(self):
def quit_and_raise(*_):
shutdown.async_quit()
raise IOError
self.mox.StubOutWithMock(time, 'sleep')
time.sleep(1).WithSideEffects(quit_and_raise)
self.mox.ReplayAll()
shutdown.wait_until_shutdown()
self.mox.VerifyAll()
if __name__ == '__main__':
unittest.main()