Skip to content

Commit aa52542

Browse files
committed
added utest for cli function
1 parent 0ecd90c commit aa52542

File tree

5 files changed

+60
-22
lines changed

5 files changed

+60
-22
lines changed

nodescraper/cli/cli.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@
2525
###############################################################################
2626
import argparse
2727
import datetime
28+
import json
2829
import logging
2930
import os
3031
import platform
3132
import sys
32-
from pathlib import Path
3333
from typing import Optional
3434

3535
from nodescraper.cli.constants import DEFAULT_CONFIG, META_VAR_MAP
@@ -376,10 +376,21 @@ def main(arg_input: Optional[list[str]] = None):
376376

377377
try:
378378
results = plugin_executor.run_queue()
379+
379380
if parsed_args.reference_config:
380-
generate_reference_config(
381-
results, plugin_reg, logger, path=Path.cwd() / "reference_config.json"
382-
)
381+
ref_config = generate_reference_config(results, plugin_reg, logger)
382+
path = os.path.join(os.getcwd(), "reference_config.json")
383+
try:
384+
with open(path, "w") as f:
385+
json.dump(
386+
ref_config.model_dump(mode="json", exclude_none=True),
387+
f,
388+
indent=2,
389+
)
390+
logger.info("Reference config written to: %s", path)
391+
except Exception as exp:
392+
logger.error(exp)
393+
383394
if any(result.status > ExecutionStatus.WARNING for result in results):
384395
sys.exit(1)
385396
else:

nodescraper/cli/helper.py

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -283,7 +283,7 @@ def log_system_info(log_path: str | None, system_info: SystemInfo, logger: loggi
283283
logger.error(exp)
284284

285285

286-
def generate_reference_config(results, plugin_reg, logger, path):
286+
def generate_reference_config(results, plugin_reg, logger):
287287
plugin_config = PluginConfig()
288288
plugins = {}
289289
for obj in results:
@@ -308,15 +308,4 @@ def generate_reference_config(results, plugin_reg, logger, path):
308308
plugins[obj.source]["analysis_args"] = args.model_dump(exclude_none=True)
309309
plugin_config.plugins = plugins
310310

311-
if not path:
312-
path = os.path.join(os.getcwd(), "reference_config.json")
313-
try:
314-
with open(path, "w") as f:
315-
json.dump(
316-
plugin_config.model_dump(mode="json", exclude_none=True),
317-
f,
318-
indent=2,
319-
)
320-
logger.info("Reference config written to: %s", path)
321-
except Exception as exp:
322-
logger.error(exp)
311+
return plugin_config

test/unit/framework/common/shared_utils.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from nodescraper.enums import ExecutionStatus
3232
from nodescraper.interfaces import ConnectionManager, PluginInterface
3333
from nodescraper.models import PluginResult, TaskResult
34+
from nodescraper.models.datamodel import DataModel
3435

3536

3637
class MockConnectionManager(ConnectionManager):
@@ -71,10 +72,19 @@ def disconnect(self):
7172
class TestModelArg(BaseModel):
7273
model_attr: int = 123
7374

75+
@classmethod
76+
def build_from_model(cls, model):
77+
return cls()
78+
79+
80+
class DummyDataModel(DataModel):
81+
some_version: str = None
82+
7483

7584
class TestPluginA(PluginInterface[MockConnectionManager, None]):
7685

7786
CONNECTION_TYPE = MockConnectionManager
87+
ANALYZER_ARGS = TestModelArg
7888

7989
def run(
8090
self,

test/unit/framework/test_analyzerargs.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,10 @@ def test_build_from_model(dummy_data_model):
1717

1818
a2 = MyArgs()
1919
dumped = a2.model_dump() # noqa: F841
20-
# assert "data_model" not in dumped
20+
assert "data_model" not in dumped
2121

2222
json_str = a2.model_dump_json() # noqa: F841
23-
# assert '"data_model"' not in json_str
23+
assert '"data_model"' not in json_str
2424

2525

2626
def test_base_build_from_model_not_implemented():

test/unit/framework/test_cli.py

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,16 @@
2828
import os
2929

3030
import pytest
31+
from common.shared_utils import DummyDataModel
3132
from pydantic import BaseModel
3233

3334
from nodescraper.cli import cli, inputargtypes
35+
from nodescraper.cli.helper import build_config
3436
from nodescraper.configregistry import ConfigRegistry
35-
from nodescraper.enums import SystemInteractionLevel, SystemLocation
36-
from nodescraper.models import PluginConfig, SystemInfo
37+
from nodescraper.enums import ExecutionStatus, SystemInteractionLevel, SystemLocation
38+
from nodescraper.models import PluginConfig, SystemInfo, TaskResult
39+
from nodescraper.models.datapluginresult import DataPluginResult
40+
from nodescraper.models.pluginresult import PluginResult
3741

3842

3943
def test_log_path_arg():
@@ -200,7 +204,7 @@ def test_get_plugin_configs():
200204

201205
def test_config_builder(plugin_registry):
202206

203-
config = cli.build_config(
207+
config = build_config(
204208
config_reg=ConfigRegistry(config_path=os.path.join(os.path.dirname(__file__), "fixtures")),
205209
plugin_reg=plugin_registry,
206210
logger=logging.getLogger(),
@@ -215,3 +219,27 @@ def test_config_builder(plugin_registry):
215219
},
216220
"ExamplePlugin": {},
217221
}
222+
223+
224+
def test_generate_reference_config(plugin_registry):
225+
results = [
226+
PluginResult(
227+
status=ExecutionStatus.OK,
228+
source="TestPluginA",
229+
message="Plugin tasks completed successfully",
230+
result_data=DataPluginResult(
231+
system_data=DummyDataModel(some_version="M17"),
232+
collection_result=TaskResult(
233+
status=ExecutionStatus.OK,
234+
message="BIOS: M17",
235+
task="BiosCollector",
236+
parent="TestPluginA",
237+
artifacts=[],
238+
),
239+
),
240+
)
241+
]
242+
243+
ref_config = cli.generate_reference_config(results, plugin_registry, logging.getLogger())
244+
dump = ref_config.dict()
245+
assert dump["plugins"] == {"TestPluginA": {"analysis_args": {"model_attr": 123}}}

0 commit comments

Comments
 (0)