[build api] Add proto that represents the depgraph.
BUG=chromium:917174
TEST=unittests, run: `./api/build_api
chromite.api.DependencyService/GetBuildDependencyGraph --input-json=input.json --output-json=output.json`
Change-Id: Ic489343fac3ab673d5844d5f8295d7e624352fe6
Reviewed-on: https://chromium-review.googlesource.com/1478371
Commit-Ready: Ned Nguyen <nednguyen@google.com>
Tested-by: Ned Nguyen <nednguyen@google.com>
Reviewed-by: Ned Nguyen <nednguyen@google.com>
Reviewed-by: Alex Klein <saklein@chromium.org>
diff --git a/api/service/board_build_dependency_unittest.py b/api/service/board_build_dependency_unittest.py
new file mode 100644
index 0000000..c060d21
--- /dev/null
+++ b/api/service/board_build_dependency_unittest.py
@@ -0,0 +1,71 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+"""Board build dependency service tests."""
+
+from __future__ import print_function
+
+from chromite.api.service import board_build_dependency
+from chromite.lib import cros_test_lib
+
+
+class BoardBuilDependencyTest(cros_test_lib.TestCase):
+ """Unittests for board_build_dependency."""
+
+ def testCreateDepGraphProtoFromJsonMap(self):
+ json_deps = {
+ 'target_board': 'deathstar',
+ 'package_deps': {
+ 'commander/darthvader-1.49.3.3': {
+ 'action': 'merge',
+ 'category': 'commander',
+ 'cpes': [],
+ 'deps': ['troop/clone', 'troop/robot'],
+ 'rev_deps': [],
+ 'full_name': 'commander/darthvader-1.49.3.3',
+ 'name': 'darthvader',
+ 'version': '1.49.3.3'
+ },
+ 'troop/clone-1.2.3': {
+ 'action': 'merge',
+ 'category': 'troop',
+ 'cpes': [],
+ 'deps': [],
+ 'rev_deps': ['commander/darthvader'],
+ 'full_name': 'troop/clone-1.2.3',
+ 'name': 'clone',
+ 'version': '1.2.3'
+ },
+ 'troop/robot-2.3.4': {
+ 'action': 'merge',
+ 'category': 'troop',
+ 'cpes': [],
+ 'deps': [],
+ 'rev_deps': ['commander/darthvader'],
+ 'full_name': 'troop/robot-2.3.4',
+ 'name': 'clone',
+ 'version': '2.3.4'
+ },
+ },
+ 'source_path_mapping': {
+ 'commander/darthvader': ['/control/room'],
+ 'troop/clone': ['/bunker'],
+ 'troop/robot': ['/factory'],
+ },
+ }
+
+ depgraph_proto = board_build_dependency.CreateDepGraphProtoFromJsonMap(
+ json_deps)
+ self.assertEqual(depgraph_proto.build_target.name, 'deathstar')
+ darthvader_dep = None
+ for package_dep_info in depgraph_proto.package_deps:
+ if package_dep_info.package_info.package_name == 'darthvader':
+ darthvader_dep = package_dep_info
+ self.assertTrue(darthvader_dep)
+ self.assertEquals(darthvader_dep.dependency_packages[0].category,
+ 'troop')
+ self.assertEquals(darthvader_dep.dependency_packages[0].package_name,
+ 'clone')
+ self.assertEquals(darthvader_dep.dependency_source_paths[0].path,
+ '/control/room')