[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')