From ecb9136708b7aa7a5ad717a952b09bd41f0d32fa Mon Sep 17 00:00:00 2001 From: isabelmsft <67024108+isabelmsft@users.noreply.github.com> Date: Wed, 3 Aug 2022 15:16:10 -0700 Subject: [PATCH] Add CLI to configure YANG config validation (#2147) **- What I did** Add CLI to configure YANG config validation mode `config yang_config_validation ` **- How I did it** Add a CLI script that writes the configuration of YANG config validation enable/disable into CONFIG_DB --- config/main.py | 15 +++++++++++++ tests/yang_config_validation_test.py | 33 ++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 tests/yang_config_validation_test.py diff --git a/config/main.py b/config/main.py index cac1cc93e6..0f1fcf28fd 100644 --- a/config/main.py +++ b/config/main.py @@ -1923,6 +1923,21 @@ def synchronous_mode(sync_mode): else: raise click.BadParameter("Error: Invalid argument %s, expect either enable or disable" % sync_mode) +# +# 'yang_config_validation' command ('config yang_config_validation ...') +# +@config.command('yang_config_validation') +@click.argument('yang_config_validation', metavar='', required=True) +def yang_config_validation(yang_config_validation): + # Enable or disable YANG validation on updates to ConfigDB + if yang_config_validation == 'enable' or yang_config_validation == 'disable': + config_db = ConfigDBConnector() + config_db.connect() + config_db.mod_entry('DEVICE_METADATA', 'localhost', {"yang_config_validation": yang_config_validation}) + click.echo("""Wrote %s yang config validation into CONFIG_DB""" % yang_config_validation) + else: + raise click.BadParameter("Error: Invalid argument %s, expect either enable or disable" % yang_config_validation) + # # 'portchannel' group ('config portchannel ...') # diff --git a/tests/yang_config_validation_test.py b/tests/yang_config_validation_test.py new file mode 100644 index 0000000000..37b9e448cc --- /dev/null +++ b/tests/yang_config_validation_test.py @@ -0,0 +1,33 @@ +from click.testing import CliRunner +import config.main as config + +class TestYangConfigValidation(object): + @classmethod + def setup_class(cls): + print("SETUP") + + def __check_result(self, result_msg, mode): + if mode == "enable" or mode == "disable": + expected_msg = """Wrote %s yang config validation into CONFIG_DB""" % mode + else: + expected_msg = "Error: Invalid argument %s, expect either enable or disable" % mode + + return expected_msg in result_msg + + def test_yang_config_validation(self): + runner = CliRunner() + + result = runner.invoke(config.config.commands["yang_config_validation"], ["enable"]) + print(result.output) + assert result.exit_code == 0 + assert self.__check_result(result.output, "enable") + + result = runner.invoke(config.config.commands["yang_config_validation"], ["disable"]) + print(result.output) + assert result.exit_code == 0 + assert self.__check_result(result.output, "disable") + + result = runner.invoke(config.config.commands["yang_config_validation"], ["invalid-input"]) + print(result.output) + assert result.exit_code != 0 + assert self.__check_result(result.output, "invalid-input")