1"""Tests for rf_switch_controller class.""" 2 3import unittest 4 5import mock 6 7from autotest_lib.server import frontend 8from autotest_lib.server import site_utils 9from autotest_lib.server.cros.network import rf_switch_controller 10 11 12class RfSwitchControllerTest(unittest.TestCase): 13 """Tests for RF Switch Controller class.""" 14 15 16 RF_SWITCH_CLIENT = 'rf_switch_client' 17 RF_SWITCH_APS = 'rf_switch_aps' 18 19 20 def setUp(self): 21 """Initial setup required to test the methods. 22 23 Create three hosts: RF Switch, AP Box and Client Box. Assign the 24 hostnames and labels. Create an instance of RfSwitchController and 25 add mock hosts. 26 """ 27 self.rf_switch_host = frontend.Host('', '') 28 self.ap_box_host = frontend.Host('', '') 29 self.client_box_host = frontend.Host('', '') 30 31 self.rf_switch_host.hostname = 'chromeos9-rfswitch' 32 self.ap_box_host.hostname = 'chromeos9-apbox1' 33 self.client_box_host.hostname = 'chromeos9-clientbox1' 34 35 self.rf_switch_host.labels = ['rf_switch', 'rf_switch_1'] 36 self.ap_box_host.labels = ['rf_switch_1', 'ap_box_1', 'rf_switch_aps'] 37 self.client_box_host.labels = [ 38 'rf_switch_1', 'client_box_1', 'rf_switch_client'] 39 40 41 @mock.patch('autotest_lib.server.frontend.AFE') 42 def testGetAPBoxes(self, mock_afe): 43 """Test to get all AP Boxes connected to the RF Switch.""" 44 afe_instance = mock_afe() 45 afe_instance.get_hosts.return_value = [ 46 self.ap_box_host, self.client_box_host] 47 rf_switch_manager = rf_switch_controller.RFSwitchController( 48 self.rf_switch_host) 49 ap_boxes = rf_switch_manager.get_ap_boxes() 50 self.assertEquals(len(ap_boxes), 1) 51 ap_box = ap_boxes[0] 52 self.assertEquals(ap_box.ap_box_host.hostname, 'chromeos9-apbox1') 53 54 55 @mock.patch('autotest_lib.server.frontend.AFE') 56 def testGetClientBoxes(self, mock_afe): 57 """Test to get all Client Boxes connected to the RF Switch.""" 58 afe_instance = mock_afe() 59 afe_instance.get_hosts.return_value = [ 60 self.ap_box_host, self.client_box_host] 61 rf_switch_manager = rf_switch_controller.RFSwitchController( 62 self.rf_switch_host) 63 client_boxes = rf_switch_manager.get_client_boxes() 64 self.assertEquals(len(client_boxes), 1) 65 client_box = client_boxes[0] 66 self.assertEquals( 67 client_box.client_box_host.hostname, 'chromeos9-clientbox1') 68 69 70 @mock.patch('autotest_lib.server.frontend.AFE') 71 def testRfSwitchNotConnectedToAPBoxes(self, mock_afe): 72 """Testing scenario when RF Switch is not connnected to AP Boxes.""" 73 afe_instance = mock_afe() 74 afe_instance.get_hosts.return_value = [self.client_box_host] 75 with mock.patch('logging.Logger.error') as mock_logger: 76 rf_switch_manager = rf_switch_controller.RFSwitchController( 77 self.rf_switch_host) 78 mock_logger.assert_called_with( 79 'No AP boxes available for the RF Switch.') 80 ap_boxes = rf_switch_manager.get_ap_boxes() 81 self.assertEquals(len(ap_boxes), 0) 82 83 84 @mock.patch('autotest_lib.server.frontend.AFE') 85 def testClientBoxWithInvalidLabels(self, mock_afe): 86 """Test when RF Switch connected to Client Box with invalid labels.""" 87 afe_instance = mock_afe() 88 self.client_box_host.labels = ['rf_switch_1', 'client_1', 'rf_client'] 89 afe_instance.get_hosts.return_value = [self.client_box_host] 90 with mock.patch('logging.Logger.error') as mock_logger: 91 rf_switch_manager = rf_switch_controller.RFSwitchController( 92 self.rf_switch_host) 93 mock_logger.assert_called_with( 94 'No Client boxes available for the RF Switch.') 95 client_boxes = rf_switch_manager.get_client_boxes() 96 self.assertEquals(len(client_boxes), 0) 97 98 99if __name__ == '__main__': 100 unittest.main() 101