Skip to content

Commit 66b0113

Browse files
committed
Add missing testcase scs-0102-os_purpose-uniqueness
Signed-off-by: Matthias Büchse <matthias.buechse@alasca.cloud>
1 parent 00d6580 commit 66b0113

4 files changed

Lines changed: 35 additions & 2 deletions

File tree

Standards/scs-0102-w1-image-metadata-implementation-testing.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ The following testcase ensures that each image is as recent as claimed by its `r
4545

4646
- `scs-0102-image-recency`
4747

48+
The following testcase ensures that generic OS images are uniquely identified via the triple
49+
(architecture, os\_distro, os\_version).
50+
4851
## Manual tests
4952

5053
None.

Tests/iaas/openstack_test.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
compute_scs_0102_prop_image_source, compute_scs_0102_prop_image_description, \
3131
compute_scs_0102_prop_replace_frequency, compute_scs_0102_prop_provided_until, \
3232
compute_scs_0102_prop_uuid_validity, compute_scs_0102_prop_hotfix_hours, \
33-
compute_scs_0102_image_recency
33+
compute_scs_0102_image_recency, compute_scs_0102_os_purpose_uniqueness
3434
from scs_0103_standard_flavors.standard_flavors import \
3535
SCS_0103_CANONICAL_NAMES, compute_flavor_lookup, compute_scs_0103_flavor
3636
from scs_0104_standard_images.standard_images import \
@@ -98,6 +98,7 @@ def make_container(cloud):
9898
c.add_function('scs_0102_prop_uuid_validity', lambda c: compute_scs_0102_prop_uuid_validity(c.images))
9999
c.add_function('scs_0102_prop_hotfix_hours', lambda c: compute_scs_0102_prop_hotfix_hours(c.images))
100100
c.add_function('scs_0102_image_recency', lambda c: compute_scs_0102_image_recency(c.images))
101+
c.add_function('scs_0102_os_purpose_uniqueness', lambda c: compute_scs_0102_os_purpose_uniqueness(c.images))
101102
# scs_0103_standard_flavors
102103
c.add_function('flavor_lookup', lambda c: compute_flavor_lookup(c.flavors))
103104
for canonical_name in SCS_0103_CANONICAL_NAMES:

Tests/iaas/scs_0102_image_metadata/image_metadata.py

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import calendar
2-
from collections import Counter
2+
from collections import Counter, defaultdict
33
import logging
44
import sys
55
import time
@@ -332,3 +332,28 @@ def compute_scs_0102_image_recency(images):
332332
else:
333333
logger.info(f'Image "{replacement.name}" is a valid replacement for outdated "{img.name}"')
334334
return not errors
335+
336+
337+
def compute_scs_0102_os_purpose_uniqueness(images):
338+
"""
339+
This test ensures that, for each combination of architecture, os_distro and os_version,
340+
there is a most one public image with os_purpose=generic.
341+
"""
342+
# group images by (architecture, os_distro, os_version)
343+
buckets = defaultdict(list)
344+
for image in images:
345+
if image.visibility != 'public' or image.is_hidden:
346+
continue
347+
if not image.os_distro or not image.os_version:
348+
continue
349+
if image.properties.get('os_purpose', '') != 'generic':
350+
continue
351+
key = (image.architecture or '', image.os_distro, image.os_version)
352+
buckets[key].append(image)
353+
num_faulty = 0
354+
for key, bucket in buckets.items():
355+
if len(bucket) < 2:
356+
continue
357+
num_faulty += 1
358+
_log_error(f'os_purpose=generic not unique {key!r}', bucket)
359+
return num_faulty == 0

Tests/scs-compatible-iaas.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@ scripts:
8989
- id: scs-0102-image-recency
9090
description: Each image is as recent as properties (if set) suggest.
9191
url: https://docs.scs.community/standards/scs-0102-w1-image-metadata-implementation-testing#automated-tests
92+
- id: scs-0102-os_purpose-uniqueness
93+
description: Generic OS images are uniquely identified via triple (architecture, os\_distro, os\_version).
94+
url: https://docs.scs.community/standards/scs-0102-w1-image-metadata-implementation-testing#automated-tests
9295
- id: scs-0103-flavor-1v-4
9396
description: Check presence of flavor `SCS-1V-4`.
9497
url: https://docs.scs.community/standards/scs-0103-w1-standard-flavors-implementation#automated-tests
@@ -330,6 +333,7 @@ modules:
330333
recommended:
331334
- scs-0102-prop-hash_algo
332335
- scs-0102-prop-os_purpose
336+
- scs-0102-os_purpose-uniqueness
333337
- scs-0102-prop-hypervisor_type
334338
- scs-0102-prop-hw_rng_model
335339
- scs-0102-prop-hotfix_hours

0 commit comments

Comments
 (0)