1import pytest
  2#pytest.skip("Skip RAPID decoding as it was not fixed by Solenix in this release", allow_module_level=True)
  3import os
  4import io
  5from pathlib import Path
  6
  7try:
  8    os.environ["CHART_SETTINGS_MODULE"]
  9except KeyError:
 10    os.environ["CHART_SETTINGS_MODULE"] = "chartepssg.project_settings"
 11from chart.project import settings
 12settings.SOURCES = Path(Path(__file__).parent) / "testdata" / "sources.xml"
 13from chart.products.rapidfile.rapid_io import gen_rapid_from_raw
 14
 15
 16@pytest.fixture
 17def emptyfile(tmpdir):
 18    f = Path(tmpdir) / "empty"
 19    f.touch()
 20    return f
 21
 22
 23def test_tc_parsing_empty(emptyfile):
 24    with pytest.raises(StopIteration):
 25        next(gen_rapid_from_raw(emptyfile.open("rb").read()))
 26
 27
 28@pytest.fixture
 29def one_tc_packet_f():
 30    f = io.BytesIO(
 31        b"\x00\x00\x02q\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05"
 32        b"\xb9VF.H\xb7\x00\x00\x00\x00\x00\x00\x029\x00\x00\x00\x00\x1a\xcf\xfc\x1d\x00\x00\x00\x00\x00\x00\x00\x00"
 33        b"\x00\x00\x01\x00`\x08F\x87\x00\x04\xd8\xf7`\x08F\x87\x00\x04\xec\x7f\x00\x00\x00\x00\x00\x03\x00\x1c\x00\x00"
 34        b"\x029%0\x00\x01\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00\x00\x00\x97\x00\x05\x00\x01\x00\x00\x00\x01\x00\x00"
 35        b"`\x08F\x87\x00\x06\xb0|`\x08F\x87\x00\x06\xc4\x04`\x08F\x87\x00\x08\xf8\x1a\x00\x00\x00\x01\x00\x01"
 36        b"\x01\x96\x00\xbc\x02I\x11\x01\t\x01\x00\x00\x01 ASC17000\x00PrfrmCo"
 37        b"nnectTest\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
 38        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
 39        b"\x00\x00\x00\x00\x00\x00\x00\x7f\x00\x00\x00\x01\x00\x00\xff\xfb\x00\x08\x00\x00\x0f\xff\x00D\x00\x00\x029\x00\x00"
 40        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x01\x00\x01\x01\x00\x01\x02\t\x00\x04\x00\x04\x00\x04\x00\x04\x00\x00\x00\x04"
 41        b"\x00\x00\x00\x00\x00\x00\x00\x04\x00@\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
 42        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0f\x00\x00\x00\x0f\x00\x00\x00;"
 43        b"\x00\x00\x00\x00'\x0f\x00\x00\x00\x00\x00\x7f\x06\x0f\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
 44        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00"
 45        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0b\x00\x0c\x00\x00\x00\x00\x00"
 46        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
 47        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
 48        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
 49        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
 50        b"\x00\x00\x00Q\x00\x07\x00\x03\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
 51        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x18\xbc\xc2I\x00\x05\x19\x11\x01\x00?v"
 52    )
 53    return f
 54
 55
 56def test_tc_one_tc_packet_len(one_tc_packet_f):
 57    output = len([x for x in gen_rapid_from_raw(one_tc_packet_f.read())])
 58    expected = 1
 59    assert expected == output
 60
 61
 62@pytest.mark.parametrize(
 63    "expected,field",
 64    [
 65        ("ASC17000", "name"),
 66        ("PrfrmConnectTest", "description"),
 67        (17, "service"),
 68        (1, "subservice"),
 69        (188, "apid"),
 70    ],
 71)
 72def test_tc_one_tc_packet_packet_def(expected, field, one_tc_packet_f):
 73    packet_def = next(gen_rapid_from_raw(one_tc_packet_f.read())).packet_def
 74    assert expected == getattr(packet_def, field)
 75
 76
 77@pytest.mark.parametrize(
 78    "expected,field",
 79    [
 80        (0, "version_number"),
 81        (1, "type_flag"),
 82        (1, "dfh_flag"),
 83        (188, "apid"),
 84        (11, "pid"),
 85        (12, "cat"),
 86        (3, "grouping_flags"),
 87        (585, "sequence_count"),
 88        (12, "length"),
 89        (5, "dflength"),
 90        (17, "service"),
 91        (1, "subservice"),
 92    ],
 93)
 94def test_tc_one_tc_packet_ccsds(expected, field, one_tc_packet_f):
 95    ccsds = next(gen_rapid_from_raw(one_tc_packet_f.read())).ccsds
 96    assert expected == getattr(ccsds, field)
 97
 98
 99@pytest.fixture
100def one_tm_packet_f():
101    # One TM Rapid packet
102    f = io.BytesIO(
103        b"\x00\x00\x03\xf2\x00\x00\x00\x00\x00\x00\x00d\x00\x00\x00\x00"
104        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x05\xb9-"
105        b"\xb7\xab\x93\x18\x00\x00\x00\x00\x00\x00\x03\xba"
106        b"\x00\x00\x00\x00\x1a\xcf\xfc\x1d\x00\x00\x00\x00"
107        b"\x00\x00\x00\x00\x00\x00\x00\x01`\x05\x9e\x19\x00\n\x9a\xd8"
108        b"`\x05\x9e\x1f\x00\x01\xa3\xa2\x00\x00\x00\x01\x00\x03\x00\x1c"
109        b"\x00\x00\x03\xba\x156\x00\x01\x00\x00\x00\x00\x00\x00Q\x08"
110        b"\x00\x00\x00\x00\x00\x97\x00\x05\x00\x01\x00\x00"
111        b"\x00\x01\x00\x00\x00\x00\x00\x00\xff\xff\xff\xff"
112        b"\xff\x10\x00\xa4\x0c\x92\x03\x19\x08\xa4\xcc\x92\x03g\x10\x03"
113        b"\x19\x00\x00\x00\x04\x1c\x01\x01K\x05\x00\x00\x00\x02\x00\x00"
114        b"\x00\x00\x00\x00\x00:\x00\x00\x00\x05\x00\x00\x005\x00\x00"
115        b"\x00L\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00#\x00\x00"
116        b"\x00\x00\x00\x00I\xd1\x00\x00\x94@\x00\x00\x00\x01\x00\x00"
117        b"\x00\x01\x00\x01\x00\x00\x00@\x00\x00\x01\xff,\x00\x01\xef"
118        b"\xd0\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
119        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00W"
120        b"\xe4\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
121        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
122        b"\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00"
123        b"\x00\x00\x00\x89d\x01\x00\x00\x02\x11\x00\x00\x00\x00\x00\x00"
124        b"\x00\x00\x00\x00\x03\xc0\x00\x00\x00\x00\x00\x00"
125        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
126        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
127        b"\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
128        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
129        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
130        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
131        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
132        b"\x00\x00\x00\x00\x00\x00\x00\x00\x04\x1c\x00\x00"
133        b"\x00\x00\x00\x00\x00\x00\x00\x00\x15\x00\x00\x00"
134        b"\x00\x00\x00\x00\xbc\x00\x00\x01+\x00\xff\xff\xff\xff\xff\xff"
135        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
136        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
137        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
138        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
139        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
140        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
141        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
142        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
143        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
144        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
145        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
146        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
147        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
148        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
149        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
150        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
151        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
152        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
153        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
154        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"
155        b"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00"
156        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
157        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
158        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'\x00\x00"
159        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
160        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
161        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
162        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
163        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
164        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
165        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
166        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
167        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
168        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
169        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
170        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
171        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
172        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
173        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
174        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
175        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
176        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
177        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
178        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
179        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
180        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
181        b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
182        b"\x00\x00\x00\x00O\xc1",
183    )
184    return f
185
186
187@pytest.mark.parametrize(
188    "expected,field",
189    [
190        ("CSY_HK_20744", "name"),
191        (3, "service"),
192        (25, "subservice"),
193        (164, "apid"),
194        (20744, "spid"),
195        (2, "param1"),
196        (0, "param2"),
197    ],
198)
199def test_tm_one_tm_packet_packet_def(expected, field, one_tm_packet_f):
200    packet_def = next(gen_rapid_from_raw(one_tm_packet_f.read())).packet_def
201    assert expected == getattr(packet_def, field)
202
203
204@pytest.mark.parametrize(
205    "expected,field",
206    [
207        (0, "version_number"),
208        (0, "type_flag"),
209        (1, "dfh_flag"),
210        (164, "apid"),
211        (10, "pid"),
212        (4, "cat"),
213        (3, "grouping_flags"),
214        (3218, "sequence_count"),
215        (871, "dflength"),
216        (878, "length"),
217        (3, "service"),
218        (25, "subservice"),
219        ((1052, 257, 75), "obt"),
220        (5, "time_status"),
221        (2, "param1"),
222        (0, "param2"),
223    ],
224)
225def test_tm_one_tm_packet_ccsds(expected, field, one_tm_packet_f):
226    ccsds = next(gen_rapid_from_raw(one_tm_packet_f.read())).ccsds
227    print(type(ccsds))
228    ccsds.show_header()
229    assert expected == getattr(ccsds, field)