8181]
8282
8383
84- class FakeHardwareManager (hardware .GenericHardwareManager ):
85- def __init__ (self , hardware_support ):
86- self ._hardware_support = hardware_support
87-
84+ class FakeHardwareManager (hardware .HardwareManager ):
8885 def evaluate_hardware_support (self ):
89- return self ._hardware_support
86+ return self .support
87+
88+
89+ def _create_mock_hwm (name , support ):
90+ def set_support (self , x ):
91+ self .support = x
92+
93+ # note(JayF): This code creates a subclass of FakeHardwareManager with
94+ # a unique name. Since we actually use the class name in IPA
95+ # code as an identifier, we need to have a new class for each
96+ # mock.
97+ hwm = type (name , (FakeHardwareManager ,), {'_set_support' : set_support })()
98+ hwm ._set_support (support )
99+ return hwm
90100
91101
92102class TestHardwareManagerLoading (base .IronicAgentTest ):
@@ -104,17 +114,58 @@ def setUp(self):
104114 fake_ep .attrs = ['fake attrs' ]
105115 ext1 = extension .Extension (
106116 'fake_generic0' , fake_ep , None ,
107- FakeHardwareManager (hardware .HardwareSupport .GENERIC ))
117+ _create_mock_hwm ("fake_generic0" ,
118+ hardware .HardwareSupport .GENERIC ))
108119 ext2 = extension .Extension (
109120 'fake_mainline0' , fake_ep , None ,
110- FakeHardwareManager (hardware .HardwareSupport .MAINLINE ))
121+ _create_mock_hwm ("fake_mainline0" ,
122+ hardware .HardwareSupport .MAINLINE ))
111123 ext3 = extension .Extension (
112- 'fake_generic1' , fake_ep , None ,
113- FakeHardwareManager (hardware .HardwareSupport .GENERIC ))
114- self .correct_hw_manager = ext2 .obj
124+ 'fake_serviceprovider0' , fake_ep , None ,
125+ _create_mock_hwm ("fake_serviceprovider0" ,
126+ hardware .HardwareSupport .SERVICE_PROVIDER ))
127+ # Note(JayF): Ensure these are added in an order other than priority
128+ # order or else you may invalidate the entire test :)
115129 self .fake_ext_mgr = extension .ExtensionManager .make_test_instance ([
116130 ext1 , ext2 , ext3
117131 ])
132+ self .expected_detail_response = [
133+ {'name' : 'fake_serviceprovider0' ,
134+ 'support' : hardware .HardwareSupport .SERVICE_PROVIDER ,
135+ 'manager' : ext3 .obj },
136+ {'name' : 'fake_mainline0' ,
137+ 'support' : hardware .HardwareSupport .MAINLINE ,
138+ 'manager' : ext2 .obj },
139+ {'name' : 'fake_generic0' ,
140+ 'support' : hardware .HardwareSupport .GENERIC ,
141+ 'manager' : ext1 .obj },
142+ ]
143+ self .expected_get_managers_response = [ext3 .obj , ext2 .obj , ext1 .obj ]
144+
145+ @mock .patch .object (hardware , '_get_extensions' , autospec = True )
146+ def test_get_managers (self , mock_extensions ):
147+ """Test to ensure get_managers sorts and returns a list of HWMs.
148+
149+ The most meaningful part of this test is ensuring HWMs are in priority
150+ order, with the highest hardware support value coming earlier in the
151+ list of classes.
152+ """
153+ mock_extensions .return_value = self .fake_ext_mgr
154+ expected_names = [x .__class__ .__name__
155+ for x in self .expected_get_managers_response ]
156+ actual_names = [x .__class__ .__name__
157+ for x in hardware .get_managers ()]
158+ self .assertEqual (actual_names , expected_names )
159+
160+ @mock .patch .object (hardware , '_get_extensions' , autospec = True )
161+ def test_get_managers_detail (self , mock_extensions ):
162+ """ensure get_manager_details returns a list of HWMs + metadata
163+
164+ These also need to be sorted in priority order
165+ """
166+ mock_extensions .return_value = self .fake_ext_mgr
167+ self .assertEqual (hardware .get_managers_detail (),
168+ self .expected_detail_response )
118169
119170
120171@mock .patch .object (hardware , '_udev_settle' , lambda * _ : None )
0 commit comments