From 5eeb478d57442f7bd64b15f4ec8b3471dbad469e Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Thu, 1 Mar 2018 08:28:14 -0500 Subject: [PATCH] TT#33030 allow overwriting entire subkeys with similar types Change-Id: I70b5b94cd6c5234f2a8b09fd2d4ebca488e5a31f --- scripts/set | 6 +++++ t/test_ngcpcfg_set_and_del.py | 44 +++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/scripts/set b/scripts/set index 297c04ea..4c6c587d 100755 --- a/scripts/set +++ b/scripts/set @@ -90,6 +90,12 @@ for my \$component (split(/\\./, "${option}")) { if (!defined(\$\$valref) || ref(\$valref) eq 'SCALAR') { \$\$valref = ${value}; } +elsif (ref(\$\$valref) eq 'ARRAY' && ref(${value}) eq 'ARRAY') { + \$\$valref = ${value}; +} +elsif (ref(\$\$valref) eq 'HASH' && ref(${value}) eq 'HASH') { + \$\$valref = ${value}; +} else { print STDERR ("Key resolved to a " . ref(\$\$valref) . " reference; refusing to overwrite.\n"); exit(1); diff --git a/t/test_ngcpcfg_set_and_del.py b/t/test_ngcpcfg_set_and_del.py index 29a70be1..7b548ed9 100644 --- a/t/test_ngcpcfg_set_and_del.py +++ b/t/test_ngcpcfg_set_and_del.py @@ -175,6 +175,27 @@ aaa: assert out.returncode == 0 +@pytest.mark.tt_33030 +def test_set_action_overwrite_dictionary_subsection(ngcpcfgcli, tmpdir): + tmpfile = tmpdir.join("tmpfile.txt") + tmpfile.write('''--- +aaa: + bbb: + eee: 'foobar' + fff: 'quux' +''') + out = ngcpcfgcli("set", str(tmpfile), "aaa.bbb={'ccc','123','ddd','567'}") + assert tmpfile.read() == '''--- +aaa: + bbb: + ccc: '123' + ddd: '567' +''' + assert "" in out.stdout + assert "" in out.stderr + assert out.returncode == 0 + + @pytest.mark.tt_16903 def test_set_action_generate_list(ngcpcfgcli, tmpdir): tmpfile = tmpdir.join("tmpfile.txt") @@ -193,6 +214,29 @@ aaa: assert out.returncode == 0 +@pytest.mark.tt_33030 +def test_set_action_overwrite_list(ngcpcfgcli, tmpdir): + tmpfile = tmpdir.join("tmpfile.txt") + tmpfile.write('''--- +aaa: + bbb: + - 5432 + - 'foobar' +''') + out = ngcpcfgcli("set", str(tmpfile), "aaa.bbb=['ccc','123','ddd','567']") + assert tmpfile.read() == '''--- +aaa: + bbb: + - ccc + - '123' + - ddd + - '567' +''' + assert "" in out.stdout + assert "" in out.stderr + assert out.returncode == 0 + + @pytest.mark.tt_16903 def test_set_action_add_list(ngcpcfgcli, tmpdir): tmpfile = tmpdir.join("tmpfile.txt")