72 lines
2.2 KiB
Python
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()
|