Example #1
0
    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'))
Example #2
0
    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')
Example #3
0
    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"])