blob: 8ae56dd8445793914abb60d978dcce2d67ae77dd [file] [log] [blame] [edit]
#
# Copyright (c) 2025 Project CHIP Authors
# All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
from typing import Callable
import chip.clusters as Clusters
import TC_DefaultWarnings
from chip.testing.matter_testing import MatterBaseTest, default_matter_test_main
from mobly import asserts
class TestDefaultChecker(MatterBaseTest):
''' This is a unit-style test of the defaults test. It runs the individual test functions against mocks.'''
def setup_test(self):
self.test = TC_DefaultWarnings.DefaultChecker()
self.test.mark_current_step_skipped = self.mark_current_step_skipped
self.skipped = 0
super().setup_test()
def mark_current_step_skipped(self):
''' Override of the base mark_current_step_skipped so the tests here can assert that these get called correctly.'''
self.skipped += 1
def test_product_name_is_not_default_check(self):
def run_check(product_name: str, set_override: bool, expect_problem: bool):
self.test.user_params = {TC_DefaultWarnings.FLAG_PRODUCT_NAME: set_override}
self.test.problems = []
self.test.endpoints = {0: {Clusters.BasicInformation: {Clusters.BasicInformation.Attributes.ProductName: product_name}}}
self.test.check_default_product_name()
if expect_problem:
asserts.assert_equal(len(self.test.problems), 1,
f"did not generate expected problem when testing with product name {product_name} (override = {set_override})")
else:
asserts.assert_equal(len(self.test.problems), 0,
f"Unexpected problem when testing with product name {product_name} (override = {set_override})")
asserts.assert_equal(self.skipped, 0, "Internal error: skip not reset properly")
run_check('TEST_PRODUCT', set_override=False, expect_problem=True)
run_check('TestBad', set_override=False, expect_problem=True)
run_check('BadTest', set_override=False, expect_problem=True)
run_check('TEST_PRODUCT', set_override=True, expect_problem=False)
run_check('TestBad', set_override=True, expect_problem=False)
run_check('BadTest', set_override=True, expect_problem=False)
run_check('OK name', set_override=False, expect_problem=False)
run_check('OK name', set_override=True, expect_problem=False)
asserts.assert_equal(self.skipped, 4, "Some override tests did not mark steps skipped")
def test_vendor_name_is_not_default_check(self):
def run_check(vendor_name: str, set_override: bool, expect_problem: bool):
self.test.user_params = {TC_DefaultWarnings.FLAG_VENDOR_NAME: set_override}
self.test.problems = []
self.test.endpoints = {0: {Clusters.BasicInformation: {Clusters.BasicInformation.Attributes.VendorName: vendor_name}}}
self.test.check_default_vendor_name()
if expect_problem:
asserts.assert_equal(len(self.test.problems), 1,
f"did not generate expected problem when testing with vendor name {vendor_name} (override = {set_override})")
else:
asserts.assert_equal(len(self.test.problems), 0,
f"Unexpected problem when testing with vendor name {vendor_name} (override = {set_override})")
asserts.assert_equal(self.skipped, 0, "Skip not reset properly")
run_check('TEST_VENDOR', set_override=False, expect_problem=True)
run_check('TestBad', set_override=False, expect_problem=True)
run_check('BadTest', set_override=False, expect_problem=True)
run_check('TEST_VENDOR', set_override=True, expect_problem=False)
run_check('TestBad', set_override=True, expect_problem=False)
run_check('BadTest', set_override=True, expect_problem=False)
run_check('OK name', set_override=False, expect_problem=False)
run_check('OK name', set_override=True, expect_problem=False)
asserts.assert_equal(self.skipped, 4, "Some override tests did not mark steps skipped")
def test_vendor_id_is_not_default_check(self):
def run_check(vendor_id: int, set_override: bool, expect_problem: bool):
self.test.user_params = {TC_DefaultWarnings.FLAG_VENDOR_ID: set_override}
self.test.problems = []
self.test.endpoints = {0: {Clusters.BasicInformation: {Clusters.BasicInformation.Attributes.VendorID: vendor_id}}}
self.test.check_default_vendor_id()
if expect_problem:
asserts.assert_equal(len(self.test.problems), 1,
f"did not generate expected problem when testing with vendor id {vendor_id} (override = {set_override})")
else:
asserts.assert_equal(len(self.test.problems), 0,
f"Unexpected problem when testing with vendor id {vendor_id} (override = {set_override})")
asserts.assert_equal(self.skipped, 0, "Skip not reset properly")
run_check(0xFFF1, set_override=False, expect_problem=True)
run_check(0xFFF2, set_override=False, expect_problem=True)
run_check(0, set_override=False, expect_problem=True)
run_check(0xFFF1, set_override=True, expect_problem=False)
run_check(0xFFF2, set_override=True, expect_problem=False)
run_check(0, set_override=True, expect_problem=False)
run_check(0x6006, set_override=False, expect_problem=False)
run_check(0x6006, set_override=True, expect_problem=False)
asserts.assert_equal(self.skipped, 4, "Some override tests did not mark steps skipped")
def test_calendar_is_not_default_check(self):
enum = Clusters.TimeFormatLocalization.Enums.CalendarTypeEnum
def run_check(calendar_type: Clusters.TimeFormatLocalization.Enums.CalendarTypeEnum, set_override: bool, expect_problem: bool):
self.test.user_params = {TC_DefaultWarnings.FLAG_DEFAULT_CALENDAR_FORMAT: set_override}
self.test.problems = []
self.test.endpoints = {0: {Clusters.TimeFormatLocalization: {
Clusters.TimeFormatLocalization.Attributes.ActiveCalendarType: calendar_type}}}
self.test.check_default_calendar_format()
if expect_problem:
asserts.assert_equal(len(self.test.problems), 1,
f"did not generate expected problem when testing with calendar type {calendar_type} (override = {set_override})")
else:
asserts.assert_equal(len(self.test.problems), 0,
f"Unexpected problem when testing with calendar {calendar_type} (override = {set_override})")
asserts.assert_equal(self.skipped, 0, "Skip not reset properly")
run_check(enum.kBuddhist, set_override=False, expect_problem=True)
run_check(enum.kChinese, set_override=False, expect_problem=False)
run_check(enum.kBuddhist, set_override=True, expect_problem=False)
run_check(enum.kChinese, set_override=True, expect_problem=False)
asserts.assert_equal(self.skipped, 2, "Some override tests did not mark steps skipped")
# Cluster not present
self.skipped = 0
self.test.problems = []
self.test.user_params = {}
self.test.endpoints = {0: {}}
self.test.check_default_calendar_format()
asserts.assert_equal(len(self.test.problems), 0,
"Unexpected problem when testing device with no TimeFormatLocalization cluster")
# Should have marked this as skipped
asserts.assert_equal(self.skipped, 1, "Some override tests did not mark steps skipped")
# Flag should also work here
self.skipped = 0
self.test.user_params = {TC_DefaultWarnings.FLAG_DEFAULT_CALENDAR_FORMAT: True}
self.test.check_default_calendar_format()
asserts.assert_equal(len(self.test.problems), 0,
"Unexpected problem when testing device with no TimeFormatLocalization cluster and override")
# Should have marked this as skipped
asserts.assert_equal(self.skipped, 1, "Some override tests did not mark steps skipped")
# Attribute not present
self.skipped = 0
self.test.problems = []
self.test.user_params = {}
self.test.endpoints = {0: {Clusters.TimeFormatLocalization: {}}}
self.test.check_default_calendar_format()
asserts.assert_equal(len(self.test.problems), 0,
"Unexpected problem when testing device with no ActiveCalendarType attribute")
# Should have marked this as skipped
asserts.assert_equal(self.skipped, 1, "Override test did not mark steps skipped")
# Flag should also work here
self.skipped = 0
self.test.user_params = {TC_DefaultWarnings.FLAG_DEFAULT_CALENDAR_FORMAT: True}
self.test.check_default_calendar_format()
asserts.assert_equal(len(self.test.problems), 0,
"Unexpected problem when testing device with no ActiveCalendarType cluster and override")
# Should have marked this as skipped
asserts.assert_equal(self.skipped, 1, "Override test did not mark steps skipped")
def _cluster_presence_test(self, cluster: Clusters.ClusterObjects.Cluster, fn: Callable, flag: str):
def test_endpoint(endpoint: int):
# no problem expected when cluster is not present
self.test.problems = []
self.test.user_params = {}
self.test.endpoints = {endpoint: {Clusters.Descriptor: {Clusters.Descriptor.Attributes.ServerList: []}}}
fn()
asserts.assert_equal(len(self.test.problems), 0,
f"Unexpected problem when testing for cluster presence of cluster {cluster} on endpoint {endpoint} (override = False)")
# No problem when testing with override flag, but should get skip marked
self.skipped = 0
self.test.user_params = {flag: True}
fn()
asserts.assert_equal(len(self.test.problems), 0,
f"Unexpected problem when testing for cluster presence of cluster {cluster} on endpoint {endpoint} (override = True)")
asserts.assert_equal(self.skipped, 1, f"Test not marked skipped as expected (cluster = {cluster} flag = {flag})")
# Should get a problem when the cluster is present
self.test.user_params = {flag: False}
self.test.endpoints = {endpoint: {cluster: {}, Clusters.Descriptor: {
Clusters.Descriptor.Attributes.ServerList: [cluster.id]}}}
fn()
asserts.assert_equal(len(self.test.problems), 1,
f"Did not get expected problem notification when testing with {cluster} on endpoint {endpoint}")
self.test.user_params = {flag: True}
self.skipped = 0
self.test.problems = []
fn()
asserts.assert_equal(len(
self.test.problems), 0, f"Unexpected problem notification when testing with {cluster} on endpoint {endpoint} and override {flag} set")
asserts.assert_equal(self.skipped, 1, f"Test with override flag {flag} did not mark skipped")
test_endpoint(0)
test_endpoint(1)
def test_unit_testing_is_not_present_check(self):
self._cluster_presence_test(Clusters.UnitTesting, self.test.check_unit_testing_cluster_presence,
TC_DefaultWarnings.FLAG_UNIT_TESTING)
def test_fault_injection_is_not_present_check(self):
self._cluster_presence_test(Clusters.FaultInjection, self.test.check_fault_injection_cluster_presence,
TC_DefaultWarnings.FLAG_FAULT_INJECTION)
def test_sample_mei_is_not_present_check(self):
self._cluster_presence_test(Clusters.SampleMei, self.test.check_sample_mei_cluster_presence,
TC_DefaultWarnings.FLAG_SAMPLE_MEI)
def test_fixed_label_is_not_empty_check(self):
def run_check(label_list: list[Clusters.FixedLabel.Structs.LabelStruct], set_override: bool, expect_problem: bool):
self.test.user_params = {TC_DefaultWarnings.FLAG_FIXED_LABEL_EMPTY: set_override}
self.test.problems = []
self.test.endpoints = {0: {Clusters.FixedLabel: {Clusters.FixedLabel.Attributes.LabelList: label_list}}}
self.test.check_fixed_label_cluster_empty()
if expect_problem:
asserts.assert_equal(len(self.test.problems), 1,
f"did not generate expected problem when testing with empty fixed label list (override = {set_override})")
else:
asserts.assert_equal(len(self.test.problems), 0,
f"Unexpected problem when testing with non-empty fixed label list (override = {set_override})")
asserts.assert_equal(self.skipped, 0, "Skip not reset properly")
run_check([], set_override=False, expect_problem=True)
run_check([Clusters.FixedLabel.Structs.LabelStruct("test", "val")], set_override=False, expect_problem=False)
run_check([], set_override=True, expect_problem=False)
run_check([Clusters.FixedLabel.Structs.LabelStruct("test", "val")], set_override=True, expect_problem=False)
asserts.assert_equal(self.skipped, 2, "Some override tests did not mark steps skipped")
# Cluster not present
self.skipped = 0
self.test.problems = []
self.test.user_params = {}
self.test.endpoints = {0: {}}
self.test.check_fixed_label_cluster_empty()
asserts.assert_equal(len(self.test.problems), 0,
"Unexpected problem when testing device with no FixedLabel cluster")
# Should have marked this as skipped
asserts.assert_equal(self.skipped, 1, "Some override tests did not mark steps skipped")
# Flag should also work here
self.skipped = 0
self.test.user_params = {TC_DefaultWarnings.FLAG_FIXED_LABEL_EMPTY: True}
self.test.check_fixed_label_cluster_empty()
asserts.assert_equal(len(self.test.problems), 0,
"Unexpected problem when testing device with no TimeFormatLocalization cluster and override")
# Should have marked this as skipped
asserts.assert_equal(self.skipped, 1, "Some override tests did not mark steps skipped")
def test_fixed_label_is_not_default_check(self):
def run_check(label_list: list[Clusters.FixedLabel.Structs.LabelStruct], set_override: bool, expect_problem: bool):
self.skipped = 0
self.test.user_params = {TC_DefaultWarnings.FLAG_FIXED_LABEL_DEFAULT_VALUES: set_override}
self.test.problems = []
self.test.endpoints = {0: {Clusters.FixedLabel: {Clusters.FixedLabel.Attributes.LabelList: label_list}}}
self.test.check_fixed_label_cluster_defaults()
if expect_problem:
asserts.assert_equal(len(self.test.problems), 1,
f"did not generate expected problem when testing with empty fixed label list (override = {set_override})")
else:
asserts.assert_equal(len(self.test.problems), 0,
f"Unexpected problem when testing with non-empty fixed label list (override = {set_override})")
if set_override:
asserts.assert_equal(self.skipped, 1, "Test with override did not mark steps skipped")
asserts.assert_equal(self.skipped, 0, "Skip not reset properly")
for default_label in TC_DefaultWarnings.DEFAULT_FIXED_LABEL_VALUES:
run_check([default_label], set_override=False, expect_problem=True)
run_check([default_label], set_override=True, expect_problem=False)
run_check(TC_DefaultWarnings.DEFAULT_FIXED_LABEL_VALUES, set_override=False, expect_problem=True)
run_check(TC_DefaultWarnings.DEFAULT_FIXED_LABEL_VALUES, set_override=True, expect_problem=False)
run_check([Clusters.FixedLabel.Structs.LabelStruct("test", "val")], set_override=False, expect_problem=False)
run_check([Clusters.FixedLabel.Structs.LabelStruct("test", "val")], set_override=True, expect_problem=False)
# Cluster not present
self.skipped = 0
self.test.problems = []
self.test.user_params = {}
self.test.endpoints = {0: {}}
self.test.check_fixed_label_cluster_defaults()
asserts.assert_equal(len(self.test.problems), 0,
"Unexpected problem when testing device with no FixedLabel cluster")
# Should have marked this as skipped
asserts.assert_equal(self.skipped, 1, "Some override tests did not mark steps skipped")
# Flag should also work here
self.skipped = 0
self.test.user_params = {TC_DefaultWarnings.FLAG_FIXED_LABEL_DEFAULT_VALUES: True}
self.test.check_fixed_label_cluster_defaults()
asserts.assert_equal(len(self.test.problems), 0,
"Unexpected problem when testing device with no FixedLabel cluster and override")
# Should have marked this as skipped
asserts.assert_equal(self.skipped, 1, "Some override tests did not mark steps skipped")
if __name__ == "__main__":
default_matter_test_main()