3232 compute_scs_0102_image_recency
3333from scs_0103_standard_flavors .standard_flavors import \
3434 SCS_0103_CANONICAL_NAMES , compute_flavor_lookup , compute_scs_0103_flavor
35+ from scs_0104_standard_images .standard_images import \
36+ SCS_0104_IMAGE_SPECS , compute_scs_0104_source , compute_scs_0104_image
3537
3638
3739logger = logging .getLogger (__name__ )
@@ -51,7 +53,8 @@ def make_container(cloud):
5153 # basic support attributes shared by multiple testcases
5254 c .add_function ('conn' , lambda _ : openstack .connect (cloud = cloud , timeout = 32 ))
5355 c .add_function ('flavors' , lambda c : list (c .conn .list_flavors (get_extra = True )))
54- c .add_function ('images' , lambda c : [img for img in c .conn .list_images () if img .visibility in ('public' , 'community' )])
56+ c .add_function ('images' , lambda c : [img for img in c .conn .list_images (show_all = True ) if img .visibility in ('public' , 'community' )])
57+ c .add_function ('image_lookup' , lambda c : {img .name : img for img in c .images })
5558 # scs_0100_flavor_naming
5659 c .add_function ('scs_flavors' , lambda c : compute_scs_flavors (c .flavors ))
5760 c .add_function ('scs_0100_syntax_check' , lambda c : compute_scs_0100_syntax_check (c .scs_flavors ))
@@ -112,6 +115,39 @@ def make_container(cloud):
112115 c .scs_0103_flavor_16v_32 , c .scs_0103_flavor_1v_8 , c .scs_0103_flavor_2v_16 , c .scs_0103_flavor_4v_32 ,
113116 c .scs_0103_flavor_1l_1 , c .scs_0103_flavor_2v_4_20s , c .scs_0103_flavor_4v_16_100s ,
114117 )))
118+ # scs_0104_standard_images
119+ c .add_function ('scs_0104_source_capi_1' , lambda c : compute_scs_0104_source (c .image_lookup , SCS_0104_IMAGE_SPECS ['ubuntu-capi-image-1' ]))
120+ c .add_function ('scs_0104_source_capi_2' , lambda c : compute_scs_0104_source (c .image_lookup , SCS_0104_IMAGE_SPECS ['ubuntu-capi-image-2' ]))
121+ c .add_function ('scs_0104_source_ubuntu_2404' , lambda c : compute_scs_0104_source (c .image_lookup , SCS_0104_IMAGE_SPECS ['Ubuntu 24.04' ]))
122+ c .add_function ('scs_0104_source_ubuntu_2204' , lambda c : compute_scs_0104_source (c .image_lookup , SCS_0104_IMAGE_SPECS ['Ubuntu 22.04' ]))
123+ c .add_function ('scs_0104_source_ubuntu_2004' , lambda c : compute_scs_0104_source (c .image_lookup , SCS_0104_IMAGE_SPECS ['Ubuntu 20.04' ]))
124+ c .add_function ('scs_0104_source_debian_13' , lambda c : compute_scs_0104_source (c .image_lookup , SCS_0104_IMAGE_SPECS ['Debian 13' ]))
125+ c .add_function ('scs_0104_source_debian_12' , lambda c : compute_scs_0104_source (c .image_lookup , SCS_0104_IMAGE_SPECS ['Debian 12' ]))
126+ c .add_function ('scs_0104_source_debian_11' , lambda c : compute_scs_0104_source (c .image_lookup , SCS_0104_IMAGE_SPECS ['Debian 11' ]))
127+ c .add_function ('scs_0104_source_debian_10' , lambda c : compute_scs_0104_source (c .image_lookup , SCS_0104_IMAGE_SPECS ['Debian 10' ]))
128+ c .add_function ('scs_0104_image_capi_1' , lambda c : compute_scs_0104_image (c .image_lookup , SCS_0104_IMAGE_SPECS ['ubuntu-capi-image-1' ]))
129+ c .add_function ('scs_0104_image_capi_2' , lambda c : compute_scs_0104_image (c .image_lookup , SCS_0104_IMAGE_SPECS ['ubuntu-capi-image-2' ]))
130+ c .add_function ('scs_0104_image_ubuntu_2404' , lambda c : compute_scs_0104_image (c .image_lookup , SCS_0104_IMAGE_SPECS ['Ubuntu 24.04' ]))
131+ c .add_function ('scs_0104_image_ubuntu_2204' , lambda c : compute_scs_0104_image (c .image_lookup , SCS_0104_IMAGE_SPECS ['Ubuntu 22.04' ]))
132+ c .add_function ('scs_0104_image_ubuntu_2004' , lambda c : compute_scs_0104_image (c .image_lookup , SCS_0104_IMAGE_SPECS ['Ubuntu 20.04' ]))
133+ c .add_function ('scs_0104_image_debian_13' , lambda c : compute_scs_0104_image (c .image_lookup , SCS_0104_IMAGE_SPECS ['Debian 13' ]))
134+ c .add_function ('scs_0104_image_debian_12' , lambda c : compute_scs_0104_image (c .image_lookup , SCS_0104_IMAGE_SPECS ['Debian 12' ]))
135+ c .add_function ('scs_0104_image_debian_11' , lambda c : compute_scs_0104_image (c .image_lookup , SCS_0104_IMAGE_SPECS ['Debian 11' ]))
136+ c .add_function ('scs_0104_image_debian_10' , lambda c : compute_scs_0104_image (c .image_lookup , SCS_0104_IMAGE_SPECS ['Debian 10' ]))
137+ # NOTE the following variant is correct for SCS-compatible IaaS v4 only
138+ c .add_function ('standard_images_check_1' , lambda c : all ((
139+ c .scs_0104_image_ubuntu_2204 ,
140+ c .scs_0104_source_capi_1 , c .scs_0104_source_capi_2 ,
141+ c .scs_0104_source_ubuntu_2404 , c .scs_0104_source_ubuntu_2204 , c .scs_0104_source_ubuntu_2004 ,
142+ c .scs_0104_source_debian_13 , c .scs_0104_source_debian_12 , c .scs_0104_source_debian_11 , c .scs_0104_source_debian_10 ,
143+ )))
144+ # NOTE the following variant is correct for SCS-compatible IaaS v5.1 only
145+ c .add_function ('standard_images_check_2' , lambda c : all ((
146+ c .scs_0104_image_ubuntu_2404 ,
147+ c .scs_0104_source_capi_1 , c .scs_0104_source_capi_2 ,
148+ c .scs_0104_source_ubuntu_2404 , c .scs_0104_source_ubuntu_2204 , c .scs_0104_source_ubuntu_2004 ,
149+ c .scs_0104_source_debian_13 , c .scs_0104_source_debian_12 , c .scs_0104_source_debian_11 , c .scs_0104_source_debian_10 ,
150+ )))
115151 return c
116152
117153
@@ -213,7 +249,14 @@ def main(argv):
213249 else :
214250 usage (2 )
215251
216- testcases = [t for t in args if t .endswith ('-check' ) or t .startswith ('scs-' )]
252+ # NOTE For historic reasons, there is precisely one testcase id, namely standard-images-check,
253+ # whose meaning depends on the version of the certificate scope in question. We are in the process
254+ # of transitioning away from this anti-feature. For the time being, however, we use the following
255+ # hack to support it: One testcase may be implemented in multiple variants, denoted by suffixing
256+ # a number, as in standard-images-check/1, standard-images-check/2.
257+ # NOTE Also, the historic testcases have terrible naming. We will transition towards names
258+ # that encode the corresponding standard, such as scs-0104-image-ubuntu-2404.
259+ testcases = [t for t in args if t .rsplit ('/' , 1 )[0 ].endswith ('-check' ) or t .startswith ('scs-' )]
217260 if len (testcases ) != len (args ):
218261 unknown = [a for a in args if a not in testcases ]
219262 logger .warning (f"ignoring unknown testcases: { ',' .join (unknown )} " )
@@ -224,7 +267,8 @@ def main(argv):
224267
225268 c = make_container (cloud )
226269 for testcase in testcases :
227- harness (testcase , lambda : getattr (c , testcase .replace ('-' , '_' )))
270+ testcase_name = testcase .rsplit ('/' , 1 )[0 ] # see the note above
271+ harness (testcase_name , lambda : getattr (c , testcase .replace ('-' , '_' ).replace ('/' , '_' )))
228272 return 0
229273
230274
0 commit comments