Skip to content

Commit

Permalink
Add "state" field in CONFIG_DB fabric_monitor table as a toggle of the
Browse files Browse the repository at this point in the history
fabric port monitoring feature. The command to set this is "config
fabric port monitor state <enable/disable>"

Signed-off-by: Jie Feng <jfeng@arista.com>
  • Loading branch information
jfeng-arista committed Aug 18, 2023
1 parent 3b7cc1f commit cac9fef
Show file tree
Hide file tree
Showing 4 changed files with 66 additions and 9 deletions.
13 changes: 4 additions & 9 deletions config/fabric.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,16 +157,12 @@ def error_threshold(crccells, rxcells, namespace):
config_db.mod_entry("FABRIC_MONITOR", "FABRIC_MONITOR_DATA",
{'monErrThreshCrcCells': crccells, 'monErrThreshRxCells': rxcells})

def setFabricPortMonitorState(state, namespace ):
def setFabricPortMonitorState(state, namespace, ctx):
""" set the fabric port monitor state"""
# Connect to config database
config_db = ConfigDBConnector(use_unix_socket_path=True, namespace=namespace)
config_db.connect()

# Connect to state database
state_db = SonicV2Connector(use_unix_socket_path=True, namespace=namespace)
state_db.connect(state_db.STATE_DB, False)

# Make sure configuration data exists
monitorData = config_db.get_all(config_db.CONFIG_DB, "FABRIC_MONITOR|FABRIC_MONITOR_DATA")
if not bool(monitorData):
Expand All @@ -188,12 +184,11 @@ def state(state, namespace):

n_asics = multi_asic.get_num_asics()
if n_asics > 1 and namespace is None:
ns = multi_asic.get_all_namespaces()
ns_list = ns['front_ns'] + ns['back_ns'] + ns['fabric_ns']
ns_list = multi_asic.get_namespace_list()
for namespace in ns_list:
setFabricPortMonitorState(state, namespace)
setFabricPortMonitorState(state, namespace, ctx)
else:
setFabricPortMonitorState(state, namespace)
setFabricPortMonitorState(state, namespace, ctx)

#
# 'config fabric port monitor poll ...'
Expand Down
48 changes: 48 additions & 0 deletions tests/config_fabric_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import os
import pytest
import sys
import importlib

from click.testing import CliRunner
from utilities_common.db import Db
Expand Down Expand Up @@ -103,3 +104,50 @@ def test_config_fabric_monitor_state(self, ctx):
result = self.basic_check("port", ["monitor", "state", "disable"], ctx)
expect_result = 0
assert operator.eq(result.exit_code, expect_result)

@classmethod
def teardown_class(cls):
print("TEARDOWN")
os.environ["PATH"] = os.pathsep.join(
os.environ["PATH"].split(os.pathsep)[:-1])
os.environ["UTILITIES_UNIT_TESTING"] = "0"
os.environ["UTILITIES_UNIT_TESTING_TOPOLOGY"] = ""

class TestMultiAsicConfigFabric(object):
@classmethod
def setup_class(cls):
print("SETUP")
os.environ["PATH"] += os.pathsep + scripts_path
os.environ["UTILITIES_UNIT_TESTING"] = "2"
os.environ["UTILITIES_UNIT_TESTING_TOPOLOGY"] = "multi_asic"
# change to multi asic config
from .mock_tables import dbconnector
from .mock_tables import mock_multi_asic
importlib.reload(mock_multi_asic)
dbconnector.load_namespace_config()

def basic_check(self, command_name, para_list, ctx):
# This function issues command of "config fabric xxxx",
# and returns the result of the command.
runner = CliRunner()
result = runner.invoke(config.config.commands["fabric"].commands[command_name], para_list, obj = ctx)
print(result.output)
return result

def test_multi_config_fabric_monitor_state(self, ctx):
result = self.basic_check("port", ["monitor", "state", "disable"], ctx)
expect_result = 0
assert operator.eq(result.exit_code, expect_result)

@classmethod
def teardown_class(cls):
print("TEARDOWN_TEST")
os.environ["PATH"] = os.pathsep.join(
os.environ["PATH"].split(os.pathsep)[:-1])
os.environ["UTILITIES_UNIT_TESTING"] = "0"
os.environ["UTILITIES_UNIT_TESTING_TOPOLOGY"] = ""
# change back to single asic config
from .mock_tables import dbconnector
from .mock_tables import mock_single_asic
importlib.reload(mock_single_asic)
dbconnector.load_namespace_config()
7 changes: 7 additions & 0 deletions tests/mock_tables/asic0/config_db.json
Original file line number Diff line number Diff line change
Expand Up @@ -257,5 +257,12 @@
"ports@": "Ethernet124",
"type": "L3",
"stage": "ingress"
},
"FABRIC_MONITOR|FABRIC_MONITOR_DATA": {
"monCapacityThreshWarn": "100",
"monErrThreshCrcCells": "1",
"monErrThreshRxCells": "61035156",
"monPollThreshIsolation": "1",
"monPollThreshRecovery": "8"
}
}
7 changes: 7 additions & 0 deletions tests/mock_tables/asic1/config_db.json
Original file line number Diff line number Diff line change
Expand Up @@ -197,5 +197,12 @@
"holdtime": "0",
"asn": "65100",
"keepalive": "0"
},
"FABRIC_MONITOR|FABRIC_MONITOR_DATA": {
"monCapacityThreshWarn": "100",
"monErrThreshCrcCells": "1",
"monErrThreshRxCells": "61035156",
"monPollThreshIsolation": "1",
"monPollThreshRecovery": "8"
}
}

0 comments on commit cac9fef

Please sign in to comment.