summaryrefslogtreecommitdiffstats
path: root/testenv/Test-condget.py
blob: a192f92e9160a77ad1b2b8b787b523c705eda1e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#!/usr/bin/env python3
from sys import exit
from test.http_test import HTTPTest
from misc.wget_file import WgetFile

"""
    Simple test for HTTP Conditional-GET Requests using the -N command
"""
############# File Definitions ###############################################
# Keep same length !
Cont1 = """THIS IS 1 FILE"""
Cont2 = """THIS IS 2 FILE"""
Cont3 = """THIS IS 3 FILE"""
Cont4 = """THIS IS 4 FILE"""

# Local Wget files

# These have same timestamp as remote files
UpToDate_Local_File1 = WgetFile ("UpToDateFile1", Cont1, timestamp="1995-01-01 00:00:00")
UpToDate_Local_File2 = WgetFile ("UpToDateFile2", Cont1, timestamp="1995-01-01 00:00:00")
UpToDate_Local_File3 = WgetFile ("UpToDateFile3", Cont1, timestamp="1995-01-01 00:00:00")

# This is newer than remote (expected same behaviour as for above files)
Newer_Local_File = WgetFile ("NewerFile", Cont1, timestamp="1995-02-02 02:02:02")

# This is older than remote - should be clobbered
Outdated_Local_File = WgetFile ("UpdatedFile",  Cont2, timestamp="1990-01-01 00:00:00")

UpToDate_Rules1 = {
    "SendHeader" : {
        # RFC1123 format
        "Last-Modified" : "Sun, 01 Jan 1995 00:00:00 GMT",
    },
    "Response": 304,
    "ExpectHeader" : {
        "If-Modified-Since" : "Sun, 01 Jan 1995 00:00:00 GMT"
    },
}

UpToDate_Rules2 = {
    "SendHeader" : {
        # RFC850 format
        "Last-Modified" : "Sunday, 01-Jan-95 00:00:00 GMT",
    },
    "Response": 304,
    "ExpectHeader" : {
        "If-Modified-Since" : "Sun, 01 Jan 1995 00:00:00 GMT"
    },
}

UpToDate_Rules3 = {
    "SendHeader" : {
        # Asctime format
        "Last-Modified" : "Sun Jan 01 00:00:00 1995",
    },
    "Response": 304,
    "ExpectHeader" : {
        "If-Modified-Since" : "Sun, 01 Jan 1995 00:00:00 GMT"
    },
}

Newer_Rules = {
    "SendHeader" : {
        # Asctime format
        "Last-Modified" : "Sun Jan 01 00:00:00 1995",
    },
    "Response": 304,
    "ExpectHeader" : {
        "If-Modified-Since" : "Thu, 02 Feb 1995 02:02:02 GMT"
    },
}

Outdated_Rules = {
    "SendHeader" : {
        # RFC850 format
        "Last-Modified" : "Thursday, 01-Jan-15 00:00:00 GMT",
    },
    "ExpectHeader" : {
        "If-Modified-Since" : "Mon, 01 Jan 1990 00:00:00 GMT",
    },
}

UpToDate_Server_File1 = WgetFile ("UpToDateFile1", Cont3, rules=UpToDate_Rules1)
UpToDate_Server_File2 = WgetFile ("UpToDateFile2", Cont3, rules=UpToDate_Rules2)
UpToDate_Server_File3 = WgetFile ("UpToDateFile3", Cont3, rules=UpToDate_Rules3)
Newer_Server_File = WgetFile ("NewerFile", Cont3, rules=Newer_Rules)
Updated_Server_File = WgetFile  ("UpdatedFile",  Cont4, rules=Outdated_Rules)

WGET_OPTIONS = "-N"
WGET_URLS = [["UpToDateFile1", "UpToDateFile2", "UpToDateFile3", "NewerFile",
              "UpdatedFile", ]]

Files = [[UpToDate_Server_File1, UpToDate_Server_File2, UpToDate_Server_File3,
          Newer_Server_File, Updated_Server_File, ]]

Existing_Files = [UpToDate_Local_File1, UpToDate_Local_File2,
                  UpToDate_Local_File3, Newer_Local_File, Outdated_Local_File]

ExpectedReturnCode = 0

# The up-to-date file should not be downloaded
ExpectedDownloadedFiles = [UpToDate_Local_File1, UpToDate_Local_File2,
                           UpToDate_Local_File3, Newer_Local_File,
                           Updated_Server_File]

# Kind of hack to ensure proper request types
Request_List = [
    [
        "GET /UpToDateFile1",
        "GET /UpToDateFile2",
        "GET /UpToDateFile3",
        "GET /NewerFile",
        "GET /UpdatedFile",
    ]
]

################ Pre and Post Test Hooks #####################################
pre_test = {
    "ServerFiles"       : Files,
    "LocalFiles"        : Existing_Files
}
test_options = {
    "WgetCommands"      : WGET_OPTIONS,
    "Urls"              : WGET_URLS
}
post_test = {
    "ExpectedFiles"     : ExpectedDownloadedFiles,
    "ExpectedRetcode"   : ExpectedReturnCode,
    "FilesCrawled"      : Request_List,
}

err = HTTPTest (
                pre_hook=pre_test,
                test_params=test_options,
                post_hook=post_test
).begin ()

exit (err)