Added tests for HTTP authentication using credentials from .netrc

Getting credentials from .netrc has been broken from time to time, thus
adding a test coverage to prevent regressions.

Also added setting of "HOME" environment variable when executing wget,
to make sure LocalFiles like .netrc, which are created just for the
test, are actually used.

Signed-off-by: Tomas Hozza <thozza@redhat.com>
This commit is contained in:
Tomas Hozza 2017-05-12 19:17:30 +02:00 committed by Tim Rühsen
parent 40c0d30f5c
commit 17960b57d5
5 changed files with 206 additions and 1 deletions

View File

@ -75,6 +75,9 @@ if HAVE_PYTHON3
TESTS = Test-504.py \
Test-auth-basic-fail.py \
Test-auth-basic.py \
Test-auth-basic-netrc.py \
Test-auth-basic-netrc-user-given.py \
Test-auth-basic-netrc-pass-given.py \
Test-auth-both.py \
Test-auth-digest.py \
Test-auth-no-challenge.py \

View File

@ -0,0 +1,68 @@
#!/usr/bin/env python3
from sys import exit
from test.http_test import HTTPTest
from misc.wget_file import WgetFile
"""
This test ensures Wget uses credentials from .netrc for Basic Authorization Negotiation.
In this case we test that .netrc credentials are used in case only
password is given on the command line.
Also, we ensure that Wget saves the host after a successful auth and
doesn't wait for a challenge the second time.
"""
############# File Definitions ###############################################
File1 = "I am an invisble man."
File2 = "I too am an invisible man."
User = "Sauron"
Password = "TheEye"
File1_rules = {
"Authentication" : {
"Type" : "Basic",
"User" : User,
"Pass" : Password
}
}
File2_rules = {
"ExpectHeader" : {
"Authorization" : "Basic U2F1cm9uOlRoZUV5ZQ=="
}
}
Netrc = "machine 127.0.0.1\n\tlogin {0}".format(User)
A_File = WgetFile ("File1", File1, rules=File1_rules)
B_File = WgetFile ("File2", File2, rules=File2_rules)
Netrc_File = WgetFile (".netrc", Netrc)
WGET_OPTIONS = "--password={0}".format(Password)
WGET_URLS = [["File1", "File2"]]
Files = [[A_File, B_File]]
LocalFiles = [Netrc_File]
ExpectedReturnCode = 0
ExpectedDownloadedFiles = [A_File, B_File, Netrc_File]
################ Pre and Post Test Hooks #####################################
pre_test = {
"ServerFiles" : Files,
"LocalFiles" : LocalFiles
}
test_options = {
"WgetCommands" : WGET_OPTIONS,
"Urls" : WGET_URLS
}
post_test = {
"ExpectedFiles" : ExpectedDownloadedFiles,
"ExpectedRetcode" : ExpectedReturnCode
}
err = HTTPTest (
pre_hook=pre_test,
test_params=test_options,
post_hook=post_test
).begin ()
exit (err)

View File

@ -0,0 +1,68 @@
#!/usr/bin/env python3
from sys import exit
from test.http_test import HTTPTest
from misc.wget_file import WgetFile
"""
This test ensures Wget uses credentials from .netrc for Basic Authorization Negotiation.
In this case we test that .netrc credentials are used in case only
user login is given on the command line.
Also, we ensure that Wget saves the host after a successful auth and
doesn't wait for a challenge the second time.
"""
############# File Definitions ###############################################
File1 = "I am an invisble man."
File2 = "I too am an invisible man."
User = "Sauron"
Password = "TheEye"
File1_rules = {
"Authentication" : {
"Type" : "Basic",
"User" : User,
"Pass" : Password
}
}
File2_rules = {
"ExpectHeader" : {
"Authorization" : "Basic U2F1cm9uOlRoZUV5ZQ=="
}
}
Netrc = "machine 127.0.0.1\n\tlogin {0}\n\tpassword {1}".format(User, Password)
A_File = WgetFile ("File1", File1, rules=File1_rules)
B_File = WgetFile ("File2", File2, rules=File2_rules)
Netrc_File = WgetFile (".netrc", Netrc)
WGET_OPTIONS = "--user={0}".format(User)
WGET_URLS = [["File1", "File2"]]
Files = [[A_File, B_File]]
LocalFiles = [Netrc_File]
ExpectedReturnCode = 0
ExpectedDownloadedFiles = [A_File, B_File, Netrc_File]
################ Pre and Post Test Hooks #####################################
pre_test = {
"ServerFiles" : Files,
"LocalFiles" : LocalFiles
}
test_options = {
"WgetCommands" : WGET_OPTIONS,
"Urls" : WGET_URLS
}
post_test = {
"ExpectedFiles" : ExpectedDownloadedFiles,
"ExpectedRetcode" : ExpectedReturnCode
}
err = HTTPTest (
pre_hook=pre_test,
test_params=test_options,
post_hook=post_test
).begin ()
exit (err)

View File

@ -0,0 +1,66 @@
#!/usr/bin/env python3
from sys import exit
from test.http_test import HTTPTest
from misc.wget_file import WgetFile
"""
This test ensures Wget uses credentials from .netrc for Basic Authorization Negotiation.
In this case we test that .netrc credentials are used in case no user
login and no password is given on the command line.
Also, we ensure that Wget saves the host after a successful auth and
doesn't wait for a challenge the second time.
"""
############# File Definitions ###############################################
File1 = "I am an invisble man."
File2 = "I too am an invisible man."
User = "Sauron"
Password = "TheEye"
File1_rules = {
"Authentication" : {
"Type" : "Basic",
"User" : User,
"Pass" : Password
}
}
File2_rules = {
"ExpectHeader" : {
"Authorization" : "Basic U2F1cm9uOlRoZUV5ZQ=="
}
}
Netrc = "machine 127.0.0.1\n\tlogin {0}\n\tpassword {1}".format(User, Password)
A_File = WgetFile ("File1", File1, rules=File1_rules)
B_File = WgetFile ("File2", File2, rules=File2_rules)
Netrc_File = WgetFile (".netrc", Netrc)
WGET_URLS = [["File1", "File2"]]
Files = [[A_File, B_File]]
LocalFiles = [Netrc_File]
ExpectedReturnCode = 0
ExpectedDownloadedFiles = [A_File, B_File, Netrc_File]
################ Pre and Post Test Hooks #####################################
pre_test = {
"ServerFiles" : Files,
"LocalFiles" : LocalFiles
}
test_options = {
"Urls" : WGET_URLS
}
post_test = {
"ExpectedFiles" : ExpectedDownloadedFiles,
"ExpectedRetcode" : ExpectedReturnCode
}
err = HTTPTest (
pre_hook=pre_test,
test_params=test_options,
post_hook=post_test
).begin ()
exit (err)

View File

@ -102,7 +102,7 @@ class BaseTest:
time.sleep(float(os.getenv("SERVER_WAIT")))
try:
ret_code = call(params)
ret_code = call(params, env={"HOME": os.getcwd()})
except FileNotFoundError:
raise TestFailed("The Wget Executable does not exist at the "
"expected path.")