Import CI ipv6-noproxy-cidr test from RHEL

This is from RHEL distgit tests/python-requests, directory
Sanity/ipv6-noproxy-cidr.
The commit hash this was copied from: 050c2979f27cc70506ddf669f9e0803a7b67c2d5

Only the necessary files were kept.
This commit is contained in:
Lukáš Zachar 2024-08-06 13:57:28 +02:00 committed by Karolina Surma
parent 54447e6554
commit b5aa2db244
3 changed files with 106 additions and 0 deletions

View File

@ -0,0 +1,7 @@
require:
- nmap-ncat
- python3
- python3-requests
test: "${PYTHON:-python3} repro.py"
tty: "true"

View File

@ -0,0 +1,74 @@
import subprocess
import requests
import os
import time
import atexit
subprocesses = []
python = os.environ.get("PYTHON","python3")
server_url = os.environ.get("SERVER_URL", None)
testing_no_proxy = os.environ.get("TESTING_NO_PROXY", None)
# Clean up
@atexit.register
def cleanup():
print("Cleaning up subprocesses")
for process in subprocesses:
process.terminate()
time.sleep(1)
for process in subprocesses:
process.wait()
# Part one, assert that everything works
if server_url is None:
print("starting server")
p = subprocess.Popen([python, "server.py"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
subprocesses.append(p)
time.sleep(1)
server_url = "http://[::1]:8888"
no_proxy = "::1/128"
else:
print(f"using provided {server_url} as server")
print(f"using provided {testing_no_proxy} as NO_PROXY value")
assert testing_no_proxy, "TESTING_NO_PROXY envar missing"
# Send request and check the response
print("sending first request")
assert requests.get(server_url, timeout=2).text.startswith("Hello")
# Part two, dummy proxy causes timeout, that's fine
# Start proxy
print("starting proxy")
p = subprocess.Popen(["nc", "-k", "-l", "10000"], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
subprocesses.append(p)
time.sleep(1)
# Set proxy to environment
os.environ["HTTP_PROXY"] = "http://127.0.0.1:10000"
# Send request, expect timeout because proxy is dummy and do not respond
print("Sending request via proxy")
try:
requests.get(server_url, timeout=2)
except requests.exceptions.ReadTimeout:
print("timeout is fine, expected")
pass
# Part three, NO_PROXY bypass the proxy and the request should work as before
os.environ["NO_PROXY"] = testing_no_proxy or no_proxy
print("sending last request")
try:
assert requests.get(server_url, timeout=2).text.startswith("Hello")
except requests.exceptions.ReadTimeout:
print("PROBLEM - the last request timed out, NO_PROXY setting does not work!")
raise SystemExit(1)
else:
print("OK - NO_PROXY setting works fine - the last request bypassed proxy")

View File

@ -0,0 +1,25 @@
from http.server import SimpleHTTPRequestHandler, HTTPServer
import socket
import sys
class IPv6OnlyHandler(SimpleHTTPRequestHandler):
def do_GET(self):
client_address = self.client_address[0]
# Check if the client address is an IPv6 address
if ":" in client_address:
self.send_response(200)
self.send_header('Content-type', 'text/plain')
self.end_headers()
self.wfile.write(b'Hello')
else:
# Raise a RuntimeError if the client address is an IPv4 address
raise SystemExit(f"IPv4 address ({client_address}) detected. Only IPv6 addresses are allowed.")
class HTTPServerV6(HTTPServer):
address_family = socket.AF_INET6
if __name__ == '__main__':
# Use IPv6 address and port 8080
server_address = ('::', 8888)
httpd = HTTPServerV6(server_address, IPv6OnlyHandler)
print('Server running on port 8888...')
httpd.serve_forever()