1#!/usr/bin/env python3
2from sys import exit
3from test.http_test import HTTPTest
4from misc.wget_file import WgetFile
5
6"""
7    Simple test for HTTP Conditional-GET Requests using the -N command
8"""
9############# File Definitions ###############################################
10# Keep same length !
11Cont1 = """THIS IS 1 FILE"""
12Cont2 = """THIS IS 2 FILE"""
13Cont3 = """THIS IS 3 FILE"""
14Cont4 = """THIS IS 4 FILE"""
15
16# Local Wget files
17
18# These have same timestamp as remote files
19UpToDate_Local_File1 = WgetFile ("UpToDateFile1", Cont1, timestamp="1995-01-01 00:00:00")
20UpToDate_Local_File2 = WgetFile ("UpToDateFile2", Cont1, timestamp="1995-01-01 00:00:00")
21UpToDate_Local_File3 = WgetFile ("UpToDateFile3", Cont1, timestamp="1995-01-01 00:00:00")
22
23# This is newer than remote (expected same behaviour as for above files)
24Newer_Local_File = WgetFile ("NewerFile", Cont1, timestamp="1995-02-02 02:02:02")
25
26# This is older than remote - should be clobbered
27Outdated_Local_File = WgetFile ("UpdatedFile",  Cont2, timestamp="1990-01-01 00:00:00")
28
29UpToDate_Rules1 = {
30    "SendHeader" : {
31        # RFC1123 format
32        "Last-Modified" : "Sun, 01 Jan 1995 00:00:00 GMT",
33    },
34    "Response": 304,
35    "ExpectHeader" : {
36        "If-Modified-Since" : "Sun, 01 Jan 1995 00:00:00 GMT"
37    },
38}
39
40UpToDate_Rules2 = {
41    "SendHeader" : {
42        # RFC850 format
43        "Last-Modified" : "Sunday, 01-Jan-95 00:00:00 GMT",
44    },
45    "Response": 304,
46    "ExpectHeader" : {
47        "If-Modified-Since" : "Sun, 01 Jan 1995 00:00:00 GMT"
48    },
49}
50
51UpToDate_Rules3 = {
52    "SendHeader" : {
53        # Asctime format
54        "Last-Modified" : "Sun Jan 01 00:00:00 1995",
55    },
56    "Response": 304,
57    "ExpectHeader" : {
58        "If-Modified-Since" : "Sun, 01 Jan 1995 00:00:00 GMT"
59    },
60}
61
62Newer_Rules = {
63    "SendHeader" : {
64        # Asctime format
65        "Last-Modified" : "Sun Jan 01 00:00:00 1995",
66    },
67    "Response": 304,
68    "ExpectHeader" : {
69        "If-Modified-Since" : "Thu, 02 Feb 1995 02:02:02 GMT"
70    },
71}
72
73Outdated_Rules = {
74    "SendHeader" : {
75        # RFC850 format
76        "Last-Modified" : "Thursday, 01-Jan-15 00:00:00 GMT",
77    },
78    "ExpectHeader" : {
79        "If-Modified-Since" : "Mon, 01 Jan 1990 00:00:00 GMT",
80    },
81}
82
83UpToDate_Server_File1 = WgetFile ("UpToDateFile1", Cont3, rules=UpToDate_Rules1)
84UpToDate_Server_File2 = WgetFile ("UpToDateFile2", Cont3, rules=UpToDate_Rules2)
85UpToDate_Server_File3 = WgetFile ("UpToDateFile3", Cont3, rules=UpToDate_Rules3)
86Newer_Server_File = WgetFile ("NewerFile", Cont3, rules=Newer_Rules)
87Updated_Server_File = WgetFile  ("UpdatedFile",  Cont4, rules=Outdated_Rules)
88
89WGET_OPTIONS = "-N"
90WGET_URLS = [["UpToDateFile1", "UpToDateFile2", "UpToDateFile3", "NewerFile",
91              "UpdatedFile", ]]
92
93Files = [[UpToDate_Server_File1, UpToDate_Server_File2, UpToDate_Server_File3,
94          Newer_Server_File, Updated_Server_File, ]]
95
96Existing_Files = [UpToDate_Local_File1, UpToDate_Local_File2,
97                  UpToDate_Local_File3, Newer_Local_File, Outdated_Local_File]
98
99ExpectedReturnCode = 0
100
101# The up-to-date file should not be downloaded
102ExpectedDownloadedFiles = [UpToDate_Local_File1, UpToDate_Local_File2,
103                           UpToDate_Local_File3, Newer_Local_File,
104                           Updated_Server_File]
105
106# Kind of hack to ensure proper request types
107Request_List = [
108    [
109        "GET /UpToDateFile1",
110        "GET /UpToDateFile2",
111        "GET /UpToDateFile3",
112        "GET /NewerFile",
113        "GET /UpdatedFile",
114    ]
115]
116
117################ Pre and Post Test Hooks #####################################
118pre_test = {
119    "ServerFiles"       : Files,
120    "LocalFiles"        : Existing_Files
121}
122test_options = {
123    "WgetCommands"      : WGET_OPTIONS,
124    "Urls"              : WGET_URLS
125}
126post_test = {
127    "ExpectedFiles"     : ExpectedDownloadedFiles,
128    "ExpectedRetcode"   : ExpectedReturnCode,
129    "FilesCrawled"      : Request_List,
130}
131
132err = HTTPTest (
133                pre_hook=pre_test,
134                test_params=test_options,
135                post_hook=post_test
136).begin ()
137
138exit (err)
139