#!/usr/bin/env python3
# Copyright 2016 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.

import os
import unittest
from unittest import mock

from cros.factory.test.env import paths

class GetFactoryPythonArchivePathUnittest(unittest.TestCase):
  def setUp(self):
    pass

  def testLocalFactoryPythonArchiveRegularParExists(self):
    paths.sys_utils.GetRunningFactoryPythonArchivePath = lambda: None
    paths.os.path.exists = mock.MagicMock(
        side_effect=lambda p: p.endswith('factory.par'))
    expected = os.path.join(paths.FACTORY_DIR, 'factory.par')

    self.assertEqual(paths.GetFactoryPythonArchivePath(), expected)

  def testLocalFactoryPythonArchiveMiniParExists(self):
    paths.sys_utils.GetRunningFactoryPythonArchivePath = lambda: None
    expected = os.path.join(paths.FACTORY_DIR, 'factory-mini.par')
    paths.os.path.exists = mock.MagicMock(
        side_effect=lambda p: p == expected)

    self.assertEqual(paths.GetFactoryPythonArchivePath(), expected)

  def testLocalFactoryPythonArchiveTestImageMiniParExists(self):
    expected = '/usr/local/factory-mini/factory-mini.par'
    paths.sys_utils.GetRunningFactoryPythonArchivePath = lambda: None
    paths.os.path.exists = mock.MagicMock(
        side_effect=lambda p: p == expected)

    self.assertEqual(paths.GetFactoryPythonArchivePath(), expected)

  def testLocalFactoryPythonArchiveParNotExists(self):
    paths.sys_utils.GetRunningFactoryPythonArchivePath = lambda: None
    paths.os.path.exists = mock.MagicMock(return_value=False)

    with self.assertRaisesRegex(
        EnvironmentError, 'cannot find factory python archive'):
      unused_var = paths.GetFactoryPythonArchivePath()

  def testLocalFactoryPythonArchiveRunningPar(self):
    expected = '/path/to/running/factory/par'
    paths.sys_utils.GetRunningFactoryPythonArchivePath = lambda: expected

    self.assertEqual(paths.GetFactoryPythonArchivePath(), expected)


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