Esempio n. 1
0
 def setUp(self):
     self.test_state = DataState()
     self.test_state.set_data_item('Time', 321.36)
     self.test_state.set_data_item('GPS_Time', '21:23:48.021')
     self.test_state.set_data_item('GPS_Date', '15-05-19')
     self.test_state.set_data_item('Latitude', 39.739242)
     self.test_state.set_data_item('Longitude', 104.9903299)
     self.test_state.set_data_item('Altitude', 1609)
     self.test_state.set_data_item('X', 0.15)
     self.test_state.set_data_item('Y', 0.86)
     self.test_state.set_data_item('Z', 1.18)
     self.test_state.set_data_item('KPH', 86.3)
     self.test_state.set_data_item('Lap', 3)
     self.test_state.set_data_item('RPM', 5891)
     self.test_state.set_data_item('Gear', 3)
     self.test_state.set_data_item('Throttle', 97)
     self.test_state.set_data_item('ECU_Throttle', 95)
     self.test_state.set_data_item('Brake', 1)
     self.test_state.set_data_item('Brake_Pressure', 42)
     self.test_state.set_data_item('Clutch', 0)
     self.test_state.set_data_item('Steering_Angle', 6.21)
     self.test_state.set_data_item('Steering_Rate', 0.42)
     self.test_state.set_data_item('Coolant_Temperature', 99)
     self.test_state.set_data_item('Oil_Pressure', 240)
     self.test_state.set_data_item('Oil_Temperature', 96)
     self.test_state.set_data_item('LF_KPH', 85.2)
     self.test_state.set_data_item('RF_KPH', 86.9)
     self.test_state.set_data_item('LR_KPH', 85.0)
     self.test_state.set_data_item('RR_KPH', 86.7)
     self.test_state.set_data_item('PSM', 0)
     self.test_state.set_data_item('GPS_KPH', 0.86)
     self.test_state.set_data_item('GPS_Heading', 321.41)
     self.test_state.set_data_item('Accuracy', 0.10)
     self.test_formatter = CsvFormatter(dict())
     pass
Esempio n. 2
0
def process(input_paths, output_url, output_format, tags, output_batch_size,
            start_date_datum, start_time_datum):
    data = DataState()
    time_util = TimeUtils(start_date_datum, start_time_datum)
    data.set_data_item('DateTime',
                       time_util.calculateTimestamp(None, None, 0.0))
    last_data_time = data.state_time
    parser = Parser(data)
    formatter = FormatterFactory.getFormatter(output_format, tags)
    ostream = io.StringIO()
    header_line = formatter.formatHeading(data)
    if header_line is not None:
        if verbose > 0:
            print(header_line)
        print(header_line, end='\n', file=ostream)
    line_count = 0
    for path in input_paths:
        print("Processing {0}".format(path))
        with open(path, "r") as ifile:
            for data_line in ifile:
                input_line = data_line.strip()
                if verbose > 0:
                    print(input_line)
                parser.parse(input_line)
                output_lines = formatter.formatData(data)
                if output_lines is not None:
                    for output_line in output_lines:
                        if verbose > 0:
                            print(output_line)
                        print(output_line, end='\n', file=ostream)
                        line_count = line_count + 1
                if data.state_time > last_data_time:
                    last_data_time = data.state_time
                    data.set_data_item(
                        'DateTime',
                        time_util.calculateTimestamp(
                            data.get_data_item('GPS_Date'),
                            data.get_data_item('GPS_Time'), data.state_time))
                    output_line = formatter.formatTimeIncrement(data)
                    if output_line is not None:
                        if verbose > 0:
                            print(output_line)
                        print(output_line, end='\n', file=ostream)
                        line_count = line_count + 1
                if line_count >= output_batch_size:
                    writeBatch(output_url, ostream)
                    ostream.close()
                    ostream = io.StringIO()
                    line_count = 0
        footer_line = formatter.formatFooter(data)
        if footer_line is not None:
            if verbose > 0:
                print(footer_line)
            print(footer_line, end='\n', file=ostream)
        writeBatch(output_url, ostream)
        ostream.close()
Esempio n. 3
0
 def testOilTemperature(self):
     self.test_state = DataState()
     self.test_state.set_data_item('Time', 321.36)
     self.test_state.set_data_item('DateTime', datetime(2019,5,15,21,23,48,21000,timezone.utc))
     self.test_state.set_data_item('Oil_Temperature', 96)
     self.test_state.set_data_item('Lap', 3)
     actual = self.test_formatter.formatData(self.test_state)
     expected = 'oil_temperature,vehicle=cayman,vin=WP0AB29858U782772,mileage=79832,lap=3 value=96 1557955428021'
     self.assertEqual(expected, actual[0], 'The generated influxdb line protocol data for oil_temperature was not as expected.')
     self.assertTrue('Oil_Temperature' not in self.test_state.get_dirty_fields(), 'Oil_Temperature still dirty after formatting.')
Esempio n. 4
0
 def testClutch(self):
     self.test_state = DataState()
     self.test_state.set_data_item('Time', 321.36)
     self.test_state.set_data_item('DateTime', datetime(2019,5,15,21,23,48,21000,timezone.utc))
     self.test_state.set_data_item('Clutch', 0)
     self.test_state.set_data_item('Lap', 3)
     actual = self.test_formatter.formatData(self.test_state)
     expected = 'clutch,vehicle=cayman,vin=WP0AB29858U782772,mileage=79832,lap=3 released=0 1557955428021'
     self.assertEqual(expected, actual[0], 'The generated influxdb line protocol data for clutch was not as expected.')
     self.assertTrue('Clutch' not in self.test_state.get_dirty_fields(), 'Clutch still dirty after formatting.')
Esempio n. 5
0
 def testBrake(self):
     self.test_state = DataState()
     self.test_state.set_data_item('Time', 321.36)
     self.test_state.set_data_item('DateTime', datetime(2019,5,15,21,23,48,21000,timezone.utc))
     self.test_state.set_data_item('Brake', 1)
     self.test_state.set_data_item('Brake_Pressure', 42)
     self.test_state.set_data_item('Lap', 3)
     actual = self.test_formatter.formatData(self.test_state)
     expected = 'brake,vehicle=cayman,vin=WP0AB29858U782772,mileage=79832,lap=3 applied=1,pressure=42 1557955428021'
     self.assertEqual(expected, actual[0], 'The generated influxdb line protocol data for brake was not as expected.')
     self.assertTrue('Brake' not in self.test_state.get_dirty_fields(), 'Brake still dirty after formatting.')
     self.assertTrue('Brake_Pressure' not in self.test_state.get_dirty_fields(), 'Brake_Pressure still dirty after formatting.')
Esempio n. 6
0
 def testThrottle(self):
     self.test_state = DataState()
     self.test_state.set_data_item('Time', 321.36)
     self.test_state.set_data_item('DateTime', datetime(2019,5,15,21,23,48,21000,timezone.utc))
     self.test_state.set_data_item('Throttle', 97)
     self.test_state.set_data_item('ECU_Throttle', 95)
     self.test_state.set_data_item('Lap', 3)
     actual = self.test_formatter.formatData(self.test_state)
     expected = 'throttle,vehicle=cayman,vin=WP0AB29858U782772,mileage=79832,lap=3 driver=97,ecu=95 1557955428021'
     self.assertEqual(expected, actual[0], 'The generated influxdb line protocol data for throttle was not as expected.')
     self.assertTrue('Throttle' not in self.test_state.get_dirty_fields(), 'Throttle still dirty after formatting.')
     self.assertTrue('ECU_Throttle' not in self.test_state.get_dirty_fields(), 'ECU_Throttle still dirty after formatting.')
Esempio n. 7
0
 def testSteering(self):
     self.test_state = DataState()
     self.test_state.set_data_item('Time', 321.36)
     self.test_state.set_data_item('DateTime', datetime(2019,5,15,21,23,48,21000,timezone.utc))
     self.test_state.set_data_item('Steering_Angle', 6.21)
     self.test_state.set_data_item('Steering_Rate', 0.42)
     self.test_state.set_data_item('Lap', 3)
     actual = self.test_formatter.formatData(self.test_state)
     expected = 'steering,vehicle=cayman,vin=WP0AB29858U782772,mileage=79832,lap=3 angle=6.21,rate=0.42 1557955428021'
     self.assertEqual(expected, actual[0], 'The generated influxdb line protocol data for steering was not as expected.')
     self.assertTrue('Steering_Angle' not in self.test_state.get_dirty_fields(), 'Steering_Angle still dirty after formatting.')
     self.assertTrue('Steering_Rate' not in self.test_state.get_dirty_fields(), 'Steering_Rate still dirty after formatting.')
Esempio n. 8
0
 def testPModes(self):
     self.test_state = DataState()
     self.test_state.set_data_item('Time', 321.36)
     self.test_state.set_data_item('DateTime', datetime(2019,5,15,21,23,48,21000,timezone.utc))
     self.test_state.set_data_item('Sport_Mode', 1)
     self.test_state.set_data_item('Pasm_Sport_Mode', 1)
     self.test_state.set_data_item('PSM_Disable', 0)
     self.test_state.set_data_item('Lap', 3)
     actual = self.test_formatter.formatData(self.test_state)
     expected = 'pmodes,vehicle=cayman,vin=WP0AB29858U782772,mileage=79832,lap=3 sport=1,pasm_sport=1,psm_off=0 1557955428021'
     self.assertEqual(expected, actual[0], 'The generated influxdb line protocol data for pmodes was not as expected.')
     self.assertTrue('Sport_Mode' not in self.test_state.get_dirty_fields(), 'Sport_Mode still dirty after formatting.')
     self.assertTrue('Pasm_Sport_Mode' not in self.test_state.get_dirty_fields(), 'Pasm_Sport_Mode still dirty after formatting.')
     self.assertTrue('PSM_Disable' not in self.test_state.get_dirty_fields(), 'PSM_Disable still dirty after formatting.')
Esempio n. 9
0
 def testLocation(self):
     self.test_state = DataState()
     self.test_state.set_data_item('Time', 321.36)
     self.test_state.set_data_item('DateTime', datetime(2019,5,15,21,23,48,21000,timezone.utc))
     self.test_state.set_data_item('GPS_Time', '21:23:48.021')
     self.test_state.set_data_item('GPS_Date', '15-05-19')
     self.test_state.set_data_item('Latitude', 39.739242)
     self.test_state.set_data_item('Longitude', 104.9903299)
     self.test_state.set_data_item('Altitude', 1609)
     self.test_state.set_data_item('Lap', 3)
     actual = self.test_formatter.formatData(self.test_state)
     expected = 'location,vehicle=cayman,vin=WP0AB29858U782772,mileage=79832,lap=3,geohash=00000000 latitude=39.739242,longitude=104.9903299,altitude=1609 1557955428021'
     self.assertEqual(expected, actual[0], 'The generated influxdb line protocol data for locaation was not as expected.')
     self.assertTrue('Latitude' not in self.test_state.get_dirty_fields(), 'Latitude still dirty after formatting.')
     self.assertTrue('Longitude' not in self.test_state.get_dirty_fields(), 'Longitude still dirty after formatting.')
Esempio n. 10
0
 def testAcceleration(self):
     self.test_state = DataState()
     self.test_state.set_data_item('Time', 321.36)
     self.test_state.set_data_item('DateTime', datetime(2019,5,15,21,23,48,21000,timezone.utc))
     self.test_state.set_data_item('GPS_Time', '21:23:48.021')
     self.test_state.set_data_item('GPS_Date', '15-05-19')
     self.test_state.set_data_item('X', 0.15)
     self.test_state.set_data_item('Y', 0.86)
     self.test_state.set_data_item('Z', 1.18)
     self.test_state.set_data_item('Lap', 3)
     actual = self.test_formatter.formatData(self.test_state)
     expected = 'acceleration,vehicle=cayman,vin=WP0AB29858U782772,mileage=79832,lap=3 x=0.15,y=0.86,z=1.18 1557955428021'
     self.assertEqual(expected, actual[0], 'The generated influxdb line protocol data for acceleration was not as expected.')
     self.assertTrue('X' not in self.test_state.get_dirty_fields(), 'X still dirty after formatting.')
     self.assertTrue('Y' not in self.test_state.get_dirty_fields(), 'Y still dirty after formatting.')
     self.assertTrue('Z' not in self.test_state.get_dirty_fields(), 'Z still dirty after formatting.')
Esempio n. 11
0
 def testWheelSpeed(self):
     self.test_state = DataState()
     self.test_state.set_data_item('Time', 321.36)
     self.test_state.set_data_item('DateTime', datetime(2019,5,15,21,23,48,21000,timezone.utc))
     self.test_state.set_data_item('LF_KPH', 85.2)
     self.test_state.set_data_item('RF_KPH', 86.9)
     self.test_state.set_data_item('LR_KPH', 85.0)
     self.test_state.set_data_item('RR_KPH', 86.7)
     self.test_state.set_data_item('Lap', 3)
     actual = self.test_formatter.formatData(self.test_state)
     expected = 'wheel_speed,vehicle=cayman,vin=WP0AB29858U782772,mileage=79832,lap=3 left_front=85.2,right_front=86.9,left_rear=85.0,right_rear=86.7 1557955428021'
     self.assertEqual(expected, actual[0], 'The generated influxdb line protocol data for wheel_speed was not as expected.')
     self.assertTrue('LF_KPH' not in self.test_state.get_dirty_fields(), 'LF_KPH still dirty after formatting.')
     self.assertTrue('RF_KPH' not in self.test_state.get_dirty_fields(), 'RF_KPH still dirty after formatting.')
     self.assertTrue('LR_KPH' not in self.test_state.get_dirty_fields(), 'LR_KPH still dirty after formatting.')
     self.assertTrue('RR_KPH' not in self.test_state.get_dirty_fields(), 'RR_KPH still dirty after formatting.')
def scan(inpath, verbose):
    data = DataState()
    parser = Parser(data)
    line_count = 0
    datum_datetime = None
    accumulated_delta = 0.0
    delta_count = 0
    with open(inpath, "r") as ifile:
        for data_line in ifile:
            input_line = data_line.strip()
            if verbose > 0:
                print(input_line)
            if input_line.startswith('$AC') or input_line.startswith('$GPRMC'):
                parser.parse(input_line)
                print("Line {3} - Time: {0}    GPS Timestamp: {1} {2}".format(
                    data.get_data_item('Time'), data.get_data_item('GPS_Date'),
                    data.get_data_item('GPS_Time'), line_count))
                if data.is_dirty('GPS_Date') and data.is_dirty('GPS_Time'):
                    data_datetime = datetime.strptime(
                        "{0} {1}".format(data.get_data_item('GPS_Date'),
                                         data.get_data_item('GPS_Time')),
                        '%Y-%m-%d %H:%M:%S.%f')
                    data_deltatime = timedelta(0, data.get_data_item('Time'))
                    calculated_datum_datetime = data_datetime - data_deltatime
                    if datum_datetime is None:
                        datum_datetime = calculated_datum_datetime
                    print("Calculated Datum: {0}".format(
                        calculated_datum_datetime.isoformat()))
                    datum_delta = calculated_datum_datetime - datum_datetime
                    print("Calculated Delta: {0}".format(
                        datum_delta.total_seconds()))
                    accumulated_delta = accumulated_delta + datum_delta.total_seconds(
                    )
                    delta_count = delta_count + 1
        average_delta = accumulated_delta / delta_count
        print("Average Delta: {0}".format(average_delta))
        datum_datetime = datum_datetime + timedelta(0, average_delta)
        print("Datum: {0}".format(datum_datetime.isoformat()))
Esempio n. 13
0
class NmeaParserTest(unittest.TestCase):

    test_state = DataState()
    test_parser = NmeaParser(test_state)

    def test_rmc_1(self):
        test_fields = [
            "$GPRMC", "040338.445", "A", "3943.8653", "N", "10456.9499", "W",
            "042.7", "203.2", "190519", "", "", "A*7D"
        ]
        test_extractor = NmeaRmcExtractor()
        test_extractor.extractData(test_fields, NmeaParserTest.test_state)
        self.assertAlmostEqual(
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Latitude)),
            39.7310883333, 8)
        self.assertAlmostEqual(
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Longitude)),
            -104.949165000, 8)
        self.assertAlmostEqual(
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.GPS_KPH)),
            79.08040000000001, 8)
        self.assertAlmostEqual(
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.GPS_Heading)),
            203.20000000, 8)
        self.assertEqual(
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.GPS_Date)),
            '2019-05-19')
        self.assertEqual(
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.GPS_Time)),
            '04:03:38.445')
        pass
 def setUp(self):
     self.test_state = DataState()
     self.test_parser = AccelerometerParser(self.test_state)
class CanFrameParserTest(unittest.TestCase):

    test_state = DataState()
    test_parser = CanFrameParser(test_state)

    def testFrame242_1(self):
        test_fields = [
            "$CNDRV", "476.72", "242", "01", "00", "00", "00", "58", "00",
            "65", "00"
        ]
        test_extractor = CanFrame242Extractor()
        test_extractor.extractData(test_fields, CanFrameParserTest.test_state)
        self.assertEqual(
            0,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Clutch)),
            'Clutch Pedal was not parsed correctly.')
        self.assertEqual(
            0,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.RPM)),
            'Engine RPM was not parsed correctly.')
        self.assertEqual(
            0,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.ECU_Throttle)),
            'ECU commanded throttle was not parsed correctly.')
        pass

    def testFrame242_2(self):
        test_fields = [
            "$CNDRV", "476.72", "242", "09", "00", "C8", "50", "58", "C3",
            "65", "00"
        ]
        test_extractor = CanFrame242Extractor()
        test_extractor.extractData(test_fields, CanFrameParserTest.test_state)
        self.assertEqual(
            1,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Clutch)),
            'Clutch Pedal was not parsed correctly.')
        self.assertEqual(
            5170,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.RPM)),
            'Engine RPM was not parsed correctly.')
        self.assertAlmostEqual(
            76,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.ECU_Throttle)),
            2, 'ECU commanded throttle was not parsed correctly.')
        pass

    def testFrame245(self):
        test_fields = [
            "$CNDRV", "476.72", "245", "01", "6C", "02", "00", "58", "00",
            "65", "00"
        ]
        test_extractor = CanFrame245Extractor()
        test_extractor.extractData(test_fields, CanFrameParserTest.test_state)
        self.assertEqual(
            96,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(
                    DataState.names.Coolant_Temperature)),
            'Coolant temperature was not parsed correctly.')
        self.assertEqual(
            1,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Brake)),
            'Brake pedal was not parsed correctly.')
        pass

    def testFrame246(self):
        test_fields = [
            "$CNDRV", "476.72", "246", "0B", "00", "C8", "E1", "58", "C3",
            "65", "00"
        ]
        test_extractor = CanFrame246Extractor()
        test_extractor.extractData(test_fields, CanFrameParserTest.test_state)
        self.assertEqual(
            3,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Gear)),
            'Gear indicator was not parsed correctly.')
        self.assertAlmostEqual(
            88,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Throttle)), 2,
            'ECU commanded throttle was not parsed correctly.')
        pass

    def testFrame24A(self):
        test_fields = [
            "$CNDRV", "476.72", "24A", "0B", "10", "C8", "10", "0E", "10",
            "D2", "10"
        ]
        test_extractor = CanFrame24AExtractor()
        test_extractor.extractData(test_fields, CanFrameParserTest.test_state)
        self.assertAlmostEqual(
            41.07,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.LF_KPH)), 2,
            'LF wheel speed was not parsed correctly.')
        self.assertAlmostEqual(
            42.96,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.RF_KPH)), 2,
            'RF wheel speed was not parsed correctly.')
        self.assertAlmostEqual(
            41.10,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.LR_KPH)), 2,
            'LR wheel speed was not parsed correctly.')
        self.assertAlmostEqual(
            41.12,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.RR_KPH)), 2,
            'RR wheel speed was not parsed correctly.')
        pass

    def testFrame441(self):
        test_fields = [
            "$CNDRV", "476.72", "441", "0B", "10", "C8", "10", "0E", "67",
            "82", "10"
        ]
        test_extractor = CanFrame441Extractor()
        test_extractor.extractData(test_fields, CanFrameParserTest.test_state)
        self.assertAlmostEqual(
            89.33,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(
                    DataState.names.Oil_Temperature)), 2,
            'Oil temperature was not parsed correctly.')
        self.assertEqual(
            325,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Oil_Pressure)),
            'Oil pressure was not parsed correctly.')
        pass

    def testFrame44B(self):
        test_fields = [
            "$CNDRV", "476.72", "44B", "2B", "10", "C8", "10", "0E", "10",
            "D2", "10"
        ]
        test_extractor = CanFrame44BExtractor()
        test_extractor.extractData(test_fields, CanFrameParserTest.test_state)
        self.assertEqual(
            43,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(
                    DataState.names.Brake_Pressure)),
            'Brake pressure was not parsed correctly.')
        pass

    def testParserFrame242(self):
        test_line = "$CNDRV,477.72,242,09,00,C8,50,58,C3,65,00"
        CanFrameParserTest.test_parser.parse(test_line)
        self.assertEqual(
            477.72,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Time)),
            'Time was not parsed correctly.')
        self.assertEqual(
            1,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Clutch)),
            'Clutch Pedal was not parsed correctly.')
        self.assertEqual(
            5170,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.RPM)),
            'Engine RPM was not parsed correctly.')
        self.assertAlmostEqual(
            76,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.ECU_Throttle)),
            2, 'ECU commanded throttle was not parsed correctly.')
        pass

    def testParserFrame245(self):
        test_line = "$CNDRV,477.72,245,09,6E,C8,50,58,C3,65,00"
        CanFrameParserTest.test_parser.parse(test_line)
        self.assertAlmostEqual(
            477.72,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Time)), 2,
            'Time was not parsed correctly.')
        self.assertAlmostEqual(
            98.67,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(
                    DataState.names.Coolant_Temperature)), 2,
            'Coolant temperature was not parsed correctly.')
        self.assertEqual(
            0,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Brake)),
            'Brake pedal was not parsed correctly.')
        pass

    def testParserFrame246(self):
        test_line = "$CNDRV,478.50,246,04,00,C8,FA,58,C3,65,00"
        CanFrameParserTest.test_parser.parse(test_line)
        self.assertEqual(
            478.50,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Time)),
            'Time was not parsed correctly.')
        self.assertEqual(
            4,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Gear)),
            'Gear indicator was not parsed correctly.')
        self.assertAlmostEqual(
            98,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Throttle)), 2,
            'ECU commanded throttle was not parsed correctly.')
        pass

    def testParserFrame24A(self):
        test_line = "$CNDRV,480.17,24A,0B,20,C8,20,F7,20,02,21"
        CanFrameParserTest.test_parser.parse(test_line)
        self.assertEqual(
            480.17,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.Time)),
            'Time was not parsed correctly.')
        self.assertAlmostEqual(
            82.030,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.LF_KPH)), 3,
            'LF wheel speed was not parsed correctly.')
        self.assertAlmostEqual(
            83.920,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.RF_KPH)), 3,
            'RF wheel speed was not parsed correctly.')
        self.assertAlmostEqual(
            84.390,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.LR_KPH)), 3,
            'LR wheel speed was not parsed correctly.')
        self.assertAlmostEqual(
            84.810,
            self.test_state.get_data_item(
                DataState.get_data_name_at_idx(DataState.names.RR_KPH)), 3,
            'RR wheel speed was not parsed correctly.')
        pass
Esempio n. 16
0
class Test(unittest.TestCase):

    object_under_test = DataState()

    def test_get_data_name_at_index(self):
        actual_name = Test.object_under_test.get_data_name_at_idx(
            DataState.names.RPM)
        self.assertEqual(
            "RPM", actual_name,
            "The field name for RPM was not looked up correctly.")
        actual_name = Test.object_under_test.get_data_name_at_idx(
            DataState.names.Oil_Pressure)
        self.assertEqual(
            "Oil_Pressure", actual_name,
            "The field name for Oil Pressure was not looked up correctly.")
        pass

    def test_dirty_marking(self):
        Test.object_under_test.set_data_item('Time', 321.36)
        Test.object_under_test.set_data_item('GPS_Date', '15-05-19')
        Test.object_under_test.set_data_item('GPS_Time', '21:23:48.021')
        Test.object_under_test.set_data_item('X', 0.14)
        Test.object_under_test.set_data_item('Time', 321.41)
        Test.object_under_test.set_data_item('X', 0.10)
        dirty_fields = Test.object_under_test.get_dirty_fields()
        expected_dirty = set({'Time', 'GPS_Date', 'GPS_Time', 'X'})
        self.assertSetEqual(
            dirty_fields, expected_dirty, 'Expected dirty fields didn'
            't match the returned actual dirty fields.')

    def test_cleaning_dirty_marking(self):
        Test.object_under_test.set_data_item('Time', 321.36)
        Test.object_under_test.set_data_item('GPS_Date', '15-05-19')
        Test.object_under_test.set_data_item('GPS_Time', '21:23:48.021')
        Test.object_under_test.set_data_item('X', 0.14)
        Test.object_under_test.set_data_item('Time', 321.41)
        Test.object_under_test.set_data_item('X', 0.10)
        dirty_fields = Test.object_under_test.get_dirty_fields()
        self.assertTrue('X' in dirty_fields, 'Expected field X to be dirty.')
        Test.object_under_test.clean_fields(['X', 'GPS_Date', 'GPS_Time'])
        dirty_fields = Test.object_under_test.get_dirty_fields()
        self.assertTrue(Test.object_under_test.is_dirty('Time'),
                        'Expected field Time to be dirty')
        self.assertFalse(Test.object_under_test.is_dirty('GPS_Date'),
                         'Expected field GPS_Date to not be dirty')
        self.assertFalse(Test.object_under_test.is_dirty('GPS_Time'),
                         'Expected field GPS_Time to not be dirty')
        self.assertFalse(Test.object_under_test.is_dirty('X'),
                         'Expected field X to not be dirty')

    def test_set_data_item(self):
        Test.object_under_test.set_data_item('RPM', 3787)
        self.assertTrue(
            Test.object_under_test.get_data_item('RPM') == 3787,
            'Expected RPM to have value 3787')
        pass

    def test_set_data_item_multi(self):
        Test.object_under_test.set_data_item('Time', 321.36)
        Test.object_under_test.set_data_item(
            'DateTime', datetime(2019, 5, 15, 21, 23, 48, 21000, timezone.utc))
        Test.object_under_test.set_data_item('GPS_Date', '15-05-19')
        Test.object_under_test.set_data_item('GPS_Time', '21:23:48.021')
        Test.object_under_test.set_data_item('X', 0.14)
        Test.object_under_test.set_data_item('Y', 0.86)
        Test.object_under_test.set_data_item('Time', 321.41)
        Test.object_under_test.set_data_item('X', 0.10)
        self.assertTrue(
            Test.object_under_test.get_data_item('Time') == 321.41,
            'Expected Time to have value 321.41')
        self.assertTrue(
            Test.object_under_test.get_data_item('DateTime') == datetime(
                2019, 5, 15, 21, 23, 48, 21000, timezone.utc),
            'Expected DateTime didn'
            't match')
        self.assertTrue(
            Test.object_under_test.get_data_item('GPS_Date') == '15-05-19',
            'Expected GPS Date to have value 15-05-19')
        self.assertTrue(
            Test.object_under_test.get_data_item('GPS_Time') == '21:23:48.021',
            'Expected GPS Time to have value 21:23:48.021')
        self.assertTrue(
            Test.object_under_test.get_data_item('X') == 0.10,
            'Expected X accel to have value 0.10')
        self.assertTrue(
            Test.object_under_test.get_data_item('Y') == 0.86,
            'Expected Y accel to have value 0.86')
        pass

    def test_get_data_names(self):
        names = Test.object_under_test.get_data_names()
        self.assertTrue('Time' in names)
        self.assertTrue('DateTime' in names)
        self.assertTrue('GPS_Time' in names)
        self.assertTrue('GPS_Date' in names)
        self.assertTrue('Longitude' in names)
        self.assertTrue('Latitude' in names)
        self.assertTrue('Altitude' in names)
        self.assertTrue('X' in names)
        self.assertTrue('Y' in names)
        self.assertTrue('Z' in names)
        self.assertTrue('KPH' in names)
        self.assertTrue('Lap' in names)
        self.assertTrue('RPM' in names)
        self.assertTrue('Gear' in names)
        self.assertTrue('Throttle' in names)
        self.assertTrue('Brake' in names)
        self.assertTrue('Clutch' in names)
        self.assertTrue('Steering_Angle' in names)
        self.assertTrue('Steering_Rate' in names)
        self.assertTrue('Coolant_Temperature' in names)
        self.assertTrue('Oil_Pressure' in names)
        self.assertTrue('Oil_Temperature' in names)
        self.assertTrue('PSM' in names)
        self.assertTrue('GPS_KPH' in names)
        self.assertTrue('GPS_Heading' in names)
        pass