From f86a0ba484b65471fddc6dc0eae9b42ce7371e73 Mon Sep 17 00:00:00 2001 From: David Wehr <dawehr@iastate.edu> Date: Sat, 11 Feb 2017 17:53:40 -0600 Subject: [PATCH] Added test scripts for testing WiFi and UART bridge. --- wifi_bridge/test_scripts/serial-tcp.py | 62 +++++++++++++++++++++++++ wifi_bridge/test_scripts/tcp-serial.py | 46 ++++++++++++++++++ wifi_bridge/test_scripts/tcp_timer.py | 64 ++++++++++++++++++++++++++ 3 files changed, 172 insertions(+) create mode 100644 wifi_bridge/test_scripts/serial-tcp.py create mode 100644 wifi_bridge/test_scripts/tcp-serial.py create mode 100644 wifi_bridge/test_scripts/tcp_timer.py diff --git a/wifi_bridge/test_scripts/serial-tcp.py b/wifi_bridge/test_scripts/serial-tcp.py new file mode 100644 index 000000000..9e81d02bd --- /dev/null +++ b/wifi_bridge/test_scripts/serial-tcp.py @@ -0,0 +1,62 @@ +import socket +import serial + +TCP_IP = "192.168.1.1" +TCP_PORT = 8080 + +msg_size = 1024 +message = bytes(i % 256 for i in range(msg_size)) +dropped = True + +ser = serial.Serial('COM6', 921600, timeout=0.01) +ser.reset_input_buffer() +if ser.in_waiting: + print("that doesn't work") + +while True: + if dropped: + attempts = 0 + while attempts < 5: + print("Trying to connect") + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(2) + try: + sock.connect((TCP_IP, TCP_PORT)) + dropped = False + break + except: + attempts += 1 + if dropped: + print("Failed to connect") + break + print("connected") + + try: + print("Sending {} bytes".format(len(message))) + ser.write(message) + except Exception as e: + print("Failed to send all data") + continue + + received = [] + while len(received) < msg_size: + try: + just_received = sock.recv(msg_size - len(received)) + except Exception as e: + print("Exception when receiving: ", e) + break + if len(just_received) == 0: + print("Your socket broke") + break + received.extend(just_received) + + if len(received) != msg_size: + print("\tError: Received {} bytes".format(len(received))) + elif bytes(received) != message: + print("\tError: Received data does not match") + else: + print("\tYou're a winner!") + + debug_msg = ser.read(4096) + if len(debug_msg) != 0: + print(debug_msg.decode()) diff --git a/wifi_bridge/test_scripts/tcp-serial.py b/wifi_bridge/test_scripts/tcp-serial.py new file mode 100644 index 000000000..8c2713096 --- /dev/null +++ b/wifi_bridge/test_scripts/tcp-serial.py @@ -0,0 +1,46 @@ +import socket +import serial + +TCP_IP = "192.168.1.1" +TCP_PORT = 8080 + +msg_size = 1024*100 +message = bytes(i % 256 for i in range(msg_size)) +dropped = True + +ser = serial.Serial('COM6', 921600, timeout=5) +ser.reset_input_buffer() +if ser.in_waiting: + print("that doesn't work") + +while True: + if dropped: + attempts = 0 + while attempts < 5: + print("Trying to connect") + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(2) + try: + sock.connect((TCP_IP, TCP_PORT)) + dropped = False + break + except: + attempts += 1 + if dropped: + print("Failed to connect") + break + print("connected") + + try: + print("Sending {} bytes".format(len(message))) + sock.sendall(message) + except Exception as e: + print("Failed to send all data") + continue + received = ser.read(msg_size) + if len(received) != msg_size: + print("\tError: Received {} bytes".format(len(received))) + elif received != message: + print("\tError: Received data does not match") + else: + print("\tYou're a winner!") diff --git a/wifi_bridge/test_scripts/tcp_timer.py b/wifi_bridge/test_scripts/tcp_timer.py new file mode 100644 index 000000000..29bcbe2df --- /dev/null +++ b/wifi_bridge/test_scripts/tcp_timer.py @@ -0,0 +1,64 @@ +import socket +import time +import csv + +TCP_IP = "192.168.1.1" +# UDP_IP = "127.0.0.1" +TCP_PORT = 8080 + +# sock.bind(('', UDP_PORT)) + +message = bytes(range(32)) +times_full = [] +times_network = [] +times = [0.0]*100 +dropped = True +response = bytes("initial", 'ASCII') +addr = "initial" +recvd_data = [] +for i in range(100): + if dropped: + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.settimeout(2) + sock.connect((TCP_IP, TCP_PORT)) + dropped = False + send_msg = list(message) + send_msg[0] = i + send_msg = bytes(send_msg) + + send_time = time.clock() + times[i] = send_time + # send_time = time.clock() + sock.send(send_msg) + try: + response = sock.recv(1024) + recvd_data.extend(response) + except: + print("timed out") + dropped = True + if len(recvd_data) >= 32: + end_time = time.clock() + response = bytes(recvd_data[0:32]) + recvd_data = recvd_data[32:] + msg_id = int(response[0]) + latency = end_time - times[msg_id] + # serial_time = int.from_bytes(response[0:4], byteorder='big') / 1000 + serial_time = 0 + # times_full.append(1000 * (end_time - send_time) - 0) + times_full.append(1000 * latency) + times_network.append(1000 * (end_time - send_time) - serial_time) + print("received " + str(response) + " in " + str(times_full[-1]) + " from " + str(addr)) + time.sleep(0.1) + +# with open("tcp_dist.csv", 'w', newline='') as f: +# writer = csv.writer(f) +# for time in times_network: +# time = time + 2.6 +# writer.writerow([time]) + +for time in [times_full, times_network]: + print("lowest: " + str(min(time))) + print("highest: " + str(max(time))) + print("median: " + str(sorted(time)[int(len(time) / 2)])) + print("average; " + str(sum(time) / len(time))) + -- GitLab