blob: 56c7fb16cbacc8ef0c557d6131b8b9ddb06985e6 [file] [log] [blame]
Barry Warsawcf3d4b51997-01-03 20:03:32 +00001# Not tested:
Guido van Rossum41360a41998-03-26 19:42:58 +00002# socket.fromfd()
3# sktobj.getsockopt()
4# sktobj.recvfrom()
5# sktobj.sendto()
6# sktobj.setblocking()
7# sktobj.setsockopt()
8# sktobj.shutdown()
Barry Warsawcf3d4b51997-01-03 20:03:32 +00009
10
Fredrik Lundhf7850422001-01-17 21:51:36 +000011from test_support import verbose, TestFailed
Barry Warsawcf3d4b51997-01-03 20:03:32 +000012import socket
13import os
14import time
15
16def missing_ok(str):
17 try:
Guido van Rossum41360a41998-03-26 19:42:58 +000018 getattr(socket, str)
Barry Warsawcf3d4b51997-01-03 20:03:32 +000019 except AttributeError:
Guido van Rossum41360a41998-03-26 19:42:58 +000020 pass
Barry Warsawcf3d4b51997-01-03 20:03:32 +000021
Guido van Rossuma008fa51997-10-01 04:39:05 +000022try: raise socket.error
23except socket.error: print "socket.error"
Barry Warsawcf3d4b51997-01-03 20:03:32 +000024
Guido van Rossumf518d5e1997-05-09 01:54:45 +000025socket.AF_INET
Barry Warsawcf3d4b51997-01-03 20:03:32 +000026
Guido van Rossumf518d5e1997-05-09 01:54:45 +000027socket.SOCK_STREAM
28socket.SOCK_DGRAM
29socket.SOCK_RAW
30socket.SOCK_RDM
31socket.SOCK_SEQPACKET
Barry Warsawcf3d4b51997-01-03 20:03:32 +000032
33for optional in ("AF_UNIX",
34
Guido van Rossum41360a41998-03-26 19:42:58 +000035 "SO_DEBUG", "SO_ACCEPTCONN", "SO_REUSEADDR", "SO_KEEPALIVE",
36 "SO_DONTROUTE", "SO_BROADCAST", "SO_USELOOPBACK", "SO_LINGER",
37 "SO_OOBINLINE", "SO_REUSEPORT", "SO_SNDBUF", "SO_RCVBUF",
38 "SO_SNDLOWAT", "SO_RCVLOWAT", "SO_SNDTIMEO", "SO_RCVTIMEO",
39 "SO_ERROR", "SO_TYPE", "SOMAXCONN",
Barry Warsawcf3d4b51997-01-03 20:03:32 +000040
Guido van Rossum41360a41998-03-26 19:42:58 +000041 "MSG_OOB", "MSG_PEEK", "MSG_DONTROUTE", "MSG_EOR",
42 "MSG_TRUNC", "MSG_CTRUNC", "MSG_WAITALL", "MSG_BTAG",
43 "MSG_ETAG",
Barry Warsawcf3d4b51997-01-03 20:03:32 +000044
Guido van Rossum41360a41998-03-26 19:42:58 +000045 "SOL_SOCKET",
Barry Warsawcf3d4b51997-01-03 20:03:32 +000046
Guido van Rossum41360a41998-03-26 19:42:58 +000047 "IPPROTO_IP", "IPPROTO_ICMP", "IPPROTO_IGMP",
48 "IPPROTO_GGP", "IPPROTO_TCP", "IPPROTO_EGP",
49 "IPPROTO_PUP", "IPPROTO_UDP", "IPPROTO_IDP",
50 "IPPROTO_HELLO", "IPPROTO_ND", "IPPROTO_TP",
51 "IPPROTO_XTP", "IPPROTO_EON", "IPPROTO_BIP",
52 "IPPROTO_RAW", "IPPROTO_MAX",
Barry Warsawcf3d4b51997-01-03 20:03:32 +000053
Guido van Rossum41360a41998-03-26 19:42:58 +000054 "IPPORT_RESERVED", "IPPORT_USERRESERVED",
Barry Warsawcf3d4b51997-01-03 20:03:32 +000055
Guido van Rossum41360a41998-03-26 19:42:58 +000056 "INADDR_ANY", "INADDR_BROADCAST", "INADDR_LOOPBACK",
57 "INADDR_UNSPEC_GROUP", "INADDR_ALLHOSTS_GROUP",
58 "INADDR_MAX_LOCAL_GROUP", "INADDR_NONE",
Barry Warsawcf3d4b51997-01-03 20:03:32 +000059
Guido van Rossum41360a41998-03-26 19:42:58 +000060 "IP_OPTIONS", "IP_HDRINCL", "IP_TOS", "IP_TTL",
61 "IP_RECVOPTS", "IP_RECVRETOPTS", "IP_RECVDSTADDR",
62 "IP_RETOPTS", "IP_MULTICAST_IF", "IP_MULTICAST_TTL",
63 "IP_MULTICAST_LOOP", "IP_ADD_MEMBERSHIP",
64 "IP_DROP_MEMBERSHIP",
65 ):
Barry Warsawcf3d4b51997-01-03 20:03:32 +000066 missing_ok(optional)
67
Fred Drakecf3527b1997-06-03 17:58:31 +000068socktype = socket.SocketType
Barry Warsawcf3d4b51997-01-03 20:03:32 +000069hostname = socket.gethostname()
70ip = socket.gethostbyname(hostname)
71hname, aliases, ipaddrs = socket.gethostbyaddr(ip)
Barry Warsawdbfb8d41997-01-13 19:35:39 +000072all_host_names = [hname] + aliases
Barry Warsawcf3d4b51997-01-03 20:03:32 +000073
74if verbose:
75 print hostname
76 print ip
77 print hname, aliases, ipaddrs
Barry Warsawdbfb8d41997-01-13 19:35:39 +000078 print all_host_names
Barry Warsawcf3d4b51997-01-03 20:03:32 +000079
Barry Warsawdbfb8d41997-01-13 19:35:39 +000080for name in all_host_names:
Eric S. Raymond83ff7492001-02-09 12:03:45 +000081 if name.find('.'):
Guido van Rossum41360a41998-03-26 19:42:58 +000082 break
Barry Warsawdbfb8d41997-01-13 19:35:39 +000083else:
84 print 'FQDN not found'
Barry Warsawcf3d4b51997-01-03 20:03:32 +000085
Barry Warsaw6870bba2001-03-23 17:40:16 +000086if hasattr(socket, 'getservbyname'):
87 print socket.getservbyname('telnet', 'tcp')
88 try:
89 socket.getservbyname('telnet', 'udp')
90 except socket.error:
91 pass
Barry Warsawcf3d4b51997-01-03 20:03:32 +000092
Finn Bockada19832001-12-09 08:57:46 +000093import sys
94if not sys.platform.startswith('java'):
95 try:
96 # On some versions, this loses a reference
97 orig = sys.getrefcount(__name__)
98 socket.getnameinfo(__name__,0)
99 except SystemError:
100 if sys.getrefcount(__name__) <> orig:
101 raise TestFailed,"socket.getnameinfo loses a reference"
Martin v. Löwis06b1d212001-11-02 23:34:52 +0000102
103try:
104 # On some versions, this crashes the interpreter.
105 socket.getnameinfo(('x', 0, 0, 0), 0)
Barry Warsaw42793462001-11-09 20:37:43 +0000106except socket.error:
Martin v. Löwis06b1d212001-11-02 23:34:52 +0000107 pass
Barry Warsawcf3d4b51997-01-03 20:03:32 +0000108
Guido van Rossum2b4d2801997-05-14 21:12:51 +0000109canfork = hasattr(os, 'fork')
Barry Warsawcf3d4b51997-01-03 20:03:32 +0000110try:
111 PORT = 50007
Guido van Rossum67f7a382002-06-06 21:08:16 +0000112 msg = 'socket test\n'
Guido van Rossum2b4d2801997-05-14 21:12:51 +0000113 if not canfork or os.fork():
Guido van Rossum41360a41998-03-26 19:42:58 +0000114 # parent is server
115 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Guido van Rossum1bfdc782000-06-29 17:00:54 +0000116 s.bind(("127.0.0.1", PORT))
Guido van Rossum41360a41998-03-26 19:42:58 +0000117 s.listen(1)
118 if verbose:
119 print 'parent accepting'
120 if canfork:
121 conn, addr = s.accept()
122 if verbose:
123 print 'connected by', addr
124 # couple of interesting tests while we've got a live socket
125 f = conn.fileno()
126 if verbose:
127 print 'fileno:', f
128 p = conn.getpeername()
129 if verbose:
130 print 'peer:', p
131 n = conn.getsockname()
132 if verbose:
133 print 'sockname:', n
134 f = conn.makefile()
135 if verbose:
136 print 'file obj:', f
Guido van Rossum67f7a382002-06-06 21:08:16 +0000137 data = conn.recv(1024)
138 if verbose:
139 print 'received:', data
140 conn.sendall(data)
141
142 # Perform a few tests on the windows file object
143 if verbose:
144 print "Staring _fileobject tests..."
145 f = socket._fileobject (conn, 'rb', 8192)
146 first_seg = f.read(7)
147 second_seg = f.read(5)
148 if not first_seg == 'socket ' or not second_seg == 'test\n':
149 print "Error performing read with the python _fileobject class"
150 os._exit (1)
151 elif verbose:
152 print "_fileobject buffered read works"
153 f.write (data)
154 f.flush ()
155
156 buf = ''
Guido van Rossum41360a41998-03-26 19:42:58 +0000157 while 1:
Guido van Rossum67f7a382002-06-06 21:08:16 +0000158 char = f.read(1)
159 if not char:
160 print "Error performing unbuffered read with the python ", \
161 "_fileobject class"
162 os._exit (1)
163 buf += char
164 if buf == msg:
165 if verbose:
166 print "__fileobject unbuffered read works"
Guido van Rossum41360a41998-03-26 19:42:58 +0000167 break
Guido van Rossum67f7a382002-06-06 21:08:16 +0000168 if verbose:
169 # If we got this far, write() must work as well
170 print "__fileobject write works"
171 f.write(buf)
172 f.flush()
173
174 line = f.readline()
175 if not line == msg:
176 print "Error perferming readline with the python _fileobject class"
177 os._exit (1)
178 f.write(line)
179 f.flush()
180 if verbose:
181 print "__fileobject readline works"
182
Guido van Rossum41360a41998-03-26 19:42:58 +0000183 conn.close()
Barry Warsawcf3d4b51997-01-03 20:03:32 +0000184 else:
Guido van Rossum41360a41998-03-26 19:42:58 +0000185 try:
186 # child is client
187 time.sleep(5)
188 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
189 if verbose:
190 print 'child connecting'
Guido van Rossum1bfdc782000-06-29 17:00:54 +0000191 s.connect(("127.0.0.1", PORT))
Guido van Rossum67f7a382002-06-06 21:08:16 +0000192
193 iteration = 0
194 while 1:
195 s.send(msg)
196 data = s.recv(12)
197 if not data:
198 break
199 if msg != data:
200 print "parent/client mismatch. Failed in %s iteration. Received: [%s]" \
201 %(iteration, data)
202 time.sleep (1)
203 iteration += 1
Guido van Rossum41360a41998-03-26 19:42:58 +0000204 s.close()
205 finally:
206 os._exit(1)
Guido van Rossum2b4d2801997-05-14 21:12:51 +0000207except socket.error, msg:
208 raise TestFailed, msg