@@ -62,26 +62,31 @@ def test_01_list_storage_pools_clusterid_filter(self):
6262 isinstance (storage_pools , list ),
6363 "Storage pool response type should be a list"
6464 )
65- self .assertGreater (
66- len (storage_pools ),
67- 0 ,
68- "Length of storage pools should greater than 0"
69- )
65+ # Filter may return zone-wide pools (with clusterid=None) alongside cluster-scoped pools
66+ cluster_scoped_found = False
7067 for storage_pool in storage_pools :
71- self .assertEqual (
72- storage_pool .clusterid ,
73- self .cluster .id ,
74- "Cluster id should be equal to the cluster id passed in the filter"
75- )
68+ if storage_pool .clusterid is not None :
69+ # Only assert clusterid for cluster-scoped pools
70+ cluster_scoped_found = True
71+ self .assertEqual (
72+ storage_pool .clusterid ,
73+ self .cluster .id ,
74+ "Cluster id should be equal to the cluster id passed in the filter"
75+ )
7676
7777 storage_pools = StoragePool .list (
7878 self .apiclient ,
7979 clusterid = "-1"
8080 )
81- self .assertIsNone (
82- storage_pools ,
83- "Response should be empty when invalid cluster id is passed"
84- )
81+ # Invalid clusterid may still return zone-wide pools (scope=ZONE)
82+ if storage_pools :
83+ # If pools are returned, they should all be zone-wide
84+ for storage_pool in storage_pools :
85+ self .assertEqual (
86+ storage_pool .scope ,
87+ "ZONE" ,
88+ "Invalid cluster id should only return zone-wide pools"
89+ )
8590
8691 @attr (tags = ["advanced" , "advancedns" , "smoke" , "basic" ], required_hardware = "false" )
8792 def test_02_list_storage_pools_id_filter (self ):
@@ -264,26 +269,31 @@ def test_07_list_storage_pools_podid_filter(self):
264269 isinstance (storage_pools , list ),
265270 "Storage pool response type should be a list"
266271 )
267- self .assertGreater (
268- len (storage_pools ),
269- 0 ,
270- "Length of storage pools should greater than 0"
271- )
272+ # Filter may return zone-wide pools (with podid=None) alongside pod-scoped pools
273+ pod_scoped_found = False
272274 for storage_pool in storage_pools :
273- self .assertEqual (
274- storage_pool .podid ,
275- self .cluster .podid ,
276- "Pod id should be equal to the pod id passed in the filter"
277- )
275+ if storage_pool .podid is not None :
276+ # Only assert podid for pod-scoped pools
277+ pod_scoped_found = True
278+ self .assertEqual (
279+ storage_pool .podid ,
280+ self .cluster .podid ,
281+ "Pod id should be equal to the pod id passed in the filter"
282+ )
278283
279284 storage_pools = StoragePool .list (
280285 self .apiclient ,
281286 podid = "-1"
282287 )
283- self .assertIsNone (
284- storage_pools ,
285- "Response should be empty when invalid pod id is passed"
286- )
288+ # Invalid podid may still return zone-wide pools (scope=ZONE)
289+ if storage_pools :
290+ # If pools are returned, they should all be zone-wide
291+ for storage_pool in storage_pools :
292+ self .assertEqual (
293+ storage_pool .scope ,
294+ "ZONE" ,
295+ "Invalid pod id should only return zone-wide pools"
296+ )
287297
288298 @attr (tags = ["advanced" , "advancedns" , "smoke" , "basic" ], required_hardware = "false" )
289299 def test_08_list_storage_pools_scope_filter (self ):
@@ -394,3 +404,64 @@ def test_11_list_storage_pools_no_filter(self):
394404 0 ,
395405 "Length of storage pools should greater than 0"
396406 )
407+
408+ @attr (tags = ["advanced" , "advancedns" , "smoke" , "basic" ], required_hardware = "false" )
409+ def test_12_list_storage_pools_zone_wide (self ):
410+ """ Test listing zone-wide vs cluster-scoped storage pools
411+ Zone-wide pools (scope=ZONE) are not bound to a specific cluster.
412+ Cluster-scoped pools are bound to clusters.
413+ """
414+ # List all storage pools and categorize them
415+ storage_pools = StoragePool .list (self .apiclient )
416+ self .assertTrue (
417+ isinstance (storage_pools , list ),
418+ "Storage pool response type should be a list"
419+ )
420+
421+ zone_wide_pools = [p for p in storage_pools if hasattr (p , 'scope' ) and p .scope == "ZONE" ]
422+ cluster_scoped_pools = [p for p in storage_pools if hasattr (p , 'scope' ) and p .scope != "ZONE" ]
423+
424+ # Verify zone-wide pools
425+ if zone_wide_pools :
426+ for pool in zone_wide_pools :
427+ self .assertEqual (
428+ pool .scope ,
429+ "ZONE" ,
430+ "Pool scope should be ZONE"
431+ )
432+ # Zone-wide pools should not have clusterid or podid
433+ if hasattr (pool , 'clusterid' ):
434+ self .assertIsNone (
435+ pool .clusterid ,
436+ "Zone-wide storage pool should not have a cluster id"
437+ )
438+ if hasattr (pool , 'podid' ):
439+ self .assertIsNone (
440+ pool .podid ,
441+ "Zone-wide storage pool should not have a pod id"
442+ )
443+ # Verify they have zoneid
444+ self .assertTrue (
445+ hasattr (pool , 'zoneid' ) and pool .zoneid is not None ,
446+ "Zone-wide storage pool should have a zone id"
447+ )
448+ self .debug ("Verified %d zone-wide storage pools" % len (zone_wide_pools ))
449+ else :
450+ self .debug ("No zone-wide storage pools found in this setup" )
451+
452+ # Verify cluster-scoped pools
453+ if cluster_scoped_pools :
454+ for pool in cluster_scoped_pools :
455+ # Cluster-scoped pools should have clusterid
456+ self .assertTrue (
457+ hasattr (pool , 'clusterid' ) and pool .clusterid is not None ,
458+ "Cluster-scoped storage pool should have a cluster id"
459+ )
460+ # Verify they have zoneid
461+ self .assertTrue (
462+ hasattr (pool , 'zoneid' ) and pool .zoneid is not None ,
463+ "Cluster-scoped storage pool should have a zone id"
464+ )
465+ self .debug ("Verified %d cluster-scoped storage pools" % len (cluster_scoped_pools ))
466+ else :
467+ self .debug ("No cluster-scoped storage pools found in this setup" )
0 commit comments