def testReadMultipleLines(self, socketMock): self.connect(socketMock) self.socket.recv.return_value = b"A:B\r\nC\r\n" self.assertEqual( Message("A", "B"), self.connection.recv(Deadline(TEST_TIMEOUT)) ) self.socket.recv.reset_mock() self.assertEqual(Message("C", ""), self.connection.recv(Deadline(TEST_TIMEOUT)))
def testReadPartialLine(self, socketMock): self.connect(socketMock) self.socket.recv.side_effect = [b"A:", b"B\r\n"] self.assertEqual( Message("A", "B"), self.connection.recv(Deadline(TEST_TIMEOUT)) )
def testReadAMessage(self, socketMock): self.connect(socketMock) self.socket.recv.return_value = b"A:B\r\n" self.assertEqual( Message("A", "B"), self.connection.recv(Deadline(TEST_TIMEOUT)) ) self.socket.close.assert_not_called()
def testSendRadioMsgFailsOnLogicalError(self, ClassMock): self.init(ClassMock) self.connection.recv.side_effect = [L_CMD_SUCCESS, S_CMD_ERROR] deadline: Deadline = MagicMock(Deadline) deadline.is_expired.side_effect = [False, True] deadline.subtimeout.return_value = Deadline(TEST_TIMEOUT) self.assertFalse(self.__send_radio_msg(S_CMD_HEX, deadline)) self.connection.send.assert_called_once_with(S_CMD) self.assertEqual(2, self.connection.recv.call_count) self.connection.close.assert_not_called() deadline.remaining.assert_not_called()
def testSendRadioMsgShouldNotRetryOnErrorWhenConnectionIsNew(self, ClassMock): self.init(ClassMock) self.connection.recv.side_effect = [L_CMD_SUCCESS] self.connection.send.side_effect = [OSError] deadline = MagicMock(Deadline) deadline.is_expired.side_effect = [False, True] deadline.subtimeout.return_value = Deadline(TEST_TIMEOUT) self.assertFalse(self.__send_radio_msg(S_CMD_HEX, deadline)) self.connection.send.assert_called_once_with(S_CMD) self.connection.recv.assert_called_once() self.connection.close.assert_called_once()
def testReadTimeout(self, socketMock): self.connect(socketMock) self.socket.recv.side_effect = [socket.timeout] self.assertIsNone(self.connection.recv(Deadline(TEST_TIMEOUT))) self.socket.close.assert_not_called()
def testReadAtConnectionClosing(self, socketMock): self.connect(socketMock) self.socket.recv.return_value = b"" self.assertIsNone(self.connection.recv(Deadline(TEST_TIMEOUT))) self.socket.close.assert_called_once()
def testToStringForExpiredDeadline(self, timeMock): timeMock.side_effect = [0.0, 1.1] deadline = Deadline(ONE_TIMEOUT) self.assertEqual("Deadline one[0/1]", str(deadline))
def testSubtimeoutHandlingWhenLargerThanTimeout(self, timeMock): timeMock.side_effect = [0.0, 9.1, 9.2] deadline = Deadline(ROOT_TIMEOUT) subdeadline = deadline.subtimeout(ONE_TIMEOUT) self.assertAlmostEqual(0.8, subdeadline.remaining())
def testSubtimeoutHandling(self, timeMock): timeMock.side_effect = [0.0, 0.1, 0.2, 0.2, 0.3] deadline = Deadline(ROOT_TIMEOUT) subdeadline = deadline.subtimeout(ONE_TIMEOUT) self.assertEqual("root[9.8/10]:one[0.9/1]", subdeadline.fullname()) self.assertAlmostEqual(0.8, subdeadline.remaining())
def testZeroDeadlineIsAlreadyExpired(self, timeMock): timeMock.return_value = 0.0 deadline = Deadline(ZERO_TIMEOUT) self.assertEqual("zero[0/0]", deadline.fullname()) self.assertTrue(deadline.is_expired())
def testDeadlineIsExpired(self, timeMock): timeMock.side_effect = [0, 0.4, 1.0, 1.000001] deadline = Deadline(ONE_TIMEOUT) self.assertFalse(deadline.is_expired()) self.assertTrue(deadline.is_expired()) self.assertTrue(deadline.is_expired())
def testDeadlineUpperBoundForRemainingTime(self, timeMock): timeMock.side_effect = [0, 0.4, 0.6] deadline = Deadline(ONE_TIMEOUT) self.assertAlmostEqual(0.5, deadline.remaining(upper_bound=0.50)) self.assertAlmostEqual(0.4, deadline.remaining(upper_bound=0.50))