def test_decode_str_field(self): """ Test for Field.str.decode """ self.assertEquals('hello', Field.str("test", 5).decode('hello')) self.assertEquals('', Field.str("test", 0).decode('')) try: Field.str("test", 2).decode('nope') self.assertTrue(False) except ValueError: pass
def test_consume_output(self): """ Test for MasterCommandSpec.consume_output """ basic_action = MasterCommandSpec( "BA", [], [Field.str("response", 2), Field.padding(11), Field.lit("\r\n")]) # Simple case, full string without offset at once (bytes_consumed, result, done) = \ basic_action.consume_output("OK" + ('\x00' * 11) + '\r\n', None) self.assertEquals((15, True), (bytes_consumed, done)) self.assertEquals("OK", result["response"]) # Full string with extra padding in the back (bytes_consumed, result, done) = \ basic_action.consume_output("OK" + ('\x00' * 11) + '\r\nSome\x04Junk', None) self.assertEquals((15, True), (bytes_consumed, done)) self.assertEquals("OK", result["response"]) # String in 2 pieces (bytes_consumed, result, done) = \ basic_action.consume_output("OK" + ('\x00' * 5), None) self.assertEquals((7, False), (bytes_consumed, done)) self.assertEquals('\x00' * 5, result.pending_bytes) (bytes_consumed, result, done) = \ basic_action.consume_output(('\x00' * 6) + '\r\n', result) self.assertEquals((8, True), (bytes_consumed, done)) self.assertEquals("OK", result["response"]) # String in 2 pieces with extra padding in back (bytes_consumed, result, done) = \ basic_action.consume_output("OK" + ('\x00' * 5), None) self.assertEquals((7, False), (bytes_consumed, done)) self.assertEquals('\x00' * 5, result.pending_bytes) (bytes_consumed, result, done) = \ basic_action.consume_output(('\x00' * 6) + '\r\nWorld', result) self.assertEquals((8, True), (bytes_consumed, done)) self.assertEquals("OK", result["response"]) # String in 3 pieces (bytes_consumed, result, done) = \ basic_action.consume_output("OK" + ('\x00' * 5), None) self.assertEquals((7, False), (bytes_consumed, done)) self.assertEquals('\x00' * 5, result.pending_bytes) (bytes_consumed, result, done) = \ basic_action.consume_output(('\x00' * 3), result) self.assertEquals((3, False), (bytes_consumed, done)) self.assertEquals('\x00' * 8, result.pending_bytes) (bytes_consumed, result, done) = \ basic_action.consume_output(('\x00' * 3), result) self.assertEquals((3, False), (bytes_consumed, done)) self.assertEquals('', result.pending_bytes) (bytes_consumed, result, done) = \ basic_action.consume_output('\r\n', result) self.assertEquals((2, True), (bytes_consumed, done)) self.assertEquals("OK", result["response"])