Hello community, here is the log from the commit of package python-PySocks for openSUSE:Factory checked in at 2017-11-10 14:41:12 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-PySocks (Old) and /work/SRC/openSUSE:Factory/.python-PySocks.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-PySocks" Fri Nov 10 14:41:12 2017 rev:3 rq:539303 version:1.6.7 Changes: -------- --- /work/SRC/openSUSE:Factory/python-PySocks/python-PySocks.changes 2017-04-20 20:49:00.856387006 +0200 +++ /work/SRC/openSUSE:Factory/.python-PySocks.new/python-PySocks.changes 2017-11-10 14:41:49.361868265 +0100 @@ -1,0 +2,11 @@ +Sat Nov 4 02:04:50 UTC 2017 - a...@gmx.de + +- specfile: + * update copyright year + +- update to version 1.6.7: + * Make SocksiPy legacy functions kwarg-compatible. See issue #71. + * Use setuptools in setup.py to support wheel. See issue #73. + * Test and logging enhancements + +------------------------------------------------------------------- Old: ---- PySocks-1.6.6.tar.gz New: ---- PySocks-1.6.7.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-PySocks.spec ++++++ --- /var/tmp/diff_new_pack.Z9RRVp/_old 2017-11-10 14:41:50.601823444 +0100 +++ /var/tmp/diff_new_pack.Z9RRVp/_new 2017-11-10 14:41:50.601823444 +0100 @@ -20,7 +20,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define oldpython python Name: python-PySocks -Version: 1.6.6 +Version: 1.6.7 Release: 0 Summary: A Python SOCKS client module License: BSD-3-Clause ++++++ PySocks-1.6.6.tar.gz -> PySocks-1.6.7.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PySocks-1.6.6/MANIFEST.in new/PySocks-1.6.7/MANIFEST.in --- old/PySocks-1.6.6/MANIFEST.in 1970-01-01 01:00:00.000000000 +0100 +++ new/PySocks-1.6.7/MANIFEST.in 2016-05-21 23:47:19.000000000 +0200 @@ -0,0 +1,2 @@ +include README.md LICENSE +recursive-include test * diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PySocks-1.6.6/PKG-INFO new/PySocks-1.6.7/PKG-INFO --- old/PySocks-1.6.6/PKG-INFO 2017-01-30 05:00:25.000000000 +0100 +++ new/PySocks-1.6.7/PKG-INFO 2017-03-23 05:11:52.000000000 +0100 @@ -1,6 +1,6 @@ Metadata-Version: 1.0 Name: PySocks -Version: 1.6.6 +Version: 1.6.7 Summary: A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information. Home-page: https://github.com/Anorov/PySocks Author: Anorov diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PySocks-1.6.6/PySocks.egg-info/PKG-INFO new/PySocks-1.6.7/PySocks.egg-info/PKG-INFO --- old/PySocks-1.6.6/PySocks.egg-info/PKG-INFO 1970-01-01 01:00:00.000000000 +0100 +++ new/PySocks-1.6.7/PySocks.egg-info/PKG-INFO 2017-03-23 05:11:51.000000000 +0100 @@ -0,0 +1,11 @@ +Metadata-Version: 1.0 +Name: PySocks +Version: 1.6.7 +Summary: A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information. +Home-page: https://github.com/Anorov/PySocks +Author: Anorov +Author-email: anorov.vor...@gmail.com +License: BSD +Description: UNKNOWN +Keywords: socks,proxy +Platform: UNKNOWN diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PySocks-1.6.6/PySocks.egg-info/SOURCES.txt new/PySocks-1.6.7/PySocks.egg-info/SOURCES.txt --- old/PySocks-1.6.6/PySocks.egg-info/SOURCES.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/PySocks-1.6.7/PySocks.egg-info/SOURCES.txt 2017-03-23 05:11:52.000000000 +0100 @@ -0,0 +1,15 @@ +LICENSE +MANIFEST.in +README.md +setup.py +socks.py +sockshandler.py +PySocks.egg-info/PKG-INFO +PySocks.egg-info/SOURCES.txt +PySocks.egg-info/dependency_links.txt +PySocks.egg-info/top_level.txt +test/__init__.py +test/test_pysocks.py +test/util.py +test/bin/3proxy +test/bin/3proxy.license \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PySocks-1.6.6/PySocks.egg-info/dependency_links.txt new/PySocks-1.6.7/PySocks.egg-info/dependency_links.txt --- old/PySocks-1.6.6/PySocks.egg-info/dependency_links.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/PySocks-1.6.7/PySocks.egg-info/dependency_links.txt 2017-03-23 05:11:51.000000000 +0100 @@ -0,0 +1 @@ + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PySocks-1.6.6/PySocks.egg-info/top_level.txt new/PySocks-1.6.7/PySocks.egg-info/top_level.txt --- old/PySocks-1.6.6/PySocks.egg-info/top_level.txt 1970-01-01 01:00:00.000000000 +0100 +++ new/PySocks-1.6.7/PySocks.egg-info/top_level.txt 2017-03-23 05:11:51.000000000 +0100 @@ -0,0 +1,2 @@ +socks +sockshandler diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PySocks-1.6.6/setup.cfg new/PySocks-1.6.7/setup.cfg --- old/PySocks-1.6.6/setup.cfg 1970-01-01 01:00:00.000000000 +0100 +++ new/PySocks-1.6.7/setup.cfg 2017-03-23 05:11:52.000000000 +0100 @@ -0,0 +1,5 @@ +[egg_info] +tag_date = 0 +tag_svn_revision = 0 +tag_build = + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PySocks-1.6.6/setup.py new/PySocks-1.6.7/setup.py --- old/PySocks-1.6.6/setup.py 2017-01-30 04:44:46.000000000 +0100 +++ new/PySocks-1.6.7/setup.py 2017-03-23 05:08:58.000000000 +0100 @@ -1,7 +1,7 @@ #!/usr/bin/env python -from distutils.core import setup +from setuptools import setup -VERSION = "1.6.6" +VERSION = "1.6.7" setup( name = "PySocks", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PySocks-1.6.6/socks.py new/PySocks-1.6.7/socks.py --- old/PySocks-1.6.6/socks.py 2017-01-30 04:44:36.000000000 +0100 +++ new/PySocks-1.6.7/socks.py 2017-03-23 05:08:58.000000000 +0100 @@ -51,7 +51,7 @@ -Various small bug fixes """ -__version__ = "1.6.6" +__version__ = "1.6.7" import socket import struct @@ -60,6 +60,8 @@ from os import SEEK_CUR import os import sys +import functools +import logging from collections import Callable from base64 import b64encode @@ -70,6 +72,8 @@ except ImportError: raise ImportError("To run PySocks on Windows you must install win_inet_pton") +log = logging.getLogger(__name__) + PROXY_TYPE_SOCKS4 = SOCKS4 = 1 PROXY_TYPE_SOCKS5 = SOCKS5 = 2 PROXY_TYPE_HTTP = HTTP = 3 @@ -79,6 +83,25 @@ _orgsocket = _orig_socket = socket.socket + +def set_self_blocking(function): + + @functools.wraps(function) + def wrapper(*args, **kwargs): + self = args[0] + try: + _is_blocking = self.gettimeout() + if _is_blocking == 0: + self.setblocking(True) + return function(*args, **kwargs) + except Exception as e: + raise + finally: + # set orgin blcoking + if _is_blocking == 0: + self.setblocking(False) + return wrapper + class ProxyError(IOError): """ socket_err contains original socket.error exception. @@ -131,7 +154,10 @@ username.encode() if username else None, password.encode() if password else None) -setdefaultproxy = set_default_proxy +def setdefaultproxy(*args, **kwargs): + if 'proxytype' in kwargs: + kwargs['proxy_type'] = kwargs.pop('proxytype') + return set_default_proxy(*args, **kwargs) def get_default_proxy(): """ @@ -256,7 +282,7 @@ msg = "Socket type must be stream or datagram, not {!r}" raise ValueError(msg.format(type)) - _BaseSocket.__init__(self, family, type, proto, *args, **kwargs) + super(socksocket, self).__init__(family, type, proto, *args, **kwargs) self._proxyconn = None # TCP connection to keep UDP relay alive if self.default_proxy: @@ -286,7 +312,7 @@ try: # test if we're connected, if so apply timeout peer = self.get_proxy_peername() - _BaseSocket.settimeout(self, self._timeout) + super(socksocket, self).settimeout(self._timeout) except socket.error: pass @@ -321,7 +347,10 @@ username.encode() if username else None, password.encode() if password else None) - setproxy = set_proxy + def setproxy(self, *args, **kwargs): + if 'proxytype' in kwargs: + kwargs['proxy_type'] = kwargs.pop('proxytype') + return self.set_proxy(*args, **kwargs) def bind(self, *pos, **kw): """ @@ -337,7 +366,7 @@ if proxy_type != SOCKS5: msg = "UDP only supported by SOCKS5 proxy type" raise socket.error(EOPNOTSUPP, msg) - _BaseSocket.bind(self, *pos, **kw) + super(socksocket, self).bind(*pos, **kw) # Need to specify actual local port because # some relays drop packets if a port of zero is specified. @@ -356,13 +385,13 @@ # but some proxies return a private IP address (10.x.y.z) host, _ = proxy _, port = relay - _BaseSocket.connect(self, (host, port)) - _BaseSocket.settimeout(self, self._timeout) + super(socksocket, self).connect((host, port)) + super(socksocket, self).settimeout(self._timeout) self.proxy_sockname = ("0.0.0.0", 0) # Unknown def sendto(self, bytes, *args, **kwargs): if self.type != socket.SOCK_DGRAM: - return _BaseSocket.sendto(self, bytes, *args, **kwargs) + return super(socksocket, self).sendto(bytes, *args, **kwargs) if not self._proxyconn: self.bind(("", 0)) @@ -376,22 +405,22 @@ header.write(STANDALONE) self._write_SOCKS5_address(address, header) - sent = _BaseSocket.send(self, header.getvalue() + bytes, *flags, **kwargs) + sent = super(socksocket, self).send(header.getvalue() + bytes, *flags, **kwargs) return sent - header.tell() def send(self, bytes, flags=0, **kwargs): if self.type == socket.SOCK_DGRAM: return self.sendto(bytes, flags, self.proxy_peername, **kwargs) else: - return _BaseSocket.send(self, bytes, flags, **kwargs) + return super(socksocket, self).send(bytes, flags, **kwargs) def recvfrom(self, bufsize, flags=0): if self.type != socket.SOCK_DGRAM: - return _BaseSocket.recvfrom(self, bufsize, flags) + return super(socksocket, self).recvfrom(bufsize, flags) if not self._proxyconn: self.bind(("", 0)) - buf = BytesIO(_BaseSocket.recv(self, bufsize + 1024, flags)) + buf = BytesIO(super(socksocket, self).recv(bufsize + 1024, flags)) buf.seek(2, SEEK_CUR) frag = buf.read(1) if ord(frag): @@ -412,7 +441,7 @@ def close(self): if self._proxyconn: self._proxyconn.close() - return _BaseSocket.close(self) + return super(socksocket, self).close() def get_proxy_sockname(self): """ @@ -426,7 +455,7 @@ """ Returns the IP and port number of the proxy. """ - return _BaseSocket.getpeername(self) + return super(socksocket, self).getpeername() getproxypeername = get_proxy_peername @@ -525,7 +554,7 @@ # Get the bound address/port bnd = self._read_SOCKS5_address(reader) - _BaseSocket.settimeout(self, self._timeout) + super(socksocket, self).settimeout(self._timeout) return (resolved, bnd) finally: reader.close() @@ -707,7 +736,7 @@ HTTP: _negotiate_HTTP } - + @set_self_blocking def connect(self, dest_pair): """ Connects to the specified destination through a proxy. @@ -720,7 +749,7 @@ # Probably IPv6, not supported -- raise an error, and hope # Happy Eyeballs (RFC6555) makes sure at least the IPv4 # connection works... - raise socket.error("PySocks doesn't support IPv6") + raise socket.error("PySocks doesn't support IPv6: %s" % str(dest_pair)) dest_addr, dest_port = dest_pair @@ -749,20 +778,20 @@ # We set the timeout here so that we don't hang in connection or during # negotiation. - _BaseSocket.settimeout(self, self._timeout) + super(socksocket, self).settimeout(self._timeout) if proxy_type is None: # Treat like regular socket object self.proxy_peername = dest_pair - _BaseSocket.settimeout(self, self._timeout) - _BaseSocket.connect(self, (dest_addr, dest_port)) + super(socksocket, self).settimeout(self._timeout) + super(socksocket, self).connect((dest_addr, dest_port)) return proxy_addr = self._proxy_addr() try: # Initial connection to proxy server. - _BaseSocket.connect(self, proxy_addr) + super(socksocket, self).connect(proxy_addr) except socket.error as error: # Error while connecting to proxy @@ -773,6 +802,7 @@ msg = "Error connecting to {0} proxy {1}".format(printable_type, proxy_server) + log.debug("%s due to: %s", msg, error) raise ProxyConnectionError(msg, error) else: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PySocks-1.6.6/test/config.py new/PySocks-1.6.7/test/config.py --- old/PySocks-1.6.6/test/config.py 2017-01-30 04:43:48.000000000 +0100 +++ new/PySocks-1.6.7/test/config.py 1970-01-01 01:00:00.000000000 +0100 @@ -1,8 +0,0 @@ -TEST_SERVER_HOST = 'localhost' -TEST_SERVER_HOST_IP = '127.0.0.1' -TEST_SERVER_PORT = 7777 -TEST_SERVER_EXTRA_PORT = 7776 -PROXY_HOST_IP = '127.0.0.2' -HTTP_PROXY_PORT = 7775 -SOCKS4_PROXY_PORT = 7774 -SOCKS5_PROXY_PORT = 7773 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/PySocks-1.6.6/test/test_pysocks.py new/PySocks-1.6.7/test/test_pysocks.py --- old/PySocks-1.6.6/test/test_pysocks.py 2017-01-30 04:43:48.000000000 +0100 +++ new/PySocks-1.6.7/test/test_pysocks.py 2017-03-23 04:57:30.000000000 +0100 @@ -1,49 +1,86 @@ +"""These tests use 3proxy software as http/socks4/socks5 proxy service. +The 3proxy binary is located in test/bin/3proxy +""" from unittest import TestCase -import unittest -import socks import socket -import six -if six.PY3: - import urllib.request as urllib2 -else: - import urllib2 -import sockshandler -from test_server import TestServer +import os +import signal +from subprocess import Popen +from threading import Thread +import threading + +try: + import urllib2 # py2 +except ImportError: + import urllib.request as urllib2 # py3 +import psutil +import pytest +import sockshandler +import socks from test.util import wait_for_socket -from test import config +TEST_SERVER_HOST = 'localhost' +TEST_SERVER_HOST_IP = '127.0.0.1' +TEST_SERVER_PORT = 7777 +PROXY_HOST_IP = '127.0.0.2' +HTTP_PROXY_PORT = 7776 +SOCKS4_PROXY_PORT = 7775 +SOCKS5_PROXY_PORT = 7774 # The 10.0.0.0 IP is used to emulate connection timeout errors NON_ROUTABLE_IP = '10.0.0.0' -def start_extra_test_server(): - from multiprocessing import Event, Process, Queue - - def server_process(wait_event, server_queue): - test_server = TestServer(address=config.TEST_SERVER_HOST_IP, - port=config.TEST_SERVER_EXTRA_PORT) - test_server.start() - test_server.response['data'] = b'zzz' - wait_event.wait() - server_queue.put(test_server.request) - test_server.stop() - - wait_event = Event() - server_queue = Queue() - proc = Process(target=server_process, args=[wait_event, server_queue]) - proc.daemon = True - proc.start() - wait_for_socket('extra-test-server', config.TEST_SERVER_HOST_IP, - config.TEST_SERVER_EXTRA_PORT) - return wait_event, server_queue +def proxy_thread(): + with open('3proxy.conf', 'w') as out: + out.write('\n'.join(( + 'allow *', + 'auth none', + 'proxy -a -n -p%d -e%s' % (HTTP_PROXY_PORT, + PROXY_HOST_IP), + 'socks -p%d -e%s' % (SOCKS4_PROXY_PORT, + PROXY_HOST_IP), + 'socks -p%d -e%s' % (SOCKS5_PROXY_PORT, + PROXY_HOST_IP), + ))) + cmd = 'test/bin/3proxy 3proxy.conf' + server = Popen(cmd, shell=True) + server.wait() + + +@pytest.fixture(scope='session', autouse=True) +def proxy_server(): + th = Thread(target=proxy_thread) + th.daemon = True + th.start() + wait_for_socket('3proxy:http', PROXY_HOST_IP, + HTTP_PROXY_PORT) + wait_for_socket('3proxy:socks4', PROXY_HOST_IP, + SOCKS4_PROXY_PORT) + wait_for_socket('3proxy:socks5', PROXY_HOST_IP, + SOCKS5_PROXY_PORT) + yield + print('Active threads:') + for th in threading.enumerate(): + print(' * %s' % th) + + parent = psutil.Process(os.getpid()) + print('Active child processes:') + for child in parent.children(recursive=True): + print(' * %s' % child) + child.send_signal(signal.SIGINT) class PySocksTestCase(TestCase): @classmethod def setUpClass(cls): - cls.test_server = TestServer(address=config.TEST_SERVER_HOST, - port=config.TEST_SERVER_PORT) + # import TestServer locally to avoid + # pytest warning about skipped TestServer class + from test_server import TestServer + + cls.test_server = TestServer(address=TEST_SERVER_HOST, + port=TEST_SERVER_PORT, + engine='subprocess') cls.test_server.start() @classmethod @@ -66,8 +103,8 @@ '\r\n' % (host, port_fragment) ).encode() - def assertProxyResponse(self, resp_data, content, address, - user_agent='PySockTester', client_ip=None): + def assert_proxy_response(self, resp_data, content, address, + client_ip=None): status = resp_data.splitlines()[0] resp_body = resp_data.split(b'\r\n\r\n')[1] self.assertEqual(b'HTTP/1.1 200 OK', status) @@ -76,313 +113,297 @@ self.assertEqual('%s:%d' % address, self.test_server.request['headers']['host']) self.assertEqual(content, resp_body) - self.assertEqual(client_ip or config.PROXY_HOST_IP, + self.assertEqual(client_ip or PROXY_HOST_IP, self.test_server.request['client_ip']) # 0/13 def test_stdlib_socket(self): content = b'zzz' - address = (config.TEST_SERVER_HOST, config.TEST_SERVER_PORT) + address = (TEST_SERVER_HOST, TEST_SERVER_PORT) self.test_server.response['data'] = content - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect(address) - s.sendall(self.build_http_request(*address)) - data = s.recv(2048) - self.assertProxyResponse(data, content, address, - client_ip=config.TEST_SERVER_HOST_IP) - + sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + sock.connect(address) + sock.sendall(self.build_http_request(*address)) + data = sock.recv(2048) + self.assert_proxy_response(data, content, address, + client_ip=TEST_SERVER_HOST_IP) # 1/13 def test_http_proxy(self): content = b'zzz' self.test_server.response['data'] = content - address = (config.TEST_SERVER_HOST, config.TEST_SERVER_PORT) - s = socks.socksocket() - s.set_proxy(socks.HTTP, config.PROXY_HOST_IP, config.HTTP_PROXY_PORT) - s.connect(address) - s.sendall(self.build_http_request(*address)) - data = s.recv(2048) - self.assertProxyResponse(data, content, address) - + address = (TEST_SERVER_HOST, TEST_SERVER_PORT) + sock = socks.socksocket() + sock.set_proxy(socks.HTTP, PROXY_HOST_IP, HTTP_PROXY_PORT) + sock.connect(address) + sock.sendall(self.build_http_request(*address)) + data = sock.recv(2048) + self.assert_proxy_response(data, content, address) # 2/13 def test_socks4_proxy(self): content = b'zzz' self.test_server.response['data'] = content - address = (config.TEST_SERVER_HOST, config.TEST_SERVER_PORT) - s = socks.socksocket() - s.set_proxy(socks.SOCKS4, config.PROXY_HOST_IP, config.SOCKS4_PROXY_PORT) - s.connect(address) - s.sendall(self.build_http_request(*address)) - data = s.recv(2048) - self.assertProxyResponse(data, content, address) - + address = (TEST_SERVER_HOST, TEST_SERVER_PORT) + sock = socks.socksocket() + sock.set_proxy(socks.SOCKS4, PROXY_HOST_IP, + SOCKS4_PROXY_PORT) + sock.connect(address) + sock.sendall(self.build_http_request(*address)) + data = sock.recv(2048) + self.assert_proxy_response(data, content, address) # 3/13 def test_socks5_proxy(self): content = b'zzz' self.test_server.response['data'] = content - address = (config.TEST_SERVER_HOST, config.TEST_SERVER_PORT) - s = socks.socksocket() - s.set_proxy(socks.SOCKS5, config.PROXY_HOST_IP, config.SOCKS5_PROXY_PORT) - s.connect(address) - s.sendall(self.build_http_request(*address)) - data = s.recv(2048) - self.assertProxyResponse(data, content, address) + address = (TEST_SERVER_HOST, TEST_SERVER_PORT) + sock = socks.socksocket() + sock.set_proxy(socks.SOCKS5, PROXY_HOST_IP, SOCKS5_PROXY_PORT) + sock.connect(address) + sock.sendall(self.build_http_request(*address)) + data = sock.recv(2048) + self.assert_proxy_response(data, content, address) # 3-1/13 def test_urllib2_http_handler(self): content = b'zzz' self.test_server.response['data'] = content opener = urllib2.build_opener(sockshandler.SocksiPyHandler( - socks.HTTP, config.PROXY_HOST_IP, config.HTTP_PROXY_PORT)) + socks.HTTP, PROXY_HOST_IP, HTTP_PROXY_PORT)) res = opener.open(self.test_server.get_url()) body = res.read() self.assertTrue(self.test_server.request['headers']['user-agent'] - .startswith('Python-urllib')) - self.assertEqual('%s:%d' % (config.TEST_SERVER_HOST, config.TEST_SERVER_PORT), + .startswith('Python-urllib')) + self.assertEqual('%s:%d' % (TEST_SERVER_HOST, TEST_SERVER_PORT), self.test_server.request['headers']['host']) self.assertEqual(200, res.getcode()) self.assertEqual(content, body) - # 3-2/13 def test_urllib2_socks4_handler(self): content = b'zzz' self.test_server.response['data'] = content opener = urllib2.build_opener(sockshandler.SocksiPyHandler( - socks.SOCKS4, config.PROXY_HOST_IP, config.SOCKS4_PROXY_PORT)) + socks.SOCKS4, PROXY_HOST_IP, SOCKS4_PROXY_PORT)) res = opener.open(self.test_server.get_url()) body = res.read() self.assertTrue(self.test_server.request['headers']['user-agent'] - .startswith('Python-urllib')) - self.assertEqual('%s:%d' % (config.TEST_SERVER_HOST, config.TEST_SERVER_PORT), + .startswith('Python-urllib')) + self.assertEqual('%s:%d' % (TEST_SERVER_HOST, TEST_SERVER_PORT), self.test_server.request['headers']['host']) self.assertEqual(200, res.getcode()) self.assertEqual(content, body) - # 3-3/13 def test_urllib2_socks5_handler(self): content = b'zzz' self.test_server.response['data'] = content opener = urllib2.build_opener(sockshandler.SocksiPyHandler( - socks.SOCKS5, config.PROXY_HOST_IP, config.SOCKS5_PROXY_PORT)) + socks.SOCKS5, PROXY_HOST_IP, SOCKS5_PROXY_PORT)) res = opener.open(self.test_server.get_url()) body = res.read() self.assertTrue(self.test_server.request['headers']['user-agent'] - .startswith('Python-urllib')) - self.assertEqual('%s:%d' % (config.TEST_SERVER_HOST, config.TEST_SERVER_PORT), + .startswith('Python-urllib')) + self.assertEqual('%s:%d' % (TEST_SERVER_HOST, TEST_SERVER_PORT), self.test_server.request['headers']['host']) self.assertEqual(200, res.getcode()) self.assertEqual(content, body) - # 4/13 def test_http_ip_proxy(self): content = b'zzz' self.test_server.response['data'] = content - address = (config.TEST_SERVER_HOST_IP, config.TEST_SERVER_PORT) - s = socks.socksocket() - s.set_proxy(socks.HTTP, config.PROXY_HOST_IP, config.HTTP_PROXY_PORT) - s.connect(address) - s.sendall(self.build_http_request(*address)) - data = s.recv(2048) - self.assertProxyResponse(data, content, address) - + address = (TEST_SERVER_HOST_IP, TEST_SERVER_PORT) + sock = socks.socksocket() + sock.set_proxy(socks.HTTP, PROXY_HOST_IP, HTTP_PROXY_PORT) + sock.connect(address) + sock.sendall(self.build_http_request(*address)) + data = sock.recv(2048) + self.assert_proxy_response(data, content, address) # 5/13 def test_socks4_ip_proxy(self): content = b'zzz' self.test_server.response['data'] = content - address = (config.TEST_SERVER_HOST_IP, config.TEST_SERVER_PORT) - s = socks.socksocket() - s.set_proxy(socks.SOCKS4, config.PROXY_HOST_IP, config.SOCKS4_PROXY_PORT) - s.connect(address) - s.sendall(self.build_http_request(*address)) - data = s.recv(2048) - self.assertProxyResponse(data, content, address) - + address = (TEST_SERVER_HOST_IP, TEST_SERVER_PORT) + sock = socks.socksocket() + sock.set_proxy(socks.SOCKS4, PROXY_HOST_IP, SOCKS4_PROXY_PORT) + sock.connect(address) + sock.sendall(self.build_http_request(*address)) + data = sock.recv(2048) + self.assert_proxy_response(data, content, address) # 6/13 def test_socks5_ip_proxy(self): content = b'zzz' self.test_server.response['data'] = content - address = (config.TEST_SERVER_HOST_IP, config.TEST_SERVER_PORT) - s = socks.socksocket() - s.set_proxy(socks.SOCKS5, config.PROXY_HOST_IP, config.SOCKS5_PROXY_PORT) - s.connect(address) - s.sendall(self.build_http_request(*address)) - data = s.recv(2048) - self.assertProxyResponse(data, content, address) - + address = (TEST_SERVER_HOST_IP, TEST_SERVER_PORT) + sock = socks.socksocket() + sock.set_proxy(socks.SOCKS5, PROXY_HOST_IP, SOCKS5_PROXY_PORT) + sock.connect(address) + sock.sendall(self.build_http_request(*address)) + data = sock.recv(2048) + self.assert_proxy_response(data, content, address) # 7/13 def test_socks5_proxy_connect_timeout(self): """Test timeout during connecting to the proxy server""" - s = socks.socksocket() - s.settimeout(0.1) - s.set_proxy(socks.SOCKS5, NON_ROUTABLE_IP, config.SOCKS5_PROXY_PORT) - address = (config.TEST_SERVER_HOST, config.TEST_SERVER_PORT) - self.assertRaises(socks.ProxyConnectionError, s.connect, + sock = socks.socksocket() + sock.settimeout(0.1) + sock.set_proxy(socks.SOCKS5, NON_ROUTABLE_IP, SOCKS5_PROXY_PORT) + address = (TEST_SERVER_HOST, TEST_SERVER_PORT) + self.assertRaises(socks.ProxyConnectionError, sock.connect, address) - s = socks.socksocket() - s.settimeout(0.1) - s.set_proxy(socks.SOCKS5, NON_ROUTABLE_IP, config.SOCKS5_PROXY_PORT) - address = (config.TEST_SERVER_HOST, config.TEST_SERVER_PORT) + sock = socks.socksocket() + sock.settimeout(0.1) + sock.set_proxy(socks.SOCKS5, NON_ROUTABLE_IP, SOCKS5_PROXY_PORT) + address = (TEST_SERVER_HOST, TEST_SERVER_PORT) try: - s.connect(address) + sock.connect(address) except socks.ProxyConnectionError as ex: self.assertEqual(str(ex.socket_err), 'timed out') else: assert False - # 8/13 # TODO: imeplement server that accept connection slowly #def test_socks5_negotiation_timeout(self): # """Test timeout during connection to to destination server""" - # s = socks.socksocket() - # s.settimeout(0.01) - # s.set_proxy(socks.SOCKS5, config.PROXY_HOST_IP, config.SOCKS5_PROXY_PORT) - # address = (NON_ROUTABLE_IP, config.TEST_SERVER_PORT) - # self.assertRaises(socks.GeneralProxyError, s.connect, + # sock = socks.socksocket() + # sock.settimeout(0.01) + # sock.set_proxy(socks.SOCKS5, PROXY_HOST_IP, SOCKS5_PROXY_PORT) + # address = (NON_ROUTABLE_IP, TEST_SERVER_PORT) + # self.assertRaises(socks.GeneralProxyError, sock.connect, # address) - # s = socks.socksocket() - # s.settimeout(0.1) - # s.set_proxy(socks.SOCKS5, config.PROXY_HOST_IP, config.SOCKS5_PROXY_PORT) - # address = (NON_ROUTABLE_IP, config.TEST_SERVER_PORT) + # sock = socks.socksocket() + # sock.settimeout(0.1) + # sock.set_proxy(socks.SOCKS5, PROXY_HOST_IP, SOCKS5_PROXY_PORT) + # address = (NON_ROUTABLE_IP, TEST_SERVER_PORT) # try: - # s.connect(address) + # sock.connect(address) # except socks.GeneralProxyError as ex: # self.assertEqual(str(ex.socket_err), 'timed out') # else: # assert False - # 8-1/13 def test_socks5_read_timeout(self): """Test timeout during reading from the connected remote server""" self.test_server.response['sleep'] = 5 - s = socks.socksocket() - s.settimeout(0.1) - s.set_proxy(socks.SOCKS5, config.PROXY_HOST_IP, config.SOCKS5_PROXY_PORT) - address = (config.TEST_SERVER_HOST, config.TEST_SERVER_PORT) + sock = socks.socksocket() + sock.settimeout(0.1) + sock.set_proxy(socks.SOCKS5, PROXY_HOST_IP, SOCKS5_PROXY_PORT) + address = (TEST_SERVER_HOST, TEST_SERVER_PORT) def func(): - s.connect(address) - s.recv(1) + sock.connect(address) + sock.recv(1) self.assertRaises(socket.timeout, func) # 9/13 def test_urllib2_http(self): - wait_event, server_queue = start_extra_test_server() original_socket = urllib2.socket.socket try: - socks.set_default_proxy(socks.HTTP, config.PROXY_HOST_IP, - config.HTTP_PROXY_PORT) + self.test_server.response['data'] = b'zzz' + socks.set_default_proxy(socks.HTTP, PROXY_HOST_IP, + HTTP_PROXY_PORT) socks.wrap_module(urllib2) - address = (config.TEST_SERVER_HOST, - config.TEST_SERVER_EXTRA_PORT) - url = 'http://%s:%d/' % address + address = (TEST_SERVER_HOST, + TEST_SERVER_PORT) + url = 'http://%s:%d/' % address res = urllib2.urlopen(url) resp_body = res.read() - wait_event.set() - request = server_queue.get(block=True, timeout=1) self.assertEqual(200, res.getcode()) self.assertEqual(b'zzz', resp_body) - self.assertTrue(request['headers']['user-agent'] - .startswith('Python-urllib')) + self.assertTrue(self.test_server + .request['headers']['user-agent'] + .startswith('Python-urllib')) self.assertEqual('%s:%d' % address, - request['headers']['host']) + self.test_server.request['headers']['host']) finally: urllib2.socket.socket = original_socket - # 10/13 def test_urllib2_socks5(self): - wait_event, server_queue = start_extra_test_server() original_socket = urllib2.socket.socket try: - socks.set_default_proxy(socks.SOCKS5, config.PROXY_HOST_IP, - config.SOCKS5_PROXY_PORT) + self.test_server.response['data'] = b'zzz' + socks.set_default_proxy(socks.SOCKS5, PROXY_HOST_IP, + SOCKS5_PROXY_PORT) socks.wrap_module(urllib2) - address = (config.TEST_SERVER_HOST, - config.TEST_SERVER_EXTRA_PORT) - url = 'http://%s:%d/' % address + address = (TEST_SERVER_HOST, + TEST_SERVER_PORT) + url = 'http://%s:%d/' % address res = urllib2.urlopen(url) resp_body = res.read() - wait_event.set() - request = server_queue.get(block=True, timeout=1) self.assertEqual(200, res.getcode()) self.assertEqual(b'zzz', resp_body) - self.assertTrue(request['headers']['user-agent'] - .startswith('Python-urllib')) + self.assertTrue(self.test_server + .request['headers']['user-agent'] + .startswith('Python-urllib')) self.assertEqual('%s:%d' % address, - request['headers']['host']) + self.test_server.request['headers']['host']) finally: urllib2.socket.socket = original_socket - # 11/13 def test_global_override_http(self): - wait_event, server_queue = start_extra_test_server() original_socket = socket.socket try: - socks.set_default_proxy(socks.HTTP, config.PROXY_HOST_IP, - config.HTTP_PROXY_PORT) + self.test_server.response['data'] = b'zzz' + socks.set_default_proxy(socks.HTTP, PROXY_HOST_IP, + HTTP_PROXY_PORT) socket.socket = socks.socksocket - address = (config.TEST_SERVER_HOST, - config.TEST_SERVER_EXTRA_PORT) - url = 'http://%s:%d/' % address + address = (TEST_SERVER_HOST, + TEST_SERVER_PORT) + url = 'http://%s:%d/' % address res = urllib2.urlopen(url) resp_body = res.read() - wait_event.set() - request = server_queue.get(block=True, timeout=1) self.assertEqual(200, res.getcode()) self.assertEqual(b'zzz', resp_body) - self.assertTrue(request['headers']['user-agent'] - .startswith('Python-urllib')) + self.assertTrue(self.test_server + .request['headers']['user-agent'] + .startswith('Python-urllib')) self.assertEqual('%s:%d' % address, - request['headers']['host']) + self.test_server.request['headers']['host']) finally: socket.socket = original_socket - # 12/13 def test_global_override_socks5(self): - wait_event, server_queue = start_extra_test_server() original_socket = socket.socket try: - socks.set_default_proxy(socks.SOCKS5, config.PROXY_HOST_IP, - config.SOCKS5_PROXY_PORT) + self.test_server.response['data'] = b'zzz' + socks.set_default_proxy(socks.SOCKS5, PROXY_HOST_IP, + SOCKS5_PROXY_PORT) socket.socket = socks.socksocket - address = (config.TEST_SERVER_HOST, - config.TEST_SERVER_EXTRA_PORT) - url = 'http://%s:%d/' % address + address = (TEST_SERVER_HOST, + TEST_SERVER_PORT) + url = 'http://%s:%d/' % address res = urllib2.urlopen(url) resp_body = res.read() - wait_event.set() - request = server_queue.get(block=True, timeout=1) self.assertEqual(200, res.getcode()) self.assertEqual(b'zzz', resp_body) - self.assertTrue(request['headers']['user-agent'] - .startswith('Python-urllib')) + self.assertTrue(self.test_server + .request['headers']['user-agent'] + .startswith('Python-urllib')) self.assertEqual('%s:%d' % address, - request['headers']['host']) + self.test_server.request['headers']['host']) finally: socket.socket = original_socket # 12/13 def test_ipv6(self): sock = socks.socksocket() - ipv6_tuple = addr, port, flowinfo, scopeid = "::1", 1234, 0, 0 + # (addr, scopeid, flowinfo, port) + ipv6_tuple = ("::1", 1234, 0, 0) self.assertRaises(socket.error, sock.connect, ipv6_tuple)