kopia lustrzana https://github.com/glidernet/ogn-python
Test and fix update_receivers
rodzic
52c40582c4
commit
eba91c5f5c
|
@ -170,22 +170,22 @@ def update_receivers(session=None):
|
|||
last_valid_values = session.query(
|
||||
distinct(ReceiverBeacon.name).label('name'),
|
||||
func.first_value(ReceiverBeacon.timestamp)
|
||||
.over(partition_by=ReceiverBeacon.name, order_by=case([(ReceiverBeacon.timestamp == null(), None), (ReceiverBeacon.timestamp != null(), ReceiverBeacon.timestamp)]))
|
||||
.over(partition_by=ReceiverBeacon.name, order_by=case([(ReceiverBeacon.timestamp == null(), None)], else_=ReceiverBeacon.timestamp).desc().nullslast())
|
||||
.label('firstseen'),
|
||||
func.last_value(ReceiverBeacon.timestamp)
|
||||
.over(partition_by=ReceiverBeacon.name, order_by=case([(ReceiverBeacon.timestamp == null(), None), (ReceiverBeacon.timestamp != null(), ReceiverBeacon.timestamp)]))
|
||||
.over(partition_by=ReceiverBeacon.name, order_by=case([(ReceiverBeacon.timestamp == null(), None)], else_=ReceiverBeacon.timestamp).asc().nullslast())
|
||||
.label('lastseen'),
|
||||
func.first_value(ReceiverBeacon.location_wkt)
|
||||
.over(partition_by=ReceiverBeacon.name, order_by=case([(ReceiverBeacon.location_wkt == null(), None), (ReceiverBeacon.location_wkt != null(), ReceiverBeacon.location_wkt)]))
|
||||
.over(partition_by=ReceiverBeacon.name, order_by=case([(ReceiverBeacon.location_wkt == null(), None)], else_=ReceiverBeacon.timestamp).desc().nullslast())
|
||||
.label('location_wkt'),
|
||||
func.first_value(ReceiverBeacon.altitude)
|
||||
.over(partition_by=ReceiverBeacon.name, order_by=case([(ReceiverBeacon.altitude == null(), None), (ReceiverBeacon.altitude != null(), ReceiverBeacon.altitude)]))
|
||||
.over(partition_by=ReceiverBeacon.name, order_by=case([(ReceiverBeacon.altitude == null(), None)], else_=ReceiverBeacon.timestamp).desc().nullslast())
|
||||
.label('altitude'),
|
||||
func.first_value(ReceiverBeacon.version)
|
||||
.over(partition_by=ReceiverBeacon.name, order_by=case([(ReceiverBeacon.version == null(), None), (ReceiverBeacon.version != null(), ReceiverBeacon.version)]))
|
||||
.over(partition_by=ReceiverBeacon.name, order_by=case([(ReceiverBeacon.version == null(), None)], else_=ReceiverBeacon.timestamp).desc().nullslast())
|
||||
.label('version'),
|
||||
func.first_value(ReceiverBeacon.platform)
|
||||
.over(partition_by=ReceiverBeacon.name, order_by=case([(ReceiverBeacon.platform == null(), None), (ReceiverBeacon.platform != null(), ReceiverBeacon.platform)]))
|
||||
.over(partition_by=ReceiverBeacon.name, order_by=case([(ReceiverBeacon.platform == null(), None)], else_=ReceiverBeacon.timestamp).desc().nullslast())
|
||||
.label('platform')) \
|
||||
.filter(ReceiverBeacon.receiver_id == null()) \
|
||||
.subquery()
|
||||
|
|
|
@ -40,6 +40,13 @@ class ReceiverBeacon(Beacon):
|
|||
# Multi-column indices
|
||||
Index('ix_receiver_beacon_receiver_id_name', 'receiver_id', 'name')
|
||||
|
||||
def __init__(self, name, timestamp, altitude, version, platform):
|
||||
self.name = name
|
||||
self.timestamp = timestamp
|
||||
self.altitude = altitude
|
||||
self.version = version
|
||||
self.platform = platform
|
||||
|
||||
def __repr__(self):
|
||||
return "<ReceiverBeacon %s: %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s>" % (
|
||||
self.version,
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
import unittest
|
||||
import os
|
||||
|
||||
from ogn.model import AircraftBeacon, Device
|
||||
from ogn.collect.database import update_devices
|
||||
from ogn.model import AircraftBeacon, ReceiverBeacon, Device, Receiver
|
||||
from ogn.collect.database import update_devices, update_receivers
|
||||
|
||||
|
||||
class TestDB(unittest.TestCase):
|
||||
|
@ -19,26 +19,31 @@ class TestDB(unittest.TestCase):
|
|||
from ogn.commands.database import init
|
||||
init()
|
||||
|
||||
# Create basic data and insert
|
||||
self.ab00 = 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.ab01 = AircraftBeacon(receiver_name='Koenigsdf', address='DD4711', timestamp='2017-12-10 10:00:01', aircraft_type=1, stealth=False, error_count=0, software_version=0.26, hardware_version=None, real_address=None)
|
||||
self.ab02 = AircraftBeacon(receiver_name='Koenigsdf', address='DD4711', timestamp='2017-12-10 10:00:02', aircraft_type=1, stealth=False, error_count=1, software_version=0.27, hardware_version=None, real_address=None)
|
||||
self.ab03 = 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.ab04 = AircraftBeacon(receiver_name='Koenigsdf', address='DD4711', timestamp='2017-12-10 10:00:04', aircraft_type=1, stealth=False, error_count=0, software_version=0.25, hardware_version=123, real_address='DDxxxx')
|
||||
self.ab05 = 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')
|
||||
# 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')
|
||||
|
||||
def tearDown(self):
|
||||
session = self.session
|
||||
session.execute("DELETE FROM device")
|
||||
session.execute("DELETE FROM receiver")
|
||||
session.execute("DELETE FROM aircraft_beacon")
|
||||
session.execute("DELETE FROM receiver_beacon")
|
||||
session.commit()
|
||||
|
||||
def test_update_devices(self):
|
||||
session = self.session
|
||||
|
||||
# Compute 1st beacon
|
||||
session.add(self.ab00)
|
||||
session.add(self.ab01)
|
||||
session.commit()
|
||||
|
||||
update_devices(session)
|
||||
|
@ -47,19 +52,9 @@ class TestDB(unittest.TestCase):
|
|||
self.assertEqual(len(devices), 1)
|
||||
self.assertEqual(devices[0].address, 'DD4711')
|
||||
self.assertEqual(devices[0].software_version, None)
|
||||
self.assertEqual(self.ab00.device_id, devices[0].id)
|
||||
self.assertEqual(self.ab01.device_id, devices[0].id)
|
||||
|
||||
# Compute 2nd beacon: changed software version
|
||||
session.add(self.ab01)
|
||||
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, 0.26)
|
||||
|
||||
# Compute 3rd beacon: changed software version, but with error_count > 0
|
||||
session.add(self.ab02)
|
||||
session.commit()
|
||||
|
||||
|
@ -67,23 +62,55 @@ class TestDB(unittest.TestCase):
|
|||
devices = session.query(Device).all()
|
||||
self.assertEqual(len(devices), 1)
|
||||
self.assertEqual(devices[0].address, 'DD4711')
|
||||
self.assertEqual(devices[0].software_version, 0.26)
|
||||
self.assertEqual(devices[0].hardware_version, None)
|
||||
self.assertEqual(devices[0].real_address, None)
|
||||
self.assertEqual(devices[0].software_version, 6.01)
|
||||
self.assertEqual(self.ab02.device_id, devices[0].id)
|
||||
|
||||
# Compute 4.-6. beacon
|
||||
# Compute 3rd beacon: changed software version, but with error_count > 0
|
||||
session.add(self.ab03)
|
||||
session.add(self.ab05) # order is not important
|
||||
session.add(self.ab04)
|
||||
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, 0.25)
|
||||
self.assertEqual(devices[0].software_version, 6.01)
|
||||
self.assertEqual(devices[0].hardware_version, None)
|
||||
self.assertEqual(devices[0].real_address, None)
|
||||
self.assertEqual(self.ab03.device_id, devices[0].id)
|
||||
|
||||
# Compute 4.-6. beacon
|
||||
session.add(self.ab04)
|
||||
session.add(self.ab06) # order is not important
|
||||
session.add(self.ab05)
|
||||
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, 6.0)
|
||||
self.assertEqual(devices[0].hardware_version, 123)
|
||||
self.assertEqual(devices[0].real_address, 'DD0815')
|
||||
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)
|
||||
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')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
Ładowanie…
Reference in New Issue