Tests: test_python_procman.py refactored.
This commit is contained in:
@@ -8,6 +8,13 @@ from unit.applications.lang.python import TestApplicationPython
|
|||||||
class TestPythonProcman(TestApplicationPython):
|
class TestPythonProcman(TestApplicationPython):
|
||||||
prerequisites = {'modules': ['python']}
|
prerequisites = {'modules': ['python']}
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super().setUp()
|
||||||
|
|
||||||
|
self.app_name = "app-" + self.testdir.split('/')[-1]
|
||||||
|
self.app_proc = 'applications/' + self.app_name + '/processes'
|
||||||
|
self.load('empty', self.app_name)
|
||||||
|
|
||||||
def pids_for_process(self):
|
def pids_for_process(self):
|
||||||
time.sleep(0.2)
|
time.sleep(0.2)
|
||||||
|
|
||||||
@@ -19,103 +26,20 @@ class TestPythonProcman(TestApplicationPython):
|
|||||||
|
|
||||||
return pids
|
return pids
|
||||||
|
|
||||||
def setUp(self):
|
def conf_proc(self, conf, path=None):
|
||||||
super().setUp()
|
if path is None:
|
||||||
|
path = self.app_proc
|
||||||
|
|
||||||
self.app_name = "app-" + self.testdir.split('/')[-1]
|
self.assertIn('success', self.conf(conf, path), 'configure processes')
|
||||||
self.load('empty', self.app_name)
|
|
||||||
|
|
||||||
def test_python_processes_access(self):
|
|
||||||
self.conf('1', 'applications/' + self.app_name + '/processes')
|
|
||||||
|
|
||||||
self.assertIn(
|
|
||||||
'error',
|
|
||||||
self.conf_get('/applications/' + self.app_name + '/processes/max'),
|
|
||||||
'max no access',
|
|
||||||
)
|
|
||||||
self.assertIn(
|
|
||||||
'error',
|
|
||||||
self.conf_get(
|
|
||||||
'/applications/' + self.app_name + '/processes/spare'
|
|
||||||
),
|
|
||||||
'spare no access',
|
|
||||||
)
|
|
||||||
self.assertIn(
|
|
||||||
'error',
|
|
||||||
self.conf_get(
|
|
||||||
'/applications/' + self.app_name + '/processes/idle_timeout'
|
|
||||||
),
|
|
||||||
'idle_timeout no access',
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_python_processes_spare_negative(self):
|
|
||||||
self.assertIn(
|
|
||||||
'error',
|
|
||||||
self.conf(
|
|
||||||
{"spare": -1}, 'applications/' + self.app_name + '/processes'
|
|
||||||
),
|
|
||||||
'negative spare',
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_python_processes_max_negative(self):
|
|
||||||
self.assertIn(
|
|
||||||
'error',
|
|
||||||
self.conf(
|
|
||||||
{"max": -1}, 'applications/' + self.app_name + '/processes'
|
|
||||||
),
|
|
||||||
'negative max',
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_python_processes_idle_timeout_negative(self):
|
|
||||||
self.assertIn(
|
|
||||||
'error',
|
|
||||||
self.conf(
|
|
||||||
{"idle_timeout": -1},
|
|
||||||
'applications/' + self.app_name + '/processes',
|
|
||||||
),
|
|
||||||
'negative idle_timeout',
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_python_processes_spare_gt_max_default(self):
|
|
||||||
self.assertIn(
|
|
||||||
'error',
|
|
||||||
self.conf(
|
|
||||||
{"spare": 2}, 'applications/' + self.app_name + '/processes'
|
|
||||||
),
|
|
||||||
'spare greater than max default',
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_python_processes_spare_gt_max(self):
|
|
||||||
self.assertIn(
|
|
||||||
'error',
|
|
||||||
self.conf(
|
|
||||||
{"spare": 2, "max": 1, "idle_timeout": 1},
|
|
||||||
'/applications/' + self.app_name + '/processes',
|
|
||||||
),
|
|
||||||
'spare greater than max',
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_python_processes_max_zero(self):
|
|
||||||
self.assertIn(
|
|
||||||
'error',
|
|
||||||
self.conf(
|
|
||||||
{"spare": 0, "max": 0, "idle_timeout": 1},
|
|
||||||
'applications/' + self.app_name + '/processes',
|
|
||||||
),
|
|
||||||
'max 0',
|
|
||||||
)
|
|
||||||
|
|
||||||
def test_python_processes_idle_timeout_zero(self):
|
def test_python_processes_idle_timeout_zero(self):
|
||||||
self.conf(
|
self.conf_proc({"spare": 0, "max": 2, "idle_timeout": 0})
|
||||||
{"spare": 0, "max": 2, "idle_timeout": 0},
|
|
||||||
'applications/' + self.app_name + '/processes',
|
|
||||||
)
|
|
||||||
|
|
||||||
self.get()
|
self.get()
|
||||||
self.assertEqual(len(self.pids_for_process()), 0, 'idle timeout 0')
|
self.assertEqual(len(self.pids_for_process()), 0, 'idle timeout 0')
|
||||||
|
|
||||||
def test_python_prefork(self):
|
def test_python_prefork(self):
|
||||||
self.conf('2', 'applications/' + self.app_name + '/processes')
|
self.conf_proc('2')
|
||||||
|
|
||||||
pids = self.pids_for_process()
|
pids = self.pids_for_process()
|
||||||
self.assertEqual(len(pids), 2, 'prefork 2')
|
self.assertEqual(len(pids), 2, 'prefork 2')
|
||||||
@@ -123,7 +47,7 @@ class TestPythonProcman(TestApplicationPython):
|
|||||||
self.get()
|
self.get()
|
||||||
self.assertSetEqual(self.pids_for_process(), pids, 'prefork still 2')
|
self.assertSetEqual(self.pids_for_process(), pids, 'prefork still 2')
|
||||||
|
|
||||||
self.conf('4', 'applications/' + self.app_name + '/processes')
|
self.conf_proc('4')
|
||||||
|
|
||||||
pids = self.pids_for_process()
|
pids = self.pids_for_process()
|
||||||
self.assertEqual(len(pids), 4, 'prefork 4')
|
self.assertEqual(len(pids), 4, 'prefork 4')
|
||||||
@@ -135,21 +59,16 @@ class TestPythonProcman(TestApplicationPython):
|
|||||||
|
|
||||||
@unittest.skip('not yet')
|
@unittest.skip('not yet')
|
||||||
def test_python_prefork_same_processes(self):
|
def test_python_prefork_same_processes(self):
|
||||||
self.conf('2', 'applications/' + self.app_name + '/processes')
|
self.conf_proc('2')
|
||||||
|
|
||||||
pids = self.pids_for_process()
|
pids = self.pids_for_process()
|
||||||
|
|
||||||
self.conf('4', 'applications/' + self.app_name + '/processes')
|
self.conf_proc('4')
|
||||||
|
|
||||||
pids_new = self.pids_for_process()
|
pids_new = self.pids_for_process()
|
||||||
|
|
||||||
self.assertTrue(pids.issubset(pids_new), 'prefork same processes')
|
self.assertTrue(pids.issubset(pids_new), 'prefork same processes')
|
||||||
|
|
||||||
def test_python_ondemand(self):
|
def test_python_ondemand(self):
|
||||||
self.conf(
|
self.conf_proc({"spare": 0, "max": 8, "idle_timeout": 1})
|
||||||
{"spare": 0, "max": 8, "idle_timeout": 1},
|
|
||||||
'applications/' + self.app_name + '/processes',
|
|
||||||
)
|
|
||||||
|
|
||||||
self.assertEqual(len(self.pids_for_process()), 0, 'on-demand 0')
|
self.assertEqual(len(self.pids_for_process()), 0, 'on-demand 0')
|
||||||
|
|
||||||
@@ -169,10 +88,7 @@ class TestPythonProcman(TestApplicationPython):
|
|||||||
self.stop_all()
|
self.stop_all()
|
||||||
|
|
||||||
def test_python_scale_updown(self):
|
def test_python_scale_updown(self):
|
||||||
self.conf(
|
self.conf_proc({"spare": 2, "max": 8, "idle_timeout": 1})
|
||||||
{"spare": 2, "max": 8, "idle_timeout": 1},
|
|
||||||
'applications/' + self.app_name + '/processes',
|
|
||||||
)
|
|
||||||
|
|
||||||
pids = self.pids_for_process()
|
pids = self.pids_for_process()
|
||||||
self.assertEqual(len(pids), 2, 'updown 2')
|
self.assertEqual(len(pids), 2, 'updown 2')
|
||||||
@@ -200,10 +116,7 @@ class TestPythonProcman(TestApplicationPython):
|
|||||||
self.stop_all()
|
self.stop_all()
|
||||||
|
|
||||||
def test_python_reconfigure(self):
|
def test_python_reconfigure(self):
|
||||||
self.conf(
|
self.conf_proc({"spare": 2, "max": 6, "idle_timeout": 1})
|
||||||
{"spare": 2, "max": 6, "idle_timeout": 1},
|
|
||||||
'applications/' + self.app_name + '/processes',
|
|
||||||
)
|
|
||||||
|
|
||||||
pids = self.pids_for_process()
|
pids = self.pids_for_process()
|
||||||
self.assertEqual(len(pids), 2, 'reconf 2')
|
self.assertEqual(len(pids), 2, 'reconf 2')
|
||||||
@@ -213,7 +126,7 @@ class TestPythonProcman(TestApplicationPython):
|
|||||||
self.assertEqual(len(pids_new), 3, 'reconf 3')
|
self.assertEqual(len(pids_new), 3, 'reconf 3')
|
||||||
self.assertTrue(pids.issubset(pids_new), 'reconf 3 only 1 new')
|
self.assertTrue(pids.issubset(pids_new), 'reconf 3 only 1 new')
|
||||||
|
|
||||||
self.conf('6', 'applications/' + self.app_name + '/processes/spare')
|
self.conf_proc('6', self.app_proc + '/spare')
|
||||||
|
|
||||||
pids = self.pids_for_process()
|
pids = self.pids_for_process()
|
||||||
self.assertEqual(len(pids), 6, 'reconf 6')
|
self.assertEqual(len(pids), 6, 'reconf 6')
|
||||||
@@ -224,10 +137,7 @@ class TestPythonProcman(TestApplicationPython):
|
|||||||
self.stop_all()
|
self.stop_all()
|
||||||
|
|
||||||
def test_python_idle_timeout(self):
|
def test_python_idle_timeout(self):
|
||||||
self.conf(
|
self.conf_proc({"spare": 0, "max": 6, "idle_timeout": 2})
|
||||||
{"spare": 0, "max": 6, "idle_timeout": 2},
|
|
||||||
'applications/' + self.app_name + '/processes',
|
|
||||||
)
|
|
||||||
|
|
||||||
self.get()
|
self.get()
|
||||||
pids = self.pids_for_process()
|
pids = self.pids_for_process()
|
||||||
@@ -250,10 +160,7 @@ class TestPythonProcman(TestApplicationPython):
|
|||||||
self.assertEqual(len(self.pids_for_process()), 0, 'idle timed out')
|
self.assertEqual(len(self.pids_for_process()), 0, 'idle timed out')
|
||||||
|
|
||||||
def test_python_processes_connection_keepalive(self):
|
def test_python_processes_connection_keepalive(self):
|
||||||
self.conf(
|
self.conf_proc({"spare": 0, "max": 6, "idle_timeout": 2})
|
||||||
{"spare": 0, "max": 6, "idle_timeout": 2},
|
|
||||||
'applications/' + self.app_name + '/processes',
|
|
||||||
)
|
|
||||||
|
|
||||||
(resp, sock) = self.get(
|
(resp, sock) = self.get(
|
||||||
headers={'Host': 'localhost', 'Connection': 'keep-alive'},
|
headers={'Host': 'localhost', 'Connection': 'keep-alive'},
|
||||||
@@ -272,6 +179,42 @@ class TestPythonProcman(TestApplicationPython):
|
|||||||
|
|
||||||
sock.close()
|
sock.close()
|
||||||
|
|
||||||
|
def test_python_processes_access(self):
|
||||||
|
self.conf_proc('1')
|
||||||
|
|
||||||
|
path = '/' + self.app_proc
|
||||||
|
self.assertIn('error', self.conf_get(path + '/max'))
|
||||||
|
self.assertIn('error', self.conf_get(path + '/spare'))
|
||||||
|
self.assertIn('error', self.conf_get(path + '/idle_timeout'))
|
||||||
|
|
||||||
|
def test_python_processes_invalid(self):
|
||||||
|
self.assertIn(
|
||||||
|
'error', self.conf({"spare": -1}, self.app_proc), 'negative spare',
|
||||||
|
)
|
||||||
|
self.assertIn(
|
||||||
|
'error', self.conf({"max": -1}, self.app_proc), 'negative max',
|
||||||
|
)
|
||||||
|
self.assertIn(
|
||||||
|
'error',
|
||||||
|
self.conf({"idle_timeout": -1}, self.app_proc,),
|
||||||
|
'negative idle_timeout',
|
||||||
|
)
|
||||||
|
self.assertIn(
|
||||||
|
'error',
|
||||||
|
self.conf({"spare": 2}, self.app_proc),
|
||||||
|
'spare gt max default',
|
||||||
|
)
|
||||||
|
self.assertIn(
|
||||||
|
'error',
|
||||||
|
self.conf({"spare": 2, "max": 1}, self.app_proc,),
|
||||||
|
'spare gt max',
|
||||||
|
)
|
||||||
|
self.assertIn(
|
||||||
|
'error',
|
||||||
|
self.conf({"spare": 0, "max": 0}, self.app_proc,),
|
||||||
|
'max zero',
|
||||||
|
)
|
||||||
|
|
||||||
def stop_all(self):
|
def stop_all(self):
|
||||||
self.conf({"listeners": {}, "applications": {}})
|
self.conf({"listeners": {}, "applications": {}})
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user