1#!/usr/bin/env python 2# 3# This file is part of pySerial - Cross platform serial port support for Python 4# (C) 2001-2015 Chris Liechti <[email protected]> 5# 6# SPDX-License-Identifier: BSD-3-Clause 7"""Some tests for the serial module. 8Part of pyserial (http://pyserial.sf.net) (C)2002-2003 [email protected] 9 10Intended to be run on different platforms, to ensure portability of 11the code. 12 13For all these tests a simple hardware is required. 14Loopback HW adapter: 15Shortcut these pin pairs: 16 TX <-> RX 17 RTS <-> CTS 18 DTR <-> DSR 19 20On a 9 pole DSUB these are the pins (2-3) (4-6) (7-8) 21""" 22 23import unittest 24import sys 25import serial 26 27# on which port should the tests be performed: 28PORT = 'loop://' 29BAUDRATE = 115200 30#~ BAUDRATE=9600 31 32if sys.version_info >= (3, 0): 33 bytes_0to255 = bytes(range(256)) 34else: 35 bytes_0to255 = ''.join([chr(x) for x in range(256)]) 36 37 38class TestHighLoad(unittest.TestCase): 39 """Test sending and receiving large amount of data""" 40 41 N = 16 42 #~ N = 1 43 44 def setUp(self): 45 self.s = serial.serial_for_url(PORT, BAUDRATE, timeout=10) 46 47 def tearDown(self): 48 self.s.close() 49 50 def test0_WriteReadLoopback(self): 51 """Send big strings, write/read order.""" 52 for i in range(self.N): 53 q = bytes_0to255 54 self.s.write(q) 55 self.assertEqual(self.s.read(len(q)), q) # expected same which was written before 56 self.assertEqual(self.s.inWaiting(), 0) # expected empty buffer after all sent chars are read 57 58 def test1_WriteWriteReadLoopback(self): 59 """Send big strings, multiple write one read.""" 60 q = bytes_0to255 61 for i in range(self.N): 62 self.s.write(q) 63 read = self.s.read(len(q) * self.N) 64 self.assertEqual(read, q * self.N, "expected what was written before. got {} bytes, expected {}".format(len(read), self.N * len(q))) 65 self.assertEqual(self.s.inWaiting(), 0) # "expected empty buffer after all sent chars are read") 66 67 68if __name__ == '__main__': 69 import sys 70 sys.stdout.write(__doc__) 71 if len(sys.argv) > 1: 72 PORT = sys.argv[1] 73 sys.stdout.write("Testing port: {!r}\n".format(PORT)) 74 sys.argv[1:] = ['-v'] 75 # When this module is executed from the command-line, it runs all its tests 76 unittest.main() 77