blob: de0a39e78b09b1c7e2a5f62ff9c85bf9308abec9 [file] [log] [blame]
# Copyright 2020 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for check_topology."""
import unittest
from checker.common_checks.check_topology import TopologyConstraintSuite
from chromiumos.config.payload.config_bundle_pb2 import ConfigBundle
from chromiumos.config.api.component_pb2 import Component
from chromiumos.config.api.design_pb2 import Design
from chromiumos.config.api.hardware_topology_pb2 import HardwareTopology
from chromiumos.config.api.topology_pb2 import (HardwareFeatures, Topology)
class CheckIdsTest(unittest.TestCase):
"""Tests for check_topology."""
def setUp(self):
"""Creates objects to be shared between tests."""
self.screen_1_topology = Topology(
id="part1",
type=Topology.SCREEN,
description={'EN': 'The first type of screen.'},
hardware_feature=HardwareFeatures(
screen=HardwareFeatures.Screen(
panel_properties=Component.DisplayPanel.Properties(
diagonal_milliinch=10))))
self.screen_2_topology = Topology(
id="part2",
type=Topology.SCREEN,
description={'EN': 'The second type of screen.'},
hardware_feature=HardwareFeatures(
screen=HardwareFeatures.Screen(
panel_properties=Component.DisplayPanel.Properties(
diagonal_milliinch=20))))
self.keyboard_1_topology = Topology(
id="part1",
type=Topology.KEYBOARD,
description={'EN': 'The first type of keyboard.'},
hardware_feature=HardwareFeatures(
keyboard=HardwareFeatures.Keyboard(
backlight=HardwareFeatures.PRESENT)),
)
def test_check_topologies_consistent(self):
"""Tests no assertions thrown when topologies are consistent."""
# Screen topologies differ in id and type between configs. The same keyboard
# topology is used by both configs (the entire message, including id and
# type match).
#
# Note that screen_1_topology and keyboard_1_topology share the same id
# ("part1"), but are a different type, so do not violate the constraint.
project_config = ConfigBundle(design_list=[
Design(configs=[
Design.Config(
hardware_topology=HardwareTopology(
screen=self.screen_1_topology,
keyboard=self.keyboard_1_topology)),
Design.Config(
hardware_topology=HardwareTopology(
screen=self.screen_2_topology,
keyboard=self.keyboard_1_topology))
])
])
TopologyConstraintSuite().run_checks(
program_config=None,
project_config=project_config,
factory_dir=None,
)
def test_check_topologies_consistent_violated(self):
"""Tests assertion thrown when topologies are inconsistent."""
# Create a copy of the first screen topology, but change the milliinch
# value. Now, a given id and type maps to two different messages.
invalid_screen_topology = Topology()
invalid_screen_topology.CopyFrom(self.screen_1_topology)
invalid_screen = invalid_screen_topology.hardware_feature.screen
invalid_screen.panel_properties.diagonal_milliinch = 20
project_config = ConfigBundle(design_list=[
Design(configs=[
Design.Config(
hardware_topology=HardwareTopology(
screen=self.screen_1_topology,
keyboard=self.keyboard_1_topology)),
Design.Config(
hardware_topology=HardwareTopology(
screen=invalid_screen_topology,
keyboard=self.keyboard_1_topology))
])
])
with self.assertRaisesRegex(
AssertionError,
r'Two different messages found for id and type \(part1, SCREEN\)*'):
TopologyConstraintSuite().run_checks(
program_config=None,
project_config=project_config,
factory_dir=None,
)
def test_check_topologies_consistent_violated_across_designs(self):
"""Tests assertion thrown when topologies are inconsistent across designs.
"""
# Create a copy of the first screen topology, but change the milliinch
# value. Now, a given id and type maps to two different messages.
invalid_screen_topology = Topology()
invalid_screen_topology.CopyFrom(self.screen_1_topology)
invalid_screen = invalid_screen_topology.hardware_feature.screen
invalid_screen.panel_properties.diagonal_milliinch = 20
project_config = ConfigBundle(design_list=[
Design(configs=[
Design.Config(
hardware_topology=HardwareTopology(
screen=self.screen_1_topology,
keyboard=self.keyboard_1_topology)),
]),
Design(configs=[
Design.Config(
hardware_topology=HardwareTopology(
screen=invalid_screen_topology,
keyboard=self.keyboard_1_topology))
])
])
with self.assertRaisesRegex(
AssertionError,
r'Two different messages found for id and type \(part1, SCREEN\)*'):
TopologyConstraintSuite().run_checks(
program_config=None,
project_config=project_config,
factory_dir=None,
)