feat(tests): add unit tests for core modules
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
"""Tests for the data extraction module."""
|
||||
|
||||
import pytest
|
||||
import pandas as pd
|
||||
from pathlib import Path
|
||||
|
||||
from disk_checker.core.extractor import load_latency_csv
|
||||
|
||||
|
||||
class TestLoadLatencyCsv:
|
||||
"""Tests for load_latency_csv function."""
|
||||
|
||||
def test_load_valid_csv(self, sample_csv_path):
|
||||
"""Test loading a valid fio CSV file."""
|
||||
df = load_latency_csv(str(sample_csv_path))
|
||||
assert not df.empty
|
||||
assert "metric" in df.columns
|
||||
assert "latency_ns" in df.columns
|
||||
assert "count" in df.columns
|
||||
|
||||
def test_returns_long_format(self, sample_csv_path):
|
||||
"""Test that output is in long format with metric column."""
|
||||
df = load_latency_csv(str(sample_csv_path))
|
||||
metrics = df["metric"].unique()
|
||||
assert "read_clat" in metrics
|
||||
|
||||
def test_empty_csv_raises(self, empty_csv_path):
|
||||
"""Test that empty CSV raises ValueError."""
|
||||
with pytest.raises(ValueError, match="no metric had any numeric count data"):
|
||||
load_latency_csv(str(empty_csv_path))
|
||||
|
||||
def test_invalid_format_raises(self, invalid_csv_path):
|
||||
"""Test that invalid CSV format raises ValueError."""
|
||||
with pytest.raises(ValueError):
|
||||
load_latency_csv(str(invalid_csv_path))
|
||||
|
||||
def test_missing_nsec_column_raises(self, tmp_path):
|
||||
"""Test that missing nsec column raises ValueError."""
|
||||
csv_content = "col1,col2\n1,2\n"
|
||||
path = tmp_path / "invalid.csv"
|
||||
path.write_text(csv_content)
|
||||
with pytest.raises(ValueError, match="expected first column to be 'nsec'"):
|
||||
load_latency_csv(str(path))
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def sample_csv_path(tmp_path):
|
||||
"""Create a sample CSV file for testing."""
|
||||
csv_content = """nsec,read_clat_ns_count,read_clat_ns_cumulative,read_clat_ns_percentile
|
||||
19791872,1,1,0.00016775708773695687
|
||||
22413312,4,5,0.0008387854386847844
|
||||
22675456,9,14,0.0023485992283173965
|
||||
"""
|
||||
path = tmp_path / "test.csv"
|
||||
path.write_text(csv_content)
|
||||
return path
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def empty_csv_path(tmp_path):
|
||||
"""Create an empty CSV file for testing."""
|
||||
path = tmp_path / "empty.csv"
|
||||
path.write_text("nsec\n")
|
||||
return path
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def invalid_csv_path(tmp_path):
|
||||
"""Create an invalid CSV file for testing."""
|
||||
path = tmp_path / "invalid.csv"
|
||||
path.write_text("col1,col2\n1,2\n")
|
||||
return path
|
||||
Reference in New Issue
Block a user