
Intel Logan Beach NICs have additional fields in the cgu output, resulting in failures when converting it into a dict. Updated the logic for cgu_output_to_dict() to find the start and end of the "input" table. Once the start and end lines of the table are identified, then the other required fields can be located based on the known offset from the table. This also allows any future lines added to the table to handled without requiring additional code changes. Updated the unit tests to cover both the Logan Beach and Westport Channel cgu output formats. Test plan: PASS: Unit tests passing PASS: Build notificationservice-base image and test on both NIC types. Story: 2010270 Task: 46870 Signed-off-by: Cole Walker <cole.walker@windriver.com> Change-Id: Ib6716f38ea3c64a68e7162bb5d4f2154fa399a8c
108 lines
5.1 KiB
Python
108 lines
5.1 KiB
Python
#
|
|
# Copyright (c) 2022 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
import unittest
|
|
import mock
|
|
from trackingfunctionsdk.common.helpers.cgu_handler import CguHandler
|
|
import os
|
|
|
|
testpath = os.environ.get("TESTPATH", "")
|
|
|
|
class CguHandlerTests(unittest.TestCase):
|
|
testCguHandler = CguHandler(testpath + "test_input_files/ts2phc_valid.conf")
|
|
missingCguHandler = CguHandler("./no_such_file.conf")
|
|
invalidCguHandler = CguHandler(testpath + "test_input_files/ts2phc_invalid.conf")
|
|
|
|
def test_get_gnss_nmea_serialport(self):
|
|
# Test success path
|
|
self.testCguHandler.get_gnss_nmea_serialport_from_ts2phc_config()
|
|
self.assertEqual(self.testCguHandler.nmea_serialport, "/dev/ttyGNSS_1800_0")
|
|
|
|
# Test missing / incorrect config file path
|
|
with self.assertRaises(FileNotFoundError):
|
|
self.missingCguHandler.get_gnss_nmea_serialport_from_ts2phc_config()
|
|
|
|
# Test missing nmea_serialport in config
|
|
self.invalidCguHandler.get_gnss_nmea_serialport_from_ts2phc_config()
|
|
self.assertEqual(self.invalidCguHandler.nmea_serialport,
|
|
None)
|
|
|
|
def test_convert_nmea_serialport_to_pci_addr(self):
|
|
# Test success path
|
|
self.testCguHandler.get_gnss_nmea_serialport_from_ts2phc_config()
|
|
self.testCguHandler.convert_nmea_serialport_to_pci_addr(
|
|
testpath + "test_input_files/mock_kern.log")
|
|
self.assertEqual(self.testCguHandler.pci_addr, "0000:18:00.0")
|
|
|
|
# Test pci address not found
|
|
self.testCguHandler.nmea_serialport = "/dev/ttyGNSS_not_present"
|
|
self.testCguHandler.convert_nmea_serialport_to_pci_addr(
|
|
testpath + "test_input_files/mock_kern.log")
|
|
self.assertEqual(self.testCguHandler.pci_addr, None)
|
|
|
|
@mock.patch('trackingfunctionsdk.common.helpers.cgu_handler.os.path')
|
|
def test_get_cgu_path_from_pci_addr(self, mock_path):
|
|
# Setup mock
|
|
mock_path.exists.return_value = True
|
|
self.testCguHandler.get_gnss_nmea_serialport_from_ts2phc_config()
|
|
self.testCguHandler.convert_nmea_serialport_to_pci_addr(
|
|
testpath + "test_input_files/mock_kern.log")
|
|
self.testCguHandler.get_cgu_path_from_pci_addr()
|
|
self.assertEqual(self.testCguHandler.cgu_path, "/ice/0000:18:00.0/cgu")
|
|
|
|
mock_path.exists.return_value = False
|
|
with self.assertRaises(FileNotFoundError):
|
|
self.testCguHandler.get_cgu_path_from_pci_addr()
|
|
|
|
def test_cgu_output_to_dict_logan_beach(self):
|
|
reference_dict = {
|
|
"input": {
|
|
"CVL-SDP22": {"state": "invalid", "priority": {"EEC": "8", "PPS": "8"}},
|
|
"CVL-SDP20": {"state": "invalid", "priority": {"EEC": "15", "PPS": "3"}},
|
|
"C827_0-RCLKA": {"state": "invalid", "priority": {"EEC": "4", "PPS": "4"}},
|
|
"C827_0-RCLKB": {"state": "invalid", "priority": {"EEC": "5", "PPS": "5"}},
|
|
"C827_1-RCLKA": {"state": "invalid", "priority": {"EEC": "6", "PPS": "6"}},
|
|
"C827_1-RCLKB": {"state": "invalid", "priority": {"EEC": "7", "PPS": "7"}},
|
|
"SMA1": {"state": "invalid", "priority": {"EEC": "1", "PPS": "1"}},
|
|
"SMA2/U.FL2": {"state": "invalid", "priority": {"EEC": "2", "PPS": "2"}},
|
|
"GNSS-1PPS": {"state": "valid", "priority": {"EEC": "0", "PPS": "0"}},
|
|
},
|
|
"EEC DPLL": {"Current reference": "GNSS-1PPS", "Status": "locked_ho_acq"},
|
|
"PPS DPLL": {
|
|
"Current reference": "GNSS-1PPS",
|
|
"Status": "locked_ho_acq",
|
|
"Phase offset": "-86",
|
|
},
|
|
}
|
|
|
|
self.testCguHandler.cgu_path = testpath + "test_input_files/mock_cgu_output_logan_beach"
|
|
self.testCguHandler.read_cgu()
|
|
self.testCguHandler.cgu_output_to_dict()
|
|
self.assertDictEqual(self.testCguHandler.cgu_output_parsed, reference_dict)
|
|
|
|
def test_cgu_output_to_dict_westport_channel(self):
|
|
reference_dict = {
|
|
"input": {
|
|
"CVL-SDP22": {"state": "invalid", "priority": {"EEC": "8", "PPS": "8"}},
|
|
"CVL-SDP20": {"state": "invalid", "priority": {"EEC": "15", "PPS": "3"}},
|
|
"C827_0-RCLKA": {"state": "invalid", "priority": {"EEC": "4", "PPS": "4"}},
|
|
"C827_0-RCLKB": {"state": "invalid", "priority": {"EEC": "5", "PPS": "5"}},
|
|
"SMA1": {"state": "invalid", "priority": {"EEC": "1", "PPS": "1"}},
|
|
"SMA2/U.FL2": {"state": "invalid", "priority": {"EEC": "2", "PPS": "2"}},
|
|
"GNSS-1PPS": {"state": "valid", "priority": {"EEC": "0", "PPS": "0"}},
|
|
},
|
|
"EEC DPLL": {"Current reference": "GNSS-1PPS", "Status": "locked_ho_ack"},
|
|
"PPS DPLL": {
|
|
"Current reference": "GNSS-1PPS",
|
|
"Status": "locked_ho_ack",
|
|
"Phase offset": "295",
|
|
},
|
|
}
|
|
self.testCguHandler.cgu_path = testpath + "test_input_files/mock_cgu_output_westport_channel"
|
|
self.testCguHandler.read_cgu()
|
|
self.testCguHandler.cgu_output_to_dict()
|
|
self.assertDictEqual(self.testCguHandler.cgu_output_parsed, reference_dict)
|