1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.gnss.metric.messages.ssr;
18
19 import org.junit.jupiter.api.Assertions;
20 import org.junit.jupiter.api.Test;
21 import org.orekit.data.DataContext;
22 import org.orekit.errors.OrekitException;
23 import org.orekit.errors.OrekitMessages;
24 import org.orekit.gnss.SatelliteSystem;
25 import org.orekit.gnss.metric.messages.ssr.igm.SsrIgm01;
26 import org.orekit.gnss.metric.messages.ssr.igm.SsrIgm01Data;
27 import org.orekit.gnss.metric.parser.ByteArrayEncodedMessage;
28 import org.orekit.gnss.metric.parser.EncodedMessage;
29 import org.orekit.gnss.metric.parser.IgsSsrDataField;
30 import org.orekit.gnss.metric.parser.IgsSsrMessagesParser;
31
32 import java.util.ArrayList;
33
34
35 public class SsrIgm01Test {
36
37 private final double eps = 1.0e-13;
38
39 @Test
40 public void testPerfectValueGPS() {
41
42 final String m = "010000100100" +
43 "001" +
44 "00010101" +
45 "01111110011000111111" +
46 "0010" +
47 "0" +
48 "0111" +
49 "0000111101101111" +
50 "0001" +
51 "0" +
52 "000001" +
53 "001100" +
54 "10000100" +
55 "0000101011111101111111" +
56 "01001010111111011111" +
57 "01001010111111011111" +
58 "000010101111110111111" +
59 "0100101011111101111" +
60 "010010101111110111100";
61
62 final EncodedMessage message = new ByteArrayEncodedMessage(byteArrayFromBinary(m));
63 message.start();
64
65 ArrayList<Integer> messages = new ArrayList<>();
66 messages.add(21);
67
68 final SsrIgm01 igm01 = (SsrIgm01) new IgsSsrMessagesParser(messages, DataContext.getDefault().getTimeScales()).
69 parse(message, false);
70
71
72 Assertions.assertEquals(1, igm01.getData().size());
73 Assertions.assertEquals(SatelliteSystem.GPS, igm01.getSatelliteSystem());
74
75
76 Assertions.assertEquals(21, igm01.getTypeCode());
77 Assertions.assertEquals(517695.0, igm01.getHeader().getSsrEpoch1s(), eps);
78 Assertions.assertEquals(5.0, igm01.getHeader().getSsrUpdateInterval(), eps);
79 Assertions.assertEquals(0, igm01.getHeader().getSsrMultipleMessageIndicator());
80 Assertions.assertEquals(7, igm01.getHeader().getIodSsr());
81 Assertions.assertEquals(3951, igm01.getHeader().getSsrProviderId());
82 Assertions.assertEquals(1, igm01.getHeader().getSsrSolutionId());
83 Assertions.assertEquals(0, igm01.getHeader().getCrsIndicator());
84 Assertions.assertEquals(1, igm01.getHeader().getNumberOfSatellites());
85
86
87 final SsrIgm01Data g12 = igm01.getSsrIgm01Data().get("G12").get(0);
88 Assertions.assertEquals(12, g12.getSatelliteID());
89 Assertions.assertEquals(132, g12.getGnssIod());
90 Assertions.assertEquals(18.0095, g12.getOrbitCorrection().getDeltaOrbitRadial(), eps);
91 Assertions.assertEquals(122.8668, g12.getOrbitCorrection().getDeltaOrbitAlongTrack(), eps);
92 Assertions.assertEquals(122.8668, g12.getOrbitCorrection().getDeltaOrbitCrossTrack(), eps);
93 Assertions.assertEquals(0.090047, g12.getOrbitCorrection().getDotOrbitDeltaRadial(), eps);
94 Assertions.assertEquals(0.614332, g12.getOrbitCorrection().getDotOrbitDeltaAlongTrack(), eps);
95 Assertions.assertEquals(0.614332, g12.getOrbitCorrection().getDotOrbitDeltaCrossTrack(), eps);
96
97 }
98
99 @Test
100 public void testPerfectValueGalileo() {
101
102 final String m = "010000100100" +
103 "001" +
104 "00111101" +
105 "01111110011000111111" +
106 "0111" +
107 "0" +
108 "0111" +
109 "0000111101101111" +
110 "0001" +
111 "0" +
112 "000001" +
113 "000001" +
114 "10000100" +
115 "0000101011111101111111" +
116 "01001010111111011111" +
117 "01001010111111011111" +
118 "000010101111110111111" +
119 "0100101011111101111" +
120 "010010101111110111100";
121
122 final EncodedMessage message = new ByteArrayEncodedMessage(byteArrayFromBinary(m));
123 message.start();
124
125 ArrayList<Integer> messages = new ArrayList<>();
126 messages.add(0);
127
128 final SsrIgm01 igm01 = (SsrIgm01) new IgsSsrMessagesParser(messages, DataContext.getDefault().getTimeScales()).
129 parse(message, false);
130
131
132 Assertions.assertEquals(1, igm01.getData().size());
133 Assertions.assertEquals(SatelliteSystem.GALILEO, igm01.getSatelliteSystem());
134
135
136 Assertions.assertEquals(61, igm01.getTypeCode());
137 Assertions.assertEquals(517695.0, igm01.getHeader().getSsrEpoch1s(), eps);
138 Assertions.assertEquals(120.0, igm01.getHeader().getSsrUpdateInterval(), eps);
139 Assertions.assertEquals(0, igm01.getHeader().getSsrMultipleMessageIndicator());
140 Assertions.assertEquals(7, igm01.getHeader().getIodSsr());
141 Assertions.assertEquals(3951, igm01.getHeader().getSsrProviderId());
142 Assertions.assertEquals(1, igm01.getHeader().getSsrSolutionId());
143 Assertions.assertEquals(0, igm01.getHeader().getCrsIndicator());
144 Assertions.assertEquals(1, igm01.getHeader().getNumberOfSatellites());
145
146
147 final SsrIgm01Data e01 = igm01.getSsrIgm01Data().get("E01").get(0);
148 Assertions.assertEquals(1, e01.getSatelliteID());
149 Assertions.assertEquals(132, e01.getGnssIod());
150 Assertions.assertEquals(18.0095, e01.getOrbitCorrection().getDeltaOrbitRadial(), eps);
151 Assertions.assertEquals(122.8668, e01.getOrbitCorrection().getDeltaOrbitAlongTrack(), eps);
152 Assertions.assertEquals(122.8668, e01.getOrbitCorrection().getDeltaOrbitCrossTrack(), eps);
153 Assertions.assertEquals(0.090047, e01.getOrbitCorrection().getDotOrbitDeltaRadial(), eps);
154 Assertions.assertEquals(0.614332, e01.getOrbitCorrection().getDotOrbitDeltaAlongTrack(), eps);
155 Assertions.assertEquals(0.614332, e01.getOrbitCorrection().getDotOrbitDeltaCrossTrack(), eps);
156
157 }
158
159 @Test
160 public void testNullMessage() {
161 final String m = "010000100100" +
162 "001" +
163 "11111111" +
164 "01111110011000111111" +
165 "0101" +
166 "0" +
167 "0111" +
168 "0000111101101111" +
169 "0001" +
170 "0" +
171 "000001" +
172 "001100" +
173 "10000100" +
174 "0000101011111101111111" +
175 "01001010111111011111" +
176 "01001010111111011111" +
177 "000010101111110111111" +
178 "0100101011111101111" +
179 "010010101111110111100";
180
181 final EncodedMessage message = new ByteArrayEncodedMessage(byteArrayFromBinary(m));
182 message.start();
183
184 ArrayList<Integer> messages = new ArrayList<>();
185 messages.add(9999999);
186
187 final SsrIgm01 igm01 = (SsrIgm01) new IgsSsrMessagesParser(messages, DataContext.getDefault().getTimeScales()).
188 parse(message, true);
189
190 Assertions.assertNull(igm01);
191 }
192
193 @Test
194 public void testEmptyMessage() {
195 try {
196 final byte[] array = new byte[0];
197 final EncodedMessage emptyMessage = new ByteArrayEncodedMessage(array);
198 new IgsSsrMessagesParser(new ArrayList<>(), DataContext.getDefault().getTimeScales()).
199 parse(emptyMessage, false);
200 Assertions.fail("an exception should have been thrown");
201 } catch (OrekitException oe) {
202 Assertions.assertEquals(OrekitMessages.END_OF_ENCODED_MESSAGE, oe.getSpecifier());
203 }
204
205 }
206
207 @Test
208 public void testDefaultSsrUpdateInterval() {
209 final EncodedMessage message = new ByteArrayEncodedMessage(byteArrayFromBinary("1111111111111111"));
210 Assertions.assertEquals(10800, IgsSsrDataField.IDF004.intValue(message));
211 }
212
213 private byte[] byteArrayFromBinary(String radix2Value) {
214 final byte[] array = new byte[radix2Value.length() / 8];
215 for (int i = 0; i < array.length; ++i) {
216 for (int j = 0; j < 8; ++j) {
217 if (radix2Value.charAt(8 * i + j) != '0') {
218 array[i] |= 0x1 << (7 - j);
219 }
220 }
221 }
222 return array;
223 }
224
225 }