Skip to content
This repository was archived by the owner on Apr 14, 2022. It is now read-only.

Merge from master (June 6th, 2019) #119

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
187 changes: 82 additions & 105 deletions test/contrib/test_socks.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,13 +232,12 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks5://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url)
self.addCleanup(pm.clear)
response = pm.request("GET", "http://16.17.18.19")
with socks.SOCKSProxyManager(proxy_url) as pm:
response = pm.request("GET", "http://16.17.18.19")

assert response.status == 200
assert response.data == b""
assert response.headers["Server"] == "SocksTestServer"
assert response.status == 200
assert response.data == b""
assert response.headers["Server"] == "SocksTestServer"

def test_local_dns(self):
def request_handler(listener):
Expand Down Expand Up @@ -266,13 +265,12 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks5://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url)
self.addCleanup(pm.clear)
response = pm.request("GET", "http://localhost")
with socks.SOCKSProxyManager(proxy_url) as pm:
response = pm.request("GET", "http://localhost")

assert response.status == 200
assert response.data == b""
assert response.headers["Server"] == "SocksTestServer"
assert response.status == 200
assert response.data == b""
assert response.headers["Server"] == "SocksTestServer"

def test_correct_header_line(self):
def request_handler(listener):
Expand Down Expand Up @@ -304,10 +302,9 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks5h://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url)
self.addCleanup(pm.clear)
response = pm.request("GET", "http://example.com")
assert response.status == 200
with socks.SOCKSProxyManager(proxy_url) as pm:
response = pm.request("GET", "http://example.com")
assert response.status == 200

def test_connection_timeouts(self):
event = threading.Event()
Expand All @@ -317,12 +314,10 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks5h://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url)
self.addCleanup(pm.clear)

with pytest.raises(ConnectTimeoutError):
pm.request("GET", "http://example.com", timeout=0.001, retries=False)
event.set()
with socks.SOCKSProxyManager(proxy_url) as pm:
with pytest.raises(ConnectTimeoutError):
pm.request("GET", "http://example.com", timeout=0.001, retries=False)
event.set()

def test_connection_failure(self):
event = threading.Event()
Expand All @@ -333,12 +328,10 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks5h://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url)
self.addCleanup(pm.clear)

event.wait()
with pytest.raises(NewConnectionError):
pm.request("GET", "http://example.com", retries=False)
with socks.SOCKSProxyManager(proxy_url) as pm:
event.wait()
with pytest.raises(NewConnectionError):
pm.request("GET", "http://example.com", retries=False)

def test_proxy_rejection(self):
evt = threading.Event()
Expand All @@ -355,12 +348,10 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks5h://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url)
self.addCleanup(pm.clear)

with pytest.raises(NewConnectionError):
pm.request("GET", "http://example.com", retries=False)
evt.set()
with socks.SOCKSProxyManager(proxy_url) as pm:
with pytest.raises(NewConnectionError):
pm.request("GET", "http://example.com", retries=False)
evt.set()

def test_socks_with_password(self):
def request_handler(listener):
Expand Down Expand Up @@ -390,14 +381,12 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks5://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url, username="user", password="pass")
self.addCleanup(pm.clear)

response = pm.request("GET", "http://16.17.18.19")
with socks.SOCKSProxyManager(proxy_url, username="user", password="pass") as pm:
response = pm.request("GET", "http://16.17.18.19")

assert response.status == 200
assert response.data == b""
assert response.headers["Server"] == "SocksTestServer"
assert response.status == 200
assert response.data == b""
assert response.headers["Server"] == "SocksTestServer"

def test_socks_with_auth_in_url(self):
"""
Expand Down Expand Up @@ -432,14 +421,12 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks5://user:pass@%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url)
self.addCleanup(pm.clear)
with socks.SOCKSProxyManager(proxy_url) as pm:
response = pm.request("GET", "http://16.17.18.19")

response = pm.request("GET", "http://16.17.18.19")

assert response.status == 200
assert response.data == b""
assert response.headers["Server"] == "SocksTestServer"
assert response.status == 200
assert response.data == b""
assert response.headers["Server"] == "SocksTestServer"

def test_socks_with_invalid_password(self):
def request_handler(listener):
Expand All @@ -452,15 +439,15 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks5h://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url, username="user", password="badpass")
self.addCleanup(pm.clear)

try:
pm.request("GET", "http://example.com", retries=False)
except NewConnectionError as e:
assert "SOCKS5 authentication failed" in str(e)
else:
self.fail("Did not raise")
with socks.SOCKSProxyManager(
proxy_url, username="user", password="badpass"
) as pm:
try:
pm.request("GET", "http://example.com", retries=False)
except NewConnectionError as e:
assert "SOCKS5 authentication failed" in str(e)
else:
self.fail("Did not raise")

def test_source_address_works(self):
expected_port = _get_free_port(self.host)
Expand Down Expand Up @@ -492,12 +479,11 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks5://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(
with socks.SOCKSProxyManager(
proxy_url, source_address=("127.0.0.1", expected_port)
)
self.addCleanup(pm.clear)
response = pm.request("GET", "http://16.17.18.19")
assert response.status == 200
) as pm:
response = pm.request("GET", "http://16.17.18.19")
assert response.status == 200


class TestSOCKS4Proxy(IPV4SocketDummyServerTestCase):
Expand Down Expand Up @@ -534,13 +520,12 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks4://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url)
self.addCleanup(pm.clear)
response = pm.request("GET", "http://16.17.18.19")
with socks.SOCKSProxyManager(proxy_url) as pm:
response = pm.request("GET", "http://16.17.18.19")

assert response.status == 200
assert response.headers["Server"] == "SocksTestServer"
assert response.data == b""
assert response.status == 200
assert response.headers["Server"] == "SocksTestServer"
assert response.data == b""

def test_local_dns(self):
def request_handler(listener):
Expand Down Expand Up @@ -568,13 +553,12 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks4://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url)
self.addCleanup(pm.clear)
response = pm.request("GET", "http://localhost")
with socks.SOCKSProxyManager(proxy_url) as pm:
response = pm.request("GET", "http://localhost")

assert response.status == 200
assert response.headers["Server"] == "SocksTestServer"
assert response.data == b""
assert response.status == 200
assert response.headers["Server"] == "SocksTestServer"
assert response.data == b""

def test_correct_header_line(self):
def request_handler(listener):
Expand Down Expand Up @@ -606,10 +590,9 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks4a://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url)
self.addCleanup(pm.clear)
response = pm.request("GET", "http://example.com")
assert response.status == 200
with socks.SOCKSProxyManager(proxy_url) as pm:
response = pm.request("GET", "http://example.com")
assert response.status == 200

def test_proxy_rejection(self):
evt = threading.Event()
Expand All @@ -626,12 +609,10 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks4a://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url)
self.addCleanup(pm.clear)

with pytest.raises(NewConnectionError):
pm.request("GET", "http://example.com", retries=False)
evt.set()
with socks.SOCKSProxyManager(proxy_url) as pm:
with pytest.raises(NewConnectionError):
pm.request("GET", "http://example.com", retries=False)
evt.set()

def test_socks4_with_username(self):
def request_handler(listener):
Expand Down Expand Up @@ -659,13 +640,12 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks4://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url, username="user")
self.addCleanup(pm.clear)
response = pm.request("GET", "http://16.17.18.19")
with socks.SOCKSProxyManager(proxy_url, username="user") as pm:
response = pm.request("GET", "http://16.17.18.19")

assert response.status == 200
assert response.data == b""
assert response.headers["Server"] == "SocksTestServer"
assert response.status == 200
assert response.data == b""
assert response.headers["Server"] == "SocksTestServer"

def test_socks_with_invalid_username(self):
def request_handler(listener):
Expand All @@ -676,15 +656,13 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks4a://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url, username="baduser")
self.addCleanup(pm.clear)

try:
pm.request("GET", "http://example.com", retries=False)
except NewConnectionError as e:
assert "different user-ids" in str(e)
else:
self.fail("Did not raise")
with socks.SOCKSProxyManager(proxy_url, username="baduser") as pm:
try:
pm.request("GET", "http://example.com", retries=False)
except NewConnectionError as e:
assert "different user-ids" in str(e)
else:
self.fail("Did not raise")


class TestSOCKSWithTLS(IPV4SocketDummyServerTestCase):
Expand Down Expand Up @@ -728,10 +706,9 @@ def request_handler(listener):

self._start_server(request_handler)
proxy_url = "socks5h://%s:%s" % (self.host, self.port)
pm = socks.SOCKSProxyManager(proxy_url, ca_certs=DEFAULT_CA)
self.addCleanup(pm.clear)
response = pm.request("GET", "https://localhost")
with socks.SOCKSProxyManager(proxy_url, ca_certs=DEFAULT_CA) as pm:
response = pm.request("GET", "https://localhost")

assert response.status == 200
assert response.data == b""
assert response.headers["Server"] == "SocksTestServer"
assert response.status == 200
assert response.data == b""
assert response.headers["Server"] == "SocksTestServer"
Loading