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 site_utils/board_enumerator.py.""" 8 9import mox 10import unittest 11 12import board_enumerator 13 14from autotest_lib.server import frontend 15from constants import Labels 16 17 18class BoardEnumeratorTest(mox.MoxTestBase): 19 """Unit tests for BoardEnumerator.""" 20 21 22 def setUp(self): 23 super(BoardEnumeratorTest, self).setUp() 24 self.afe = self.mox.CreateMock(frontend.AFE) 25 self.enumerator = board_enumerator.BoardEnumerator(afe=self.afe) 26 self.prefix = Labels.BOARD_PREFIX 27 28 29 def _CreateMockLabel(self, name): 30 """Creates a mock frontend.Label, with the given name.""" 31 mock = self.mox.CreateMock(frontend.Label) 32 mock.name = name 33 return mock 34 35 36 def testEnumerateBoards(self): 37 """Test successful board enumeration.""" 38 labels = ['board1', 'board2', 'board3'] 39 self.afe.get_labels(name__startswith=self.prefix).AndReturn( 40 map(lambda p: self._CreateMockLabel(self.prefix+p), labels)) 41 self.mox.ReplayAll() 42 self.assertEquals(set(labels), set(self.enumerator.Enumerate())) 43 44 45 def testEnumerateNoBoards(self): 46 """Test successful board enumeration, but there are no boards.""" 47 self.afe.get_labels(name__startswith=self.prefix).AndReturn([]) 48 self.mox.ReplayAll() 49 self.assertRaises(board_enumerator.NoBoardException, 50 self.enumerator.Enumerate) 51 52 53 def testEnumerateBoardsExplodes(self): 54 """Listing boards raises an exception from the AFE.""" 55 self.afe.get_labels(name__startswith=self.prefix).AndRaise(Exception()) 56 self.mox.ReplayAll() 57 self.assertRaises(board_enumerator.EnumerateException, 58 self.enumerator.Enumerate) 59 60 61if __name__ == '__main__': 62 unittest.main() 63