def test_running(self):
     """ Test the running method. """
     from supvisors.application import ApplicationStatus
     from supvisors.process import ProcessStatus
     application = ApplicationStatus('ApplicationTest', self.supvisors.logger)
     self.assertFalse(application.running())
     # add a stopped process
     info = any_stopped_process_info()
     process = ProcessStatus(info['group'], info['name'], self.supvisors)
     process.add_info('10.0.0.1', info)
     application.add_process(process)
     application.update_status()
     self.assertFalse(application.running())
     # add a running process
     info = any_running_process_info()
     process = ProcessStatus(info['group'], info['name'], self.supvisors)
     process.add_info('10.0.0.1', info)
     application.add_process(process)
     application.update_status()
     self.assertTrue(application.running())
示例#2
0
 def test_stopped(self):
     """ Test the stopped method. """
     from supvisors.application import ApplicationStatus
     from supvisors.process import ProcessStatus
     application = ApplicationStatus('ApplicationTest', self.supvisors.logger)
     self.assertTrue(application.stopped())
     # add a stopped process
     info = any_stopped_process_info()
     process = ProcessStatus(info['group'], info['name'], self.supvisors)
     process.add_info('10.0.0.1', info)
     application.add_process(process)
     application.update_status()
     self.assertTrue(application.stopped())
     # add a running process
     info = any_running_process_info()
     process = ProcessStatus(info['group'], info['name'], self.supvisors)
     process.add_info('10.0.0.1', info)
     application.add_process(process)
     application.update_status()
     self.assertFalse(application.stopped())
 def test_update_status(self):
     """ Test the rules to update the status of the application method. """
     from supervisor.states import ProcessStates
     from supvisors.application import ApplicationStatus
     from supvisors.process import ProcessStatus
     from supvisors.ttypes import ApplicationStates
     application = ApplicationStatus('ApplicationTest', self.supvisors.logger)
     # add processes to the application
     for info in database_copy():
         process = ProcessStatus(info['group'], info['name'], self.supvisors)
         process.add_info('10.0.0.1', info)
         application.add_process(process)
     # init status
     # there are lots of states but the 'strongest' is STARTING
     # STARTING is a 'running' state so major/minor failures are applicable
     application.update_status()
     self.assertEqual(ApplicationStates.STARTING, application.state)
     # there is a FATAL state in the process database
     # no rule is set for processes, so there are only minor failures
     self.assertFalse(application.major_failure)
     self.assertTrue(application.minor_failure)
     # set FATAL process to major
     fatal_process = next((process for process in application.processes.values() if process.state == ProcessStates.FATAL), None)
     fatal_process.rules.required = True
     # update status. major failure is now expected
     application.update_status()
     self.assertEqual(ApplicationStates.STARTING, application.state)
     self.assertTrue(application.major_failure)
     self.assertFalse(application.minor_failure)
     # set STARTING process to RUNNING
     starting_process = next((process for process in application.processes.values() if process.state == ProcessStates.STARTING), None)
     starting_process.state = ProcessStates.RUNNING
     # update status. there is still one BACKOFF process leading to STARTING application
     application.update_status()
     self.assertEqual(ApplicationStates.STARTING, application.state)
     self.assertTrue(application.major_failure)
     self.assertFalse(application.minor_failure)
     # set BACKOFF process to EXITED
     backoff_process = next((process for process in application.processes.values() if process.state == ProcessStates.BACKOFF), None)
     backoff_process.state = ProcessStates.EXITED
     # update status. the 'strongest' state is now STOPPING
     # as STOPPING is not a 'running' state, failures are not applicable
     application.update_status()
     self.assertEqual(ApplicationStates.STOPPING, application.state)
     self.assertFalse(application.major_failure)
     self.assertFalse(application.minor_failure)
     # set STOPPING process to STOPPED
     stopping_process = next((process for process in application.processes.values() if process.state == ProcessStates.STOPPING), None)
     stopping_process.state = ProcessStates.STOPPED
     # update status. the 'strongest' state is now RUNNING
     # failures are applicable again
     application.update_status()
     self.assertEqual(ApplicationStates.RUNNING, application.state)
     self.assertTrue(application.major_failure)
     self.assertFalse(application.minor_failure)
     # set RUNNING processes to STOPPED
     for process in application.processes.values():
         if process.state == ProcessStates.RUNNING:
             process.state = ProcessStates.STOPPED
     # update status. the 'strongest' state is now RUNNING
     # failures are not applicable anymore
     application.update_status()
     self.assertEqual(ApplicationStates.STOPPED, application.state)
     self.assertFalse(application.major_failure)
     self.assertFalse(application.minor_failure)
示例#4
0
 def test_update_status(self):
     """ Test the rules to update the status of the application method. """
     from supervisor.states import ProcessStates
     from supvisors.application import ApplicationStatus
     from supvisors.process import ProcessStatus
     from supvisors.ttypes import ApplicationStates
     application = ApplicationStatus('ApplicationTest',
                                     self.supvisors.logger)
     # add processes to the application
     for info in ProcessInfoDatabase:
         process = ProcessStatus(info['group'], info['name'],
                                 self.supvisors)
         process.add_info('10.0.0.1', info.copy())
         application.add_process(process)
     # init status
     # there are lots of states but the 'strongest' is STARTING
     # STARTING is a 'running' state so major/minor failures are applicable
     application.update_status()
     self.assertEqual(ApplicationStates.STARTING, application.state)
     # there is a FATAL state in the process database
     # no rule is set for processes, so there are only minor failures
     self.assertFalse(application.major_failure)
     self.assertTrue(application.minor_failure)
     # set FATAL process to major
     fatal_process = next((process
                           for process in application.processes.values()
                           if process.state == ProcessStates.FATAL), None)
     fatal_process.rules.required = True
     # update status. major failure is now expected
     application.update_status()
     self.assertEqual(ApplicationStates.STARTING, application.state)
     self.assertTrue(application.major_failure)
     self.assertFalse(application.minor_failure)
     # set STARTING process to RUNNING
     starting_process = next(
         (process for process in application.processes.values()
          if process.state == ProcessStates.STARTING), None)
     starting_process.state = ProcessStates.RUNNING
     # update status. there is still one BACKOFF process leading to STARTING application
     application.update_status()
     self.assertEqual(ApplicationStates.STARTING, application.state)
     self.assertTrue(application.major_failure)
     self.assertFalse(application.minor_failure)
     # set BACKOFF process to EXITED
     backoff_process = next(
         (process for process in application.processes.values()
          if process.state == ProcessStates.BACKOFF), None)
     backoff_process.state = ProcessStates.EXITED
     # update status. the 'strongest' state is now STOPPING
     # as STOPPING is not a 'running' state, failures are not applicable
     application.update_status()
     self.assertEqual(ApplicationStates.STOPPING, application.state)
     self.assertFalse(application.major_failure)
     self.assertFalse(application.minor_failure)
     # set STOPPING process to STOPPED
     stopping_process = next(
         (process for process in application.processes.values()
          if process.state == ProcessStates.STOPPING), None)
     stopping_process.state = ProcessStates.STOPPED
     # update status. the 'strongest' state is now RUNNING
     # failures are applicable again
     application.update_status()
     self.assertEqual(ApplicationStates.RUNNING, application.state)
     self.assertTrue(application.major_failure)
     self.assertFalse(application.minor_failure)
     # set RUNNING processes to STOPPED
     for process in application.processes.values():
         if process.state == ProcessStates.RUNNING:
             process.state = ProcessStates.STOPPED
     # update status. the 'strongest' state is now RUNNING
     # failures are not applicable anymore
     application.update_status()
     self.assertEqual(ApplicationStates.STOPPED, application.state)
     self.assertFalse(application.major_failure)
     self.assertFalse(application.minor_failure)