def test_decode_str_field(self): """ Test for Field.str.decode """ self.assertEqual('hello', Field.string('test', 5).decode(bytearray(b'hello'))) self.assertEqual('', Field.string('test', 0).decode(bytearray(b''))) with self.assertRaises(ValueError): Field.string('test', 2).decode(bytearray(b'nope'))
def test_encode_str_field(self): """ Test for Field.str.encode """ self.assertEqual(bytearray(b''), Field.string('test', 0).encode('')) self.assertEqual(bytearray(b'hello'), Field.string('test', 5).encode('hello')) self.assertEqual(bytearray(b'worlds'), Field.string('test', 6).encode('worlds')) with self.assertRaises(ValueError): Field.string(bytearray(b'test'), 10).encode('nope')
def test_consume_output(self): """ Test for MasterCommandSpec.consume_output """ basic_action = MasterCommandSpec('BA', [], [ Field.string('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( bytearray(b'OK' + (b'\x00' * 11) + b'\r\n'), None) self.assertEqual((15, True), (bytes_consumed, done)) self.assertEqual('OK', result["response"]) # Full string with extra padding in the back (bytes_consumed, result, done) = basic_action.consume_output( bytearray(b'OK' + (b'\x00' * 11) + b'\r\nSome\x04Junk'), None) self.assertEqual((15, True), (bytes_consumed, done)) self.assertEqual('OK', result["response"]) # String in 2 pieces (bytes_consumed, result, done) = basic_action.consume_output(bytearray(b'OK' + (b'\x00' * 5)), None) self.assertEqual((7, False), (bytes_consumed, done)) self.assertEqual(bytearray(b'\x00' * 5), result.pending_bytes) (bytes_consumed, result, done) = basic_action.consume_output( bytearray((b'\x00' * 6) + b'\r\n'), result) self.assertEqual((8, True), (bytes_consumed, done)) self.assertEqual('OK', result["response"]) # String in 2 pieces with extra padding in back (bytes_consumed, result, done) = basic_action.consume_output(bytearray(b'OK' + (b'\x00' * 5)), None) self.assertEqual((7, False), (bytes_consumed, done)) self.assertEqual(bytearray(b'\x00' * 5), result.pending_bytes) (bytes_consumed, result, done) = basic_action.consume_output( bytearray((b'\x00' * 6) + b'\r\nWorld'), result) self.assertEqual((8, True), (bytes_consumed, done)) self.assertEqual('OK', result["response"]) # String in 3 pieces (bytes_consumed, result, done) = basic_action.consume_output(bytearray(b'OK' + (b'\x00' * 5)), None) self.assertEqual((7, False), (bytes_consumed, done)) self.assertEqual(bytearray(b'\x00' * 5), result.pending_bytes) (bytes_consumed, result, done) = basic_action.consume_output(bytearray(b'\x00' * 3), result) self.assertEqual((3, False), (bytes_consumed, done)) self.assertEqual(bytearray(b'\x00' * 8), result.pending_bytes) (bytes_consumed, result, done) = basic_action.consume_output(bytearray(b'\x00' * 3), result) self.assertEqual((3, False), (bytes_consumed, done)) self.assertEqual(bytearray(b''), result.pending_bytes) (bytes_consumed, result, done) = basic_action.consume_output(bytearray(b'\r\n'), result) self.assertEqual((2, True), (bytes_consumed, done)) self.assertEqual('OK', result["response"])