1#!/usr/bin/env python3
2from sys import exit
3from test.http_test import HTTPTest
4from misc.wget_file import WgetFile
5
6"""
7    This test ensures Wget's Basic Authorization Negotiation.
8    Also, we ensure that Wget saves the host after a successfull auth and
9    doesn't wait for a challenge the second time.
10"""
11TEST_NAME = "Multiple authentication support"
12############# File Definitions ###############################################
13File1 = "Would you like some Tea?"
14File2 = "With lemon or cream?"
15File3 = "Sure you're joking Mr. Feynman"
16
17File1_rules = {
18    "Authentication"    : {
19        "Type"          : "Both",
20        "User"          : "Sauron",
21        "Pass"          : "TheEye"
22    },
23    "RejectHeader"      : {
24        "Authorization" : "Basic U2F1cm9uOlRoZUV5ZQ=="
25    }
26}
27File2_rules = {
28    "Authentication"    : {
29        "Type"          : "Both_inline",
30        "User"          : "Sauron",
31        "Pass"          : "TheEye"
32    },
33    "RejectHeader"      : {
34        "Authorization" : "Basic U2F1cm9uOlRoZUV5ZQ=="
35    }
36}
37File3_rules = {
38    "Authentication"    : {
39        "Type"          : "Digest",
40        "User"          : "Sauron",
41        "Pass"          : "TheEye"
42    }
43}
44
45A_File = WgetFile ("File1", File1, rules=File1_rules)
46B_File = WgetFile ("File2", File2, rules=File2_rules)
47C_File = WgetFile ("File3", File3, rules=File3_rules)
48
49WGET_OPTIONS = "--user=Sauron --password=TheEye"
50WGET_URLS = [["File1", "File2", "File3"]]
51
52Files = [[A_File, B_File, C_File]]
53
54ExpectedReturnCode = 0
55ExpectedDownloadedFiles = [A_File, B_File, C_File]
56
57################ Pre and Post Test Hooks #####################################
58pre_test = {
59    "ServerFiles"       : Files
60}
61test_options = {
62    "WgetCommands"      : WGET_OPTIONS,
63    "Urls"              : WGET_URLS
64}
65post_test = {
66    "ExpectedFiles"     : ExpectedDownloadedFiles,
67    "ExpectedRetcode"   : ExpectedReturnCode
68}
69
70err = HTTPTest (
71                name=TEST_NAME,
72                pre_hook=pre_test,
73                test_params=test_options,
74                post_hook=post_test
75).begin ()
76
77exit (err)
78