From c15f2dd04f09300a18aafcd3443ce49e18c3d380 Mon Sep 17 00:00:00 2001 From: Eric K Date: Wed, 13 Mar 2019 19:15:40 -0700 Subject: [PATCH] Completes upgrade check for monasca webhook data source Results in warning (schema change) if a monasca webhook data source is configured. Change-Id: I7ccb2f2804f3957bbeb84a700583ae666f2dd0af --- congress/cmd/status.py | 34 +++++++++++++++++++++++-------- congress/tests/cmd/test_status.py | 24 +++++++++++++++++++--- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/congress/cmd/status.py b/congress/cmd/status.py index 535b0690d..c62380d85 100644 --- a/congress/cmd/status.py +++ b/congress/cmd/status.py @@ -17,6 +17,9 @@ import sys from oslo_config import cfg from oslo_upgradecheck import upgradecheck +from congress.db import api as db + + CONF = cfg.CONF @@ -28,17 +31,30 @@ class Checks(upgradecheck.UpgradeCommands): and added to _upgrade_checks tuple. """ - def _sample_check(self): - """This is sample check added to test the upgrade check framework - - It needs to be removed after adding any real upgrade check - """ - return upgradecheck.Result(upgradecheck.Code.SUCCESS, 'Sample detail') + def _check_monasca_webhook_driver(self): + """Check existence of monasca webhook datasource""" + session = db.get_session() + result = session.execute( + "SELECT count(*) FROM datasources WHERE driver = 'monasca_webhook'" + ).scalar() + if result == 0: + return upgradecheck.Result( + upgradecheck.Code.SUCCESS, + 'No currently configured data source uses the Monasca Webhook ' + 'data source driver, which contains backward-incompatible ' + 'schema changes.') + else: + return upgradecheck.Result( + upgradecheck.Code.WARNING, + 'There are currently {} configured data source which use the ' + 'Monasca Webhook data source driver. Because this version of ' + 'Congress includes backward-incompatible schema changes to ' + 'the driver, Congress policies referring to Monasca Webhook ' + 'data may need to be adapted to the new schema.'.format( + result)) _upgrade_checks = ( - # Sample check added for now. - # Whereas in future real checks must be added here in tuple - ('Sample Check', _sample_check), + ('Monasca Webhook Driver', _check_monasca_webhook_driver), ) diff --git a/congress/tests/cmd/test_status.py b/congress/tests/cmd/test_status.py index 256d8f04c..2c5521c11 100644 --- a/congress/tests/cmd/test_status.py +++ b/congress/tests/cmd/test_status.py @@ -15,16 +15,34 @@ from oslo_upgradecheck.upgradecheck import Code from congress.cmd import status +from congress.tests.api import base as api_base from congress.tests import base -class TestUpgradeChecks(base.TestCase): +class TestUpgradeChecks(base.SqlTestCase): def setUp(self): super(TestUpgradeChecks, self).setUp() self.cmd = status.Checks() - def test__sample_check(self): - check_result = self.cmd._sample_check() + def test__check_monasca_webhook_driver_success(self): + check_result = self.cmd._check_monasca_webhook_driver() self.assertEqual( Code.SUCCESS, check_result.code) + + def test__check_monasca_webhook_driver_warning(self): + services = api_base.setup_config(with_fake_datasource=False) + self.datasource_model = services['api']['api-datasource'] + self.data = services['data'] + self.node = services['node'] + self.engine = services['engine'] + self.ds_manager = services['ds_manager'] + monasca_setting = { + 'name': 'datasource_name', + 'driver': 'monasca_webhook', + 'config': None, + } + self.ds_manager.add_datasource(monasca_setting) + check_result = self.cmd._check_monasca_webhook_driver() + self.assertEqual( + Code.WARNING, check_result.code)