Skip to content

Commit

Permalink
Validate the JSON config_dir with OPM
Browse files Browse the repository at this point in the history
This commit validates the JSON files from config dir after ensuring all
files are being present in this format.

Refers to CLOUDDST-21432
  • Loading branch information
JAVGan committed Apr 8, 2024
1 parent 4114009 commit 43b8231
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 7 deletions.
4 changes: 4 additions & 0 deletions iib/workers/tasks/fbc_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@

import ruamel.yaml
from typing import Tuple

from iib.exceptions import IIBError
from iib.workers.config import get_worker_config
from iib.common.tracing import instrument_tracing
Expand Down Expand Up @@ -85,12 +86,15 @@ def merge_catalogs_dirs(src_config: str, dest_config: str):
:param str src_config: source config directory
:param str dest_config: destination config directory
"""
from iib.workers.tasks.opm_operations import opm_validate

for conf_dir in (src_config, dest_config):
if not os.path.isdir(conf_dir):
msg = f"config directory does not exist: {conf_dir}"
log.error(msg)
raise IIBError(msg)
enforce_json_config_dir(conf_dir)
opm_validate(conf_dir)

log.info("Merging config folders: %s to %s", src_config, dest_config)
shutil.copytree(src_config, dest_config, dirs_exist_ok=True)
Expand Down
14 changes: 14 additions & 0 deletions iib/workers/tasks/opm_operations.py
Original file line number Diff line number Diff line change
Expand Up @@ -918,3 +918,17 @@ def verify_operator_exists(
is_package_in_index = True
log.info("operator package %s found in index_db %s", operator_package, index_db_path)
return is_package_in_index, index_db_path


def opm_validate(config_dir: str) -> None:
"""
Validate the declarative config JSON files in a given directory.
:param str config_dir: directory containing the declarative config JSON files.
:raises IIBError: if the validation fails
"""
from iib.workers.tasks.utils import run_cmd

log.debug("Validating JSON files under %s", config_dir)
cmd = ['opm', 'validate', config_dir]
run_cmd(cmd, exc_msg=f'Failed to validate the content from config_dir {config_dir}')
15 changes: 8 additions & 7 deletions tests/test_workers/test_tasks/test_fbc_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -102,8 +102,9 @@ def test_is_image_fbc(mock_si, skopeo_output, is_fbc):
assert is_image_fbc(image) is is_fbc


@mock.patch("iib.workers.tasks.opm_operations.opm_validate")
@mock.patch("iib.workers.tasks.fbc_utils.enforce_json_config_dir")
def test_merge_catalogs_dirs(mock_enforce_json, tmpdir):
def test_merge_catalogs_dirs(mock_enforce_json, mock_opm_validate, tmpdir):
source_dir = os.path.join(tmpdir, 'src')
destination_dir = os.path.join(tmpdir, 'dst')
os.makedirs(destination_dir, exist_ok=True)
Expand All @@ -115,12 +116,12 @@ def test_merge_catalogs_dirs(mock_enforce_json, tmpdir):
tempfile.NamedTemporaryFile(dir=operator_dir, delete=False)

merge_catalogs_dirs(src_config=source_dir, dest_config=destination_dir)
mock_enforce_json.assert_has_calls(
[
mock.call(source_dir),
mock.call(destination_dir),
]
)
config_dir_calls = [
mock.call(source_dir),
mock.call(destination_dir),
]
mock_enforce_json.assert_has_calls(config_dir_calls)
mock_opm_validate.assert_has_calls(config_dir_calls)

for r, d, f in os.walk(source_dir):

Expand Down
9 changes: 9 additions & 0 deletions tests/test_workers/test_tasks/test_opm_operations.py
Original file line number Diff line number Diff line change
Expand Up @@ -754,3 +754,12 @@ def test_verify_operator_exists(
)
mock_ors.assert_has_calls([mock.call(db_path=index_db_path)])
assert package_exists == opr_exists


@mock.patch('iib.workers.tasks.utils.run_cmd')
def test_opm_validate(mock_rc, tmpdir):
opm_operations.opm_validate(tmpdir)
mock_rc.assert_called_once_with(
['opm', 'validate', tmpdir],
exc_msg=f'Failed to validate the content from config_dir {tmpdir}',
)

0 comments on commit 43b8231

Please sign in to comment.