
During an upgrade, or due a missconfiguration the ts2phc NMEA port can be configured in the old name format, tty_GNSS_xxxx_x. Handling the old name format to avoid crashes an ptp-notification missbehavior. A new unit test case was created to cover this case. Test plan: PASS: Verify helm chart and container build PASS: Verify ptp-notification deployment using old configuration. PASS: Verify ptp-notification deployment and basic operation using new configuration. PASS: Verify unit tests. Story: 2011056 Task: 51051 Change-Id: I5bc28cb04241684de52834e9819e8401677f05dd Signed-off-by: Andre Mauricio Zelak <andre.zelak@windriver.com>
118 lines
5.8 KiB
Python
118 lines
5.8 KiB
Python
#
|
|
# Copyright (c) 2022-2024 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")
|
|
oldConfigCguHandler = CguHandler(testpath + "test_input_files/ts2phc_old.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/gnss0")
|
|
|
|
# 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()
|
|
with mock.patch('trackingfunctionsdk.common.helpers.cgu_handler.open',
|
|
new_callable=mock.mock_open,
|
|
read_data='PCI_SLOT_NAME=0000:18:00.0') as mock_open:
|
|
self.testCguHandler.convert_nmea_serialport_to_pci_addr()
|
|
mock_open.assert_called_with('/sys/class/gnss/gnss0/device/uevent', 'r')
|
|
self.assertEqual(self.testCguHandler.pci_addr, "0000:18:00.0")
|
|
|
|
# Test pci address not found
|
|
self.testCguHandler.nmea_serialport = "/dev/not_present"
|
|
self.testCguHandler.convert_nmea_serialport_to_pci_addr()
|
|
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()
|
|
with mock.patch('trackingfunctionsdk.common.helpers.cgu_handler.open',
|
|
new_callable=mock.mock_open,
|
|
read_data='PCI_SLOT_NAME=0000:18:00.0') as mock_open:
|
|
self.testCguHandler.convert_nmea_serialport_to_pci_addr()
|
|
self.testCguHandler.get_cgu_path_from_pci_addr()
|
|
self.assertEqual(self.testCguHandler.cgu_path, "/ice/ice/0000:18:00.0/cgu")
|
|
|
|
self.oldConfigCguHandler.get_gnss_nmea_serialport_from_ts2phc_config()
|
|
self.oldConfigCguHandler.convert_nmea_serialport_to_pci_addr()
|
|
self.oldConfigCguHandler.get_cgu_path_from_pci_addr()
|
|
self.assertEqual(self.oldConfigCguHandler.cgu_path, None)
|
|
|
|
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)
|