1#!/usr/bin/python 2# 3# Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 4# Use of this source code is governed by a BSD-style license that can be 5# found in the LICENSE file. 6 7"""Unit tests for server/cros/dynamic_suite/tools.py.""" 8 9import mox 10import unittest 11 12import common 13from autotest_lib.server.cros.dynamic_suite.fakes import FakeHost 14from autotest_lib.server.cros.dynamic_suite.host_spec import HostSpec 15from autotest_lib.server.cros.dynamic_suite import host_spec 16from autotest_lib.server.cros.dynamic_suite import tools 17from autotest_lib.server import frontend 18 19 20class DynamicSuiteToolsTest(mox.MoxTestBase): 21 """Unit tests for dynamic_suite tools module methods. 22 23 @var _BOARD: fake board to reimage 24 """ 25 26 _BOARD = 'board' 27 _DEPENDENCIES = {'test1': ['label1'], 'test2': ['label2']} 28 _POOL = 'bvt' 29 30 def setUp(self): 31 super(DynamicSuiteToolsTest, self).setUp() 32 self.afe = self.mox.CreateMock(frontend.AFE) 33 self.tko = self.mox.CreateMock(frontend.TKO) 34 # Having these ordered by complexity is important! 35 host_spec_list = [HostSpec([self._BOARD, self._POOL])] 36 for dep_list in self._DEPENDENCIES.itervalues(): 37 host_spec_list.append( 38 HostSpec([self._BOARD, self._POOL], dep_list)) 39 self.specs = host_spec.order_by_complexity(host_spec_list) 40 41 def testInjectVars(self): 42 """Should inject dict of varibles into provided strings.""" 43 def find_all_in(d, s): 44 """Returns true if all key-value pairs in |d| are printed in |s| 45 and the dictionary representation is also in |s|.""" 46 for k, v in d.iteritems(): 47 if isinstance(v, str): 48 if "%s='%s'\n" % (k, v) not in s: 49 return False 50 else: 51 if "%s=%r\n" % (k, v) not in s: 52 return False 53 args_dict_str = "%s=%s\n" % ('args_dict', repr(d)) 54 if args_dict_str not in s: 55 return False 56 return True 57 58 v = {'v1': 'one', 'v2': 'two', 'v3': None, 'v4': False, 'v5': 5} 59 self.assertTrue(find_all_in(v, tools.inject_vars(v, ''))) 60 self.assertTrue(find_all_in(v, tools.inject_vars(v, 'ctrl'))) 61 62 63 def testIncorrectlyLocked(self): 64 """Should detect hosts locked by random users.""" 65 host = FakeHost(locked=True, locked_by='some guy') 66 self.assertTrue(tools.incorrectly_locked(host)) 67 68 69 def testNotIncorrectlyLocked(self): 70 """Should accept hosts locked by the infrastructure.""" 71 infra_user = 'an infra user' 72 self.mox.StubOutWithMock(tools, 'infrastructure_user') 73 tools.infrastructure_user().AndReturn(infra_user) 74 self.mox.ReplayAll() 75 host = FakeHost(locked=True, locked_by=infra_user) 76 self.assertFalse(tools.incorrectly_locked(host)) 77 78 79if __name__ == "__main__": 80 unittest.main() 81