Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions tests/common/fixtures/duthost_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from tests.common.utilities import wait_until
from jinja2 import Template
from netaddr import valid_ipv4, valid_ipv6
from tests.common.mellanox_data import is_mellanox_device


logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -524,6 +525,15 @@ def dut_qos_maps_module(rand_selected_front_end_dut):
return _dut_qos_map(dut)


@pytest.fixture(scope='module')
def is_support_mock_asic(duthosts, rand_one_dut_hostname):
"""
Check if dut supports mock asic. For mellanox device, it doesn't support mock asic
"""
duthost = duthosts[rand_one_dut_hostname]
return not is_mellanox_device(duthost)


def separated_dscp_to_tc_map_on_uplink(dut_qos_maps_module):
"""
A helper function to check if separated DSCP_TO_TC_MAP is applied to
Expand Down
49 changes: 27 additions & 22 deletions tests/system_health/test_system_health.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from tests.platform_tests.thermal_control_test_helper import disable_thermal_policy # noqa F401
from .device_mocker import device_mocker_factory # noqa F401
from tests.common.helpers.assertions import pytest_assert
from tests.common.fixtures.duthost_utils import is_support_mock_asic # noqa F401

pytestmark = [
pytest.mark.topology('any')
Expand Down Expand Up @@ -159,7 +160,7 @@ def test_service_checker_with_process_exit(duthosts, enum_rand_one_per_hwsku_hos

@pytest.mark.disable_loganalyzer
def test_device_checker(duthosts, enum_rand_one_per_hwsku_hostname,
device_mocker_factory, disable_thermal_policy): # noqa F811
device_mocker_factory, disable_thermal_policy, is_support_mock_asic): # noqa F811
duthost = duthosts[enum_rand_one_per_hwsku_hostname]
device_mocker = device_mocker_factory(duthost)
wait_system_health_boot_up(duthost)
Expand All @@ -168,7 +169,9 @@ def test_device_checker(duthosts, enum_rand_one_per_hwsku_hostname,
fan_mock_result, fan_name = device_mocker.mock_fan_speed(False)
fan_expect_value = EXPECT_FAN_INVALID_SPEED.format(fan_name)

asic_mock_result = device_mocker.mock_asic_temperature(False)
asic_mock_result = 'not support asic mock'
if is_support_mock_asic:
asic_mock_result = device_mocker.mock_asic_temperature(False)
asic_expect_value = EXPECT_ASIC_HOT

psu_mock_result, psu_name = device_mocker.mock_psu_presence(False)
Expand All @@ -185,17 +188,18 @@ def test_device_checker(duthosts, enum_rand_one_per_hwsku_hostname,
duthost, STATE_DB, HEALTH_TABLE_NAME, fan_name)
assert value and fan_expect_value in value,\
'Mock fan invalid speed, expect {}, but got {}'.format(fan_expect_value, value)
value = redis_get_field_value(
duthost, STATE_DB, HEALTH_TABLE_NAME, 'ASIC')
assert value and asic_expect_value in value,\
'Mock ASIC temperature overheated, expect {}, but got {}'.format(asic_expect_value, value)
if is_support_mock_asic:
value = redis_get_field_value(duthost, STATE_DB, HEALTH_TABLE_NAME, 'ASIC')
assert value and asic_expect_value in value,\
'Mock ASIC temperature overheated, expect {}, but got {}'.format(asic_expect_value, value)

value = redis_get_field_value(
duthost, STATE_DB, HEALTH_TABLE_NAME, psu_name)
assert value and psu_expect_value == value,\
'Mock PSU absence, expect {}, but got {}'.format(psu_expect_value, value)
fan_mock_result, fan_name = device_mocker.mock_fan_speed(True)
asic_mock_result = device_mocker.mock_asic_temperature(True)
if is_support_mock_asic:
asic_mock_result = device_mocker.mock_asic_temperature(True)
psu_mock_result, psu_name = device_mocker.mock_psu_presence(True)
if fan_mock_result and asic_mock_result and psu_mock_result:
logger.info('Mocked valid fan speed for {}'.format(fan_name))
Expand All @@ -209,10 +213,10 @@ def test_device_checker(duthosts, enum_rand_one_per_hwsku_hostname,
assert not value or fan_expect_value not in value,\
'Mock fan valid speed, expect {}, but it still report invalid speed'.format(fan_expect_value)

value = redis_get_field_value(
duthost, STATE_DB, HEALTH_TABLE_NAME, 'ASIC')
assert not value or asic_expect_value not in value,\
'Mock ASIC normal temperature, but it is still overheated'
if is_support_mock_asic:
value = redis_get_field_value(duthost, STATE_DB, HEALTH_TABLE_NAME, 'ASIC')
assert not value or asic_expect_value not in value,\
'Mock ASIC normal temperature, but it is still overheated'

value = redis_get_field_value(
duthost, STATE_DB, HEALTH_TABLE_NAME, psu_name)
Expand Down Expand Up @@ -356,7 +360,7 @@ def test_external_checker(duthosts, enum_rand_one_per_hwsku_hostname):
@pytest.mark.disable_loganalyzer
@pytest.mark.parametrize('ignore_log_analyzer_by_vendor', [['mellanox']], indirect=True)
def test_system_health_config(duthosts, enum_rand_one_per_hwsku_hostname,
device_mocker_factory, ignore_log_analyzer_by_vendor): # noqa F811
device_mocker_factory, ignore_log_analyzer_by_vendor, is_support_mock_asic): # noqa F811
duthost = duthosts[enum_rand_one_per_hwsku_hostname]
device_mocker = device_mocker_factory(duthost)
wait_system_health_boot_up(duthost)
Expand All @@ -375,16 +379,17 @@ def test_system_health_config(duthosts, enum_rand_one_per_hwsku_hostname,

logger.info(
'Ignore ASIC check, verify there is no error information about ASIC')
with ConfigFileContext(duthost, os.path.join(FILES_DIR, IGNORE_ASIC_CHECK_CONFIG_FILE)):
time.sleep(FAST_INTERVAL)
mock_result = device_mocker.mock_asic_temperature(False)
expect_value = EXPECT_ASIC_HOT
if mock_result:
time.sleep(THERMAL_CHECK_INTERVAL)
value = redis_get_field_value(
duthost, STATE_DB, HEALTH_TABLE_NAME, 'ASIC')
assert not value or expect_value not in value, 'ASIC check is still performed after it ' \
'is configured to be ignored'
if is_support_mock_asic:
with ConfigFileContext(duthost, os.path.join(FILES_DIR, IGNORE_ASIC_CHECK_CONFIG_FILE)):
time.sleep(FAST_INTERVAL)
mock_result = device_mocker.mock_asic_temperature(False)
expect_value = EXPECT_ASIC_HOT
if mock_result:
time.sleep(THERMAL_CHECK_INTERVAL)
value = redis_get_field_value(
duthost, STATE_DB, HEALTH_TABLE_NAME, 'ASIC')
assert not value or expect_value not in value, 'ASIC check is still performed after it ' \
'is configured to be ignored'

logger.info(
'Ignore PSU check, verify there is no error information about psu')
Expand Down