-
Notifications
You must be signed in to change notification settings - Fork 664
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix multi-asic behaviour for dropstat (#3059)
* Fixes dropstat multi-asic behaviour by using multi-asic helpers and ensuring that dropstat iterates through correct namespaces when 'show' command is run. Co-authored-by: rdjeric <[email protected]> Co-authored-by: Kenneth Cheung <[email protected]>
- Loading branch information
1 parent
772ee79
commit a813215
Showing
5 changed files
with
272 additions
and
53 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{ | ||
"ASIC_STATE:SAI_OBJECT_TYPE_SWITCH:oid:0x21000000000000": { | ||
"SAI_SWITCH_ATTR_INIT_SWITCH": "true", | ||
"SAI_SWITCH_ATTR_SRC_MAC_ADDRESS": "DE:AD:BE:EF:CA:FE" | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,122 @@ | ||
import os | ||
import sys | ||
from .utils import get_result_and_return_code | ||
|
||
test_path = os.path.dirname(os.path.abspath(__file__)) | ||
modules_path = os.path.dirname(test_path) | ||
scripts_path = os.path.join(modules_path, "scripts") | ||
sys.path.insert(0, test_path) | ||
sys.path.insert(0, modules_path) | ||
|
||
dropstat_masic_result_asic0 = """\ | ||
IFACE STATE RX_ERR RX_DROPS TX_ERR TX_DROPS DEBUG_0 DEBUG_2 | ||
------------ ------- -------- ---------- -------- ---------- --------- --------- | ||
Ethernet0 U 10 100 0 0 80 20 | ||
Ethernet4 U 0 1000 0 0 800 100 | ||
Ethernet-BP0 U 0 1000 0 0 800 100 | ||
Ethernet-BP4 U 0 1000 0 0 800 100 | ||
DEVICE DEBUG_1 | ||
---------------- --------- | ||
sonic_drops_test 1000 | ||
""" | ||
|
||
dropstat_masic_result_asic1 = """\ | ||
IFACE STATE RX_ERR RX_DROPS TX_ERR TX_DROPS DEBUG_0 DEBUG_2 | ||
-------------- ------- -------- ---------- -------- ---------- --------- --------- | ||
Ethernet-BP256 U 10 100 0 0 80 20 | ||
Ethernet-BP260 U 0 1000 0 0 800 100 | ||
DEVICE DEBUG_1 | ||
---------------- --------- | ||
sonic_drops_test 1000 | ||
""" | ||
|
||
dropstat_masic_result_clear_all = """\ | ||
IFACE STATE RX_ERR RX_DROPS TX_ERR TX_DROPS DEBUG_0 DEBUG_2 | ||
------------ ------- -------- ---------- -------- ---------- --------- --------- | ||
Ethernet0 U 0 0 0 0 0 0 | ||
Ethernet4 U 0 0 0 0 0 0 | ||
Ethernet-BP0 U 0 0 0 0 0 0 | ||
Ethernet-BP4 U 0 0 0 0 0 0 | ||
DEVICE DEBUG_1 | ||
---------------- --------- | ||
sonic_drops_test 0 | ||
IFACE STATE RX_ERR RX_DROPS TX_ERR TX_DROPS DEBUG_0 DEBUG_2 | ||
-------------- ------- -------- ---------- -------- ---------- --------- --------- | ||
Ethernet-BP256 U 0 0 0 0 0 0 | ||
Ethernet-BP260 U 0 0 0 0 0 0 | ||
DEVICE DEBUG_1 | ||
---------------- --------- | ||
sonic_drops_test 0 | ||
""" | ||
|
||
|
||
class TestMultiAsicDropstat(object): | ||
@classmethod | ||
def setup_class(cls): | ||
os.environ["PATH"] += os.pathsep + scripts_path | ||
os.environ["UTILITIES_UNIT_TESTING"] = "1" | ||
os.environ["UTILITIES_UNIT_TESTING_TOPOLOGY"] = "multi_asic" | ||
print("SETUP") | ||
|
||
def test_show_dropcount_masic_asic0(self): | ||
os.environ["UTILITIES_UNIT_TESTING_DROPSTAT_CLEAN_CACHE"] = "1" | ||
return_code, result = get_result_and_return_code([ | ||
'dropstat', '-c', 'show', '-n', 'asic0' | ||
]) | ||
os.environ.pop("UTILITIES_UNIT_TESTING_DROPSTAT_CLEAN_CACHE") | ||
print("return_code: {}".format(return_code)) | ||
print("result = {}".format(result)) | ||
assert result == dropstat_masic_result_asic0 and return_code == 0 | ||
|
||
def test_show_dropcount_masic_all_and_clear(self): | ||
os.environ["UTILITIES_UNIT_TESTING_DROPSTAT_CLEAN_CACHE"] = "1" | ||
return_code, result = get_result_and_return_code([ | ||
'dropstat', '-c', 'show' | ||
]) | ||
os.environ.pop("UTILITIES_UNIT_TESTING_DROPSTAT_CLEAN_CACHE") | ||
print("return_code: {}".format(return_code)) | ||
print("result = {}".format(result)) | ||
assert result == dropstat_masic_result_asic0 + dropstat_masic_result_asic1 | ||
assert return_code == 0 | ||
|
||
return_code, result = get_result_and_return_code([ | ||
'dropstat', '-c', 'clear' | ||
]) | ||
print("return_code: {}".format(return_code)) | ||
print("result = {}".format(result)) | ||
assert result == 'Cleared drop counters\n' and return_code == 0 | ||
|
||
return_code, result = get_result_and_return_code([ | ||
'dropstat', '-c', 'show' | ||
]) | ||
print("return_code: {}".format(return_code)) | ||
print("result = {}".format(result)) | ||
assert result == dropstat_masic_result_clear_all and return_code == 0 | ||
|
||
def test_show_dropcount_masic_invalid_ns(self): | ||
return_code, result = get_result_and_return_code([ | ||
'dropstat', '-c', 'show', '-n', 'asic5' | ||
]) | ||
print("return_code: {}".format(return_code)) | ||
print("result = {}".format(result)) | ||
assert return_code == 2 | ||
assert "invalid choice: asic5" in result | ||
|
||
def test_show_dropcount_version(self): | ||
return_code, result = get_result_and_return_code([ | ||
'dropstat', '--version' | ||
]) | ||
print("return_code: {}".format(return_code)) | ||
print("result = {}".format(result)) | ||
assert return_code == 0 | ||
|
||
@classmethod | ||
def teardown_class(cls): | ||
os.environ["PATH"] = os.pathsep.join(os.environ["PATH"].split(os.pathsep)[:-1]) | ||
os.environ.pop("UTILITIES_UNIT_TESTING") | ||
os.environ.pop("UTILITIES_UNIT_TESTING_TOPOLOGY") | ||
print("TEARDOWN") |
Oops, something went wrong.