[PATCH 0/2] Fix test cases and server setup

From: Aline Manera <alinefm@br.ibm.com> Aline Manera (2): bug fix: Update test cases to use HTTPS bug fix: Allow changing default ports src/kimchi.conf.in | 3 ++ src/kimchi/config.py.in | 6 ++-- src/kimchi/proxy.py | 6 ++-- src/kimchi/server.py | 4 +-- src/kimchid.in | 17 ++++----- tests/test_authorization.py | 5 +-- tests/test_exception.py | 24 +++++++------ tests/test_mockmodel.py | 25 ++++++++------ tests/test_plugin.py | 5 +-- tests/test_rest.py | 80 ++++++++++++++++++++++--------------------- tests/test_server.py | 7 ++-- tests/utils.py | 20 +++++------ 12 files changed, 105 insertions(+), 97 deletions(-) -- 1.7.10.4

From: Aline Manera <alinefm@br.ibm.com> As all HTTP requests are redirected to HTTPS, the tests must be done using HTTPS, otherwise all the responses from HTTP requests will be: <html> <head><title>302 Found</title></head> <body bgcolor="white"> <center><h1>302 Found</h1></center> <hr><center>nginx/1.2.1</center> </body> </html> instead of the real data. Fix it. Signed-off-by: Aline Manera <alinefm@br.ibm.com> --- tests/test_authorization.py | 5 ++-- tests/test_exception.py | 24 ++++++++------- tests/test_mockmodel.py | 25 +++++++++------- tests/test_plugin.py | 5 ++-- tests/test_rest.py | 70 ++++++++++++++++++++++--------------------- tests/test_server.py | 7 +++-- tests/utils.py | 5 ---- 7 files changed, 73 insertions(+), 68 deletions(-) diff --git a/tests/test_authorization.py b/tests/test_authorization.py index b211e06..196625e 100644 --- a/tests/test_authorization.py +++ b/tests/test_authorization.py @@ -44,7 +44,8 @@ def setUpModule(): model = kimchi.mockmodel.MockModel('/tmp/obj-store-test') host = '127.0.0.1' port = get_free_port('http') - test_server = run_server(host, port, None, test_mode=True, model=model) + ssl_port = get_free_port('https') + test_server = run_server(host, port, ssl_port, test_mode=True, model=model) def tearDownModule(): @@ -54,7 +55,7 @@ def tearDownModule(): class AuthorizationTests(unittest.TestCase): def setUp(self): - self.request = partial(request, host, port) + self.request = partial(request, host, ssl_port) model.reset() def test_nonroot_access(self): diff --git a/tests/test_exception.py b/tests/test_exception.py index 42041bc..61f4f30 100644 --- a/tests/test_exception.py +++ b/tests/test_exception.py @@ -31,16 +31,18 @@ test_server = None model = None host = None port = None +ssl_port = None def setup_server(environment='development'): - global test_server, model, host, port + global test_server, model, host, port, ssl_port patch_auth() model = kimchi.mockmodel.MockModel('/tmp/obj-store-test') host = '127.0.0.1' - port = get_free_port() - test_server = run_server(host, port, None, test_mode=True, model=model, + port = get_free_port('http') + ssl_port = get_free_port('https') + test_server = run_server(host, port, ssl_port, test_mode=True, model=model, environment=environment) @@ -55,17 +57,17 @@ class ExceptionTests(unittest.TestCase): """ setup_server('production') # test 404 - resp = json.loads(request(host, port, '/vms/blah').read()) + resp = json.loads(request(host, ssl_port, '/vms/blah').read()) self.assertEquals('404 Not Found', resp.get('code')) # test 405 wrong method - resp = json.loads(request(host, port, '/', None, 'DELETE').read()) + resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read()) msg = u'KCHAPI0002E: Delete is not allowed for kimchiroot' self.assertEquals('405 Method Not Allowed', resp.get('code')) self.assertEquals(msg, resp.get('reason')) # test 400 parse error - resp = json.loads(request(host, port, '/vms', '{', 'POST').read()) + resp = json.loads(request(host, ssl_port, '/vms', '{', 'POST').read()) msg = u'KCHAPI0006E: Unable to parse JSON request' self.assertEquals('400 Bad Request', resp.get('code')) self.assertEquals(msg, resp.get('reason')) @@ -73,7 +75,7 @@ class ExceptionTests(unittest.TestCase): # test 400 missing required parameter req = json.dumps({}) - resp = json.loads(request(host, port, '/vms', req, 'POST').read()) + resp = json.loads(request(host, ssl_port, '/vms', req, 'POST').read()) self.assertEquals('400 Bad Request', resp.get('code')) msg = u"KCHVM0016E: Specify a template to create a virtual machine from" self.assertEquals(msg, resp.get('reason')) @@ -85,17 +87,17 @@ class ExceptionTests(unittest.TestCase): """ setup_server() # test 404 - resp = json.loads(request(host, port, '/vms/blah').read()) + resp = json.loads(request(host, ssl_port, '/vms/blah').read()) self.assertEquals('404 Not Found', resp.get('code')) # test 405 wrong method - resp = json.loads(request(host, port, '/', None, 'DELETE').read()) + resp = json.loads(request(host, ssl_port, '/', None, 'DELETE').read()) msg = u'KCHAPI0002E: Delete is not allowed for kimchiroot' self.assertEquals('405 Method Not Allowed', resp.get('code')) self.assertEquals(msg, resp.get('reason')) # test 400 parse error - resp = json.loads(request(host, port, '/vms', '{', 'POST').read()) + resp = json.loads(request(host, ssl_port, '/vms', '{', 'POST').read()) msg = u'KCHAPI0006E: Unable to parse JSON request' self.assertEquals('400 Bad Request', resp.get('code')) self.assertEquals(msg, resp.get('reason')) @@ -103,7 +105,7 @@ class ExceptionTests(unittest.TestCase): # test 400 missing required parameter req = json.dumps({}) - resp = json.loads(request(host, port, '/vms', req, 'POST').read()) + resp = json.loads(request(host, ssl_port, '/vms', req, 'POST').read()) msg = u"KCHVM0016E: Specify a template to create a virtual machine from" self.assertEquals('400 Bad Request', resp.get('code')) self.assertEquals(msg, resp.get('reason')) diff --git a/tests/test_mockmodel.py b/tests/test_mockmodel.py index 8dd6a03..d43d37c 100644 --- a/tests/test_mockmodel.py +++ b/tests/test_mockmodel.py @@ -33,17 +33,20 @@ test_server = None model = None host = None port = None +ssl_port = None class MockModelTests(unittest.TestCase): def setUp(self): - global port, host, model, test_server + global host, port, ssl_port, model, test_server cherrypy.request.headers = {'Accept': 'application/json'} model = kimchi.mockmodel.MockModel('/tmp/obj-store-test') patch_auth() - port = get_free_port() + port = get_free_port('http') + ssl_port = get_free_port('https') host = '127.0.0.1' - test_server = run_server(host, port, None, test_mode=True, model=model) + test_server = run_server(host, port, ssl_port, test_mode=True, + model=model) def tearDown(self): test_server.stop() @@ -86,21 +89,21 @@ class MockModelTests(unittest.TestCase): def test_screenshot_refresh(self): # Create a VM req = json.dumps({'name': 'test', 'cdrom': '/nonexistent.iso'}) - request(host, port, '/templates', req, 'POST') + request(host, ssl_port, '/templates', req, 'POST') req = json.dumps({'name': 'test-vm', 'template': '/templates/test'}) - request(host, port, '/vms', req, 'POST') + request(host, ssl_port, '/vms', req, 'POST') # Test screenshot refresh for running vm - request(host, port, '/vms/test-vm/start', '{}', 'POST') - resp = request(host, port, '/vms/test-vm/screenshot') + request(host, ssl_port, '/vms/test-vm/start', '{}', 'POST') + resp = request(host, ssl_port, '/vms/test-vm/screenshot') self.assertEquals(200, resp.status) self.assertEquals('image/png', resp.getheader('content-type')) - resp1 = request(host, port, '/vms/test-vm') + resp1 = request(host, ssl_port, '/vms/test-vm') rspBody = resp1.read() testvm_Data = json.loads(rspBody) screenshotURL = testvm_Data['screenshot'] time.sleep(5) - resp2 = request(host, port, screenshotURL) + resp2 = request(host, ssl_port, screenshotURL) self.assertEquals(200, resp2.status) self.assertEquals(resp2.getheader('content-type'), resp.getheader('content-type')) @@ -111,13 +114,13 @@ class MockModelTests(unittest.TestCase): def test_vm_list_sorted(self): req = json.dumps({'name': 'test', 'cdrom': '/nonexistent.iso'}) - request(host, port, '/templates', req, 'POST') + request(host, ssl_port, '/templates', req, 'POST') def add_vm(name): # Create a VM req = json.dumps({'name': name, 'template': '/templates/test'}) - request(host, port, '/vms', req, 'POST') + request(host, ssl_port, '/vms', req, 'POST') add_vm('bca') add_vm('xba') diff --git a/tests/test_plugin.py b/tests/test_plugin.py index 62c2583..7773a0e 100644 --- a/tests/test_plugin.py +++ b/tests/test_plugin.py @@ -34,6 +34,7 @@ test_server = None model = None host = None port = None +ssl_port = None def setUpModule(): @@ -42,7 +43,7 @@ def setUpModule(): model = kimchi.mockmodel.MockModel('/tmp/obj-store-test') host = '127.0.0.1' port = utils.get_free_port('http') - ssl_port = None + ssl_port = utils.get_free_port('https') test_server = utils.run_server(host, port, ssl_port, test_mode=True, model=model) @@ -55,7 +56,7 @@ def tearDownModule(): class PluginTests(unittest.TestCase): def setUp(self): - self.request = partial(utils.request, host, port) + self.request = partial(utils.request, host, ssl_port) def _create_rectangle(self, name, length, width): req = json.dumps({'name': name, 'length': length, 'width': width}) diff --git a/tests/test_rest.py b/tests/test_rest.py index da3432f..bb52e3f 100644 --- a/tests/test_rest.py +++ b/tests/test_rest.py @@ -35,7 +35,7 @@ import iso_gen import kimchi.mockmodel import kimchi.server from kimchi.rollbackcontext import RollbackContext -from utils import fake_user, get_free_port, https_request, patch_auth, request +from utils import fake_user, get_free_port, patch_auth, request from utils import run_server @@ -83,7 +83,7 @@ class RestTests(unittest.TestCase): cb('in progress') def setUp(self): - self.request = partial(request, host, port) + self.request = partial(request, host, ssl_port) model.reset() def assertHTTPStatus(self, code, *args): @@ -822,7 +822,7 @@ class RestTests(unittest.TestCase): 'allocated': 512, 'path': '/var/lib/libvirt/images/%i' % i, 'type': 'dir'}) - resp = request(host, port, '/storagepools', req, 'POST') + resp = request(host, ssl_port, '/storagepools', req, 'POST') self.assertEquals(400, resp.status) storagepools = json.loads(self.request('/storagepools').read()) @@ -1160,13 +1160,13 @@ class RestTests(unittest.TestCase): req = json.dumps({'name': 'test-network', 'connection': 'nat', 'net': '127.0.1.0/24'}) - resp = request(host, port, '/networks', req, 'POST') + resp = request(host, ssl_port, '/networks', req, 'POST') self.assertEquals(201, resp.status) req = json.dumps({'name': 'test-storagepool', 'path': '/tmp/kimchi-images', 'type': 'dir'}) - resp = request(host, port, '/storagepools', req, 'POST') + resp = request(host, ssl_port, '/storagepools', req, 'POST') self.assertEquals(201, resp.status) t = {'name': 'test', 'memory': 1024, 'cpus': 1, @@ -1180,19 +1180,20 @@ class RestTests(unittest.TestCase): shutil.rmtree(path) # Try to delete network # It should fail as it is associated to a template - resp = json.loads(request(host, port, '/networks/test-network', + resp = json.loads(request(host, ssl_port, '/networks/test-network', '{}', 'DELETE').read()) self.assertIn("KCHNET0017E", resp["reason"]) # Update template to release network and then delete it params = {'networks': []} req = json.dumps(params) - resp = request(host, port, '/templates/test', req, 'PUT') - resp = request(host, port, '/networks/test-network', '{}', 'DELETE') + resp = request(host, ssl_port, '/templates/test', req, 'PUT') + resp = request(host, ssl_port, '/networks/test-network', '{}', + 'DELETE') self.assertEquals(204, resp.status) # Delete the storagepool - resp = request(host, port, '/storagepools/test-storagepool', + resp = request(host, ssl_port, '/storagepools/test-storagepool', '{}', 'DELETE') self.assertEquals(204, resp.status) @@ -1202,7 +1203,7 @@ class RestTests(unittest.TestCase): self.assertEquals(res['invalid']['storagepools'], ['test-storagepool']) # Delete the template - resp = request(host, port, '/templates/test', '{}', 'DELETE') + resp = request(host, ssl_port, '/templates/test', '{}', 'DELETE') self.assertEquals(204, resp.status) def test_iso_scan_shallow(self): @@ -1325,7 +1326,7 @@ class RestTests(unittest.TestCase): self.assertEquals(interface['status'], "active") def test_get_networks(self): - networks = json.loads(request(host, port, '/networks').read()) + networks = json.loads(request(host, ssl_port, '/networks').read()) self.assertEquals(1, len(networks)) self.assertEquals('default', networks[0]['name']) self.assertEquals([], networks[0]['vms']) @@ -1337,21 +1338,21 @@ class RestTests(unittest.TestCase): 'connection': 'nat', 'subnet': '127.0.10%i.0/24' % i}) - resp = request(host, port, '/networks', req, 'POST') + resp = request(host, ssl_port, '/networks', req, 'POST') self.assertEquals(201, resp.status) network = json.loads(resp.read()) self.assertEquals([], network["vms"]) - networks = json.loads(request(host, port, '/networks').read()) + networks = json.loads(request(host, ssl_port, '/networks').read()) self.assertEquals(6, len(networks)) - network = json.loads(request(host, port, + network = json.loads(request(host, ssl_port, '/networks/network-1').read()) self.assertEquals('network-1', network['name']) self.assertEquals('inactive', network['state']) # Delete the network for i in xrange(5): - resp = request(host, port, '/networks/network-%i' % i, + resp = request(host, ssl_port, '/networks/network-%i' % i, '{}', 'DELETE') self.assertEquals(204, resp.status) @@ -1360,31 +1361,32 @@ class RestTests(unittest.TestCase): req = json.dumps({'name': 'test-network', 'connection': 'nat', 'net': '127.0.1.0/24'}) - resp = request(host, port, '/networks', req, 'POST') + resp = request(host, ssl_port, '/networks', req, 'POST') self.assertEquals(201, resp.status) # Verify the network - network = json.loads(request(host, port, + network = json.loads(request(host, ssl_port, '/networks/test-network').read()) self.assertEquals('inactive', network['state']) self.assertTrue(network['persistent']) # activate the network - resp = request(host, port, + resp = request(host, ssl_port, '/networks/test-network/activate', '{}', 'POST') - network = json.loads(request(host, port, + network = json.loads(request(host, ssl_port, '/networks/test-network').read()) self.assertEquals('active', network['state']) # Deactivate the network - resp = request(host, port, + resp = request(host, ssl_port, '/networks/test-network/deactivate', '{}', 'POST') - network = json.loads(request(host, port, + network = json.loads(request(host, ssl_port, '/networks/test-network').read()) self.assertEquals('inactive', network['state']) # Delete the network - resp = request(host, port, '/networks/test-network', '{}', 'DELETE') + resp = request(host, ssl_port, '/networks/test-network', '{}', + 'DELETE') self.assertEquals(204, resp.status) def _wait_task(self, taskid, timeout=5): @@ -1540,23 +1542,23 @@ class RestTests(unittest.TestCase): self.assertIn('KCHDISTRO0001E', distro.get('reason')) def test_debugreports(self): - resp = request(host, port, '/debugreports') + resp = request(host, ssl_port, '/debugreports') self.assertEquals(200, resp.status) def _report_delete(self, name): - request(host, port, '/debugreports/%s' % name, '{}', 'DELETE') + request(host, ssl_port, '/debugreports/%s' % name, '{}', 'DELETE') def test_create_debugreport(self): req = json.dumps({'name': 'report1'}) with RollbackContext() as rollback: - resp = request(host, port, '/debugreports', req, 'POST') + resp = request(host, ssl_port, '/debugreports', req, 'POST') self.assertEquals(202, resp.status) task = json.loads(resp.read()) # make sure the debugreport doesn't exist until the # the task is finished self._wait_task(task['id']) rollback.prependDefer(self._report_delete, 'report1') - resp = request(host, port, '/debugreports/report1') + resp = request(host, ssl_port, '/debugreports/report1') debugreport = json.loads(resp.read()) self.assertEquals("report1", debugreport['name']) self.assertEquals(200, resp.status) @@ -1564,22 +1566,22 @@ class RestTests(unittest.TestCase): def test_debugreport_download(self): req = json.dumps({'name': 'report1'}) with RollbackContext() as rollback: - resp = request(host, port, '/debugreports', req, 'POST') + resp = request(host, ssl_port, '/debugreports', req, 'POST') self.assertEquals(202, resp.status) task = json.loads(resp.read()) # make sure the debugreport doesn't exist until the # the task is finished self._wait_task(task['id'], 20) rollback.prependDefer(self._report_delete, 'report1') - resp = request(host, port, '/debugreports/report1') + resp = request(host, ssl_port, '/debugreports/report1') debugreport = json.loads(resp.read()) self.assertEquals("report1", debugreport['name']) self.assertEquals(200, resp.status) - resp = request(host, port, '/debugreports/report1/content') + resp = request(host, ssl_port, '/debugreports/report1/content') self.assertEquals(200, resp.status) - resp = request(host, port, '/debugreports/report1') + resp = request(host, ssl_port, '/debugreports/report1') debugre = json.loads(resp.read()) - resp = request(host, port, debugre['uri']) + resp = request(host, ssl_port, debugre['uri']) self.assertEquals(200, resp.status) def test_host(self): @@ -1655,12 +1657,12 @@ class RestTests(unittest.TestCase): resp = self.request('/vms', req, 'POST') self.assertEquals(201, resp.status) - resp = request(host, port, '/vms') + resp = request(host, ssl_port, '/vms') self.assertEquals(200, resp.status) res = json.loads(resp.read()) self.assertEquals(2, len(res)) - resp = request(host, port, '/vms?name=test-vm1') + resp = request(host, ssl_port, '/vms?name=test-vm1') self.assertEquals(200, resp.status) res = json.loads(resp.read()) self.assertEquals(1, len(res)) @@ -1709,5 +1711,5 @@ class HttpsRestTests(RestTests): Run all of the same tests as above, but use https instead """ def setUp(self): - self.request = partial(https_request, host, ssl_port) + self.request = partial(request, host, ssl_port) model.reset() diff --git a/tests/test_server.py b/tests/test_server.py index d06e17a..0f38e72 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -32,11 +32,12 @@ class ServerTests(unittest.TestCase): Test that we can start a server and receive HTTP:200. """ host = '127.0.0.1' - port = utils.get_free_port() + port = utils.get_free_port('http') + ssl_port = utils.get_free_port('https') model = kimchi.mockmodel.MockModel('/tmp/obj-store-test') - s = utils.run_server(host, port, None, test_mode=True, model=model) + s = utils.run_server(host, port, ssl_port, test_mode=True, model=model) try: - resp = utils.request(host, port, '/') + resp = utils.request(host, ssl_port, '/') self.assertEquals(200, resp.status) except: raise diff --git a/tests/utils.py b/tests/utils.py index 77e5d1d..11c02fb 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -141,11 +141,6 @@ def _request(conn, path, data, method, headers): def request(host, port, path, data=None, method='GET', headers=None): - conn = httplib.HTTPConnection(host, port) - return _request(conn, path, data, method, headers) - - -def https_request(host, port, path, data=None, method='GET', headers=None): conn = httplib.HTTPSConnection(host, port) return _request(conn, path, data, method, headers) -- 1.7.10.4

From: Aline Manera <alinefm@br.ibm.com> After adding nginx as a reverse proxy, 3 ports needs to be specified to start Kimchi. - port to list on (default 8000) - ssl_port to enable SSL connections (default 8001) - cherrypy_port, the cherrypy server port (default 8010) The kimchi.conf was inconsistent to that current Kimchi logic. So the user was not able to change the default ports without having problems to start Kimchi. Fix it by adding cherrypy_port to kimchi.conf file and adjusting the kimchid script to get the correct variable values. Signed-off-by: Aline Manera <alinefm@br.ibm.com> --- src/kimchi.conf.in | 3 +++ src/kimchi/config.py.in | 6 +++--- src/kimchi/proxy.py | 6 +++--- src/kimchi/server.py | 4 ++-- src/kimchid.in | 17 +++++++---------- tests/test_rest.py | 10 +++++----- tests/utils.py | 15 +++++++++------ 7 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/kimchi.conf.in b/src/kimchi.conf.in index 3bbe1e9..369f2c3 100644 --- a/src/kimchi.conf.in +++ b/src/kimchi.conf.in @@ -12,6 +12,9 @@ # If present, start an SSL-enabled server on the given port #ssl_port = 8001 +# Cherrypy server port +#cherrypy_port = 8010 + # The full path to an SSL Certificate in PEM format. If left unspecified, # Kimchi will generate a self-signed certificate automatically. #ssl_cert = diff --git a/src/kimchi/config.py.in b/src/kimchi/config.py.in index 858065c..0206570 100644 --- a/src/kimchi/config.py.in +++ b/src/kimchi/config.py.in @@ -241,9 +241,9 @@ def _get_config(): config = SafeConfigParser() config.add_section("server") config.set("server", "host", "0.0.0.0") - config.set("server", "port", "8010") - config.set("server", "proxy_port", "8000") - config.set("server", "proxy_ssl_port", "8001") + config.set("server", "port", "8000") + config.set("server", "ssl_port", "8001") + config.set("server", "cherrypy_port", "8010") config.set("server", "ssl_cert", "") config.set("server", "ssl_key", "") config.set("server", "environment", "development") diff --git a/src/kimchi/proxy.py b/src/kimchi/proxy.py index 1ccbbcc..d924ac8 100644 --- a/src/kimchi/proxy.py +++ b/src/kimchi/proxy.py @@ -89,9 +89,9 @@ def _create_proxy_config(p_port, k_port, p_ssl_port, cert, key): def start_proxy(options): """Start nginx reverse proxy.""" - _create_proxy_config(options.proxy_port, - options.port, - options.proxy_ssl_port, + _create_proxy_config(options.port, + options.cherrypy_port, + options.ssl_port, options.ssl_cert, options.ssl_key) config_dir = paths.conf_dir diff --git a/src/kimchi/server.py b/src/kimchi/server.py index 7a1f967..7344349 100644 --- a/src/kimchi/server.py +++ b/src/kimchi/server.py @@ -81,8 +81,8 @@ class Server(object): # as a localhost app, inaccessible to the outside # directly. You must go through the proxy. cherrypy.server.socket_host = '127.0.0.1' - cherrypy.server.socket_port = options.port - cherrypy.config.nginx_port = options.proxy_port + cherrypy.server.socket_port = options.cherrypy_port + cherrypy.config.nginx_port = options.port cherrypy.log.screen = True cherrypy.log.access_file = options.access_log diff --git a/src/kimchid.in b/src/kimchid.in index c64ba4a..d3d398f 100644 --- a/src/kimchid.in +++ b/src/kimchid.in @@ -19,7 +19,6 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301 USA -import logging import os import sys sys.path.insert(1, '@pythondir@') @@ -45,8 +44,8 @@ def main(options): host = config.get("server", "host") port = config.get("server", "port") - proxy_port = config.get("server", "proxy_port") - proxy_ssl_port = config.get("server", "proxy_ssl_port") + ssl_port = config.get("server", "ssl_port") + cherrypy_port = config.get("server", "cherrypy_port") runningEnv = config.get('server', 'environment') logDir = config.get("logging", "log_dir") logLevel = config.get("logging", "log_level") @@ -55,13 +54,11 @@ def main(options): parser.add_option('--host', type="string", default=host, help="Hostname to listen on") parser.add_option('--port', type="int", default=port, - help="Kimchid process listen port (default %s)" % port) - parser.add_option('--proxy-port', type="int", default=proxy_port, - help="Proxy port to listen on (default %s)" % - proxy_port) - parser.add_option('--proxy-ssl-port', type="int", default=proxy_ssl_port, - help="Proxy port to enable SSL (default %s)" % - proxy_ssl_port) + help="Port to listen on (default %s)" % port) + parser.add_option('--ssl-port', type="int", default=ssl_port, + help="Port to enable SSL (default %s)" % ssl_port) + parser.add_option('--cherrypy_port', type="int", default=cherrypy_port, + help="Cherrypy server port (default %s)" % cherrypy_port) parser.add_option('--log-level', default=logLevel, help="Logging level") parser.add_option('--access-log', diff --git a/tests/test_rest.py b/tests/test_rest.py index bb52e3f..7ed94cb 100644 --- a/tests/test_rest.py +++ b/tests/test_rest.py @@ -43,23 +43,23 @@ test_server = None model = None host = None port = None -proxy_port = None ssl_port = None +cherrypy_port = None #utils.silence_server() def setUpModule(): - global test_server, model, host, port, proxy_port, ssl_port + global test_server, model, host, port, ssl_port, cherrypy_port patch_auth() model = kimchi.mockmodel.MockModel('/tmp/obj-store-test') host = '127.0.0.1' port = get_free_port('http') - proxy_port = get_free_port('proxy_port') ssl_port = get_free_port('https') + cherrypy_port = get_free_port('cherrypy_port') test_server = run_server(host, port, ssl_port, test_mode=True, - proxy_port=proxy_port, model=model) + cherrypy_port=cherrypy_port, model=model) def tearDownModule(): @@ -1412,7 +1412,7 @@ class RestTests(unittest.TestCase): def test_config(self): resp = self.request('/config').read() conf = json.loads(resp) - self.assertEquals(proxy_port, conf['http_port']) + self.assertEquals(port, conf['http_port']) def test_capabilities(self): resp = self.request('/config/capabilities').read() diff --git a/tests/utils.py b/tests/utils.py index 11c02fb..fd9b23c 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -93,15 +93,18 @@ def get_free_port(name='http'): return _ports[name] -def run_server(host, port, ssl_port, test_mode, proxy_port=None, +def run_server(host, port, ssl_port, test_mode, cherrypy_port=None, model=None, environment='development'): - if proxy_port is None: - proxy_port = get_free_port('proxy_port') + + if cherrypy_port is None: + cherrypy_port = get_free_port('cherrypy_port') + if ssl_port is None: - ssl_port = get_free_port('ssl_port') + ssl_port = get_free_port('https') + args = type('_', (object,), - {'host': host, 'port': port, 'proxy_ssl_port': ssl_port, - 'proxy_port': proxy_port, + {'host': host, 'port': port, 'ssl_port': ssl_port, + 'cherrypy_port': cherrypy_port, 'ssl_cert': '', 'ssl_key': '', 'test': test_mode, 'access_log': '/dev/null', 'error_log': '/dev/null', 'environment': environment, -- 1.7.10.4

-- Tested-by: Paulo Vital <pvital@linux.vnet.ibm.com> Reviewed-by: Paulo Vital <pvital@linux.vnet.ibm.com> On Fri, 2014-05-09 at 14:48 -0300, Aline Manera wrote:
From: Aline Manera <alinefm@br.ibm.com>
Aline Manera (2): bug fix: Update test cases to use HTTPS bug fix: Allow changing default ports
src/kimchi.conf.in | 3 ++ src/kimchi/config.py.in | 6 ++-- src/kimchi/proxy.py | 6 ++-- src/kimchi/server.py | 4 +-- src/kimchid.in | 17 ++++----- tests/test_authorization.py | 5 +-- tests/test_exception.py | 24 +++++++------ tests/test_mockmodel.py | 25 ++++++++------ tests/test_plugin.py | 5 +-- tests/test_rest.py | 80 ++++++++++++++++++++++--------------------- tests/test_server.py | 7 ++-- tests/utils.py | 20 +++++------ 12 files changed, 105 insertions(+), 97 deletions(-)
participants (2)
-
Aline Manera
-
Paulo Ricardo Paz Vital