#!/usr/bin/python
#
# Copyright (c) 2012 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.
"""Unit tests for site_utils/board_enumerator.py."""
import mox
import unittest
import board_enumerator
from autotest_lib.server import frontend
from constants import Labels
class BoardEnumeratorTest(mox.MoxTestBase):
"""Unit tests for BoardEnumerator."""
def setUp(self):
super(BoardEnumeratorTest, self).setUp()
self.afe = self.mox.CreateMock(frontend.AFE)
self.enumerator = board_enumerator.BoardEnumerator(afe=self.afe)
self.prefix = Labels.BOARD_PREFIX
def _CreateMockLabel(self, name):
"""Creates a mock frontend.Label, with the given name."""
mock = self.mox.CreateMock(frontend.Label)
mock.name = name
return mock
def testEnumerateBoards(self):
"""Test successful board enumeration."""
labels = ['board1', 'board2', 'board3']
self.afe.get_labels(name__startswith=self.prefix).AndReturn(
map(lambda p: self._CreateMockLabel(self.prefix+p), labels))
self.mox.ReplayAll()
self.assertEquals(set(labels), set(self.enumerator.Enumerate()))
def testEnumerateNoBoards(self):
"""Test successful board enumeration, but there are no boards."""
self.afe.get_labels(name__startswith=self.prefix).AndReturn([])
self.mox.ReplayAll()
self.assertRaises(board_enumerator.NoBoardException,
self.enumerator.Enumerate)
def testEnumerateBoardsExplodes(self):
"""Listing boards raises an exception from the AFE."""
self.afe.get_labels(name__startswith=self.prefix).AndRaise(Exception())
self.mox.ReplayAll()
self.assertRaises(board_enumerator.EnumerateException,
self.enumerator.Enumerate)
if __name__ == '__main__':
unittest.main()