2016-02-28 11:11:16 +00:00
import unittest
import unittest . mock as mock
2017-09-27 18:23:43 +00:00
import os
2016-02-28 11:11:16 +00:00
from datetime import datetime
from time import sleep
2017-09-30 16:25:02 +00:00
from ogn . parser . parse import parse
2017-12-13 21:06:45 +00:00
from ogn . parser . exceptions import AprsParseError , OgnParseError
2016-02-28 11:11:16 +00:00
class TestStringMethods ( unittest . TestCase ) :
2017-09-28 06:43:50 +00:00
def parse_valid_beacon_data_file ( self , filename , beacon_type ) :
2017-09-27 20:43:04 +00:00
with open ( os . path . dirname ( __file__ ) + ' /valid_beacon_data/ ' + filename ) as f :
2016-02-28 11:11:16 +00:00
for line in f :
2018-03-18 16:55:01 +00:00
try :
message = parse ( line , datetime ( 2015 , 4 , 10 , 17 , 0 ) )
self . assertFalse ( message is None )
if message [ ' aprs_type ' ] == ' position ' or message [ ' aprs_type ' ] == ' status ' :
2017-09-28 06:43:50 +00:00
self . assertEqual ( message [ ' beacon_type ' ] , beacon_type )
2018-03-18 16:55:01 +00:00
except NotImplementedError as e :
print ( e )
2016-02-28 11:11:16 +00:00
2017-09-28 06:43:50 +00:00
def test_aprs_aircraft_beacons ( self ) :
2018-03-10 07:58:32 +00:00
self . parse_valid_beacon_data_file ( filename = ' aprs_aircraft.txt ' , beacon_type = ' aircraft ' )
2017-09-28 06:43:50 +00:00
def test_aprs_receiver_beacons ( self ) :
2018-03-10 07:58:32 +00:00
self . parse_valid_beacon_data_file ( filename = ' aprs_receiver.txt ' , beacon_type = ' receiver ' )
2017-09-27 20:43:04 +00:00
2018-04-10 16:54:30 +00:00
def test_aprs_fanet_beacons ( self ) :
self . parse_valid_beacon_data_file ( filename = ' fanet.txt ' , beacon_type = ' fanet ' )
2017-09-28 20:30:06 +00:00
def test_ogn_flarm_beacons ( self ) :
2018-03-10 07:58:32 +00:00
self . parse_valid_beacon_data_file ( filename = ' ogn_flarm.txt ' , beacon_type = ' flarm ' )
2017-09-28 20:30:06 +00:00
def test_ogn_receiver_beacons ( self ) :
2018-03-10 07:58:32 +00:00
self . parse_valid_beacon_data_file ( filename = ' ogn_receiver.txt ' , beacon_type = ' receiver ' )
2017-09-28 20:30:06 +00:00
def test_ogn_tracker_beacons ( self ) :
2018-03-10 07:58:32 +00:00
self . parse_valid_beacon_data_file ( filename = ' ogn_tracker.txt ' , beacon_type = ' tracker ' )
2017-09-28 20:30:06 +00:00
2017-09-27 20:43:04 +00:00
def test_lt24_beacons ( self ) :
2018-03-10 07:58:32 +00:00
self . parse_valid_beacon_data_file ( filename = ' lt24.txt ' , beacon_type = ' lt24 ' )
2017-09-27 20:43:04 +00:00
def test_naviter_beacons ( self ) :
2018-03-10 07:58:32 +00:00
self . parse_valid_beacon_data_file ( filename = ' naviter.txt ' , beacon_type = ' naviter ' )
2017-09-27 20:43:04 +00:00
def test_skylines_beacons ( self ) :
2018-03-10 07:58:32 +00:00
self . parse_valid_beacon_data_file ( filename = ' skylines.txt ' , beacon_type = ' skylines ' )
2017-09-27 20:43:04 +00:00
def test_spider_beacons ( self ) :
2018-03-10 07:58:32 +00:00
self . parse_valid_beacon_data_file ( filename = ' spider.txt ' , beacon_type = ' spider ' )
2017-09-27 20:43:04 +00:00
def test_spot_beacons ( self ) :
2018-03-10 07:58:32 +00:00
self . parse_valid_beacon_data_file ( filename = ' spot.txt ' , beacon_type = ' spot ' )
2017-09-27 20:43:04 +00:00
2017-05-16 12:36:38 +00:00
def test_fail_parse_aprs_none ( self ) :
2016-02-28 11:11:16 +00:00
with self . assertRaises ( TypeError ) :
2017-09-30 16:25:02 +00:00
parse ( None )
2017-05-16 12:36:38 +00:00
2016-02-28 11:11:16 +00:00
def test_fail_empty ( self ) :
with self . assertRaises ( AprsParseError ) :
2017-09-30 16:25:02 +00:00
parse ( " " )
2016-02-28 11:11:16 +00:00
def test_fail_bad_string ( self ) :
with self . assertRaises ( AprsParseError ) :
2017-09-30 16:25:02 +00:00
parse ( " Lachens>APRS,TCPIwontbeavalidstring " )
2016-02-28 11:11:16 +00:00
2017-12-13 21:06:45 +00:00
def test_fail_bad_dstcall ( self ) :
with self . assertRaises ( OgnParseError ) :
2018-01-12 07:26:38 +00:00
parse ( " EPZR>WTFDSTCALL,TCPIP*,qAC,GLIDERN1:>093456h this is a comment " , reference_date = datetime ( 2015 , 1 , 1 ) )
2017-12-13 21:06:45 +00:00
2017-10-01 20:22:57 +00:00
def test_v026_chile ( self ) :
# receiver beacons from chile have a APRS position message with a pure user comment
2017-10-02 16:09:06 +00:00
message = parse ( " VITACURA1>APRS,TCPIP*,qAC,GLIDERN4:/201146h3322.79SI07034.80W&/A=002329 Vitacura Municipal Aerodrome, Club de Planeadores Vitacura " , reference_date = datetime ( 2015 , 1 , 1 ) )
2017-10-01 20:22:57 +00:00
self . assertEqual ( message [ ' user_comment ' ] , " Vitacura Municipal Aerodrome, Club de Planeadores Vitacura " )
2018-01-12 07:26:38 +00:00
message_with_id = parse ( " ALFALFAL>APRS,TCPIP*,qAC,GLIDERN4:/221830h3330.40SI07007.88W&/A=008659 Alfalfal Hidroelectric Plant, Club de Planeadores Vitacurs " , reference_date = datetime ( 2015 , 1 , 1 ) )
self . assertEqual ( message_with_id [ ' user_comment ' ] , " Alfalfal Hidroelectric Plant, Club de Planeadores Vitacurs " )
2017-09-30 16:25:02 +00:00
@mock.patch ( ' ogn.parser.parse_module.createTimestamp ' )
2016-02-28 11:11:16 +00:00
def test_default_reference_date ( self , createTimestamp_mock ) :
2017-09-30 16:25:02 +00:00
valid_aprs_string = " Lachens>APRS,TCPIP*,qAC,GLIDERN2:/165334h4344.70NI00639.19E&/A=005435 v0.2.1 CPU:0.3 RAM:1764.4/2121.4MB NTP:2.8ms/+4.9ppm +47.0C RF:+0.70dB "
2016-02-28 11:11:16 +00:00
2017-09-30 16:25:02 +00:00
parse ( valid_aprs_string )
2016-02-28 11:11:16 +00:00
call_args_before = createTimestamp_mock . call_args
sleep ( 1 )
2017-09-30 16:25:02 +00:00
parse ( valid_aprs_string )
2016-02-28 11:11:16 +00:00
call_args_seconds_later = createTimestamp_mock . call_args
self . assertNotEqual ( call_args_before , call_args_seconds_later )
def test_copy_constructor ( self ) :
valid_aprs_string = " FLRDDA5BA>APRS,qAS,LFMX:/160829h4415.41N/00600.03E ' 342/049/A=005524 id0ADDA5BA -454fpm -1.1rot 8.8dB 0e +51.2kHz gps4x5 "
2017-09-30 16:25:02 +00:00
message = parse ( valid_aprs_string , reference_date = datetime ( 2015 , 1 , 1 , 16 , 8 , 29 ) )
2016-02-28 11:11:16 +00:00
2017-09-30 16:25:02 +00:00
self . assertEqual ( message [ ' name ' ] , ' FLRDDA5BA ' )
self . assertEqual ( message [ ' address ' ] , ' DDA5BA ' )
2016-02-28 11:11:16 +00:00
if __name__ == ' __main__ ' :
unittest . main ( )