def test_missing_env_variables(self): roles = ['master', 'slave'] for role in roles: os.environ['ROLE'] = role with self.assertRaises(RuntimeError): bootstrap()
def test_slaves_not_fully_connected(self, mocked_timeout, mocked_dir, mocked_open, mocked_request): os.environ['ROLE'] = 'controller' os.environ['AUTOMATIC'] = str(True) os.environ['MASTER_HOST'] = '127.0.0.1' os.environ['TOTAL_SLAVES'] = '3' os.environ['USERS'] = '100' os.environ['HATCH_RATE'] = '5' os.environ['DURATION'] = '10' os.environ['SLAVES_CHECK_TIMEOUT'] = '0.3' os.environ['SLAVES_CHECK_INTERVAL'] = '0.1' MASTER_URL = 'http://127.0.0.1:8089' mocked_request.get(url=MASTER_URL, text='ok') mocked_request.get(url=MASTER_URL + '/stats/requests', json={'slave_count': 1}) mocked_request.post(url='/'.join([MASTER_URL, 'swarm']), text='ok') for endpoint in ['stop', 'stats/requests/csv', 'stats/distribution/csv', 'htmlreport']: mocked_request.get(url='/'.join([MASTER_URL, endpoint]), text='ok') self.assertFalse(mocked_timeout.called) self.assertFalse(mocked_request.called) #self.assertFalse(mocked_dir.called) self.assertFalse(mocked_open.called) bootstrap() self.assertTrue(mocked_timeout.called) self.assertTrue(mocked_request.called) #self.assertTrue(mocked_dir.called) self.assertTrue(mocked_open.called)
def test_valid_master(self, popen): os.environ['ROLE'] = 'master' os.environ['TARGET_HOST'] = 'https://test.com' with mock.patch('src.app.get_locust_file') as file: bootstrap() self.assertTrue(file.called) self.assertTrue(popen.called)
def test_invalid_env_variables(self): os.environ['ROLE'] = 'controller' os.environ['AUTOMATIC'] = str(True) os.environ['MASTER_HOST'] = '127.0.0.1' os.environ['USERS'] = 'test' bootstrap() self.assertRaises(ValueError)
def test_standalone_automatic(self, mocked_bootstrap): os.environ['ROLE'] = 'standalone' os.environ['AUTOMATIC'] = str(True) with self.assertRaises(SystemExit) as exit_code: with mock.patch('src.app.send_usage_statistics'): bootstrap() self.assertEqual(mocked_bootstrap.call_count, 3) self.assertEqual(exit_code.exception.code, 0)
def test_missing_env_variables(self, mocked_send_usage): roles = ['master', 'slave'] for role in roles: os.environ['ROLE'] = role with self.assertRaises(RuntimeError): bootstrap() self.assertTrue(mocked_send_usage.called)
def test_valid_master(self, popen, mocked_send_usage): os.environ['ROLE'] = 'master' os.environ['TARGET_HOST'] = 'https://test.com' with mock.patch('src.app.get_locust_file') as file: bootstrap() self.assertTrue(file.called) self.assertTrue(popen.called) self.assertTrue(mocked_send_usage.called)
def test_valid_slave(self, mocked_popen): os.environ['ROLE'] = 'slave' os.environ['TARGET_HOST'] = 'https://test.com' os.environ['MASTER_HOST'] = '127.0.0.1' os.environ['SLAVE_MUL'] = '3' with mock.patch('src.app.get_locust_file') as file: bootstrap() self.assertTrue(file.called) self.assertTrue(mocked_popen.called)
def test_valid_slave(self, mocked_popen, mocked_request): os.environ['ROLE'] = 'slave' os.environ['TARGET_HOST'] = 'https://test.com' os.environ['MASTER_HOST'] = '127.0.0.1' os.environ['SLAVE_MUL'] = '3' os.environ['SLAVES_CHECK_TIMEOUT'] = '0.3' os.environ['SLAVES_CHECK_INTERVAL'] = '0.1' MASTER_URL = 'http://127.0.0.1:8089' mocked_request.get(url=MASTER_URL, text='ok') with mock.patch('src.app.get_locust_file') as file: bootstrap() self.assertTrue(file.called) self.assertTrue(mocked_popen.called)
def test_master_not_ready_in_time(self, popen): os.environ['ROLE'] = 'slave' os.environ['TARGET_HOST'] = 'https://test.com' os.environ['MASTER_HOST'] = '127.0.0.1' os.environ['SLAVE_MUL'] = '1' os.environ['MASTER_CHECK_TIMEOUT'] = '0.3' os.environ['MASTER_CHECK_INTERVAL'] = '0.1' with mock.patch('src.app.get_locust_file') as file: with self.assertRaises(RuntimeError) as e: bootstrap() self.assertFalse(file.called) self.assertFalse(popen.called) self.assertEqual('The master did not start in time.', str(e.exception))
def test_valid_controller_automatic(self, mocked_timeout, mocked_dir, mocked_open, mocked_request): os.environ['ROLE'] = 'controller' os.environ['AUTOMATIC'] = str(True) os.environ['MASTER_HOST'] = '127.0.0.1' os.environ['TOTAL_SLAVES'] = '3' os.environ['USERS'] = '100' os.environ['HATCH_RATE'] = '5' os.environ['DURATION'] = '10' MASTER_URL = 'http://127.0.0.1:8089' mocked_request.get(url=MASTER_URL, text='ok') mocked_request.get(url=MASTER_URL + '/stats/requests', json={'slave_count': 3}) mocked_request.post(url='/'.join([MASTER_URL, 'swarm']), text='ok') for endpoint in ['stop', 'stats/requests/csv', 'stats/distribution/csv', 'htmlreport']: mocked_request.get(url='/'.join([MASTER_URL, endpoint]), text='ok') bootstrap() self.assertTrue(mocked_timeout.called) self.assertTrue(mocked_request.called) self.assertTrue(mocked_open.called)
def test_valid_controller_automatic(self, mocked_timeout, mocked_dir, mocked_open, mocked_request): os.environ['ROLE'] = 'controller' os.environ['AUTOMATIC'] = str(True) os.environ['MASTER_HOST'] = '127.0.0.1' os.environ['SLAVE_MUL'] = '3' os.environ['USERS'] = '100' os.environ['HATCH_RATE'] = '5' os.environ['DURATION'] = '10' mocked_request.get(url='http://127.0.0.1:8089', text='ok') mocked_request.post(url='http://127.0.0.1:8089/swarm', text='ok') mocked_request.get(url='http://127.0.0.1:8089/stop', text='ok') mocked_request.get(url='http://127.0.0.1:8089/htmlreport', text='ok') self.assertFalse(mocked_timeout.called) self.assertFalse(mocked_request.called) self.assertFalse(mocked_dir.called) self.assertFalse(mocked_open.called) bootstrap() self.assertTrue(mocked_timeout.called) self.assertTrue(mocked_request.called) self.assertTrue(mocked_dir.called) self.assertTrue(mocked_open.called)
def test_slaves_not_fully_connected(self, mocked_timeout, mocked_dir, mocked_open, mocked_request): os.environ['ROLE'] = 'controller' os.environ['AUTOMATIC'] = str(True) os.environ['MASTER_HOST'] = '127.0.0.1' os.environ['TOTAL_SLAVES'] = '3' os.environ['USERS'] = '100' os.environ['HATCH_RATE'] = '5' os.environ['DURATION'] = '10' os.environ['SLAVES_CHECK_TIMEOUT'] = '0.3' os.environ['SLAVES_CHECK_INTERVAL'] = '0.1' MASTER_URL = 'http://127.0.0.1:8089' mocked_request.get(url=MASTER_URL, text='ok') mocked_request.get(url=MASTER_URL + '/stats/requests', json={'slave_count': 1}) mocked_request.post(url='/'.join([MASTER_URL, 'swarm']), text='ok') for endpoint in ['stop', 'stats/requests/csv', 'stats/distribution/csv', 'htmlreport']: mocked_request.get(url='/'.join([MASTER_URL, endpoint]), text='ok') with self.assertRaises(RuntimeError): bootstrap() self.assertFalse(mocked_request.called) self.assertFalse(mocked_open.called)
def test_standalone_manual(self, mocked_bootstrap): os.environ['ROLE'] = 'standalone' with mock.patch('src.app.send_usage_statistics'): bootstrap() self.assertEqual(mocked_bootstrap.call_count, 2)
def test_valid_controller_manual(self, mocked_timeout): os.environ['ROLE'] = 'controller' os.environ['AUTOMATIC'] = str(False) bootstrap() self.assertFalse(mocked_timeout.called)
def test_invalid_role(self): os.environ['ROLE'] = 'unknown' with self.assertRaises(RuntimeError): bootstrap()