276 lines
8.5 KiB
Diff
276 lines
8.5 KiB
Diff
From 17960b57d51ffb19b2b20df3e53da42c555f022c Mon Sep 17 00:00:00 2001
|
|
From: Tomas Hozza <thozza@redhat.com>
|
|
Date: Fri, 12 May 2017 19:17:30 +0200
|
|
Subject: [PATCH 1/4] 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>
|
|
---
|
|
testenv/Makefile.am | 3 ++
|
|
testenv/Test-auth-basic-netrc-pass-given.py | 68 +++++++++++++++++++++++++++++
|
|
testenv/Test-auth-basic-netrc-user-given.py | 68 +++++++++++++++++++++++++++++
|
|
testenv/Test-auth-basic-netrc.py | 66 ++++++++++++++++++++++++++++
|
|
testenv/test/base_test.py | 2 +-
|
|
5 files changed, 206 insertions(+), 1 deletion(-)
|
|
create mode 100755 testenv/Test-auth-basic-netrc-pass-given.py
|
|
create mode 100755 testenv/Test-auth-basic-netrc-user-given.py
|
|
create mode 100755 testenv/Test-auth-basic-netrc.py
|
|
|
|
diff --git a/testenv/Makefile.am b/testenv/Makefile.am
|
|
index 3febec7..7104314 100644
|
|
--- a/testenv/Makefile.am
|
|
+++ b/testenv/Makefile.am
|
|
@@ -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 \
|
|
diff --git a/testenv/Test-auth-basic-netrc-pass-given.py b/testenv/Test-auth-basic-netrc-pass-given.py
|
|
new file mode 100755
|
|
index 0000000..43dfe34
|
|
--- /dev/null
|
|
+++ b/testenv/Test-auth-basic-netrc-pass-given.py
|
|
@@ -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)
|
|
diff --git a/testenv/Test-auth-basic-netrc-user-given.py b/testenv/Test-auth-basic-netrc-user-given.py
|
|
new file mode 100755
|
|
index 0000000..57b6148
|
|
--- /dev/null
|
|
+++ b/testenv/Test-auth-basic-netrc-user-given.py
|
|
@@ -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)
|
|
diff --git a/testenv/Test-auth-basic-netrc.py b/testenv/Test-auth-basic-netrc.py
|
|
new file mode 100755
|
|
index 0000000..5710fe7
|
|
--- /dev/null
|
|
+++ b/testenv/Test-auth-basic-netrc.py
|
|
@@ -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)
|
|
diff --git a/testenv/test/base_test.py b/testenv/test/base_test.py
|
|
index b0087e9..bb706d8 100644
|
|
--- a/testenv/test/base_test.py
|
|
+++ b/testenv/test/base_test.py
|
|
@@ -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.")
|
|
--
|
|
2.7.5
|
|
|