From c17b04767a1b58ee8f88889db53af431ef1e63b5 Mon Sep 17 00:00:00 2001 From: Darshit Shah Date: Fri, 8 Dec 2017 18:41:07 +0100 Subject: [PATCH 2/2] Add new test for 416 responses * testenv/server/http/http_server.py: If there are multiple requests in which the requested range is unsatisfiable, then send a body in the in the 2nd response onwards * testenv/Test-416.py: New test to check how Wget handles 416 responses --- testenv/Test-416.py | 53 ++++++++++++++++++++++++++++++++++++++ testenv/server/http/http_server.py | 8 ++++++ 2 files changed, 61 insertions(+) create mode 100755 testenv/Test-416.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 -- 2.15.1