Skip to content

Commit

Permalink
Change get_config_json implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
xincunli-sonic committed Jun 12, 2024
1 parent c4d20c6 commit 05cb10f
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 15 deletions.
31 changes: 20 additions & 11 deletions generic_config_updater/generic_updater.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,18 +42,27 @@ def get_cmd_output(cmd):


def get_config_json():
command = ["show", "runningconfiguration", "all"]
all_running_config_text, returncode = get_cmd_output(command)
if returncode:
raise GenericConfigUpdaterError(
f"Fetch all runningconfiguration failed as output:{all_running_config_text}")
all_running_config = json.loads(all_running_config_text)

scope_list = [multi_asic.DEFAULT_NAMESPACE]
all_running_config = {}
if multi_asic.is_multi_asic():
for asic in [HOST_NAMESPACE, *multi_asic.get_namespace_list()]:
all_running_config[asic].pop("bgpraw", None)
else:
all_running_config.pop("bgpraw", None)
scope_list.extend(multi_asic.get_namespace_list())
for scope in scope_list:
command = ["sonic-cfggen", "-d", "--print-data"]
if scope != multi_asic.DEFAULT_NAMESPACE:
command += ["-n", scope]

running_config_text, returncode = get_cmd_output(command)
if returncode:
raise GenericConfigUpdaterError(
f"Fetch all runningconfiguration failed as output:{running_config_text}")
running_config = json.loads(running_config_text)

if multi_asic.is_multi_asic():
if scope == multi_asic.DEFAULT_NAMESPACE:
scope = HOST_NAMESPACE
all_running_config[scope] = running_config
else:
all_running_config = running_config
return all_running_config


Expand Down
29 changes: 25 additions & 4 deletions tests/config_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -3130,10 +3130,31 @@ def test_replace_multiasic_missing_scope(self):
def test_checkpoint_multiasic(self, mock_subprocess_popen):
allconfigs = copy.deepcopy(self.all_config)

mock_instance = MagicMock()
mock_instance.communicate.return_value = (json.dumps(allconfigs), 0)
mock_instance.returncode = 0
mock_subprocess_popen.return_value = mock_instance
# Create mock instances for each subprocess call
mock_instance_localhost = MagicMock()
mock_instance_localhost.communicate.return_value = (json.dumps(allconfigs["localhost"]), 0)
mock_instance_localhost.returncode = 0

mock_instance_asic0 = MagicMock()
mock_instance_asic0.communicate.return_value = (json.dumps(allconfigs["asic0"]), 0)
mock_instance_asic0.returncode = 0

mock_instance_asic1 = MagicMock()
mock_instance_asic1.communicate.return_value = (json.dumps(allconfigs["asic1"]), 0)
mock_instance_asic1.returncode = 0

# Setup side effect to return different mock instances based on input arguments
def side_effect(*args, **kwargs):
if "asic" not in args[0]:
return mock_instance_localhost
elif "asic0" in args[0]:
return mock_instance_asic0
elif "asic1" in args[0]:
return mock_instance_asic1
else:
return MagicMock() # Default case

mock_subprocess_popen.side_effect = side_effect

checkpointname = "checkpointname"
print("Multi ASIC: {}".format(multi_asic.is_multi_asic()))
Expand Down

0 comments on commit 05cb10f

Please sign in to comment.