#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright 2020 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.

"""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()
