#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2020 The ChromiumOS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Unit tests for chroot helper functions."""

from __future__ import print_function

import subprocess
import unittest
import unittest.mock as mock

import chroot

# These are unittests; protected access is OK to a point.
# pylint: disable=protected-access


class HelperFunctionsTest(unittest.TestCase):
  """Test class for updating LLVM hashes of packages."""

  @mock.patch.object(subprocess, 'check_output')
  def testSucceedsToGetChrootEbuildPathForPackage(self, mock_chroot_command):
    package_chroot_path = '/chroot/path/to/package.ebuild'

    # Emulate ChrootRunCommandWOutput behavior when a chroot path is found for
    # a valid package.
    mock_chroot_command.return_value = package_chroot_path

    chroot_path = '/test/chroot/path'
    package_list = ['new-test/package']

    self.assertEqual(chroot.GetChrootEbuildPaths(chroot_path, package_list),
                     [package_chroot_path])

    mock_chroot_command.assert_called_once()

  def testFailedToConvertChrootPathWithInvalidPrefix(self):
    chroot_path = '/path/to/chroot'
    chroot_file_path = '/src/package.ebuild'

    # Verify the exception is raised when a chroot path does not have the prefix
    # '/mnt/host/source/'.
    with self.assertRaises(ValueError) as err:
      chroot.ConvertChrootPathsToAbsolutePaths(chroot_path, [chroot_file_path])

    self.assertEqual(
        str(err.exception), 'Invalid prefix for the chroot path: '
        '%s' % chroot_file_path)

  def testSucceedsToConvertChrootPathToAbsolutePath(self):
    chroot_path = '/path/to/chroot'
    chroot_file_paths = ['/mnt/host/source/src/package.ebuild']

    expected_abs_path = '/path/to/chroot/src/package.ebuild'

    self.assertEqual(
        chroot.ConvertChrootPathsToAbsolutePaths(chroot_path,
                                                 chroot_file_paths),
        [expected_abs_path])


if __name__ == '__main__':
  unittest.main()
