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