Merging upstream version 1.1.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
50f8dbf7e8
commit
2044ea6182
196 changed files with 10121 additions and 3780 deletions
94
tests/units/reporter/test_csv.py
Normal file
94
tests/units/reporter/test_csv.py
Normal file
|
@ -0,0 +1,94 @@
|
|||
# Copyright (c) 2023-2024 Arista Networks, Inc.
|
||||
# Use of this source code is governed by the Apache License 2.0
|
||||
# that can be found in the LICENSE file.
|
||||
"""Test anta.report.csv_reporter.py."""
|
||||
|
||||
# pylint: disable=too-few-public-methods
|
||||
|
||||
import csv
|
||||
import pathlib
|
||||
from typing import Any, Callable
|
||||
|
||||
import pytest
|
||||
|
||||
from anta.reporter.csv_reporter import ReportCsv
|
||||
from anta.result_manager import ResultManager
|
||||
from anta.tools import convert_categories
|
||||
|
||||
|
||||
class TestReportCsv:
|
||||
"""Tester for ReportCsv class."""
|
||||
|
||||
def compare_csv_and_result(self, rows: list[Any], index: int, result_manager: ResultManager) -> None:
|
||||
"""Compare CSV and TestResult."""
|
||||
assert rows[index + 1][0] == result_manager.results[index].name
|
||||
assert rows[index + 1][1] == result_manager.results[index].test
|
||||
assert rows[index + 1][2] == result_manager.results[index].result
|
||||
assert rows[index + 1][3] == ReportCsv().split_list_to_txt_list(result_manager.results[index].messages)
|
||||
assert rows[index + 1][4] == result_manager.results[index].description
|
||||
assert rows[index + 1][5] == ReportCsv().split_list_to_txt_list(convert_categories(result_manager.results[index].categories))
|
||||
|
||||
def test_report_csv_generate(
|
||||
self,
|
||||
result_manager_factory: Callable[[int], ResultManager],
|
||||
tmp_path: pathlib.Path,
|
||||
) -> None:
|
||||
"""Test CSV reporter."""
|
||||
max_test_entries = 10
|
||||
|
||||
# Create a temporary CSV file path
|
||||
csv_filename = tmp_path / "test.csv"
|
||||
|
||||
# Create a ResultManager instance with dummy test results
|
||||
result_manager = result_manager_factory(max_test_entries)
|
||||
# Test usecase with list of messages
|
||||
result_manager.results[0].messages = ["Message 1", "Message 2"]
|
||||
# Test usecase with list of categories
|
||||
result_manager.results[1].messages = ["Cat 1", "Cat 2"]
|
||||
|
||||
# Generate the CSV report
|
||||
ReportCsv.generate(result_manager, csv_filename)
|
||||
|
||||
# Read the generated CSV file
|
||||
with pathlib.Path.open(csv_filename, encoding="utf-8") as csvfile:
|
||||
reader = csv.reader(csvfile, delimiter=",")
|
||||
rows = list(reader)
|
||||
|
||||
# Assert the headers
|
||||
assert rows[0] == [
|
||||
ReportCsv.Headers.device,
|
||||
ReportCsv.Headers.test_name,
|
||||
ReportCsv.Headers.test_status,
|
||||
ReportCsv.Headers.messages,
|
||||
ReportCsv.Headers.description,
|
||||
ReportCsv.Headers.categories,
|
||||
]
|
||||
|
||||
# Assert the test result rows
|
||||
for index in [0, max_test_entries - 1]:
|
||||
self.compare_csv_and_result(rows, index, result_manager)
|
||||
|
||||
# Assert number of lines: Number of TestResults + CSV Headers
|
||||
assert len(rows) == len(result_manager.results) + 1
|
||||
|
||||
def test_report_csv_generate_os_error(
|
||||
self,
|
||||
result_manager_factory: Callable[[int], ResultManager],
|
||||
tmp_path: pathlib.Path,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
) -> None:
|
||||
"""Test CSV reporter OSError."""
|
||||
# Create a ResultManager instance with dummy test results
|
||||
max_test_entries = 10
|
||||
result_manager = result_manager_factory(max_test_entries)
|
||||
|
||||
# Create a temporary CSV file path and make tmp_path read_only
|
||||
tmp_path.chmod(0o400)
|
||||
csv_filename = tmp_path / "read_only.csv"
|
||||
|
||||
with pytest.raises(OSError, match="Permission denied"):
|
||||
# Generate the CSV report
|
||||
ReportCsv.generate(result_manager, csv_filename)
|
||||
|
||||
assert len(caplog.record_tuples) == 1
|
||||
assert "OSError caught while writing the CSV file" in caplog.text
|
Loading…
Add table
Add a link
Reference in a new issue