def test_with_down_file(self): self._create_test_daemon(1) with open(os.path.join(self._daemon_supervise_dir(1), 'down'), 'w'): pass x = svstat(self._daemon_dir(1)) self.assertFalse(x['daemon_paused']) self.assertFalse(x['daemon_autostart'])
def tearDown(self): # shut down all test daemons and stop their supervise processes for num, supervise_proc in self.supervise_procs.items(): daemon_pid = svstat(self._daemon_dir(num))['daemon_pid'] supervise_proc.terminate() # only kill daemon if still alive (and not killed by some test) if os.path.exists('/proc/%d' % daemon_pid): os.kill(daemon_pid, signal.SIGTERM)
def daemon_info(): info = {} for dir_name in os.listdir(_service_dir()): dir_path = os.path.join(_service_dir(), dir_name) if not os.path.isdir(dir_path): continue info[dir_name] = svstat(dir_path) return info
def test_svstat(self): self._create_test_daemon(1) x = svstat(self._daemon_dir(1)) self.assertFalse(x['daemon_paused']) self.assertTrue(x['daemon_autostart']) self.assertTrue(x['alive']) self.assertFalse(x['daemon_once']) self.assertTrue(x['daemon_up']) self.assertAlmostEquals(datetime.datetime.now(), x['daemon_timestamp'], delta=datetime.timedelta(seconds=1)) self.assertTrue(0 < x['daemon_pid'] < 65536)
def _create_test_daemon(self, num, sleep_interval=0.2): self._create_daemon_config(num, textwrap.dedent(""" #!/usr/bin/python import datetime import time while True: time.sleep(%f) """ % sleep_interval)[1:]) # start a new supervise process for this daemon supervise_proc = Popen(['supervise', self._daemon_dir(num)], stdin=PIPE, stderr=PIPE) max_wait = 2 # wait for at most 2 seconds for the supervise process to start while max_wait > 0: if svstat(self._daemon_dir(num))['alive']: break max_wait -= 0.1 time.sleep(0.1) else: raise Exception('Supervise process did not start properly for test daemon <%d>' % num) self.supervise_procs[num] = supervise_proc
def _create_test_daemon(self, num, sleep_interval=0.2): self._create_daemon_config( num, textwrap.dedent(""" #!/usr/bin/python import datetime import time while True: time.sleep(%f) """ % sleep_interval)[1:]) # start a new supervise process for this daemon supervise_proc = Popen( ['supervise', self._daemon_dir(num)], stdin=PIPE, stderr=PIPE) max_wait = 2 # wait for at most 2 seconds for the supervise process to start while max_wait > 0: if svstat(self._daemon_dir(num))['alive']: break max_wait -= 0.1 time.sleep(0.1) else: raise Exception( 'Supervise process did not start properly for test daemon <%d>' % num) self.supervise_procs[num] = supervise_proc
def test_many_daemons(self): for i in range(15): self._create_test_daemon(i) for i in range(15): self.assertTrue(svstat(self._daemon_dir(i))['alive'])
def test_svcontrol(self): self.assertFalse(svcontrol('/some/nonexisting/directory', 'u')) self._create_test_daemon(1) p = self._daemon_dir(1) self.assertTrue(svcontrol(p, 'u')) self.assertFalse(svstat(p)['daemon_once']) self.assertTrue(svstat(p)['daemon_up']) ts1 = svstat(p)['daemon_timestamp'] svcontrol(p, 'd') # stop the daemon time.sleep(1) ts2 = svstat(p)['daemon_timestamp'] self.assertGreater(ts2, ts1) self.assertFalse(svstat(p)['daemon_once']) self.assertFalse(svstat(p)['daemon_up']) svcontrol(p, 'o') # start daemon in 'run_once' mode time.sleep(1) ts3 = svstat(p)['daemon_timestamp'] self.assertGreater(ts3, ts2) self.assertTrue(svstat(p)['daemon_once']) self.assertTrue(svstat(p)['daemon_up']) svcontrol(p, 'd') # start the daemon up again time.sleep(1) self.assertGreater(ts3, ts2) self.assertFalse(svstat(p)['daemon_once']) self.assertFalse(svstat(p)['daemon_up'])