blob: 12ec0333d8cebb07fdfca809ec66f7fcec24829e [file] [log] [blame]
# Copyright 2015 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.
"""Test the bootstrap brillo command."""
from __future__ import print_function
import mock
import os
from chromite.lib import bootstrap_lib
from chromite.lib import cros_test_lib
from chromite.lib import git
from chromite.lib import workspace_lib
from chromite.bootstrap.scripts import brillo
class TestBootstrapBrilloCmd(cros_test_lib.MockTestCase):
"""Tests for the bootstrap brillo command."""
def setUp(self):
# Make certain we never exec anything.
self.mock_exec = self.PatchObject(os, 'execv', autospec=True)
# Define some directories that might be looked up.
self.mock_bootstrap_path = self.PatchObject(
bootstrap_lib, 'FindBootstrapPath', autospec=True,
return_value='/bootstrap')
self.mock_workspace_path = self.PatchObject(
workspace_lib, 'WorkspacePath', autospec=True)
self.mock_workspace_active_path = self.PatchObject(
bootstrap_lib, 'GetActiveSdkPath', autospec=True)
self.mock_repo_root = self.PatchObject(
git, 'FindRepoCheckoutRoot', autospec=True)
def _LocateCmdTester(self, args, expected):
"""Helper for testing what brillo.main execs."""
result = brillo.LocateBrilloCommand(args)
self.assertEqual(expected, result)
def _verifyLocateBrilloCommand(self, expected):
# We should always use the bootstrap brillo command for 'sdk'.
self.assertEqual(expected,
brillo.LocateBrilloCommand(['flash']))
self.assertEqual(expected,
brillo.LocateBrilloCommand(['flash', '--help']))
def _verifyLocateBrilloCommandSpecialSdkHandling(self):
# We should always use the bootstrap brillo command for 'sdk'.
self.assertEqual('/bootstrap/bin/brillo',
brillo.LocateBrilloCommand(['sdk']))
self.assertEqual('/bootstrap/bin/brillo',
brillo.LocateBrilloCommand(['sdk', '--help']))
def testCommandLookupActiveWorkspace(self):
"""Test that sdk commands are run in the Git Repository."""
self.mock_workspace_path.return_value = '/workspace'
self.mock_workspace_active_path.return_value = '/sdk_roots/1.2.3'
self.mock_repo_root.return_value = None
self._verifyLocateBrilloCommand('/sdk_roots/1.2.3/chromite/bin/brillo')
self._verifyLocateBrilloCommandSpecialSdkHandling()
# Having a repo root shouldn't affect the result.
self.mock_repo_root.return_value = '/repo'
self._verifyLocateBrilloCommand('/sdk_roots/1.2.3/chromite/bin/brillo')
self._verifyLocateBrilloCommandSpecialSdkHandling()
def testCommandLookupInactiveWorkspace(self):
"""Test that sdk commands are run in the Git Repository."""
self.mock_workspace_path.return_value = '/workspace'
self.mock_workspace_active_path.return_value = None
self.mock_repo_root.return_value = None
self._verifyLocateBrilloCommand(None)
self._verifyLocateBrilloCommandSpecialSdkHandling()
# Having a repo root shouldn't affect the result.
self.mock_repo_root.return_value = '/repo'
self._verifyLocateBrilloCommand(None)
self._verifyLocateBrilloCommandSpecialSdkHandling()
def testCommandLookupRepo(self):
"""Test that sdk commands are run in the Git Repository."""
self.mock_workspace_path.return_value = None
self.mock_workspace_active_path.return_value = None
self.mock_repo_root.return_value = '/repo'
self._verifyLocateBrilloCommand('/repo/chromite/bin/brillo')
self._verifyLocateBrilloCommandSpecialSdkHandling()
def testCommandLookupBootstrapOnly(self):
"""Test that sdk commands are run in the Git Repository."""
self.mock_workspace_path.return_value = None
self.mock_workspace_active_path.return_value = None
self.mock_repo_root.return_value = None
self._verifyLocateBrilloCommand(None)
self._verifyLocateBrilloCommandSpecialSdkHandling()
def testMainInActiveWorkspace(self):
self.mock_workspace_path.return_value = '/workspace'
self.mock_workspace_active_path.return_value = '/sdk_roots/1.2.3'
self.mock_repo_root.return_value = None
brillo.main(['flash', '--help'])
expected_cmd = '/sdk_roots/1.2.3/chromite/bin/brillo'
self.assertEqual(
[mock.call(expected_cmd, [expected_cmd, 'flash', '--help'])],
self.mock_exec.call_args_list)
def testMainInRepo(self):
self.mock_workspace_path.return_value = None
self.mock_workspace_active_path.return_value = None
self.mock_repo_root.return_value = '/repo'
brillo.main(['flash', '--help'])
expected_cmd = '/repo/chromite/bin/brillo'
self.assertEqual(
[mock.call(expected_cmd, [expected_cmd, 'flash', '--help'])],
self.mock_exec.call_args_list)
def testMainNoCmd(self):
self.mock_workspace_path.return_value = None
self.mock_workspace_active_path.return_value = None
self.mock_repo_root.return_value = None
self.assertEqual(1, brillo.main(['flash', '--help']))
self.assertEqual([], self.mock_exec.call_args_list)
def testMainSdkCmd(self):
self.mock_workspace_path.return_value = None
self.mock_workspace_active_path.return_value = None
self.mock_repo_root.return_value = None
brillo.main(['sdk', '--help'])
expected_cmd = '/bootstrap/bin/brillo'
self.assertEqual(
[mock.call(expected_cmd, [expected_cmd, 'sdk', '--help'])],
self.mock_exec.call_args_list)