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(a)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"