Skip to content

Commit 597011a

Browse files
committed
fix: update tests and requirements
1 parent 7c24a00 commit 597011a

File tree

3 files changed

+126
-1
lines changed

3 files changed

+126
-1
lines changed

.github/workflows/test.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ jobs:
1111
runs-on: ubuntu-latest
1212
strategy:
1313
matrix:
14-
python-version: ["3.10", "3.11"]
14+
python-version: ["3.9", "3.10", "3.11"]
1515

1616
steps:
1717
- uses: actions/checkout@v4

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
matplotlib>=3.10
22
numpy>=1.26.4
33
pandas>=2.2.3
4+
requests>=2.31.0
45
seaborn>=0.13.2

tests/test_trace_generator.py

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
import unittest
2+
from datetime import datetime
3+
from unittest.mock import MagicMock, mock_open, patch
4+
5+
import pandas as pd
6+
7+
from tracestorm.constants import AZURE_DATASET_PATHS
8+
from tracestorm.trace_generator import (
9+
AzureTraceGenerator,
10+
SyntheticTraceGenerator,
11+
)
12+
13+
14+
class TestSyntheticTraceGenerator(unittest.TestCase):
15+
def test_uniform_distribution(self):
16+
"""Test uniform distribution pattern."""
17+
generator = SyntheticTraceGenerator(
18+
rps=2, pattern="uniform", duration=3
19+
)
20+
result = generator.generate()
21+
expected = [0, 500, 1000, 1500, 2000, 2500]
22+
self.assertEqual(result, expected)
23+
24+
def test_invalid_rps(self):
25+
"""Test invalid RPS value."""
26+
with self.assertRaises(ValueError) as context:
27+
SyntheticTraceGenerator(rps=-1, pattern="uniform", duration=10)
28+
self.assertEqual(
29+
str(context.exception), "rps must be a non-negative integer"
30+
)
31+
32+
def test_invalid_duration(self):
33+
"""Test invalid duration value."""
34+
with self.assertRaises(ValueError) as context:
35+
SyntheticTraceGenerator(rps=1, pattern="uniform", duration=-5)
36+
self.assertEqual(
37+
str(context.exception), "duration must be a non-negative integer"
38+
)
39+
40+
def test_zero_requests(self):
41+
"""Test zero requests case."""
42+
generator = SyntheticTraceGenerator(
43+
rps=0, pattern="uniform", duration=10
44+
)
45+
result = generator.generate()
46+
self.assertEqual(result, [])
47+
48+
def test_invalid_pattern(self):
49+
"""Test invalid pattern."""
50+
generator = SyntheticTraceGenerator(
51+
rps=1, pattern="invalid", duration=10
52+
)
53+
with self.assertRaises(ValueError) as context:
54+
generator.generate()
55+
self.assertEqual(str(context.exception), "Unknown pattern: invalid")
56+
57+
58+
class TestAzureTraceGenerator(unittest.TestCase):
59+
def setUp(self):
60+
self.generator = AzureTraceGenerator(dataset_type="code")
61+
62+
def test_invalid_dataset_type(self):
63+
"""Test initialization with invalid dataset type."""
64+
with self.assertRaises(ValueError) as context:
65+
AzureTraceGenerator(dataset_type="invalid")
66+
self.assertEqual(
67+
str(context.exception),
68+
"Invalid dataset type. Please choose 'code' or 'conv'.",
69+
)
70+
71+
@patch("tracestorm.trace_generator.requests.get")
72+
def test_download_file_success(self, mock_requests):
73+
"""Test successful file download."""
74+
mock_requests.return_value.status_code = 200
75+
mock_requests.return_value.content = b"Test content"
76+
77+
with patch("builtins.open", mock_open()) as mock_file:
78+
self.generator._download_file("test/path.csv", "local.csv")
79+
80+
mock_requests.assert_called_once()
81+
mock_file.assert_called_once_with("local.csv", "wb")
82+
mock_file().write.assert_called_once_with(b"Test content")
83+
84+
@patch("tracestorm.trace_generator.requests.get")
85+
def test_download_file_failure(self, mock_requests):
86+
"""Test file download failure."""
87+
mock_requests.return_value.status_code = 404
88+
mock_requests.return_value.text = "Not Found"
89+
90+
with self.assertRaises(Exception) as context:
91+
self.generator._download_file("test/path.csv", "local.csv")
92+
self.assertIn("Failed to download file: 404", str(context.exception))
93+
94+
def test_process_dataset(self):
95+
"""Test dataset processing."""
96+
# Create test DataFrame
97+
dates = [
98+
datetime(2023, 1, 1, 12, 0, 0),
99+
datetime(2023, 1, 1, 12, 0, 1),
100+
datetime(2023, 1, 1, 12, 0, 2),
101+
]
102+
test_df = pd.DataFrame({"TIMESTAMP": dates})
103+
104+
with patch("pandas.read_csv", return_value=test_df):
105+
result = self.generator._process_dataset("dummy_path.csv")
106+
107+
expected = [0, 1000, 2000] # timestamps in milliseconds
108+
self.assertEqual(result, expected)
109+
110+
@patch("tracestorm.trace_generator.AzureTraceGenerator._download_file")
111+
@patch("tracestorm.trace_generator.AzureTraceGenerator._process_dataset")
112+
def test_generate(self, mock_process, mock_download):
113+
"""Test the generate method."""
114+
mock_process.return_value = [0, 1000, 2000]
115+
116+
result = self.generator.generate()
117+
118+
self.assertEqual(result, [0, 1000, 2000])
119+
mock_download.assert_called_once()
120+
mock_process.assert_called_once()
121+
122+
123+
if __name__ == "__main__":
124+
unittest.main()

0 commit comments

Comments
 (0)