From d1cde53da02a00400431f5d64ae2ace61bd89ee4 Mon Sep 17 00:00:00 2001
From: Mattia Mancini <mancini@astron.nl>
Date: Thu, 14 Mar 2019 14:02:18 +0000
Subject: [PATCH] OSB-44: Implementing tests and reformatting structure

---
 .gitattributes                                | 10 ++-
 .../DBInterface/test/models/CMakeLists.txt    | 13 +++
 .../test/{ => models}/t_rtsm_models.run       |  0
 .../test/{ => models}/t_rtsm_models.sh        |  0
 .../test/models/t_wincc_models.run            |  4 +
 .../DBInterface/test/models/t_wincc_models.sh |  3 +
 .../test/{ => models}/test_rtsm_models.py     |  0
 .../test/models/test_wincc_models.py          | 88 +++++++++++++++++++
 8 files changed, 115 insertions(+), 3 deletions(-)
 create mode 100644 LCU/Maintenance/DBInterface/test/models/CMakeLists.txt
 rename LCU/Maintenance/DBInterface/test/{ => models}/t_rtsm_models.run (100%)
 rename LCU/Maintenance/DBInterface/test/{ => models}/t_rtsm_models.sh (100%)
 create mode 100755 LCU/Maintenance/DBInterface/test/models/t_wincc_models.run
 create mode 100755 LCU/Maintenance/DBInterface/test/models/t_wincc_models.sh
 rename LCU/Maintenance/DBInterface/test/{ => models}/test_rtsm_models.py (100%)
 create mode 100644 LCU/Maintenance/DBInterface/test/models/test_wincc_models.py

diff --git a/.gitattributes b/.gitattributes
index 1584e2d7b66..802cce871a5 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 00000000000..f46339586de
--- /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 00000000000..280b0394fcc
--- /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 00000000000..54249770c83
--- /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 00000000000..ae1f428d7e5
--- /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)
-- 
GitLab