def test_write_encodes_unicode_as_utf8(self): options = DummyOptions() config = DummyPConfig(options, 'cat', 'bin/cat') process = DummyProcess(config) process.pid = 42 process.killing = False event = DummyEvent() event.process = process response = _u(_b('STDIN:foobar')) supervisor_twiddler.resulthandler.stdin_write_handler(event, response) self.assertEqual(process.stdin_buffer, 'foobar')
def test_write_fails_silently_if_process_is_killing(self): options = DummyOptions() config = DummyPConfig(options, 'cat', 'bin/cat') process = DummyProcess(config) process.pid = 42 process.killing = True event = DummyEvent() event.process = process response = 'STDIN:foobar' supervisor_twiddler.resulthandler.stdin_write_handler(event, response) self.assertEqual(process.stdin_buffer, '')
def test_handler_writes_chars_when_response_is_STDIN(self): options = DummyOptions() config = DummyPConfig(options, 'cat', 'bin/cat') process = DummyProcess(config) process.pid = 42 process.killing = False event = DummyEvent() event.process = process response = 'STDIN:foobar' supervisor_twiddler.resulthandler.stdin_write_handler(event, response) self.assertEqual(process.stdin_buffer, 'foobar')
def test_handle_listener_state_change_busy_to_unknown(self): from supervisor.events import EventRejectedEvent from supervisor.events import subscribe events = [] def doit(event): events.append(event) subscribe(EventRejectedEvent, doit) options = DummyOptions() config = DummyPConfig(options, 'process1', '/bin/process1') process = DummyProcess(config) from supervisor.dispatchers import EventListenerStates dispatcher = self._makeOne(process) process.listener_state = EventListenerStates.BUSY current_event = DummyEvent() process.event = current_event dispatcher.state_buffer = 'bogus data\n' self.assertEqual(dispatcher.handle_listener_state_change(), None) self.assertEqual(dispatcher.state_buffer, '') self.assertEqual( options.logger.data[0], 'process1: BUSY -> UNKNOWN (bad result line \'bogus data\')') self.assertEqual(process.listener_state, EventListenerStates.UNKNOWN) self.assertEqual(events[0].process, process) self.assertEqual(events[0].event, current_event)
def test_handle_listener_state_change_busy_to_unknown(self): from supervisor.events import EventRejectedEvent from supervisor.events import subscribe events = [] def doit(event): events.append(event) subscribe(EventRejectedEvent, doit) options = DummyOptions() config = DummyPConfig(options, 'process1', '/bin/process1') process = DummyProcess(config) from supervisor.dispatchers import EventListenerStates dispatcher = self._makeOne(process) process.listener_state = EventListenerStates.BUSY current_event = DummyEvent() process.event = current_event dispatcher.state_buffer = 'bogus data\n' self.assertEqual(dispatcher.handle_listener_state_change(), None) self.assertEqual(dispatcher.state_buffer, '') self.assertEqual(options.logger.data[0], "process1: bad result line: 'bogus data'") self.assertEqual(options.logger.data[1], 'process1: BUSY -> UNKNOWN') self.assertEqual(options.logger.data[2], 'process1: has entered the UNKNOWN state and will ' 'no longer receive events, this usually indicates ' 'the process violated the eventlistener protocol') self.assertEqual(process.listener_state, EventListenerStates.UNKNOWN) self.assertEqual(events[0].process, process) self.assertEqual(events[0].event, current_event)
def test_notify_true(self): from supervisor import events L = [] def callback(event): L.append(1) events.callbacks[:] = [(DummyEvent, callback)] events.notify(DummyEvent()) self.assertEqual(L, [1])
def test_EventRejectedEvent_attributes(self): from supervisor.events import EventRejectedEvent options = DummyOptions() pconfig1 = DummyPConfig(options, 'process1', 'process1','/bin/process1') process = DummyProcess(pconfig1) rejected_event = DummyEvent() event = EventRejectedEvent(process, rejected_event) self.assertEqual(event.process, process) self.assertEqual(event.event, rejected_event)
def test_notify_false(self): from supervisor import events L = [] def callback(event): L.append(1) class AnotherEvent: pass events.callbacks[:] = [(AnotherEvent, callback)] events.notify(DummyEvent()) self.assertEqual(L, [])
def test_handler_rejects_event_when_response_is_unexpected(self): event = DummyEvent() response = 'unexpected' self.assertRaises( RejectEvent, supervisor_twiddler.resulthandler.stdin_write_handler, event, response)
def test_handler_does_nothing_when_response_is_OK(self): event = DummyEvent() response = 'OK' supervisor_twiddler.resulthandler.stdin_write_handler(event, response)