From 68c0fbf13ca1705504f1b59ca7420bedd2fe2d5e Mon Sep 17 00:00:00 2001 From: Darshit Shah Date: Wed, 8 Oct 2014 16:57:22 +0530 Subject: [PATCH 2/2] Minor optimizations of Python tests --- testenv/ChangeLog | 15 +++++++++++++ testenv/Makefile.am | 1 + testenv/conf/__init__.py | 5 ++--- testenv/misc/colour_terminal.py | 10 ++++----- testenv/server/http/http_server.py | 44 ++++++-------------------------------- testenv/test/base_test.py | 3 +-- 6 files changed, 29 insertions(+), 49 deletions(-) diff --git a/testenv/ChangeLog b/testenv/ChangeLog index ed58a69..18087b6 100644 --- a/testenv/ChangeLog +++ b/testenv/ChangeLog @@ -1,3 +1,18 @@ +2014-10-01 Darshit Shah + + * Makefile.am: Run the tests in Python's Optimizedmode + * conf/__init__.py (gen_hook): Use try..except instead of if..else + * misc/color_terminal.py: System and check will not change while a test is + run. Do not test for them on every invokation of printer() + * server/http/http_server.py: The ssl and re modules are required by + specific functions. Load them lazily + (HTTPSServer.__init__): Lazy load ssl module here + (_handler.parse_range_header): Lazy load re module here + (_Handler.get_rule_list): get() can return a default value. Use it + (_Handler.guess_type): Same + (_Handler.is_authorized): Unused function artefact. Remove + (_Handler.reject_headers): Unused function artefact. Remove + 2014-10-08 Darshit Shah * Makefile.am: Fix EXTRA_DIST variable for make distcheck diff --git a/testenv/Makefile.am b/testenv/Makefile.am index 7cf69b5..09320b0 100644 --- a/testenv/Makefile.am +++ b/testenv/Makefile.am @@ -52,5 +52,6 @@ TESTS = Test-auth-basic-fail.py \ XFAIL_TESTS = Test-auth-both.py LOG_COMPILER = python3 +AM_LOG_FLAGS = -O EXTRA_DIST = certs conf exc misc server test README $(TESTS) diff --git a/testenv/conf/__init__.py b/testenv/conf/__init__.py index 603bd62..4b5ddc4 100644 --- a/testenv/conf/__init__.py +++ b/testenv/conf/__init__.py @@ -3,7 +3,6 @@ import os # this file implements the mechanism of conf class auto-registration, # don't modify this file if you have no idea what you're doing - def gen_hook(): hook_table = {} @@ -24,9 +23,9 @@ def gen_hook(): return cls def find_hook(name): - if name in hook_table: + try: return hook_table[name] - else: + except: raise AttributeError return Wrapper, find_hook diff --git a/testenv/misc/colour_terminal.py b/testenv/misc/colour_terminal.py index cfbae94..b0849c1 100644 --- a/testenv/misc/colour_terminal.py +++ b/testenv/misc/colour_terminal.py @@ -25,14 +25,12 @@ T_COLORS = { 'ENDC' : '\033[0m' } +system = True if platform.system() == 'Linux' else False +check = False if getenv("MAKE_CHECK") == 'True' else True def printer (color, string): - if platform.system () == 'Linux': - if getenv ("MAKE_CHECK", "False") == "True": - print (string) - else: - print (T_COLORS.get (color) + string + T_COLORS.get ('ENDC')) - + if system and check: + print (T_COLORS.get (color) + string + T_COLORS.get ('ENDC')) else: print (string) diff --git a/testenv/server/http/http_server.py b/testenv/server/http/http_server.py index 569cae2..22141f6 100644 --- a/testenv/server/http/http_server.py +++ b/testenv/server/http/http_server.py @@ -7,10 +7,9 @@ from random import random from hashlib import md5 import threading import socket -import re -import ssl import os + class StoppableHTTPServer (HTTPServer): """ This class extends the HTTPServer class from default http.server library in Python 3. The StoppableHTTPServer class is capable of starting an HTTP @@ -36,6 +35,7 @@ class HTTPSServer (StoppableHTTPServer): additional support for secure connections through SSL. """ def __init__ (self, address, handler): + import ssl BaseServer.__init__ (self, address, handler) CERTFILE = os.path.abspath(os.path.join('..', os.getenv('srcdir', '.'), 'certs', 'wget-cert.pem')) fop = open (CERTFILE) @@ -59,8 +59,7 @@ class _Handler (BaseHTTPRequestHandler): requests. """ def get_rule_list (self, name): - r_list = self.rules.get (name) if name in self.rules else None - return r_list + return self.rules.get(name) # The defailt protocol version of the server we run is HTTP/1.1 not # HTTP/1.0 which is the default with the http.server module. @@ -133,6 +132,7 @@ class _Handler (BaseHTTPRequestHandler): """ Helper functions for the Handlers. """ def parse_range_header (self, header_line, length): + import re if header_line is None: return None if not header_line.startswith ("bytes="): @@ -314,23 +314,6 @@ class _Handler (BaseHTTPRequestHandler): if is_auth is False: raise ServerError ("Unable to Authenticate") - def is_authorized (self): - is_auth = True - auth_rule = self.get_rule_list ('Authentication') - if auth_rule: - auth_header = self.headers.get ("Authorization") - req_auth = auth_rule.auth_type - if req_auth == "Both" or req_auth == "Both_inline": - auth_type = auth_header.split(' ')[0] if auth_header else req_auth - else: - auth_type = req_auth - assert hasattr (self, "authorize_" + auth_type) - is_auth = getattr (self, "authorize_" + auth_type) (auth_header, auth_rule) - if is_auth is False: - self.send_response (401) - self.send_challenge (auth_type) - self.finish_headers () - return is_auth def ExpectHeader (self, header_obj): exp_headers = header_obj.headers @@ -341,6 +324,7 @@ class _Handler (BaseHTTPRequestHandler): self.finish_headers () raise ServerError ("Header " + header_line + " not found") + def RejectHeader (self, header_obj): rej_headers = header_obj.headers for header_line in rej_headers: @@ -350,18 +334,6 @@ class _Handler (BaseHTTPRequestHandler): self.finish_headers () raise ServerError ("Header " + header_line + ' received') - def reject_headers (self): - rej_headers = self.get_rule_list ("RejectHeader") - if rej_headers: - rej_headers = rej_headers.headers - for header_line in rej_headers: - header_re = self.headers.get (header_line) - if header_re is not None and header_re == rej_headers[header_line]: - self.send_error (400, 'Blacklisted Header was Sent') - self.end_headers () - return False - return True - def __log_request (self, method): req = method + " " + self.path self.server.request_headers.append (req) @@ -437,11 +409,7 @@ class _Handler (BaseHTTPRequestHandler): ".css" : "text/css", ".html" : "text/html" } - if ext in extension_map: - return extension_map[ext] - else: - return "text/plain" - + return extension_map.get(ext, "text/plain") class HTTPd (threading.Thread): server_class = StoppableHTTPServer diff --git a/testenv/test/base_test.py b/testenv/test/base_test.py index 14143c2..665b3c5 100644 --- a/testenv/test/base_test.py +++ b/testenv/test/base_test.py @@ -116,9 +116,8 @@ class BaseTest: # 1 a # 5 e # 3 c - protocol = protocol.lower() for url in urls: - cmd_line += '%s://%s/%s ' % (protocol, domain, url) + cmd_line += '%s://%s/%s ' % (protocol.lower(), domain, url) print(cmd_line) -- 2.1.2