Skip to content

Commit 5888448

Browse files
committed
Fix onboarding script and add unit tests.
JIRA: ISV-4947 Signed-off-by: Ales Raszka <[email protected]>
1 parent d802012 commit 5888448

File tree

3 files changed

+60
-105
lines changed

3 files changed

+60
-105
lines changed

fbc/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ fbc-onboarding: fbc-onboarding-deps ${BINDIR}/opm clean
4444
# comment out / customize the one that makes the most sense, or use them as examples in defining your own
4545
#
4646
# --- BASIC TEMPLATE ---
47-
#catalog: basic
47+
catalog: basic
4848
#
4949
# --- SEMVER TEMPLATE ---
5050
#catalog: semver

operator-pipeline-images/operatorcert/entrypoints/fbc_onboarding.py

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
import logging
55
import os
66
import sys
7-
from typing import Any, Dict, List, Tuple
7+
from typing import Any, List
88

99
import requests
1010
import yaml
@@ -229,7 +229,7 @@ def render_fbc_from_template(operator: Operator, version: str) -> None:
229229
Args:
230230
operator (Operator): Operator object
231231
"""
232-
run_command(
232+
output = run_command(
233233
[
234234
"opm",
235235
"alpha",
@@ -238,14 +238,26 @@ def render_fbc_from_template(operator: Operator, version: str) -> None:
238238
"-o",
239239
"yaml",
240240
os.path.join(operator.root, CATALOG_TEMPLATES_DIR, f"v{version}.yaml"),
241-
">",
242-
f"../../catalogs/v{version}/catalog.yaml"
243241
],
244242
cwd=operator.root,
245243
)
246-
catalog_path = os.path.join(operator.root, "../../catalogs")
247-
catalog_path = os.path.abspath(catalog_path)
248-
LOGGER.info("FBC rendered to %s", catalog_path)
244+
245+
catalogs_path = os.path.join(operator.root, "../../catalogs")
246+
catalogs_path = os.path.abspath(catalogs_path)
247+
operator_in_catalogs_path = os.path.join(
248+
catalogs_path, f"v{version}/{operator.operator_name}"
249+
)
250+
251+
if not os.path.exists(operator_in_catalogs_path):
252+
os.makedirs(operator_in_catalogs_path)
253+
254+
with open(
255+
os.path.join(operator_in_catalogs_path, "catalog.yaml"), "w", encoding="utf8"
256+
) as f:
257+
catalog_content = yaml.safe_load_all(output.stdout)
258+
yaml.safe_dump_all(catalog_content, f, explicit_start=True, indent=2)
259+
260+
LOGGER.info("FBC rendered to %s", operator_in_catalogs_path)
249261

250262

251263
def onboard_operator_to_fbc(

operator-pipeline-images/tests/entrypoints/test_fbc_onboarding.py

Lines changed: 40 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
from operatorcert.entrypoints import fbc_onboarding
2-
from unittest.mock import MagicMock, patch
1+
import os
32
from unittest import mock
3+
from unittest.mock import MagicMock, patch
4+
45
import pytest
6+
from operatorcert.entrypoints import fbc_onboarding
57

68

79
def test_setup_argparser() -> None:
@@ -60,9 +62,7 @@ def test_get_supported_catalogs_stage(mock_requests: MagicMock) -> None:
6062
@patch("operatorcert.entrypoints.fbc_onboarding.run_command")
6163
def test_opm_cache(mock_command: MagicMock) -> None:
6264
resp = fbc_onboarding.opm_cache("image")
63-
mock_command.assert_called_once_with(
64-
["opm", "render", "-o", "yaml", "--migrate", "image"]
65-
)
65+
mock_command.assert_called_once_with(["opm", "render", "-o", "yaml", "image"])
6666
assert resp == mock_command.return_value.stdout
6767

6868

@@ -142,78 +142,6 @@ def test_generate_and_save_base_templates(
142142
mock_yaml_dump.assert_called_once()
143143

144144

145-
def test_generate_composite_templates() -> None:
146-
versions = ["1", "2"]
147-
operator = MagicMock()
148-
operator.operator_name = "op"
149-
catalogs, contributions = fbc_onboarding.generate_composite_templates(
150-
operator, versions
151-
)
152-
153-
assert catalogs == {
154-
"catalogs": [
155-
{
156-
"builders": ["olm.builder.basic", "olm.builder.semver"],
157-
"destination": {"workingDir": "../../catalogs/v1"},
158-
"name": "v1",
159-
},
160-
{
161-
"builders": ["olm.builder.basic", "olm.builder.semver"],
162-
"destination": {"workingDir": "../../catalogs/v2"},
163-
"name": "v2",
164-
},
165-
],
166-
"schema": "olm.composite.catalogs",
167-
}
168-
assert contributions == {
169-
"schema": "olm.composite",
170-
"components": [
171-
{
172-
"destination": {"path": "op"},
173-
"name": "v1",
174-
"strategy": {
175-
"name": "basic",
176-
"template": {
177-
"config": {
178-
"input": "catalog-templates/v1.yaml",
179-
"output": "catalog.yaml",
180-
},
181-
"schema": "olm.builder.basic",
182-
},
183-
},
184-
},
185-
{
186-
"destination": {"path": "op"},
187-
"name": "v2",
188-
"strategy": {
189-
"name": "basic",
190-
"template": {
191-
"config": {
192-
"input": "catalog-templates/v2.yaml",
193-
"output": "catalog.yaml",
194-
},
195-
"schema": "olm.builder.basic",
196-
},
197-
},
198-
},
199-
],
200-
}
201-
202-
203-
@patch("operatorcert.entrypoints.fbc_onboarding.yaml.safe_dump")
204-
@patch("operatorcert.entrypoints.fbc_onboarding.generate_composite_templates")
205-
def test_generate_and_save_composite_templates(
206-
mock_template: MagicMock, mock_yaml_dump: MagicMock
207-
) -> None:
208-
operator = MagicMock()
209-
mock_template.return_value = ({}, {})
210-
with mock.patch("builtins.open", mock.mock_open()) as mock_open:
211-
fbc_onboarding.generate_and_save_composite_templates(operator, ["1", "2"])
212-
213-
mock_template.assert_called_once()
214-
assert mock_yaml_dump.call_count == 2
215-
216-
217145
@patch("operatorcert.entrypoints.fbc_onboarding.yaml.safe_dump")
218146
def test_update_operator_config(mock_yaml_dump: MagicMock) -> None:
219147
operator = MagicMock()
@@ -227,29 +155,45 @@ def test_update_operator_config(mock_yaml_dump: MagicMock) -> None:
227155
)
228156

229157

158+
@patch("operatorcert.entrypoints.fbc_onboarding.yaml.safe_dump_all")
159+
@patch("operatorcert.entrypoints.fbc_onboarding.yaml.safe_load_all")
160+
@patch("operatorcert.entrypoints.fbc_onboarding.os.makedirs")
161+
@patch("operatorcert.entrypoints.fbc_onboarding.os.path.exists")
230162
@patch("operatorcert.entrypoints.fbc_onboarding.run_command")
231-
def test_render_fbc_from_template(mock_run_command: MagicMock) -> None:
163+
def test_render_fbc_from_template(
164+
mock_run_command: MagicMock,
165+
mock_path_exists: MagicMock,
166+
mock_makedir: MagicMock,
167+
mock_safe_load_all: MagicMock,
168+
mock_safe_dump_all: MagicMock,
169+
) -> None:
232170
operator = MagicMock()
233-
fbc_onboarding.render_fbc_from_template(operator)
234-
235-
mock_run_command.assert_called_once_with(
236-
[
237-
"opm",
238-
"alpha",
239-
"render-template",
240-
"composite",
241-
"-f",
242-
fbc_onboarding.COMPOSITE_TEMPLATE_CATALOGS,
243-
"-c",
244-
fbc_onboarding.COMPOSITE_TEMPLATE_CONTRIBUTIONS,
245-
],
246-
cwd=operator.root,
247-
)
171+
mock_path_exists.return_value = False
172+
mock_safe_load_all.return_value = []
173+
174+
with mock.patch("builtins.open", mock.mock_open()) as mock_open:
175+
fbc_onboarding.render_fbc_from_template(operator, "4.15")
176+
177+
mock_run_command.assert_called_once_with(
178+
[
179+
"opm",
180+
"alpha",
181+
"render-template",
182+
"basic",
183+
"-o",
184+
"yaml",
185+
os.path.join(
186+
operator.root, fbc_onboarding.CATALOG_TEMPLATES_DIR, "v4.15.yaml"
187+
),
188+
],
189+
cwd=operator.root,
190+
)
191+
mock_makedir.assert_called_once()
192+
mock_safe_dump_all.assert_called_once()
248193

249194

250195
@patch("operatorcert.entrypoints.fbc_onboarding.update_operator_config")
251196
@patch("operatorcert.entrypoints.fbc_onboarding.render_fbc_from_template")
252-
@patch("operatorcert.entrypoints.fbc_onboarding.generate_and_save_composite_templates")
253197
@patch("operatorcert.entrypoints.fbc_onboarding.generate_and_save_base_templates")
254198
@patch("operatorcert.entrypoints.fbc_onboarding.build_cache")
255199
@patch(
@@ -261,7 +205,6 @@ def test_onboard_operator_to_fbc(
261205
mock_template_dir: MagicMock,
262206
mock_cache: MagicMock,
263207
mock_base_template: MagicMock,
264-
mock_composite_template: MagicMock,
265208
mock_render: MagicMock,
266209
mock_config: MagicMock,
267210
) -> None:
@@ -280,6 +223,6 @@ def test_onboard_operator_to_fbc(
280223
assert mock_cache.call_count == 2
281224
assert mock_base_template.call_count == 2
282225

283-
mock_composite_template.assert_called_once_with(operator, ["1", "2"])
284-
mock_render.assert_called_once_with(operator)
226+
mock_render.assert_has_calls([mock.call(operator, "1"), mock.call(operator, "2")])
227+
285228
mock_config.assert_called_once_with(operator)

0 commit comments

Comments
 (0)