Tests: test_python_procman.py refactored.

This commit is contained in:
Andrei Zeliankou
2020-03-19 03:17:00 +00:00
parent 06c790ac1e
commit 93207d4a8c

View File

@@ -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": {}})