Files
personal_development/gemini_projects/truenas_storagetracker/tests/test_tracker.py
T
2026-01-03 14:06:04 -05:00

72 lines
2.2 KiB
Python

import unittest
from unittest.mock import patch, MagicMock
import sys
import os
# Add src to python path to import tracker
sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'src'))
import tracker
class TestTrueNASStorageTracker(unittest.TestCase):
def setUp(self):
self.mock_pool_data = [
{
"name": "tank",
"size": 10995116277760, # 10 TB
"allocated": 5497558138880, # 5 TB
"free": 5497558138880 # 5 TB
},
{
"name": "boot-pool",
"size": 256000000000, # 256 GB
"allocated": 64000000000, # 64 GB
"free": 192000000000 # 192 GB
}
]
@patch('tracker.requests.get')
@patch('tracker.os.getenv')
def test_fetch_pool_data_success(self, mock_getenv, mock_get):
# Configure mocks
mock_getenv.side_effect = lambda key: {
'TRUENAS_API_URL': 'http://mock-url',
'TRUENAS_API_KEY': 'mock-key'
}.get(key)
mock_response = MagicMock()
mock_response.json.return_value = self.mock_pool_data
mock_response.raise_for_status.return_value = None
mock_get.return_value = mock_response
# Call function
data = tracker.fetch_pool_data()
# Assertions
self.assertEqual(data, self.mock_pool_data)
mock_get.assert_called_once()
def test_process_pool_data(self):
processed = tracker.process_pool_data(self.mock_pool_data)
self.assertEqual(len(processed), 2)
# Check first pool
self.assertEqual(processed[0]['pool_name'], "tank")
self.assertEqual(processed[0]['total_size_bytes'], 10995116277760)
self.assertEqual(processed[0]['percent_used'], 50.0)
# Check second pool
self.assertEqual(processed[1]['pool_name'], "boot-pool")
self.assertEqual(processed[1]['percent_used'], 25.0)
@patch('tracker.os.getenv')
def test_missing_env_vars(self, mock_getenv):
mock_getenv.return_value = None
with self.assertRaises(ValueError):
tracker.fetch_pool_data()
if __name__ == '__main__':
unittest.main()