Tests for the NetworkSocketAPI

Dependents:   BSDInterfaceTests ESP8266InterfaceTests LWIPInterfaceTests SpwfInterface_NSAPI_Tests ... more

Committer:
Brian Daniels
Date:
Wed Mar 02 16:16:25 2016 -0600
Revision:
3:8b595ee6219d
Parent:
1:796ba8b082b1
Adding socket tests

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Christopher Haster 1:796ba8b082b1 1 #!/usr/bin/env python
Brian Daniels 3:8b595ee6219d 2 import socket
Brian Daniels 3:8b595ee6219d 3 import signal
Brian Daniels 3:8b595ee6219d 4 import sys
Brian Daniels 3:8b595ee6219d 5
Brian Daniels 3:8b595ee6219d 6 runServer = True
Brian Daniels 3:8b595ee6219d 7
Brian Daniels 3:8b595ee6219d 8 def signal_handler(signal, frame):
Brian Daniels 3:8b595ee6219d 9 global runServer
Brian Daniels 3:8b595ee6219d 10
Brian Daniels 3:8b595ee6219d 11 print "Handling interrupt"
Brian Daniels 3:8b595ee6219d 12 runServer = False
Brian Daniels 3:8b595ee6219d 13
Brian Daniels 3:8b595ee6219d 14 def handle_recv(message) :
Brian Daniels 3:8b595ee6219d 15 if message == "{{start}}":
Brian Daniels 3:8b595ee6219d 16 return None
Brian Daniels 3:8b595ee6219d 17 else:
Brian Daniels 3:8b595ee6219d 18 return message
Brian Daniels 3:8b595ee6219d 19
Brian Daniels 3:8b595ee6219d 20
Brian Daniels 3:8b595ee6219d 21 def run_tcp_server(port):
Brian Daniels 3:8b595ee6219d 22 global runServer
Brian Daniels 3:8b595ee6219d 23
Brian Daniels 3:8b595ee6219d 24 host = 'localhost'
Brian Daniels 3:8b595ee6219d 25 backlog = 5
Brian Daniels 3:8b595ee6219d 26 size = 1024
Brian Daniels 3:8b595ee6219d 27 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Brian Daniels 3:8b595ee6219d 28 tcp_socket.settimeout(1.0)
Brian Daniels 3:8b595ee6219d 29 tcp_socket.bind((host,port))
Brian Daniels 3:8b595ee6219d 30 tcp_socket.listen(backlog)
Brian Daniels 3:8b595ee6219d 31
Brian Daniels 3:8b595ee6219d 32 while runServer:
Brian Daniels 3:8b595ee6219d 33 try:
Brian Daniels 3:8b595ee6219d 34 client, address = tcp_socket.accept()
Brian Daniels 3:8b595ee6219d 35 data = client.recv(size)
Brian Daniels 3:8b595ee6219d 36 if data:
Brian Daniels 3:8b595ee6219d 37 print "TCP DATA from %s: %s" % (address, data)
Brian Daniels 3:8b595ee6219d 38 message = handle_recv(data)
Brian Daniels 3:8b595ee6219d 39 if message:
Brian Daniels 3:8b595ee6219d 40 client.send(message)
Brian Daniels 3:8b595ee6219d 41 client.close()
Brian Daniels 3:8b595ee6219d 42 except socket.timeout:
Brian Daniels 3:8b595ee6219d 43 pass
Brian Daniels 3:8b595ee6219d 44 except IOError:
Brian Daniels 3:8b595ee6219d 45 pass
Christopher Haster 1:796ba8b082b1 46
Brian Daniels 3:8b595ee6219d 47
Brian Daniels 3:8b595ee6219d 48 def run_udp_server(port):
Brian Daniels 3:8b595ee6219d 49 global runServer
Brian Daniels 3:8b595ee6219d 50
Brian Daniels 3:8b595ee6219d 51 host = 'localhost'
Brian Daniels 3:8b595ee6219d 52 backlog = 5
Brian Daniels 3:8b595ee6219d 53 size = 1024
Brian Daniels 3:8b595ee6219d 54 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
Brian Daniels 3:8b595ee6219d 55 udp_socket.settimeout(1.0)
Brian Daniels 3:8b595ee6219d 56 udp_socket.bind((host,port))
Brian Daniels 3:8b595ee6219d 57
Christopher Haster 1:796ba8b082b1 58
Brian Daniels 3:8b595ee6219d 59 while runServer:
Brian Daniels 3:8b595ee6219d 60 try:
Brian Daniels 3:8b595ee6219d 61 data, address = udp_socket.recvfrom(size)
Brian Daniels 3:8b595ee6219d 62 if data:
Brian Daniels 3:8b595ee6219d 63 print "UDP DATA from %s: %s" % (addr, data)
Brian Daniels 3:8b595ee6219d 64 message = handle_recv(data)
Brian Daniels 3:8b595ee6219d 65 if message:
Brian Daniels 3:8b595ee6219d 66 udp_socket.sendto(message, address)
Brian Daniels 3:8b595ee6219d 67 except socket.timeout:
Brian Daniels 3:8b595ee6219d 68 pass
Brian Daniels 3:8b595ee6219d 69 except IOError:
Brian Daniels 3:8b595ee6219d 70 pass
Brian Daniels 3:8b595ee6219d 71
Brian Daniels 3:8b595ee6219d 72
Brian Daniels 3:8b595ee6219d 73 def main(arguments):
Brian Daniels 3:8b595ee6219d 74 global thread_stop_event
Brian Daniels 3:8b595ee6219d 75
Brian Daniels 3:8b595ee6219d 76 signal.signal(signal.SIGINT, signal_handler)
Brian Daniels 3:8b595ee6219d 77
Brian Daniels 3:8b595ee6219d 78 socket_type = arguments[0]
Brian Daniels 3:8b595ee6219d 79 port = int(arguments[1])
Brian Daniels 3:8b595ee6219d 80
Brian Daniels 3:8b595ee6219d 81 if socket_type == "TCP":
Brian Daniels 3:8b595ee6219d 82 run_tcp_server(port)
Brian Daniels 3:8b595ee6219d 83 elif socket_type == "UDP":
Brian Daniels 3:8b595ee6219d 84 run_udp_server(port)
Brian Daniels 3:8b595ee6219d 85 else:
Brian Daniels 3:8b595ee6219d 86 print "Invalid socket type, must be 'TCP' or 'UDP'"
Brian Daniels 3:8b595ee6219d 87 sys.exit(1)
Brian Daniels 3:8b595ee6219d 88
Brian Daniels 3:8b595ee6219d 89 sys.exit(0)
Brian Daniels 3:8b595ee6219d 90
Brian Daniels 3:8b595ee6219d 91 if __name__ == "__main__":
Brian Daniels 3:8b595ee6219d 92 main(sys.argv[1:])