2a8e0fa5f1
This makes room for a sibling directory for nodepool functional tests. Change-Id: Iace94d313edb04192ac23a533ed967f076410980
64 lines
2.0 KiB
Python
64 lines
2.0 KiB
Python
#!/usr/bin/env python
|
|
|
|
# Copyright 2014 Hewlett-Packard Development Company, L.P.
|
|
#
|
|
# 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.
|
|
|
|
import daemon
|
|
import logging
|
|
import os
|
|
import sys
|
|
|
|
import extras
|
|
import fixtures
|
|
import testtools
|
|
|
|
from tests.base import iterate_timeout
|
|
|
|
# as of python-daemon 1.6 it doesn't bundle pidlockfile anymore
|
|
# instead it depends on lockfile-0.9.1 which uses pidfile.
|
|
pid_file_module = extras.try_imports(['daemon.pidlockfile', 'daemon.pidfile'])
|
|
|
|
|
|
def daemon_test(pidfile, flagfile):
|
|
pid = pid_file_module.TimeoutPIDLockFile(pidfile, 10)
|
|
with daemon.DaemonContext(pidfile=pid):
|
|
for x in iterate_timeout(30, "flagfile to be removed"):
|
|
if not os.path.exists(flagfile):
|
|
break
|
|
sys.exit(0)
|
|
|
|
|
|
class TestDaemon(testtools.TestCase):
|
|
log = logging.getLogger("zuul.test.daemon")
|
|
|
|
def setUp(self):
|
|
super(TestDaemon, self).setUp()
|
|
self.test_root = self.useFixture(fixtures.TempDir(
|
|
rootdir=os.environ.get("ZUUL_TEST_ROOT"))).path
|
|
|
|
def test_daemon(self):
|
|
pidfile = os.path.join(self.test_root, "daemon.pid")
|
|
flagfile = os.path.join(self.test_root, "daemon.flag")
|
|
open(flagfile, 'w').close()
|
|
if not os.fork():
|
|
self._cleanups = []
|
|
daemon_test(pidfile, flagfile)
|
|
for x in iterate_timeout(30, "daemon to start"):
|
|
if os.path.exists(pidfile):
|
|
break
|
|
os.unlink(flagfile)
|
|
for x in iterate_timeout(30, "daemon to stop"):
|
|
if not os.path.exists(pidfile):
|
|
break
|