diff --git a/.gitattributes b/.gitattributes index 1584e2d7b6616c770ddfb060b5835f440a6042eb..802cce871a58f754a13a64d5542d098d94ede1ae 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1887,10 +1887,14 @@ LCU/Maintenance/DBInterface/test/controllers/t_all_components_error_types.run -t LCU/Maintenance/DBInterface/test/controllers/t_all_components_error_types.sh -text LCU/Maintenance/DBInterface/test/controllers/test_all_components_error_types.py -text LCU/Maintenance/DBInterface/test/controllers/test_data_generators.py -text +LCU/Maintenance/DBInterface/test/models/CMakeLists.txt -text +LCU/Maintenance/DBInterface/test/models/t_rtsm_models.run -text +LCU/Maintenance/DBInterface/test/models/t_rtsm_models.sh -text +LCU/Maintenance/DBInterface/test/models/t_wincc_models.run -text +LCU/Maintenance/DBInterface/test/models/t_wincc_models.sh -text +LCU/Maintenance/DBInterface/test/models/test_rtsm_models.py -text +LCU/Maintenance/DBInterface/test/models/test_wincc_models.py -text LCU/Maintenance/DBInterface/test/postgres_testrunner.py -text -LCU/Maintenance/DBInterface/test/t_rtsm_models.run -text -LCU/Maintenance/DBInterface/test/t_rtsm_models.sh -text -LCU/Maintenance/DBInterface/test/test_rtsm_models.py -text LCU/Maintenance/MDB_WebView/CMakeLists.txt -text LCU/Maintenance/MDB_WebView/maintenancedb_view/.env -text LCU/Maintenance/MDB_WebView/maintenancedb_view/CMakeLists.txt -text diff --git a/LCU/Maintenance/DBInterface/test/models/CMakeLists.txt b/LCU/Maintenance/DBInterface/test/models/CMakeLists.txt new file mode 100644 index 0000000000000000000000000000000000000000..f46339586de145398d81c9d2ebfeec810ad99f9c --- /dev/null +++ b/LCU/Maintenance/DBInterface/test/models/CMakeLists.txt @@ -0,0 +1,13 @@ +# $Id$ +include(LofarCTestPython) + +enable_coverage(3) + +set(py_files postgres_testrunner.py + __init__.py + test_rtsm_models.py + test_wincc_models.py) +python_install(${py_files} DESTINATION lofar/maintenance/test) + +lofar_add_test(t_rtsm_models) +lofar_add_test(t_wincc_models) diff --git a/LCU/Maintenance/DBInterface/test/t_rtsm_models.run b/LCU/Maintenance/DBInterface/test/models/t_rtsm_models.run similarity index 100% rename from LCU/Maintenance/DBInterface/test/t_rtsm_models.run rename to LCU/Maintenance/DBInterface/test/models/t_rtsm_models.run diff --git a/LCU/Maintenance/DBInterface/test/t_rtsm_models.sh b/LCU/Maintenance/DBInterface/test/models/t_rtsm_models.sh similarity index 100% rename from LCU/Maintenance/DBInterface/test/t_rtsm_models.sh rename to LCU/Maintenance/DBInterface/test/models/t_rtsm_models.sh diff --git a/LCU/Maintenance/DBInterface/test/models/t_wincc_models.run b/LCU/Maintenance/DBInterface/test/models/t_wincc_models.run new file mode 100755 index 0000000000000000000000000000000000000000..280b0394fcc367999b1231203ed9a64f3a6fbe96 --- /dev/null +++ b/LCU/Maintenance/DBInterface/test/models/t_wincc_models.run @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +. coverage.sh + +python_coverage_test models/wincc -m lofar.maintenance.manage test lofar.maintenance.test.test_wincc_models --testrunner=lofar.maintenance.test.postgres_testrunner.PostgresqlTestRunner --settings lofar.maintenance.django_postgresql.test_settings diff --git a/LCU/Maintenance/DBInterface/test/models/t_wincc_models.sh b/LCU/Maintenance/DBInterface/test/models/t_wincc_models.sh new file mode 100755 index 0000000000000000000000000000000000000000..54249770c8353ef4e205c68777f6e7d7739853fb --- /dev/null +++ b/LCU/Maintenance/DBInterface/test/models/t_wincc_models.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +./runctest.sh t_wincc_models \ No newline at end of file diff --git a/LCU/Maintenance/DBInterface/test/test_rtsm_models.py b/LCU/Maintenance/DBInterface/test/models/test_rtsm_models.py similarity index 100% rename from LCU/Maintenance/DBInterface/test/test_rtsm_models.py rename to LCU/Maintenance/DBInterface/test/models/test_rtsm_models.py diff --git a/LCU/Maintenance/DBInterface/test/models/test_wincc_models.py b/LCU/Maintenance/DBInterface/test/models/test_wincc_models.py new file mode 100644 index 0000000000000000000000000000000000000000..ae1f428d7e5eaf568d2ac45cc64fdc38d52ba345 --- /dev/null +++ b/LCU/Maintenance/DBInterface/test/models/test_wincc_models.py @@ -0,0 +1,88 @@ +from django.test import TestCase +from lofar.maintenance.monitoringdb.models.wincc import WinCCAntennaStatus + +from datetime import datetime +import django.db.utils as db_utils +import pytz +import random + + +class WinCCAntennaStatusTest(TestCase): + + def test_antenna_status_insertion_auto_timestamp(self): + antenna_status = WinCCAntennaStatus() + antenna_status.station = 'CS001' + antenna_status.antenna_type = 'HBA' + antenna_status.antenna_id = 1 + antenna_status.status_code = 0 + + before_insertion_timestamp = datetime.now(pytz.UTC) + antenna_status.save() + + after_insertion_timestamp = datetime.now(pytz.UTC) + + saved_entity = WinCCAntennaStatus.objects.\ + filter(antenna_type=antenna_status.antenna_type, antenna_id=antenna_status.antenna_id).\ + order_by('-timestamp').first() + self.assertEqual(saved_entity.status_code, antenna_status.status_code) + + self.assertGreaterEqual(saved_entity.timestamp, before_insertion_timestamp) + self.assertLessEqual(saved_entity.timestamp, after_insertion_timestamp) + + def test_antenna_status_insertion_error_if_not_specified_station(self): + with self.assertRaises(db_utils.IntegrityError): + antenna_status = WinCCAntennaStatus() + antenna_status.antenna_type = 'HBA' + antenna_status.antenna_id = 1 + antenna_status.status_code = 0 + + antenna_status.save() + + def test_antenna_status_insertion_error_if_not_specified_antenna_type(self): + with self.assertRaises(db_utils.IntegrityError): + antenna_status = WinCCAntennaStatus() + antenna_status.station = 'CS001' + antenna_status.antenna_id = 1 + antenna_status.status_code = 0 + antenna_status.save() + + def test_custom_query(self): + for i in range(10): + antenna_status = WinCCAntennaStatus() + antenna_status.station = 'CS001' + antenna_status.antenna_type = 'HBA' + antenna_status.antenna_id = random.sample([1, 2], 1)[0] + antenna_status.status_code = 0 + + antenna_status.save() + + antenna_status = WinCCAntennaStatus() + antenna_status.station = 'CS001' + antenna_status.antenna_type = 'HBA' + antenna_status.antenna_id = 1 + antenna_status.status_code = 0 + + antenna_status.save() + + last_status = WinCCAntennaStatus() + last_status.station = 'CS001' + last_status.antenna_type = 'HBA' + last_status.antenna_id = 1 + last_status.status_code = 0 + + before_last_insertion_timestamp = datetime.now(pytz.UTC) + last_status.save() + + saved_entity = WinCCAntennaStatus.objects. \ + filter(antenna_type=antenna_status.antenna_type, antenna_id=antenna_status.antenna_id). \ + order_by('-timestamp').first() + self.assertGreaterEqual(saved_entity.timestamp, before_last_insertion_timestamp) + + result = WinCCAntennaStatus.objects.\ + latest_status_per_station_and_component_type('CS001', + 'HBA', + datetime.now()) + + self.assertIn('1', result) + self.assertIn('2', result) + self.assertGreaterEqual(result['1']["inserted_at"], before_last_insertion_timestamp)