133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# Copyright 2015 The Chromium Authors. All rights reserved.
233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# Use of this source code is governed by a BSD-style license that can be
333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck# found in the LICENSE file.
433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck
533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckimport unittest
633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck
733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckfrom telemetry.core import exceptions
833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckfrom telemetry.internal.util import binary_manager
933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckimport mock
1033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck
1133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck
1233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reckclass BinaryManagerTest(unittest.TestCase):
1333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck  def setUp(self):
1433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    # We need to preserve the real initialized dependecny_manager.
1533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    self.actual_binary_manager = binary_manager._binary_manager
1633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    binary_manager._binary_manager = None
1733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck
1833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck  def tearDown(self):
1933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    binary_manager._binary_manager = self.actual_binary_manager
2033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck
2133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck  def testReinitialization(self):
2233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    binary_manager.InitDependencyManager(None)
2333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    self.assertRaises(exceptions.InitializationError,
2433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck                      binary_manager.InitDependencyManager, None)
2533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck
2633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck  @mock.patch('py_utils.binary_manager.BinaryManager')
2733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck  def testFetchPathInitialized(self, binary_manager_mock):
2833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    expected = [mock.call.binary_manager.BinaryManager(
2933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck                   ['base_config_object']),
3033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck                mock.call.binary_manager.BinaryManager().FetchPath(
3133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck                    'dep', 'plat_arch')]
3233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    binary_manager.InitDependencyManager(None)
3333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    binary_manager.FetchPath('dep', 'plat', 'arch')
3433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    binary_manager_mock.assert_call_args(expected)
3533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck
3633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck  def testFetchPathUninitialized(self):
3733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    self.assertRaises(exceptions.InitializationError,
3833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck                      binary_manager.FetchPath, 'dep', 'plat', 'arch')
3933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck
4033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck  @mock.patch('py_utils.binary_manager.BinaryManager')
4133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck  def testLocalPathInitialized(self, binary_manager_mock):
4233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    expected = [mock.call.binary_manager.BinaryManager(
4333259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck                   ['base_config_object']),
4433259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck                mock.call.binary_manager.BinaryManager().LocalPath(
4533259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck                    'dep', 'plat_arch')]
4633259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    binary_manager.InitDependencyManager(None)
4733259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    binary_manager.LocalPath('dep', 'plat', 'arch')
4833259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    binary_manager_mock.assert_call_args(expected)
4933259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck
5033259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck  def testLocalPathUninitialized(self):
5133259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck    self.assertRaises(exceptions.InitializationError,
5233259e44c8229f70ffe0cf3bb5ca9375c4feb2f9John Reck                      binary_manager.LocalPath, 'dep', 'plat', 'arch')
53