mirror of
https://github.com/mirror/wget.git
synced 2025-04-25 12:40:30 +08:00
testenv: Add test for handling of no_proxy environment variable
* testenv/Test-no_proxy-env.py: Added new test for no_proxy env * testenv/Makefile.am: Added the new test to Makefile Added new test with 5 cases, which are testing various combinations of no_proxy environment variable definition and requested URLs. The test is skipped if the system does not support resolution of localhost subdomains to lcalhost address. Signed-off-by: Tomas Hozza <thozza@redhat.com>
This commit is contained in:
parent
8ffebe2160
commit
314a4f42be
@ -116,6 +116,7 @@ if HAVE_PYTHON3
|
||||
Test--rejected-log.py \
|
||||
Test-reserved-chars.py \
|
||||
Test--spider-r.py \
|
||||
Test-no_proxy-env.py \
|
||||
$(METALINK_TESTS)
|
||||
|
||||
endif
|
||||
|
160
testenv/Test-no_proxy-env.py
Executable file
160
testenv/Test-no_proxy-env.py
Executable file
@ -0,0 +1,160 @@
|
||||
#!/usr/bin/env python3
|
||||
import socket
|
||||
from sys import exit
|
||||
from test.http_test import HTTPTest
|
||||
from test.base_test import HTTP
|
||||
from misc.wget_file import WgetFile
|
||||
|
||||
"""
|
||||
This test ensures, that domains with and without leftmost dot defined in
|
||||
no_proxy environment variable are accepted by wget. The idea is to use
|
||||
non-existing proxy server address and detect whether files are downloaded
|
||||
when proxy settings are omitted based on no_proxy environment variable
|
||||
value.
|
||||
|
||||
current wget's behavior:
|
||||
- "no_proxy=.mit.edu"
|
||||
- will match the domain and subdomains e.g. "www.mit.edu" or "www.subdomain.mit.edu" (Case #4)
|
||||
- will NOT match the host "mit.edu" (Case #3)
|
||||
- "no_proxy=mit.edu"
|
||||
- will match the domain and subdomains e.g. "www.mit.edu" or "www.subdomain.mit.edu" (Case #2)
|
||||
- will match the host "mit.edu" (Case #1)
|
||||
- downside: can not match only the host
|
||||
"""
|
||||
|
||||
# Check whether the system supports translating localhost subdomains
|
||||
# to localhost address and if not, skip it.
|
||||
hostnames_to_check = [
|
||||
"working1.localhost",
|
||||
"working2.localhost",
|
||||
"www.working1.localhost",
|
||||
"www.working2.localhost",
|
||||
]
|
||||
for hostname in hostnames_to_check:
|
||||
try:
|
||||
ip = socket.gethostbyname(hostname)
|
||||
except socket.gaierror as _:
|
||||
# resolution of the name failes
|
||||
# return value 77 -> SKIP
|
||||
exit(77)
|
||||
|
||||
# File Definitions
|
||||
File1 = "Would you like some Tea?"
|
||||
File2 = "With lemon or cream?"
|
||||
|
||||
A_File = WgetFile ("File1", File1)
|
||||
B_File = WgetFile ("File2", File2)
|
||||
|
||||
WGET_URLS = [["File1", "File2"]]
|
||||
WGET_ENVS = {
|
||||
"http_proxy": "nonexisting.localhost:8080",
|
||||
"no_proxy": "working1.localhost,.working2.localhost"
|
||||
}
|
||||
|
||||
Servers = [HTTP]
|
||||
Files = [[A_File, B_File]]
|
||||
|
||||
ExpectedReturnCodeWorking = 0
|
||||
ExpectedReturnCodeNotWorking = 4 # network error (non-existing proxy address)
|
||||
|
||||
ExpectedDownloadedFilesWorking = [A_File, B_File]
|
||||
|
||||
# Pre and Post Test Hooks
|
||||
test_options = {
|
||||
"Urls" : WGET_URLS,
|
||||
"EnvironmentVariables": WGET_ENVS
|
||||
}
|
||||
post_test_working = {
|
||||
"ExpectedFiles" : ExpectedDownloadedFilesWorking,
|
||||
"ExpectedRetcode" : ExpectedReturnCodeWorking
|
||||
}
|
||||
post_test_not_working = {
|
||||
"ExpectedRetcode" : ExpectedReturnCodeNotWorking
|
||||
}
|
||||
|
||||
# Case #1:
|
||||
# - Requested domain matches exactly the domain definition in no_proxy.
|
||||
# - Domain definition in no_proxy is NOT dot-prefixed
|
||||
# Expected result: proxy settings don't apply and files are downloaded.
|
||||
pre_case_1 = {
|
||||
"ServerFiles" : Files,
|
||||
"Domains" : ["working1.localhost"]
|
||||
}
|
||||
|
||||
err_case_1 = HTTPTest (
|
||||
pre_hook=pre_case_1,
|
||||
test_params=test_options,
|
||||
post_hook=post_test_working,
|
||||
protocols=Servers
|
||||
).begin ()
|
||||
|
||||
# Case #2:
|
||||
# - Requested domain is sub-domain of a domain definition in no_proxy.
|
||||
# - Domain definition in no_proxy is NOT dot-prefixed
|
||||
# Expected result: proxy settings don't apply and files are downloaded.
|
||||
pre_case_2 = {
|
||||
"ServerFiles" : Files,
|
||||
"Domains" : ["www.working1.localhost"]
|
||||
}
|
||||
|
||||
err_case_2 = HTTPTest (
|
||||
pre_hook=pre_case_2,
|
||||
test_params=test_options,
|
||||
post_hook=post_test_working,
|
||||
protocols=Servers
|
||||
).begin ()
|
||||
|
||||
# Case #3:
|
||||
# - Requested domain matches exactly the domain definition in no_proxy,
|
||||
# except for the leftmost dot (".") in no_proxy domain definition.
|
||||
# - Domain definition in no_proxy IS dot-prefixed
|
||||
# Expected result: proxy settings apply and files are downloaded. This is
|
||||
# due to the mismatch in leftmost dot.
|
||||
# NOTE: This is inconsistent with curl's behavior, but has less drawbacks.
|
||||
pre_case_3 = {
|
||||
"ServerFiles" : Files,
|
||||
"Domains" : ["working2.localhost"]
|
||||
}
|
||||
|
||||
err_case_3 = HTTPTest (
|
||||
pre_hook=pre_case_3,
|
||||
test_params=test_options,
|
||||
post_hook=post_test_not_working,
|
||||
protocols=Servers
|
||||
).begin ()
|
||||
|
||||
# Case #4:
|
||||
# - Requested domain is sub-domain of a domain definition in no_proxy.
|
||||
# - Domain definition in no_proxy IS dot-prefixed
|
||||
# Expected result: proxy settings don't apply and files are downloaded.
|
||||
pre_case_4 = {
|
||||
"ServerFiles" : Files,
|
||||
"Domains" : ["www.working2.localhost"]
|
||||
}
|
||||
|
||||
err_case_4 = HTTPTest (
|
||||
pre_hook=pre_case_4,
|
||||
test_params=test_options,
|
||||
post_hook=post_test_working,
|
||||
protocols=Servers
|
||||
).begin ()
|
||||
|
||||
# Case #5
|
||||
# - Requested domain does not match a domain definition in no_proxy.
|
||||
# - Requested domain is NOT sub-domain of a domain definition in no_proxy.
|
||||
# Expected result: proxy settings apply and files are NOT downloaded due to
|
||||
# network error when using proxy with non-existing URL.
|
||||
pre_case_5 = {
|
||||
"ServerFiles" : Files,
|
||||
"Domains" : ["www.example.localhost"]
|
||||
}
|
||||
|
||||
err_case_5 = HTTPTest (
|
||||
pre_hook=pre_case_5,
|
||||
test_params=test_options,
|
||||
post_hook=post_test_not_working,
|
||||
protocols=Servers
|
||||
).begin ()
|
||||
|
||||
# Combine error codes from all test cases
|
||||
exit (max(err_case_1, err_case_2, err_case_3, err_case_4, err_case_5))
|
Loading…
Reference in New Issue
Block a user