class CheckNoRunningTasks(BaseBeforeUpgradeChecker): """Checks that there is no running tasks :param config: config object where property endpoints returns dict with nailgun host and port """ def __init__(self, context): nailgun = context.config.endpoints['nginx_nailgun'] self.nailgun_client = NailgunClient(**nailgun) def check(self): """Sends request to nailgun to make sure that there are no running tasks """ logger.info('Check nailgun tasks') tasks = self.nailgun_client.get_tasks() logger.debug('Nailgun tasks {0}'.format(tasks)) running_tasks = filter(lambda t: t['status'] == 'running', tasks) if running_tasks: tasks_msg = [ 'id={0} cluster={1} name={2}'.format(t.get('id'), t.get('cluster'), t.get('name')) for t in running_tasks ] error_msg = 'Cannot run upgrade, tasks are running: {0}'.format( ' '.join(tasks_msg)) raise errors.CannotRunUpgrade(error_msg)
class CheckNoRunningTasks(BaseBeforeUpgradeChecker): """Checks that there is no running tasks :param config: config object where property endpoints returns dict with nailgun host and port """ def __init__(self, context): nailgun = context.config.endpoints['nginx_nailgun'] self.nailgun_client = NailgunClient(**nailgun) def check(self): """Sends request to nailgun to make sure that there are no running tasks """ logger.info('Check nailgun tasks') tasks = self.nailgun_client.get_tasks() logger.debug('Nailgun tasks {0}'.format(tasks)) running_tasks = filter( lambda t: t['status'] == 'running', tasks) if running_tasks: tasks_msg = ['id={0} cluster={1} name={2}'.format( t.get('id'), t.get('cluster'), t.get('name')) for t in running_tasks] error_msg = 'Cannot run upgrade, tasks are running: {0}'.format( ' '.join(tasks_msg)) raise errors.CannotRunUpgrade(error_msg)
class CheckNoRunningTasks(BaseBeforeUpgradeChecker): """Checks that there is no running tasks :param config: config object where property endpoints returns dict with nailgun host and port """ def __init__(self, context): nailgun = context.config.endpoints["nginx_nailgun"] self.nailgun_client = NailgunClient(**nailgun) def check(self): """Sends request to nailgun to make sure that there are no running tasks """ logger.info("Check nailgun tasks") try: tasks = self.nailgun_client.get_tasks() except requests.ConnectionError: raise errors.NailgunIsNotRunningError("Cannot connect to rest api service") logger.debug("Nailgun tasks %s", tasks) running_tasks = filter(lambda t: t["status"] == "running", tasks) if running_tasks: tasks_msg = [ "id={0} cluster={1} name={2}".format(t.get("id"), t.get("cluster"), t.get("name")) for t in running_tasks ] error_msg = "Cannot run upgrade, tasks are running: {0}".format(" ".join(tasks_msg)) raise errors.CannotRunUpgrade(error_msg)
class TestNailgunClient(base.BaseTestCase): def setUp(self): mock_keystone = mock.MagicMock() self.mock_request = mock_keystone.request with mock.patch('fuel_upgrade.clients.nailgun_client.KeystoneClient', return_value=mock_keystone): self.nailgun = NailgunClient('127.0.0.1', 8000) def test_create_release(self): # test normal bahavior self.mock_request.post.return_value = self.mock_requests_response( 201, '{ "id": "42" }') response = self.nailgun.create_release( {'name': 'Havana on Ubuntu 12.04'}) self.assertEqual(response, {'id': '42'}) # test failed result self.mock_request.post.return_value.status_code = 409 self.assertRaises(requests.exceptions.HTTPError, self.nailgun.create_release, {'name': 'Havana on Ubuntu 12.04'}) def test_delete_release(self): # test normal bahavior for status in (200, 204): self.mock_request.delete.return_value = \ self.mock_requests_response(status, 'No Content') response = self.nailgun.remove_release(42) self.assertEqual(response, 'No Content') # test failed result self.mock_request.delete.return_value = self.mock_requests_response( 409, 'Conflict') self.assertRaises(requests.exceptions.HTTPError, self.nailgun.remove_release, 42) def test_create_notification(self): # test normal bahavior self.mock_request.post.return_value = self.mock_requests_response( 201, '{ "id": "42" }') response = self.nailgun.create_notification({ 'topic': 'release', 'message': 'New release available!' }) self.assertEqual(response, {'id': '42'}) # test failed result self.mock_request.post.return_value.status_code = 409 self.assertRaises(requests.exceptions.HTTPError, self.nailgun.create_notification, { 'topic': 'release', 'message': 'New release available!' }) def test_delete_notification(self): # test normal bahavior for status in (200, 204): self.mock_request.delete.return_value = \ self.mock_requests_response(status, 'No Content') response = self.nailgun.remove_notification(42) self.assertEqual(response, 'No Content') # test failed result self.mock_request.delete.return_value = self.mock_requests_response( 409, 'Conflict') self.assertRaises(requests.exceptions.HTTPError, self.nailgun.remove_notification, 42) def test_get_tasks(self): # test positive cases self.mock_request.get.return_value = self.mock_requests_response( 200, '[1,2,3]') response = self.nailgun.get_tasks() self.assertEqual(response, [1, 2, 3]) # test negative cases self.mock_request.get.return_value = self.mock_requests_response( 502, 'Bad gateway') self.assertRaises(requests.exceptions.HTTPError, self.nailgun.get_tasks)
class TestNailgunClient(base.BaseTestCase): def setUp(self): mock_keystone = mock.MagicMock() self.mock_request = mock_keystone.request with mock.patch("fuel_upgrade.clients.nailgun_client.KeystoneClient", return_value=mock_keystone): self.nailgun = NailgunClient("127.0.0.1", 8000) def test_create_release(self): # test normal bahavior self.mock_request.post.return_value = self.mock_requests_response(201, '{ "id": "42" }') response = self.nailgun.create_release({"name": "Havana on Ubuntu 12.04"}) self.assertEqual(response, {"id": "42"}) # test failed result self.mock_request.post.return_value.status_code = 409 self.assertRaises( requests.exceptions.HTTPError, self.nailgun.create_release, {"name": "Havana on Ubuntu 12.04"} ) def test_delete_release(self): # test normal bahavior for status in (200, 204): self.mock_request.delete.return_value = self.mock_requests_response(status, "No Content") response = self.nailgun.remove_release(42) self.assertEqual(response, "No Content") # test failed result self.mock_request.delete.return_value = self.mock_requests_response(409, "Conflict") self.assertRaises(requests.exceptions.HTTPError, self.nailgun.remove_release, 42) def test_create_notification(self): # test normal bahavior self.mock_request.post.return_value = self.mock_requests_response(201, '{ "id": "42" }') response = self.nailgun.create_notification({"topic": "release", "message": "New release available!"}) self.assertEqual(response, {"id": "42"}) # test failed result self.mock_request.post.return_value.status_code = 409 self.assertRaises( requests.exceptions.HTTPError, self.nailgun.create_notification, {"topic": "release", "message": "New release available!"}, ) def test_delete_notification(self): # test normal bahavior for status in (200, 204): self.mock_request.delete.return_value = self.mock_requests_response(status, "No Content") response = self.nailgun.remove_notification(42) self.assertEqual(response, "No Content") # test failed result self.mock_request.delete.return_value = self.mock_requests_response(409, "Conflict") self.assertRaises(requests.exceptions.HTTPError, self.nailgun.remove_notification, 42) def test_get_tasks(self): # test positive cases self.mock_request.get.return_value = self.mock_requests_response(200, "[1,2,3]") response = self.nailgun.get_tasks() self.assertEqual(response, [1, 2, 3]) # test negative cases self.mock_request.get.return_value = self.mock_requests_response(502, "Bad gateway") self.assertRaises(requests.exceptions.HTTPError, self.nailgun.get_tasks) def test_put_deployment_tasks(self): release = {"id": "1"} tasks = [] self.mock_request.put.return_value = self.mock_requests_response(200, "[]") response = self.nailgun.put_deployment_tasks(release, tasks) self.assertEqual(response, tasks) self.mock_request.put.return_value = self.mock_requests_response(502, "Bad gateway") self.assertRaises(requests.exceptions.HTTPError, self.nailgun.put_deployment_tasks, release, tasks)
class TestNailgunClient(base.BaseTestCase): def setUp(self): mock_keystone = mock.MagicMock() self.mock_request = mock_keystone.request with mock.patch( 'fuel_upgrade.clients.nailgun_client.KeystoneClient', return_value=mock_keystone): self.nailgun = NailgunClient('127.0.0.1', 8000) def test_create_release(self): # test normal bahavior self.mock_request.post.return_value = self.mock_requests_response( 201, '{ "id": "42" }') response = self.nailgun.create_release({ 'name': 'Havana on Ubuntu 12.04'}) self.assertEqual(response, {'id': '42'}) # test failed result self.mock_request.post.return_value.status_code = 409 self.assertRaises( requests.exceptions.HTTPError, self.nailgun.create_release, {'name': 'Havana on Ubuntu 12.04'}) def test_delete_release(self): # test normal bahavior for status in (200, 204): self.mock_request.delete.return_value = \ self.mock_requests_response(status, 'No Content') response = self.nailgun.remove_release(42) self.assertEqual(response, 'No Content') # test failed result self.mock_request.delete.return_value = self.mock_requests_response( 409, 'Conflict') self.assertRaises( requests.exceptions.HTTPError, self.nailgun.remove_release, 42) def test_create_notification(self): # test normal bahavior self.mock_request.post.return_value = self.mock_requests_response( 201, '{ "id": "42" }') response = self.nailgun.create_notification({ 'topic': 'release', 'message': 'New release available!'}) self.assertEqual(response, {'id': '42'}) # test failed result self.mock_request.post.return_value.status_code = 409 self.assertRaises( requests.exceptions.HTTPError, self.nailgun.create_notification, {'topic': 'release', 'message': 'New release available!'}) def test_delete_notification(self): # test normal bahavior for status in (200, 204): self.mock_request.delete.return_value = \ self.mock_requests_response(status, 'No Content') response = self.nailgun.remove_notification(42) self.assertEqual(response, 'No Content') # test failed result self.mock_request.delete.return_value = self.mock_requests_response( 409, 'Conflict') self.assertRaises( requests.exceptions.HTTPError, self.nailgun.remove_notification, 42) def test_get_tasks(self): # test positive cases self.mock_request.get.return_value = self.mock_requests_response( 200, '[1,2,3]') response = self.nailgun.get_tasks() self.assertEqual(response, [1, 2, 3]) # test negative cases self.mock_request.get.return_value = self.mock_requests_response( 502, 'Bad gateway') self.assertRaises( requests.exceptions.HTTPError, self.nailgun.get_tasks)