blob: c0412ed91da748dc680ebb0109a6bc09f0193b13 [file] [log] [blame]
Ned Nguyene5d04852019-02-19 16:33:15 -07001# -*- coding: utf-8 -*-
2# Copyright 2019 The Chromium OS Authors. All rights reserved.
3# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5"""Board build dependency service tests."""
6
7from __future__ import print_function
8
Michael Mortensenaf10cca2019-11-18 20:21:32 -07009from chromite.api import api_config
Alex Kleinec869c12019-07-09 15:22:16 -060010from chromite.api.controller import dependency
Ned Nguyen8e144bd2019-05-02 09:09:41 -060011from chromite.api.gen.chromite.api import depgraph_pb2
Ned Nguyene5d04852019-02-19 16:33:15 -070012from chromite.lib import cros_test_lib
Michael Mortensenaf10cca2019-11-18 20:21:32 -070013from chromite.service import dependency as dependency_service
Ned Nguyene5d04852019-02-19 16:33:15 -070014
15
Michael Mortensenaf10cca2019-11-18 20:21:32 -070016class BoardBuilDependencyTest(cros_test_lib.MockTestCase,
17 api_config.ApiConfigMixin):
Ned Nguyene5d04852019-02-19 16:33:15 -070018 """Unittests for board_build_dependency."""
19
Michael Mortensenaf10cca2019-11-18 20:21:32 -070020 def setUp(self):
21 self.response = depgraph_pb2.GetBuildDependencyGraphResponse()
22 self.json_deps = {
Ned Nguyene5d04852019-02-19 16:33:15 -070023 'target_board': 'deathstar',
24 'package_deps': {
25 'commander/darthvader-1.49.3.3': {
26 'action': 'merge',
27 'category': 'commander',
28 'cpes': [],
29 'deps': ['troop/clone', 'troop/robot'],
30 'rev_deps': [],
31 'full_name': 'commander/darthvader-1.49.3.3',
32 'name': 'darthvader',
33 'version': '1.49.3.3'
34 },
35 'troop/clone-1.2.3': {
36 'action': 'merge',
37 'category': 'troop',
38 'cpes': [],
39 'deps': [],
40 'rev_deps': ['commander/darthvader'],
41 'full_name': 'troop/clone-1.2.3',
42 'name': 'clone',
43 'version': '1.2.3'
44 },
45 'troop/robot-2.3.4': {
46 'action': 'merge',
47 'category': 'troop',
48 'cpes': [],
49 'deps': [],
50 'rev_deps': ['commander/darthvader'],
51 'full_name': 'troop/robot-2.3.4',
Ned Nguyen8be10052019-02-26 08:58:45 -070052 'name': 'robot',
Ned Nguyene5d04852019-02-19 16:33:15 -070053 'version': '2.3.4'
54 },
55 },
56 'source_path_mapping': {
Ned Nguyen8be10052019-02-26 08:58:45 -070057 'commander/darthvader-1.49.3.3': ['/control/room'],
58 'troop/clone-1.2.3': ['/bunker'],
59 'troop/robot-2.3.4': ['/factory'],
Ned Nguyene5d04852019-02-19 16:33:15 -070060 },
61 }
62
Michael Mortensenaf10cca2019-11-18 20:21:32 -070063 def testCreateDepGraphProtoFromJsonMap(self):
64 """Test creating DepGraph protobuf from json map."""
Ned Nguyen8e144bd2019-05-02 09:09:41 -060065 depgraph_proto = depgraph_pb2.DepGraph()
Alex Kleinec869c12019-07-09 15:22:16 -060066 dependency.AugmentDepGraphProtoFromJsonMap(
Michael Mortensenaf10cca2019-11-18 20:21:32 -070067 self.json_deps, depgraph_proto)
Ned Nguyene5d04852019-02-19 16:33:15 -070068 self.assertEqual(depgraph_proto.build_target.name, 'deathstar')
69 darthvader_dep = None
70 for package_dep_info in depgraph_proto.package_deps:
71 if package_dep_info.package_info.package_name == 'darthvader':
72 darthvader_dep = package_dep_info
73 self.assertTrue(darthvader_dep)
Mike Frysinger2d589a12019-08-25 14:15:12 -040074 self.assertEqual(darthvader_dep.dependency_packages[0].category,
75 'troop')
76 self.assertEqual(darthvader_dep.dependency_packages[0].package_name,
77 'clone')
78 self.assertEqual(darthvader_dep.dependency_source_paths[0].path,
79 '/control/room')
Michael Mortensenaf10cca2019-11-18 20:21:32 -070080
81 def testGetBuildDependencyGraph(self):
82 """GetBuildDependencyGraph calls helper method with correct args."""
Chris McDonalda22b74f2019-11-22 13:55:06 -070083 patch = self.PatchObject(
84 dependency_service,
85 'GetBuildDependency',
86 return_value=(self.json_deps, self.json_deps))
Michael Mortensenaf10cca2019-11-18 20:21:32 -070087 input_proto = depgraph_pb2.GetBuildDependencyGraphRequest()
88 input_proto.build_target.name = 'target'
89 dependency.GetBuildDependencyGraph(input_proto, self.response,
90 self.api_config)
91 self.assertEqual(self.response.dep_graph.build_target.name, 'deathstar')
92 patch.assert_called_once()
93
94 def testValidateOnly(self):
95 """Sanity check that a validate only call does not execute any logic."""
96 patch = self.PatchObject(dependency_service, 'GetBuildDependency')
97 input_proto = depgraph_pb2.GetBuildDependencyGraphRequest()
98 input_proto.build_target.name = 'target'
99 dependency.GetBuildDependencyGraph(input_proto, self.response,
100 self.validate_only_config)
101 patch.assert_not_called()
102
103 def testMockCall(self):
104 """Test that a mock call does not execute logic, returns mocked value."""
105 patch = self.PatchObject(dependency_service, 'GetBuildDependency')
106 input_proto = depgraph_pb2.GetBuildDependencyGraphRequest()
107 input_proto.build_target.name = 'target'
108 dependency.GetBuildDependencyGraph(input_proto, self.response,
109 self.mock_call_config)
110 patch.assert_not_called()
111 self.assertEqual(self.response.dep_graph.build_target.name, 'target_board')