Coverage for test/d7a/system_files/test_engineering_mode.py: 100%
58 statements
« prev ^ index » next coverage.py v7.5.0, created at 2024-05-24 08:03 +0200
« prev ^ index » next coverage.py v7.5.0, created at 2024-05-24 08:03 +0200
1#
2# Copyright (c) 2015-2021 University of Antwerp, Aloxy NV.
3#
4# This file is part of pyd7a.
5# See https://github.com/Sub-IoT/pyd7a for further info.
6#
7# Licensed under the Apache License, Version 2.0 (the "License");
8# you may not use this file except in compliance with the License.
9# You may obtain a copy of the License at
10#
11# http://www.apache.org/licenses/LICENSE-2.0
12#
13# Unless required by applicable law or agreed to in writing, software
14# distributed under the License is distributed on an "AS IS" BASIS,
15# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16# See the License for the specific language governing permissions and
17# limitations under the License.
18#
19import unittest
21from bitstring import ConstBitStream
23from d7a.system_files.engineering_mode import EngineeringModeFile, EngineeringModeMode
24from d7a.phy.channel_header import ChannelHeader, ChannelCoding, ChannelClass, ChannelBand
25from d7a.phy.channel_id import ChannelID
28class TestEngineeringModeFile(unittest.TestCase):
30 def test_default_constructor(self):
31 c = EngineeringModeFile()
32 self.assertEqual(c.mode, EngineeringModeMode.ENGINEERING_MODE_MODE_OFF)
33 self.assertEqual(c.flags, 0)
34 self.assertEqual(c.timeout, 0)
35 self.assertEqual(c.channel_id.channel_header, ChannelHeader(ChannelCoding.PN9, ChannelClass.LO_RATE, ChannelBand.BAND_868))
36 self.assertEqual(c.channel_id.channel_index, 0)
37 self.assertEqual(c.eirp, 0)
39 def test_parsing(self):
40 file_contents = [
41 1, # Engineeringmode mode
42 0x01, # flags
43 0x02, # timeout
44 0x4a, 0x00, 0x09, # ChannelID
45 0x04, # eirp
46 ]
48 config = EngineeringModeFile.parse(ConstBitStream(bytes=file_contents))
49 self.assertEqual(config.mode, EngineeringModeMode.ENGINEERING_MODE_MODE_CONT_TX)
50 self.assertEqual(config.flags, 1)
51 self.assertEqual(config.timeout, 2)
52 self.assertEqual(config.channel_id.channel_header.channel_coding, ChannelCoding.FEC_PN9)
53 self.assertEqual(config.channel_id.channel_header, ChannelHeader(ChannelCoding.FEC_PN9, ChannelClass.NORMAL_RATE, ChannelBand.BAND_915))
54 self.assertEqual(config.channel_id.channel_index, 9)
55 self.assertEqual(config.eirp, 4)
57 def test_byte_generation(self):
58 bytes = bytearray(EngineeringModeFile())
59 self.assertEqual(len(bytes), 9)
60 self.assertEqual(bytes[0], 0)
61 self.assertEqual(bytes[1], 0)
62 self.assertEqual(bytes[2], 0)
63 self.assertEqual(bytes[3], 0x30)
64 self.assertEqual(bytes[4], 0)
65 self.assertEqual(bytes[5], 0)
66 self.assertEqual(bytes[6], 0)
67 self.assertEqual(bytes[7], 0)
68 self.assertEqual(bytes[8], 0)
70 bytes = bytearray(EngineeringModeFile(mode=EngineeringModeMode.ENGINEERING_MODE_MODE_PER_RX, flags=9, timeout=8,
71 channel_id=ChannelID(channel_header=ChannelHeader(ChannelCoding.CW,ChannelClass.HI_RATE,ChannelBand.BAND_868),
72 channel_index=7),
73 eirp=6))
74 self.assertEqual(len(bytes), 9)
75 self.assertEqual(bytes[0], 3)
76 self.assertEqual(bytes[1], 9)
77 self.assertEqual(bytes[2], 8)
78 self.assertEqual(bytes[3], 0x3F)
79 self.assertEqual(bytes[4], 0)
80 self.assertEqual(bytes[5], 7)
81 self.assertEqual(bytes[6], 6)
82 self.assertEqual(bytes[7], 0)
83 self.assertEqual(bytes[8], 0)
85 bytes = bytearray(EngineeringModeFile(mode=EngineeringModeMode.ENGINEERING_MODE_MODE_PER_RX, flags=9, timeout=8,
86 channel_id=ChannelID(
87 channel_header=ChannelHeader(ChannelCoding.CW, ChannelClass.HI_RATE,
88 ChannelBand.BAND_868),
89 channel_index=7),
90 eirp=-6))
92 self.assertEqual(len(bytes), 9)
93 self.assertEqual(bytes[0], 3)
94 self.assertEqual(bytes[1], 9)
95 self.assertEqual(bytes[2], 8)
96 self.assertEqual(bytes[3], 0x3F)
97 self.assertEqual(bytes[4], 0)
98 self.assertEqual(bytes[5], 7)
99 self.assertEqual(bytes[6], 0xFA)
100 self.assertEqual(bytes[7], 0)
101 self.assertEqual(bytes[8], 0)