diff --git a/testenv/Makefile.am b/testenv/Makefile.am index 9acf0f34..10584219 100644 --- a/testenv/Makefile.am +++ b/testenv/Makefile.am @@ -54,7 +54,8 @@ if HAVE_PYTHON3 Test-504.py \ Test--spider-r.py \ Test-redirect-crash.py \ - Test-reserved-chars.py + Test-reserved-chars.py \ + Test-condget.py # added test cases expected to fail here and under TESTS XFAIL_TESTS = diff --git a/testenv/Test-condget.py b/testenv/Test-condget.py new file mode 100755 index 00000000..c9e8b2ab --- /dev/null +++ b/testenv/Test-condget.py @@ -0,0 +1,140 @@ +#!/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 +""" +TEST_NAME = "HTTP Conditional-GET Requests" +############# 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 uptodate 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 ( + name=TEST_NAME, + pre_hook=pre_test, + test_params=test_options, + post_hook=post_test +).begin () + +exit (err)