2017-12-16 20:08:01 +00:00
|
|
|
import unittest
|
|
|
|
import os
|
|
|
|
|
2017-12-19 06:50:12 +00:00
|
|
|
from ogn.model import AircraftBeacon, ReceiverBeacon, Device, Receiver, DeviceInfo
|
|
|
|
from ogn.collect.database import update_devices, update_receivers, import_ddb_file
|
2017-12-16 20:08:01 +00:00
|
|
|
|
|
|
|
|
|
|
|
class TestDB(unittest.TestCase):
|
|
|
|
session = None
|
|
|
|
engine = None
|
|
|
|
app = None
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
os.environ['OGN_CONFIG_MODULE'] = 'config.test'
|
|
|
|
from ogn.commands.dbutils import engine, session
|
|
|
|
self.session = session
|
|
|
|
self.engine = engine
|
|
|
|
|
|
|
|
from ogn.commands.database import init
|
|
|
|
init()
|
|
|
|
|
2017-12-16 20:40:12 +00:00
|
|
|
# Prepare Beacons
|
|
|
|
self.ab01 = AircraftBeacon(receiver_name='Koenigsdf', address='DD4711', timestamp='2017-12-10 10:00:00', aircraft_type=1, stealth=False, error_count=0, software_version=None, hardware_version=None, real_address=None)
|
|
|
|
self.ab02 = AircraftBeacon(receiver_name='Koenigsdf', address='DD4711', timestamp='2017-12-10 10:00:01', aircraft_type=1, stealth=False, error_count=0, software_version=6.01, hardware_version=None, real_address=None)
|
|
|
|
self.ab03 = AircraftBeacon(receiver_name='Koenigsdf', address='DD4711', timestamp='2017-12-10 10:00:02', aircraft_type=1, stealth=False, error_count=1, software_version=6.02, hardware_version=None, real_address=None)
|
|
|
|
self.ab04 = AircraftBeacon(receiver_name='Koenigsdf', address='DD4711', timestamp='2017-12-10 10:00:03', aircraft_type=1, stealth=False, error_count=0, software_version=None, hardware_version=5, real_address='DD1234')
|
|
|
|
self.ab05 = AircraftBeacon(receiver_name='Koenigsdf', address='DD4711', timestamp='2017-12-10 10:00:04', aircraft_type=1, stealth=False, error_count=0, software_version=6.00, hardware_version=123, real_address='DDxxxx')
|
|
|
|
self.ab06 = AircraftBeacon(receiver_name='Koenigsdf', address='DD4711', timestamp='2017-12-10 10:00:05', aircraft_type=1, stealth=False, error_count=0, software_version=None, hardware_version=None, real_address='DD0815')
|
|
|
|
|
|
|
|
self.rb01 = ReceiverBeacon(name='Koenigsdf', timestamp='2017-12-10 09:55:00', altitude=601, version='0.2.5', platform='ARM')
|
|
|
|
self.rb02 = ReceiverBeacon(name='Koenigsdf', timestamp='2017-12-10 10:00:00', altitude=601, version='0.2.7', platform='ARM')
|
|
|
|
self.rb03 = ReceiverBeacon(name='Koenigsdf', timestamp='2017-12-10 10:05:00', altitude=601, version='0.2.6', platform='ARM')
|
2017-12-16 20:08:01 +00:00
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
session = self.session
|
2018-01-11 07:35:07 +00:00
|
|
|
session.execute("DELETE FROM device_infos")
|
|
|
|
session.execute("DELETE FROM devices")
|
|
|
|
session.execute("DELETE FROM receivers")
|
|
|
|
session.execute("DELETE FROM aircraft_beacons")
|
|
|
|
session.execute("DELETE FROM receiver_beacons")
|
2017-12-16 20:08:01 +00:00
|
|
|
session.commit()
|
|
|
|
|
|
|
|
def test_update_devices(self):
|
|
|
|
session = self.session
|
|
|
|
|
|
|
|
# Compute 1st beacon
|
2017-12-16 20:40:12 +00:00
|
|
|
session.add(self.ab01)
|
2017-12-16 20:08:01 +00:00
|
|
|
session.commit()
|
|
|
|
|
|
|
|
update_devices(session)
|
|
|
|
|
|
|
|
devices = session.query(Device).all()
|
|
|
|
self.assertEqual(len(devices), 1)
|
|
|
|
self.assertEqual(devices[0].address, 'DD4711')
|
|
|
|
self.assertEqual(devices[0].software_version, None)
|
2017-12-16 20:40:12 +00:00
|
|
|
self.assertEqual(self.ab01.device_id, devices[0].id)
|
2017-12-16 20:08:01 +00:00
|
|
|
|
|
|
|
# Compute 2nd beacon: changed software version
|
2017-12-16 20:40:12 +00:00
|
|
|
session.add(self.ab02)
|
2017-12-16 20:08:01 +00:00
|
|
|
session.commit()
|
|
|
|
|
|
|
|
update_devices(session)
|
|
|
|
devices = session.query(Device).all()
|
|
|
|
self.assertEqual(len(devices), 1)
|
|
|
|
self.assertEqual(devices[0].address, 'DD4711')
|
2017-12-16 20:40:12 +00:00
|
|
|
self.assertEqual(devices[0].software_version, 6.01)
|
|
|
|
self.assertEqual(self.ab02.device_id, devices[0].id)
|
2017-12-16 20:08:01 +00:00
|
|
|
|
|
|
|
# Compute 3rd beacon: changed software version, but with error_count > 0
|
2017-12-16 20:40:12 +00:00
|
|
|
session.add(self.ab03)
|
2017-12-16 20:08:01 +00:00
|
|
|
session.commit()
|
|
|
|
|
|
|
|
update_devices(session)
|
|
|
|
devices = session.query(Device).all()
|
|
|
|
self.assertEqual(len(devices), 1)
|
|
|
|
self.assertEqual(devices[0].address, 'DD4711')
|
2017-12-16 20:40:12 +00:00
|
|
|
self.assertEqual(devices[0].software_version, 6.01)
|
2017-12-16 20:08:01 +00:00
|
|
|
self.assertEqual(devices[0].hardware_version, None)
|
|
|
|
self.assertEqual(devices[0].real_address, None)
|
2017-12-16 20:40:12 +00:00
|
|
|
self.assertEqual(self.ab03.device_id, devices[0].id)
|
2017-12-16 20:08:01 +00:00
|
|
|
|
|
|
|
# Compute 4.-6. beacon
|
|
|
|
session.add(self.ab04)
|
2017-12-16 20:40:12 +00:00
|
|
|
session.add(self.ab06) # order is not important
|
|
|
|
session.add(self.ab05)
|
2017-12-16 20:08:01 +00:00
|
|
|
session.commit()
|
|
|
|
|
|
|
|
update_devices(session)
|
|
|
|
devices = session.query(Device).all()
|
|
|
|
self.assertEqual(len(devices), 1)
|
|
|
|
self.assertEqual(devices[0].address, 'DD4711')
|
2017-12-16 20:40:12 +00:00
|
|
|
self.assertEqual(devices[0].software_version, 6.0)
|
2017-12-16 20:08:01 +00:00
|
|
|
self.assertEqual(devices[0].hardware_version, 123)
|
|
|
|
self.assertEqual(devices[0].real_address, 'DD0815')
|
2017-12-16 20:40:12 +00:00
|
|
|
self.assertEqual(self.ab04.device_id, devices[0].id)
|
|
|
|
self.assertEqual(self.ab05.device_id, devices[0].id)
|
|
|
|
self.assertEqual(self.ab06.device_id, devices[0].id)
|
|
|
|
|
|
|
|
def test_update_receivers(self):
|
|
|
|
session = self.session
|
|
|
|
|
|
|
|
# Compute beacons
|
|
|
|
session.add(self.rb01)
|
|
|
|
session.add(self.rb02)
|
|
|
|
session.add(self.rb03)
|
2017-12-19 06:38:49 +00:00
|
|
|
session.add(self.ab01)
|
2017-12-16 20:40:12 +00:00
|
|
|
session.commit()
|
|
|
|
|
|
|
|
update_receivers(session)
|
|
|
|
|
|
|
|
receivers = session.query(Receiver).all()
|
|
|
|
self.assertEqual(len(receivers), 1)
|
|
|
|
self.assertEqual(receivers[0].name, 'Koenigsdf')
|
|
|
|
self.assertEqual(receivers[0].altitude, 601)
|
|
|
|
self.assertEqual(receivers[0].version, '0.2.6')
|
2017-12-19 06:38:49 +00:00
|
|
|
self.assertEqual(self.rb01.receiver_id, receivers[0].id)
|
|
|
|
self.assertEqual(self.rb02.receiver_id, receivers[0].id)
|
|
|
|
self.assertEqual(self.rb03.receiver_id, receivers[0].id)
|
|
|
|
self.assertEqual(self.ab01.receiver_id, receivers[0].id)
|
2017-12-16 20:08:01 +00:00
|
|
|
|
2017-12-19 06:50:12 +00:00
|
|
|
def test_import_ddb_file(self):
|
|
|
|
session = self.session
|
|
|
|
|
|
|
|
import_ddb_file(session, path=os.path.dirname(__file__) + '/../custom_ddb.txt')
|
|
|
|
|
|
|
|
device_infos = session.query(DeviceInfo).all()
|
|
|
|
self.assertEqual(len(device_infos), 6)
|
|
|
|
|
2017-12-16 20:08:01 +00:00
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
|
|
unittest.main()
|