@@ -106,3 +106,135 @@ def test_get_marker_prop_func(mock_get_prop_mapping):
106106 val = HypervisorProperties .get_marker_prop_func ()
107107 mock_get_prop_mapping .assert_called_once_with (HypervisorProperties .HYPERVISOR_ID )
108108 assert val == mock_get_prop_mapping .return_value
109+
110+
111+ class MockUsage :
112+ def __init__ (
113+ self ,
114+ vcpus = 0 ,
115+ pcpus = 0 ,
116+ vcpus_used = 0 ,
117+ pcpus_used = 0 ,
118+ vcpus_avail = 0 ,
119+ pcpus_avail = 0 ,
120+ memory_mb_size = 0 ,
121+ memory_mb_used = 0 ,
122+ memory_mb_avail = 0 ,
123+ disk_gb_size = 0 ,
124+ disk_gb_used = 0 ,
125+ disk_gb_avail = 0 ,
126+ ):
127+ self .vcpus = vcpus
128+ self .pcpus = pcpus
129+ self .vcpus_used = vcpus_used
130+ self .pcpus_used = pcpus_used
131+ self .vcpus_avail = vcpus_avail
132+ self .pcpus_avail = pcpus_avail
133+ self .memory_mb_size = memory_mb_size
134+ self .memory_mb_used = memory_mb_used
135+ self .memory_mb_avail = memory_mb_avail
136+ self .disk_gb_size = disk_gb_size
137+ self .disk_gb_used = disk_gb_used
138+ self .disk_gb_avail = disk_gb_avail
139+
140+
141+ class MockHypervisor :
142+ def __init__ (self , hv , usage ):
143+ self .hv = hv
144+ self .usage = usage
145+
146+
147+ @pytest .mark .parametrize (
148+ "prop, mock_hv, mock_usage, expected" ,
149+ [
150+ (HypervisorProperties .HYPERVISOR_ID , {"id" : "abc123" }, None , "abc123" ),
151+ (HypervisorProperties .HYPERVISOR_IP , {"host_ip" : "10.0.0.1" }, None , "10.0.0.1" ),
152+ (HypervisorProperties .HYPERVISOR_NAME , {"name" : "hyp1" }, None , "hyp1" ),
153+ (HypervisorProperties .HYPERVISOR_STATE , {"state" : "up" }, None , "up" ),
154+ (
155+ HypervisorProperties .HYPERVISOR_STATUS ,
156+ {"status" : "enabled" },
157+ None ,
158+ "enabled" ,
159+ ),
160+ (
161+ HypervisorProperties .HYPERVISOR_DISABLED_REASON ,
162+ {"service" : {"disabled_reason" : "maintenance" }},
163+ None ,
164+ "maintenance" ,
165+ ),
166+ (
167+ HypervisorProperties .VCPUS ,
168+ {},
169+ MockUsage (vcpus = 4 , pcpus = 2 ),
170+ 6 ,
171+ ),
172+ (
173+ HypervisorProperties .VCPUS_USED ,
174+ {},
175+ MockUsage (vcpus_used = 1 , pcpus_used = 2 ),
176+ 3 ,
177+ ),
178+ (
179+ HypervisorProperties .VCPUS_AVAIL ,
180+ {},
181+ MockUsage (vcpus_avail = 3 , pcpus_avail = 1 ),
182+ 4 ,
183+ ),
184+ (
185+ HypervisorProperties .MEMORY_MB_SIZE ,
186+ {},
187+ MockUsage (memory_mb_size = 8192 ),
188+ 8192 ,
189+ ),
190+ (
191+ HypervisorProperties .MEMORY_MB_USED ,
192+ {},
193+ MockUsage (memory_mb_used = 4096 ),
194+ 4096 ,
195+ ),
196+ (
197+ HypervisorProperties .MEMORY_MB_AVAIL ,
198+ {},
199+ MockUsage (memory_mb_avail = 2048 ),
200+ 2048 ,
201+ ),
202+ (
203+ HypervisorProperties .DISK_GB_SIZE ,
204+ {},
205+ MockUsage (disk_gb_size = 500 ),
206+ 500 ,
207+ ),
208+ (
209+ HypervisorProperties .DISK_GB_USED ,
210+ {},
211+ MockUsage (disk_gb_used = 200 ),
212+ 200 ,
213+ ),
214+ (
215+ HypervisorProperties .DISK_GB_AVAIL ,
216+ {},
217+ MockUsage (disk_gb_avail = 300 ),
218+ 300 ,
219+ ),
220+ ],
221+ )
222+ def test_hypervisor_property_mappings (prop , mock_hv , mock_usage , expected ):
223+ """Test that each HypervisorProperties mapping correctly extracts the expected data."""
224+ hv_obj = MockHypervisor (mock_hv , mock_usage )
225+ func = HypervisorProperties .get_prop_mapping (prop )
226+ assert func (hv_obj ) == expected
227+
228+
229+ @patch ("openstackquery.enums.props.hypervisor_properties.TimeUtils.extract_uptime" )
230+ def test_hypervisor_uptime_days_mapping (mock_extract ):
231+ mock_extract .return_value = 5
232+ hv_obj = MockHypervisor ({"uptime" : "fake-uptime-string" }, None )
233+
234+ func = HypervisorProperties .get_prop_mapping (
235+ HypervisorProperties .HYPERVISOR_UPTIME_DAYS
236+ )
237+ result = func (hv_obj )
238+
239+ mock_extract .assert_called_once_with ("fake-uptime-string" )
240+ assert result == 5
0 commit comments