From 8389c8137d4fdc5a2d1c803c9c06e6dcb4f849c1 Mon Sep 17 00:00:00 2001 From: Stepan Blyshchak <38952541+stepanblyschak@users.noreply.github.com> Date: Sun, 27 Mar 2022 10:08:00 +0300 Subject: [PATCH] [sonic-cli-gen] fix failure "Error: digits_class" when field "digit_class" does not exist in DB (#2054) here Signed-off-by: Stepan Blyschak --- .../templates/sonic-cli-gen/config.py.j2 | 2 +- .../autogen_test/show_cmd_output.py | 12 ++++++------ .../autogen_test/sonic-device_metadata.yang | 4 ++++ tests/cli_autogen_test.py | 12 ++++++++++++ 4 files changed, 23 insertions(+), 7 deletions(-) diff --git a/sonic-utilities-data/templates/sonic-cli-gen/config.py.j2 b/sonic-utilities-data/templates/sonic-cli-gen/config.py.j2 index 7706ae394003..0906d7c99f97 100644 --- a/sonic-utilities-data/templates/sonic-cli-gen/config.py.j2 +++ b/sonic-utilities-data/templates/sonic-cli-gen/config.py.j2 @@ -102,7 +102,7 @@ def update_entry_validated(db, table, key, data, create_if_not_exists=False): entry_changed = False for attr, value in data.items(): - if value == cfg[table][key][attr]: + if value == cfg[table][key].get(attr): continue entry_changed = True if value is None: diff --git a/tests/cli_autogen_input/autogen_test/show_cmd_output.py b/tests/cli_autogen_input/autogen_test/show_cmd_output.py index 19c02c778349..a0a0e8cf7e9e 100644 --- a/tests/cli_autogen_input/autogen_test/show_cmd_output.py +++ b/tests/cli_autogen_input/autogen_test/show_cmd_output.py @@ -4,16 +4,16 @@ show_device_metadata_localhost="""\ -HWSKU DEFAULT BGP STATUS DOCKER ROUTING CONFIG MODE HOSTNAME PLATFORM MAC DEFAULT PFCWD STATUS BGP ASN DEPLOYMENT ID TYPE BUFFER MODEL FRR MGMT FRAMEWORK CONFIG ------------ -------------------- ---------------------------- ---------- ---------------------- ----------------- ---------------------- --------- --------------- --------- -------------- --------------------------- -ACS-MSN2100 up N/A r-sonic-01 x86_64-mlnx_msn2100-r0 ff:ff:ff:ff:ff:00 disable N/A N/A ToRRouter traditional N/A +HWSKU DEFAULT BGP STATUS DOCKER ROUTING CONFIG MODE HOSTNAME PLATFORM MAC DEFAULT PFCWD STATUS BGP ASN DEPLOYMENT ID NON EXISTING FIELD TYPE BUFFER MODEL FRR MGMT FRAMEWORK CONFIG +----------- -------------------- ---------------------------- ---------- ---------------------- ----------------- ---------------------- --------- --------------- -------------------- --------- -------------- --------------------------- +ACS-MSN2100 up N/A r-sonic-01 x86_64-mlnx_msn2100-r0 ff:ff:ff:ff:ff:00 disable N/A N/A N/A ToRRouter traditional N/A """ show_device_metadata_localhost_changed_buffer_model="""\ -HWSKU DEFAULT BGP STATUS DOCKER ROUTING CONFIG MODE HOSTNAME PLATFORM MAC DEFAULT PFCWD STATUS BGP ASN DEPLOYMENT ID TYPE BUFFER MODEL FRR MGMT FRAMEWORK CONFIG ------------ -------------------- ---------------------------- ---------- ---------------------- ----------------- ---------------------- --------- --------------- --------- -------------- --------------------------- -ACS-MSN2100 up N/A r-sonic-01 x86_64-mlnx_msn2100-r0 ff:ff:ff:ff:ff:00 disable N/A N/A ToRRouter dynamic N/A +HWSKU DEFAULT BGP STATUS DOCKER ROUTING CONFIG MODE HOSTNAME PLATFORM MAC DEFAULT PFCWD STATUS BGP ASN DEPLOYMENT ID NON EXISTING FIELD TYPE BUFFER MODEL FRR MGMT FRAMEWORK CONFIG +----------- -------------------- ---------------------------- ---------- ---------------------- ----------------- ---------------------- --------- --------------- -------------------- --------- -------------- --------------------------- +ACS-MSN2100 up N/A r-sonic-01 x86_64-mlnx_msn2100-r0 ff:ff:ff:ff:ff:00 disable N/A N/A N/A ToRRouter dynamic N/A """ diff --git a/tests/cli_autogen_input/autogen_test/sonic-device_metadata.yang b/tests/cli_autogen_input/autogen_test/sonic-device_metadata.yang index 400cbf3bcd00..593f17bac335 100644 --- a/tests/cli_autogen_input/autogen_test/sonic-device_metadata.yang +++ b/tests/cli_autogen_input/autogen_test/sonic-device_metadata.yang @@ -88,6 +88,10 @@ module sonic-device_metadata { type uint32; } + leaf non_existing_field { + type uint32; + } + leaf type { type string { length 1..255; diff --git a/tests/cli_autogen_test.py b/tests/cli_autogen_test.py index 13407d1c139d..6c4bd334ad09 100644 --- a/tests/cli_autogen_test.py +++ b/tests/cli_autogen_test.py @@ -109,6 +109,18 @@ def test_config_device_metadata(self): assert result.exit_code == SUCCESS assert result.output == show_cmd_output.show_device_metadata_localhost_changed_buffer_model + def test_config_device_metadata_non_existing_field(self): + dbconnector.dedicated_dbs['CONFIG_DB'] = mock_db_path + db = Db() + runner = CliRunner() + + result = runner.invoke( + config_main.config.commands['device-metadata'].commands['localhost'].commands['non-existing-field'], ['12'], obj=db + ) + + logger.debug("\n" + result.output) + logger.debug(result.exit_code) + assert result.exit_code == SUCCESS @pytest.mark.parametrize("parameter,value", [ ('default-bgp-status', INVALID_VALUE),