Skip to content

Commit

Permalink
issue: 4197123: Add Pytest to the workflow of the LogAnalyzer + issue…
Browse files Browse the repository at this point in the history
…: 4197133: Add Pytest (#287)

* test

* add pytest to requirments

* test

* add tests

* add insall requierments to workflow

* add copyright

* fix comments

* fix comments

* fix comments

* fix pytest path

* fix comments

* fix comments

* fix comments

* fix comments
  • Loading branch information
Miryam-Schwartz authored Dec 12, 2024
1 parent 658e078 commit 38fb20b
Show file tree
Hide file tree
Showing 8 changed files with 145 additions and 5 deletions.
32 changes: 29 additions & 3 deletions .github/workflows/ufm_log_analyzer_ci_workflow.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
name: Ufm log analyzer CI Workflow

on:
push:
pull_request:
paths:
- 'plugins/ufm_log_analyzer_plugin/**'
- '.github/workflows/ufm_log_analyzer_ci_workflow.yml'

jobs:
pylint:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04

steps:
- name: Checkout code
Expand All @@ -34,7 +34,7 @@ jobs:
pylint --rcfile=src/loganalyze/.pylintrc src/loganalyze
ruff:
runs-on: ubuntu-latest
runs-on: ubuntu-22.04

steps:
- name: Checkout code
Expand All @@ -53,3 +53,29 @@ jobs:
pip install ruff==0.7.3
ruff format --diff --check src/loganalyze
pytest:
runs-on: ubuntu-22.04

steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: 3.9

- name: Run Pytest
run: |
SCRIPT_DIR="plugins/ufm_log_analyzer_plugin"
# Set PYTHONPATH to include src directory and two levels up for utils
PYTHONPATH="$(realpath $SCRIPT_DIR/src):$(realpath $SCRIPT_DIR/../../)"
export PYTHONPATH
cd $SCRIPT_DIR
pip install -r src/loganalyze/requirements.txt
pip install pytest==8.3.4
pytest unit_tests
13 changes: 13 additions & 0 deletions plugins/ufm_log_analyzer_plugin/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,17 @@ This logic will show links that:

![Tool flow](img/loganalzer.png)

## Testing

There is a folder named `unit_tests`, this folder contains some unit tests, to run the tests follow these steps:

1. Inside the project virtual environment, make sure you have `pytest` installed.
If not, you can install it using `pip`:
```bash
python3 -m pip install pytest
2. Navigate to the root directory of the log analyzer project:
```bash
cd plugins/ufm_log_analyzer_plugin
3. Run `pytest` to execute the tests:
```bash
pytest unit_tests
5 changes: 4 additions & 1 deletion plugins/ufm_log_analyzer_plugin/src/loganalyze/.pylintrc
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,7 @@ disable=missing-function-docstring,

[DESIGN]
max-locals=20
max-args=8
max-args=8

[unit_tests/*]
disable=protected-access
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,11 @@ def __init__(
):
super().__init__(dest_image_path)
dataframes = [pd.read_csv(ufm_log) for ufm_log in logs_csvs]
df = pd.concat(dataframes, ignore_index=True)
if dataframes:
df = pd.concat(dataframes, ignore_index=True)
else:
df = pd.DataFrame() # Return an empty DataFrame if dataframes is empty

if sort_timestamp:
df[DataConstants.TIMESTAMP] = pd.to_datetime(df[DataConstants.TIMESTAMP])
max_timestamp = df[DataConstants.TIMESTAMP].max()
Expand Down
Empty file.
19 changes: 19 additions & 0 deletions plugins/ufm_log_analyzer_plugin/unit_tests/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# @copyright:
# Copyright © 2013-2024 NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.

# This software product is a proprietary product of Nvidia Corporation and its affiliates
# (the "Company") and all right, title, and interest in and to the
# software product, including all associated intellectual property rights,
# are and shall remain exclusively with the Company.

# This software product is governed by the End User License Agreement
# provided with the software product.

# @author: Miryam Schwartz
# @date: Dec 08, 2024

import sys
import os

sys.path.append(os.getcwd() + "/src") # Add the src directory containing loganalyze
sys.path.append("/".join(os.getcwd().split("/")[:-2])) # Add the root project directory
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
# @copyright:
# Copyright © 2013-2024 NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.

# This software product is a proprietary product of Nvidia Corporation and its affiliates
# (the "Company") and all right, title, and interest in and to the
# software product, including all associated intellectual property rights,
# are and shall remain exclusively with the Company.

# This software product is governed by the End User License Agreement
# provided with the software product.

# @author: Miryam Schwartz
# @date: Dec 08, 2024

import pytest

from loganalyze.log_analyzers.ibdiagnet_log_analyzer import IBDIAGNETLogAnalyzer

# Define a test-specific subclass
class TestIBDIAGNETLogAnalyzer(IBDIAGNETLogAnalyzer):
def __init__(self, fabric_size_data):
# Do not call the parent constructor, set up only what's needed for the test
self._log_data_sorted = fabric_size_data

@pytest.fixture
def fabric_size_data():
# Shared mock data
return {"switch_count": 10, "link_count": 50}

@pytest.fixture
def analyzer(fabric_size_data):
return TestIBDIAGNETLogAnalyzer(fabric_size_data)

def test_get_fabric_size(analyzer, fabric_size_data):
result = analyzer.get_fabric_size()
assert result == fabric_size_data, "get_fabric_size should return _log_data_sorted"
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# @copyright:
# Copyright © 2013-2024 NVIDIA CORPORATION & AFFILIATES. ALL RIGHTS RESERVED.

# This software product is a proprietary product of Nvidia Corporation and its affiliates
# (the "Company") and all right, title, and interest in and to the
# software product, including all associated intellectual property rights,
# are and shall remain exclusively with the Company.

# This software product is governed by the End User License Agreement
# provided with the software product.

# @author: Miryam Schwartz
# @date: Dec 08, 2024

import pytest

from loganalyze.log_analyzers.ufm_top_analyzer import UFMTopAnalyzer

@pytest.fixture
def analyzer():
# Fixture to initialize the analyzer object
return UFMTopAnalyzer()

def test_add_analyzer(analyzer):
mock_analyzer_1 = "Analyzer1"
mock_analyzer_2 = "Analyzer2"

# Initially, the list should be empty
assert len(analyzer._analyzers) == 0

# Add first analyzer and check the length
analyzer.add_analyzer(mock_analyzer_1)
assert len(analyzer._analyzers) == 1
assert mock_analyzer_1 in analyzer._analyzers

# Add second analyzer and check the updated length
analyzer.add_analyzer(mock_analyzer_2)
assert len(analyzer._analyzers) == 2
assert mock_analyzer_2 in analyzer._analyzers

0 comments on commit 38fb20b

Please sign in to comment.