# -*- 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

import os
import sys

from chromite.api import api_config
from chromite.api.controller import controller_util
from chromite.api.controller import dependency
from chromite.api.gen.chromite.api import depgraph_pb2
from chromite.api.gen.chromite.api import sysroot_pb2
from chromite.api.gen.chromiumos import common_pb2
from chromite.lib import cros_build_lib
from chromite.lib import cros_test_lib
from chromite.lib import osutils
from chromite.service import dependency as dependency_service

pytestmark = cros_test_lib.pytestmark_inside_only


assert sys.version_info >= (3, 6), 'This module requires Python 3.6+'


class BoardBuildDependencyTest(cros_test_lib.MockTestCase,
                               api_config.ApiConfigMixin):
  """Unittests for board_build_dependency."""

  def setUp(self):
    self.response = depgraph_pb2.GetBuildDependencyGraphResponse()
    self.json_deps = {
        'target_board': 'deathstar',
        'sysroot_path': '/build/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': ['equipment/jetpack'],
                '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': 'robot',
                'version': '2.3.4'
            },
            'equipment/jetpack-3.4.5': {
                'action': 'merge',
                'category': 'equipment',
                'cpes': [],
                'deps': [],
                'rev_deps': ['commander/darthvader'],
                'full_name': 'equipment/jetpack-3.4.5',
                'name': 'jetpack',
                'version': '3.4.5'
            },
        },
        'source_path_mapping': {
            'commander/darthvader-1.49.3.3': ['/control/room'],
            'troop/clone-1.2.3': ['/bunker'],
            'troop/robot-2.3.4': ['/factory'],
            'equipment/jetpack-3.4.5': ['/factory'],
        },
    }

  def testCreateDepGraphProtoFromJsonMap(self):
    """Test creating DepGraph protobuf from json map."""
    depgraph_proto = depgraph_pb2.DepGraph()
    dependency.AugmentDepGraphProtoFromJsonMap(
        self.json_deps, depgraph_proto)
    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.assertEqual(darthvader_dep.dependency_packages[0].category,
                     'troop')
    self.assertEqual(darthvader_dep.dependency_packages[0].package_name,
                     'clone')
    self.assertEqual(darthvader_dep.dependency_source_paths[0].path,
                     '/control/room')

  def testGetBuildDependencyGraph(self):
    """GetBuildDependencyGraph calls helper method with correct args."""
    patch = self.PatchObject(
        dependency_service,
        'GetBuildDependency',
        return_value=(self.json_deps, self.json_deps))
    input_proto = depgraph_pb2.GetBuildDependencyGraphRequest()
    input_proto.build_target.name = 'target'
    dependency.GetBuildDependencyGraph(input_proto, self.response,
                                       self.api_config)
    self.assertEqual(self.response.dep_graph.build_target.name, 'deathstar')
    patch.assert_called_once()

  def testGetBuildDependencyGraphForPackages(self):
    """GetBuildDependencyGraph calls helper method with correct args."""
    get_dep = self.PatchObject(
        dependency_service,
        'GetBuildDependency',
        return_value=(self.json_deps, self.json_deps))
    pkg_mock = 'package-CPV'
    pkg_to_cpv = self.PatchObject(
        controller_util,
        'PackageInfoToCPV', return_value=pkg_mock)
    package = common_pb2.PackageInfo(
        package_name='chromeos-chrome', category='chromeos-base')
    input_proto = depgraph_pb2.GetBuildDependencyGraphRequest(
        build_target=common_pb2.BuildTarget(name='target'),
        packages=[package]
    )
    dependency.GetBuildDependencyGraph(input_proto, self.response,
                                       self.api_config)
    self.assertEqual(self.response.dep_graph.build_target.name, 'deathstar')
    pkg_to_cpv.assert_called_once_with(package)
    get_dep.assert_called_once_with('/build/target', 'target', (pkg_mock,))

  def testValidateOnly(self):
    """Sanity check that a validate only call does not execute any logic."""
    patch = self.PatchObject(dependency_service, 'GetBuildDependency')
    input_proto = depgraph_pb2.GetBuildDependencyGraphRequest()
    input_proto.build_target.name = 'target'
    dependency.GetBuildDependencyGraph(input_proto, self.response,
                                       self.validate_only_config)
    patch.assert_not_called()

  def testMockCall(self):
    """Test that a mock call does not execute logic, returns mocked value."""
    patch = self.PatchObject(dependency_service, 'GetBuildDependency')
    input_proto = depgraph_pb2.GetBuildDependencyGraphRequest()
    input_proto.build_target.name = 'target'
    dependency.GetBuildDependencyGraph(input_proto, self.response,
                                       self.mock_call_config)
    patch.assert_not_called()
    self.assertEqual(self.response.dep_graph.build_target.name, 'target_board')


class ListTest(cros_test_lib.MockTempDirTestCase, api_config.ApiConfigMixin):
  """Unittests for the List endpoint."""

  def setUp(self):
    self.response = depgraph_pb2.ListResponse()
    self.build_target = common_pb2.BuildTarget(name='target')
    self.sysroot = os.path.join(self.tempdir, 'target')
    osutils.SafeMakedirs(self.sysroot)

  def testValidateOnly(self):
    """Sanity check that a validate only call does not execute any logic."""
    sysroot = sysroot_pb2.Sysroot(
        path=self.sysroot, build_target=self.build_target)
    input_proto = depgraph_pb2.ListRequest(sysroot=sysroot)
    dependency.List(input_proto, self.response, self.validate_only_config)

  def testArgumentValidationMissingSysrootPath(self):
    """Test missing sysroot path."""
    sysroot = sysroot_pb2.Sysroot(build_target=self.build_target)
    input_proto = depgraph_pb2.ListRequest(sysroot=sysroot)
    with self.assertRaises(cros_build_lib.DieSystemExit):
      dependency.List(input_proto, self.response, self.api_config)

  def testArgumentValidationMissingBuildTarget(self):
    """Test missing build target name."""
    sysroot = sysroot_pb2.Sysroot(
        path=self.sysroot, build_target=common_pb2.BuildTarget())
    input_proto = depgraph_pb2.ListRequest(sysroot=sysroot)
    with self.assertRaises(cros_build_lib.DieSystemExit):
      dependency.List(input_proto, self.response, self.api_config)

  def testListResponse(self):
    """Test calls helper method with correct args."""
    mock_get_deps = self.PatchObject(
        dependency_service, 'GetDependencies', return_value=['foo/bar-1.2.3'])
    sysroot = sysroot_pb2.Sysroot(
        path=self.sysroot, build_target=self.build_target)
    path = '/path'
    package = common_pb2.PackageInfo(category='foo', package_name='bar')
    input_proto = depgraph_pb2.ListRequest(
        sysroot=sysroot,
        src_paths=[
            depgraph_pb2.SourcePath(path='/path'),
        ],
        packages=[package])
    dependency.List(input_proto, self.response, self.api_config)
    mock_get_deps.assert_called_once_with(
        self.sysroot,
        build_target=controller_util.ParseBuildTarget(self.build_target),
        src_paths=[path],
        packages=[controller_util.PackageInfoToCPV(package)])
    expected_deps = [
        common_pb2.PackageInfo(
            category='foo', package_name='bar', version='1.2.3')
    ]
    self.assertCountEqual(expected_deps, self.response.package_deps)
