1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
|
#!/usr/bin/env python3
#
# Copyright 2020 Ettus Research, a National Instruments Brand
#
# SPDX-License-Identifier: GPL-3.0-or-later
#
"""
Unit test for libpyuhd.chdr (CHDR Parsing API)
"""
import unittest
from uhd import chdr
from chdr_resource import hardcoded_packets
from chdr_resource import rfnoc_packets_data
from chdr_resource import rfnoc_packets_ctrl_mgmt
# unittest doesn't support parameterized tests natively,
# rather than add another dependency just for testing, we use this
class parameterize:
"""Decorate a class with this. It deletes the method named by
func_name and adds methods for every test case, appending _{name}
to the name of the function
"""
def __init__(self, func_name, names, cases):
self.func_name = func_name
self.cases = cases
self.names = names
def __call__(self, cls):
func = getattr(cls, self.func_name)
# First remove the function
delattr(cls, self.func_name)
for case, name in zip(self.cases, self.names):
# Add a new test function for every case
def new_func(self, this_case=case):
return func(self, *this_case)
setattr(cls, self.func_name + "_" + name, new_func)
return cls
@parameterize("test_serialize_deserialize_eq", hardcoded_packets.names, hardcoded_packets.packets)
class CHDRParseTest(unittest.TestCase):
""" Test Python-wrapped CHDR Parser classes """
def test_parse_no_errors(self):
"""Parse every packet in the trace we have.
This test is just looking for errors
"""
packets = [packet_data for peer in [
rfnoc_packets_ctrl_mgmt.peer0,
rfnoc_packets_ctrl_mgmt.peer1,
rfnoc_packets_data.peer0,
rfnoc_packets_data.peer1
] for packet_data in peer]
for packet_data in packets:
_packet = chdr.ChdrPacket.deserialize(
chdr.ChdrWidth.W64, packet_data)
def test_serialize_deserialize_eq(self, packet, data):
"""This test serializes and then deserializes a few packets to
make sure that they survive a round trip without changing
"""
generated_data = bytes(packet.serialize())
self.assertEqual(generated_data, data)
generated_packet = chdr.ChdrPacket.deserialize(
chdr.ChdrWidth.W64, data)
generated_data = bytes(generated_packet.serialize())
self.assertEqual(generated_data, data)
|