
Hi Lucio, After applying this patch, I got the following errors while running the tests: ====================================================================== ERROR: test_production_env (test_server_root.ServerRootTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "test_server_root.py", line 47, in test_production_env setup_server('production', server_root) File "test_server_root.py", line 35, in setup_server server_root=server_root) File "utils.py", line 102, in run_server s = wok.server.Server(args) File "/home/alinefm/wok/src/wok/server.py", line 148, in __init__ self.reqLogger = RequestLogger() File "/home/alinefm/wok/src/wok/reqlogger.py", line 123, in __init__ h = logging.handlers.WatchedFileHandler(log, 'a') File "/usr/lib64/python2.7/logging/handlers.py", line 391, in __init__ logging.FileHandler.__init__(self, filename, mode, encoding, delay) File "/usr/lib64/python2.7/logging/__init__.py", line 913, in __init__ StreamHandler.__init__(self, self._open()) File "/usr/lib64/python2.7/logging/__init__.py", line 943, in _open stream = open(self.baseFilename, self.mode) IOError: [Errno 13] Permission denied: '/home/alinefm/wok/data/user-requests.data' ====================================================================== ERROR: test_production_env (test_server_root.ServerRootTests) ---------------------------------------------------------------------- Traceback (most recent call last): File "test_server_root.py", line 40, in tearDown test_server.stop() AttributeError: 'NoneType' object has no attribute 'stop' ---------------------------------------------------------------------- Ran 21 tests in 30.105s FAILED (errors=12) I have already deleted the former user-requests.data file but the error keeps the same. Do I need to do something before tetsing this patch? Regards, Aline Manera On 02/24/2017 05:54 PM, Lucio Correia wrote:
Currently administration permissions are required to run tests in order to change nginx configuration.
With this patch, tests requests are handled directly by cherrypy, without being proxied by nginx. This allows tests to be run without administration permissions.
Signed-off-by: Lucio Correia <luciojhc@linux.vnet.ibm.com> --- src/wok/server.py | 3 ++- tests/utils.py | 17 ++++++++++++----- 2 files changed, 14 insertions(+), 6 deletions(-)
diff --git a/src/wok/server.py b/src/wok/server.py index fc2e167..cdffe6d 100644 --- a/src/wok/server.py +++ b/src/wok/server.py @@ -69,7 +69,8 @@ class Server(object): config.config.set(sec, item, str(getattr(options, item)))
# Check proxy configuration - check_proxy_config() + if not hasattr(options, 'no_proxy') or not options.no_proxy: + check_proxy_config()
make_dirs = [ os.path.abspath(config.get_log_download_path()), diff --git a/tests/utils.py b/tests/utils.py index 3c7e9da..2e4c63a 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -40,6 +40,7 @@ from wok.exception import NotFoundError, OperationFailed from wok.utils import wok_log
HOST = '0.0.0.0' +PORT = 8010 PROXY_PORT = 8001
fake_user = {'admin': 'letmein!', 'user': 'letmein!'} @@ -88,14 +89,15 @@ if sys.version_info[:2] == (2, 6): unittest.TestCase.assertNotIn = assertNotIn
-def run_server(test_mode, environment='dev', server_root=''): +def run_server(test_mode, environment='dev', server_root='', no_proxy=True):
+ port = PORT if no_proxy else PROXY_PORT args = type('_', (object,), - {'cherrypy_port': 8010, 'max_body_size': '4*1024', + {'cherrypy_port': port, 'max_body_size': '4*1024', 'test': test_mode, 'access_log': '/dev/null', 'error_log': '/dev/null', 'environment': environment, 'log_level': 'debug', 'session_timeout': 10, - 'server_root': server_root})() + 'server_root': server_root, 'no_proxy': no_proxy})()
s = wok.server.Server(args) t = threading.Thread(target=s.start) @@ -121,8 +123,8 @@ def _request(conn, path, data, method, headers, user): return conn.getresponse()
-def request(path, data=None, method='GET', headers=None, user='admin'): - # verify if HTTPSConnection has context parameter +def requestHttps(path, data=None, method='GET', headers=None, user='admin'): + # To work, this requires run_server() to be called with no_proxy=False. if "context" in inspect.getargspec(httplib.HTTPSConnection.__init__).args: context = ssl._create_unverified_context() conn = httplib.HTTPSConnection(HOST, PROXY_PORT, context=context) @@ -132,6 +134,11 @@ def request(path, data=None, method='GET', headers=None, user='admin'): return _request(conn, path, data, method, headers, user)
+def request(path, data=None, method='GET', headers=None, user='admin'): + conn = httplib.HTTPConnection(HOST, PORT) + return _request(conn, path, data, method, headers, user) + + class FakeUser(User): auth_type = "fake"