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.SsrIgm07;
26 import org.orekit.gnss.metric.messages.ssr.igm.SsrIgm07Data;
27 import org.orekit.gnss.metric.parser.ByteArrayEncodedMessage;
28 import org.orekit.gnss.metric.parser.EncodedMessage;
29 import org.orekit.gnss.metric.parser.IgsSsrMessagesParser;
30
31 import java.util.ArrayList;
32
33 public class SsrIgm07Test {
34
35 private double eps = 1.0e-13;
36
37 @Test
38 public void testPerfectValueGPS() {
39
40 final String m = "010000100100" +
41 "001" +
42 "00011011" +
43 "01111110011000111111" +
44 "0110" +
45 "0" +
46 "0111" +
47 "0000111101101111" +
48 "0001" +
49 "000010" +
50 "000001" +
51 "010111" +
52 "001100" +
53 "11110000";
54
55 final EncodedMessage message = new ByteArrayEncodedMessage(byteArrayFromBinary(m));
56 message.start();
57
58 ArrayList<Integer> messages = new ArrayList<>();
59 messages.add(27);
60
61 final SsrIgm07 igm07 = (SsrIgm07) new IgsSsrMessagesParser(messages, DataContext.getDefault().getTimeScales()).
62 parse(message, false);
63
64
65 Assertions.assertEquals(2, igm07.getData().size());
66 Assertions.assertEquals(SatelliteSystem.GPS, igm07.getSatelliteSystem());
67
68
69 Assertions.assertEquals(27, igm07.getTypeCode());
70 Assertions.assertEquals(517695.0, igm07.getHeader().getSsrEpoch1s(), eps);
71 Assertions.assertEquals(60.0, igm07.getHeader().getSsrUpdateInterval(), eps);
72 Assertions.assertEquals(0, igm07.getHeader().getSsrMultipleMessageIndicator());
73 Assertions.assertEquals(7, igm07.getHeader().getIodSsr());
74 Assertions.assertEquals(3951, igm07.getHeader().getSsrProviderId());
75 Assertions.assertEquals(1, igm07.getHeader().getSsrSolutionId());
76 Assertions.assertEquals(2, igm07.getHeader().getNumberOfSatellites());
77
78
79 final SsrIgm07Data g1 = igm07.getSsrIgm07Data().get("G01").get(0);
80 Assertions.assertEquals(1, g1.getSatelliteID());
81 Assertions.assertEquals(23.0, g1.getSsrUra(), eps);
82
83
84 final SsrIgm07Data g12 = igm07.getSsrIgm07Data().get("G12").get(0);
85 Assertions.assertEquals(12, g12.getSatelliteID());
86 Assertions.assertEquals(60.0, g12.getSsrUra(), eps);
87
88 }
89
90 @Test
91 public void testPerfectValueGalileo() {
92
93 final String m = "010000100100" +
94 "001" +
95 "01000011" +
96 "01111110011000111111" +
97 "1101" +
98 "0" +
99 "0111" +
100 "0000111101101111" +
101 "0001" +
102 "000010" +
103 "000001" +
104 "010111" +
105 "001100" +
106 "11110000";
107
108 final EncodedMessage message = new ByteArrayEncodedMessage(byteArrayFromBinary(m));
109 message.start();
110
111 ArrayList<Integer> messages = new ArrayList<>();
112 messages.add(67);
113
114 final SsrIgm07 igm07 = (SsrIgm07) new IgsSsrMessagesParser(messages, DataContext.getDefault().getTimeScales()).
115 parse(message, false);
116
117
118 Assertions.assertEquals(2, igm07.getData().size());
119 Assertions.assertEquals(SatelliteSystem.GALILEO, igm07.getSatelliteSystem());
120
121
122 Assertions.assertEquals(67, igm07.getTypeCode());
123 Assertions.assertEquals(517695.0, igm07.getHeader().getSsrEpoch1s(), eps);
124 Assertions.assertEquals(3600.0, igm07.getHeader().getSsrUpdateInterval(), eps);
125 Assertions.assertEquals(0, igm07.getHeader().getSsrMultipleMessageIndicator());
126 Assertions.assertEquals(7, igm07.getHeader().getIodSsr());
127 Assertions.assertEquals(3951, igm07.getHeader().getSsrProviderId());
128 Assertions.assertEquals(1, igm07.getHeader().getSsrSolutionId());
129 Assertions.assertEquals(2, igm07.getHeader().getNumberOfSatellites());
130
131
132 final SsrIgm07Data e01 = igm07.getSsrIgm07Data().get("E01").get(0);
133 Assertions.assertEquals(1, e01.getSatelliteID());
134 Assertions.assertEquals(23.0, e01.getSsrUra(), eps);
135
136
137 final SsrIgm07Data e12 = igm07.getSsrIgm07Data().get("E12").get(0);
138 Assertions.assertEquals(12, e12.getSatelliteID());
139 Assertions.assertEquals(60.0, e12.getSsrUra(), eps);
140
141 }
142
143 @Test
144 public void testNullMessage() {
145
146 final String m = "010000100100" +
147 "001" +
148 "00011011" +
149 "01111110011000111111" +
150 "0101" +
151 "0" +
152 "0111" +
153 "0000111101101111" +
154 "0001" +
155 "000010" +
156 "000001" +
157 "01111111" +
158 "001100" +
159 "1111000000";
160
161 final EncodedMessage message = new ByteArrayEncodedMessage(byteArrayFromBinary(m));
162 message.start();
163
164 ArrayList<Integer> messages = new ArrayList<>();
165 messages.add(9999999);
166
167 final SsrIgm07 igm07 = (SsrIgm07) new IgsSsrMessagesParser(messages, DataContext.getDefault().getTimeScales()).
168 parse(message, false);
169
170 Assertions.assertNull(igm07);
171 }
172
173 @Test
174 public void testEmptyMessage() {
175 try {
176 final byte[] array = new byte[0];
177 final EncodedMessage emptyMessage = new ByteArrayEncodedMessage(array);
178 new IgsSsrMessagesParser(new ArrayList<>(), DataContext.getDefault().getTimeScales()).
179 parse(emptyMessage, false);
180 Assertions.fail("an exception should have been thrown");
181 } catch (OrekitException oe) {
182 Assertions.assertEquals(OrekitMessages.END_OF_ENCODED_MESSAGE, oe.getSpecifier());
183 }
184
185 }
186
187 private byte[] byteArrayFromBinary(String radix2Value) {
188 final byte[] array = new byte[radix2Value.length() / 8];
189 for (int i = 0; i < array.length; ++i) {
190 for (int j = 0; j < 8; ++j) {
191 if (radix2Value.charAt(8 * i + j) != '0') {
192 array[i] |= 0x1 << (7 - j);
193 }
194 }
195 }
196 return array;
197 }
198
199 }