Пример #1
0
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)
Пример #3
0
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)
Пример #4
0
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)
Пример #5
0
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)
Пример #6
0
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)