mirror of https://github.com/python/cpython
Test of the socket module. The following functions and methods are
not currently tested (or even touched): # socket.fromfd() # sktobj.getsockopt() # sktobj.recvfrom() # sktobj.sendto() # sktobj.setblocking() # sktobj.setsockopt() # sktobj.shutdown()
This commit is contained in:
parent
eaa6e1102f
commit
cf3d4b5123
|
@ -0,0 +1,131 @@
|
|||
# Not tested:
|
||||
# socket.fromfd()
|
||||
# sktobj.getsockopt()
|
||||
# sktobj.recvfrom()
|
||||
# sktobj.sendto()
|
||||
# sktobj.setblocking()
|
||||
# sktobj.setsockopt()
|
||||
# sktobj.shutdown()
|
||||
|
||||
|
||||
from test_support import verbose
|
||||
import socket
|
||||
import os
|
||||
import time
|
||||
|
||||
def missing_ok(str):
|
||||
try:
|
||||
getattr(socket, str)
|
||||
except AttributeError:
|
||||
pass
|
||||
|
||||
print socket.error
|
||||
|
||||
print socket.AF_INET
|
||||
|
||||
print socket.SOCK_STREAM
|
||||
print socket.SOCK_DGRAM
|
||||
print socket.SOCK_RAW
|
||||
print socket.SOCK_RDM
|
||||
print socket.SOCK_SEQPACKET
|
||||
|
||||
for optional in ("AF_UNIX",
|
||||
|
||||
"SO_DEBUG", "SO_ACCEPTCONN", "SO_REUSEADDR", "SO_KEEPALIVE",
|
||||
"SO_DONTROUTE", "SO_BROADCAST", "SO_USELOOPBACK", "SO_LINGER",
|
||||
"SO_OOBINLINE", "SO_REUSEPORT", "SO_SNDBUF", "SO_RCVBUF",
|
||||
"SO_SNDLOWAT", "SO_RCVLOWAT", "SO_SNDTIMEO", "SO_RCVTIMEO",
|
||||
"SO_ERROR", "SO_TYPE", "SOMAXCONN",
|
||||
|
||||
"MSG_OOB", "MSG_PEEK", "MSG_DONTROUTE", "MSG_EOR",
|
||||
"MSG_TRUNC", "MSG_CTRUNC", "MSG_WAITALL", "MSG_BTAG",
|
||||
"MSG_ETAG",
|
||||
|
||||
"SOL_SOCKET",
|
||||
|
||||
"IPPROTO_IP", "IPPROTO_ICMP", "IPPROTO_IGMP",
|
||||
"IPPROTO_GGP", "IPPROTO_TCP", "IPPROTO_EGP",
|
||||
"IPPROTO_PUP", "IPPROTO_UDP", "IPPROTO_IDP",
|
||||
"IPPROTO_HELLO", "IPPROTO_ND", "IPPROTO_TP",
|
||||
"IPPROTO_XTP", "IPPROTO_EON", "IPPROTO_BIP",
|
||||
"IPPROTO_RAW", "IPPROTO_MAX",
|
||||
|
||||
"IPPORT_RESERVED", "IPPORT_USERRESERVED",
|
||||
|
||||
"INADDR_ANY", "INADDR_BROADCAST", "INADDR_LOOPBACK",
|
||||
"INADDR_UNSPEC_GROUP", "INADDR_ALLHOSTS_GROUP",
|
||||
"INADDR_MAX_LOCAL_GROUP", "INADDR_NONE",
|
||||
|
||||
"IP_OPTIONS", "IP_HDRINCL", "IP_TOS", "IP_TTL",
|
||||
"IP_RECVOPTS", "IP_RECVRETOPTS", "IP_RECVDSTADDR",
|
||||
"IP_RETOPTS", "IP_MULTICAST_IF", "IP_MULTICAST_TTL",
|
||||
"IP_MULTICAST_LOOP", "IP_ADD_MEMBERSHIP",
|
||||
"IP_DROP_MEMBERSHIP",
|
||||
):
|
||||
missing_ok(optional)
|
||||
|
||||
hostname = socket.gethostname()
|
||||
ip = socket.gethostbyname(hostname)
|
||||
hname, aliases, ipaddrs = socket.gethostbyaddr(ip)
|
||||
|
||||
if verbose:
|
||||
print hostname
|
||||
print ip
|
||||
print hname, aliases, ipaddrs
|
||||
|
||||
if hostname <> hname:
|
||||
print 'hostname mismatch'
|
||||
|
||||
print socket.getservbyname('telnet', 'tcp')
|
||||
try:
|
||||
socket.getservbyname('telnet', 'udp')
|
||||
except socket.error:
|
||||
pass
|
||||
|
||||
|
||||
try:
|
||||
PORT = 50007
|
||||
if os.fork():
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
s.bind(hostname, PORT)
|
||||
s.listen(1)
|
||||
if verbose:
|
||||
print 'parent accepting'
|
||||
conn, addr = s.accept()
|
||||
if verbose:
|
||||
print 'connected by', addr
|
||||
# couple of interesting tests while we've got a live socket
|
||||
f = conn.fileno()
|
||||
if verbose:
|
||||
print 'fileno:', f
|
||||
p = conn.getpeername()
|
||||
if verbose:
|
||||
print 'peer:', p
|
||||
n = conn.getsockname()
|
||||
if verbose:
|
||||
print 'sockname:', n
|
||||
f = conn.makefile()
|
||||
if verbose:
|
||||
print 'file obj:', f
|
||||
while 1:
|
||||
data = conn.recv(1024)
|
||||
if not data:
|
||||
break
|
||||
if verbose:
|
||||
print 'received:', data
|
||||
conn.send(data)
|
||||
conn.close()
|
||||
else:
|
||||
time.sleep(1)
|
||||
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
if verbose:
|
||||
print 'child connecting'
|
||||
s.connect(hostname, PORT)
|
||||
msg = 'socket test'
|
||||
s.send(msg)
|
||||
data = s.recv(1024)
|
||||
if msg <> data:
|
||||
print 'parent/client mismatch'
|
||||
s.close()
|
||||
except socket.error:
|
||||
pass
|
Loading…
Reference in New Issue