diff --git a/testenv/Makefile.am b/testenv/Makefile.am index ef4158aa..4c4b5753 100644 --- a/testenv/Makefile.am +++ b/testenv/Makefile.am @@ -73,6 +73,7 @@ endif if HAVE_PYTHON3 TESTS = Test-504.py \ + Test-416.py \ Test-auth-basic-fail.py \ Test-auth-basic.py \ Test-auth-basic-netrc.py \ diff --git a/testenv/Test-416.py b/testenv/Test-416.py new file mode 100755 index 00000000..76b94213 --- /dev/null +++ b/testenv/Test-416.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python3 +from sys import exit +from test.http_test import HTTPTest +from misc.wget_file import WgetFile + +""" + Ensure that Wget behaves well when the server responds with a HTTP 416 + status code. This test checks both cases: + 1. Server sends no body + 2. Server sends a body +""" +############# File Definitions ############################################### +File1 = "abababababababababababababababababababababababababababababababababab" +File2 = "ababababababababababababababababababab" + +A_File = WgetFile ("File1", File1) +B_File = WgetFile ("File1", File1) + +C_File = WgetFile ("File2", File2) +D_File = WgetFile ("File2", File1) + +E_File = WgetFile ("File3", File1) + +WGET_OPTIONS = "-c" +WGET_URLS = [["File1", "File2", "File3"]] + +Files = [[A_File, C_File, E_File]] +Existing_Files = [B_File, D_File] + +ExpectedReturnCode = 0 +ExpectedDownloadedFiles = [B_File, D_File, E_File] + +################ 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 +} + +err = HTTPTest ( + pre_hook=pre_test, + test_params=test_options, + post_hook=post_test +).begin () + +exit (err) diff --git a/testenv/server/http/http_server.py b/testenv/server/http/http_server.py index ffc80ed3..434666dd 100644 --- a/testenv/server/http/http_server.py +++ b/testenv/server/http/http_server.py @@ -425,8 +425,16 @@ class _Handler(BaseHTTPRequestHandler): except ServerError as ae: # self.log_error("%s", ae.err_message) if ae.err_message == "Range Overflow": + try: + self.overflows += 1 + except AttributeError as s: + self.overflows = 0 self.send_response(416) + if self.overflows > 0: + self.add_header("Content-Length", 17) self.finish_headers() + if self.overflows > 0: + return("Range Unsatisfied", 0) return(None, None) else: self.range_begin = None