[Kimchi-devel] [PATCH] [Wok] Do not use proxy when running tests

Lucio Correia posted 1 patch 7 years, 1 month ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/kimchi-wok tags/patchew/1487969663-13676-2-git-send-email-luciojhc@linux.vnet.ibm.com
Test Unit Tests passed
src/wok/server.py |  3 ++-
tests/utils.py    | 17 ++++++++++++-----
2 files changed, 14 insertions(+), 6 deletions(-)
[Kimchi-devel] [PATCH] [Wok] Do not use proxy when running tests
Posted by Lucio Correia 7 years, 1 month ago
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"
 
-- 
2.7.4

_______________________________________________
Kimchi-devel mailing list
Kimchi-devel@ovirt.org
http://lists.ovirt.org/mailman/listinfo/kimchi-devel
Re: [Kimchi-devel] [PATCH] [Wok] Do not use proxy when running tests
Posted by Aline Manera 7 years ago
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"
>

_______________________________________________
Kimchi-devel mailing list
Kimchi-devel@ovirt.org
http://lists.ovirt.org/mailman/listinfo/kimchi-devel
Re: [Kimchi-devel] [PATCH] [Wok] Do not use proxy when running tests
Posted by Lucio Correia 7 years ago
On 27/02/2017 10:42, Aline Manera wrote:
> 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
Yes, you need to remove the data dir as well, since it also has wrong 
permission.

-- 
Lucio Correia

_______________________________________________
Kimchi-devel mailing list
Kimchi-devel@ovirt.org
http://lists.ovirt.org/mailman/listinfo/kimchi-devel