Exemple #1
0
    def test_read_packet_parts(self):
        class MockPort(object):
            def __init__(self, packet):
                self._times = 0
                self._results = {3: packet[0:2],
                                 5: packet[2:4],
                                 7: packet[4:8],
                                 9: packet[8:]}

            def inWaiting(self):
                self._times += 1
                if self._times in self._results:
                    return len(self._results[self._times])

            def read(self, count):
                result = self._results[self._times]
                if len(result) != count:
                    raise Exception("Wrong count.")
                return result

        packet = make_response(1, 2, 3, 4, 5)
        buf = array.array('B')
        port = MockPort(packet)
        event = threading.Event()
        response = stentura._read_packet(port, event, buf, 1)
        self.assertSequenceEqual(packet, response)
Exemple #2
0
    def test_read_packet_parts(self):
        class MockPort(object):
            def __init__(self, packet):
                self._times = 0
                self._results = {
                    3: packet[0:2],
                    5: packet[2:4],
                    7: packet[4:8],
                    9: packet[8:]
                }

            def inWaiting(self):
                self._times += 1
                if self._times in self._results:
                    return len(self._results[self._times])

            def read(self, count):
                result = self._results[self._times]
                if len(result) != count:
                    raise Exception("Wrong count.")
                return result

        packet = make_response(1, 2, 3, 4, 5)
        buf = array.array('B')
        port = MockPort(packet)
        event = threading.Event()
        response = stentura._read_packet(port, event, buf, 1)
        self.assertSequenceEqual(packet, response)
Exemple #3
0
    def test_read_packet_simple(self):
        class MockPort(object):
            def __init__(self, packet):
                self._packet = packet

            def inWaiting(self):
                return len(self._packet)

            def read(self, count):
                return packet

        buf = array.array('B')
        for packet in [make_response(1, 2, 3, 4, 5),
                       make_response(1, 2, 3, 4, 5, "hello")]:
            port = MockPort(packet)
            response = stentura._read_packet(port, threading.Event(), buf, 1)
            self.assertSequenceEqual(response, packet)
    def test_read_packet_simple(self):
        class MockPort(object):
            def __init__(self, packet):
                self._packet = packet

            def inWaiting(self):
                return len(self._packet)

            def read(self, count):
                return packet

        buf = array.array('B')
        for packet in [make_response(1, 2, 3, 4, 5),
                       make_response(1, 2, 3, 4, 5, "hello")]:
            port = MockPort(packet)
            response = stentura._read_packet(port, threading.Event(), buf, 1)
            self.assertSequenceEqual(response, packet)
Exemple #5
0
    def test_read_packet_fail(self):
        class MockPort(object):
            def __init__(self, length1, length2=0, length=None, set1=False,
                         set2=False, wrong=False):
                self._length1 = length1
                self._length2 = length2
                self._set1 = set1
                self._set2 = set2
                self._read1 = False
                self._read2 = False
                self.event = threading.Event()
                self._wrong = wrong
                if not length:
                    length = length1 + length2
                self._data = [1, 0, length, 0] + ([0] * (length - 4))
                if wrong:
                    self._data.append(0)
                self._data = ''.join([chr(b) for b in self._data])

            def inWaiting(self):
                length = 0
                if not self._read1:
                    length = self._length1
                elif not self._read2:
                    length = self._length2
                if self._wrong:
                    length += 1
                return length

            def read(self, count):
                if not self._read1:
                    self._read1 = True
                    if self._set1:
                        self.event.set()
                    return buffer(self._data, 0, count)
                elif not self._read2:
                    self._read2 = True
                    if self._set2:
                        self.event.set()
                    return buffer(self._data, self._length1, count)
                raise Exception("Alread read data.")

        buf = array.array('B')

        with self.assertRaises(stentura._StopException):
            port = MockPort(3, set1=True)
            stentura._read_packet(port, port.event, buf, 1)

        with self.assertRaises(stentura._StopException):
            port = MockPort(6, 20, length=30, set2=True)
            stentura._read_packet(port, port.event, buf, 1)

        with self.assertRaises(stentura._TimeoutException):
            port = MockPort(3)
            stentura._read_packet(port, port.event, buf, 0.001)

        with self.assertRaises(stentura._TimeoutException):
            port = MockPort(6, 20, length=30)
            stentura._read_packet(port, port.event, buf, 0.001)

        with self.assertRaises(stentura._ProtocolViolationException):
            port = MockPort(18, wrong=True)
            stentura._read_packet(port, port.event, buf, 1)
Exemple #6
0
    def test_read_packet_fail(self):
        class MockPort(object):
            def __init__(self,
                         length1,
                         length2=0,
                         length=None,
                         set1=False,
                         set2=False,
                         wrong=False):
                self._length1 = length1
                self._length2 = length2
                self._set1 = set1
                self._set2 = set2
                self._read1 = False
                self._read2 = False
                self.event = threading.Event()
                self._wrong = wrong
                if not length:
                    length = length1 + length2
                self._data = [1, 0, length, 0] + ([0] * (length - 4))
                if wrong:
                    self._data.append(0)
                self._data = ''.join([chr(b) for b in self._data])

            def inWaiting(self):
                length = 0
                if not self._read1:
                    length = self._length1
                elif not self._read2:
                    length = self._length2
                if self._wrong:
                    length += 1
                return length

            def read(self, count):
                if not self._read1:
                    self._read1 = True
                    if self._set1:
                        self.event.set()
                    return buffer(self._data, 0, count)
                elif not self._read2:
                    self._read2 = True
                    if self._set2:
                        self.event.set()
                    return buffer(self._data, self._length1, count)
                raise Exception("Alread read data.")

        buf = array.array('B')

        with self.assertRaises(stentura._StopException):
            port = MockPort(3, set1=True)
            stentura._read_packet(port, port.event, buf, 1)

        with self.assertRaises(stentura._StopException):
            port = MockPort(6, 20, length=30, set2=True)
            stentura._read_packet(port, port.event, buf, 1)

        with self.assertRaises(stentura._TimeoutException):
            port = MockPort(3)
            stentura._read_packet(port, port.event, buf, 0.001)

        with self.assertRaises(stentura._TimeoutException):
            port = MockPort(6, 20, length=30)
            stentura._read_packet(port, port.event, buf, 0.001)

        with self.assertRaises(stentura._ProtocolViolationException):
            port = MockPort(18, wrong=True)
            stentura._read_packet(port, port.event, buf, 1)