1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.orekit.utils;
18
19 import org.junit.jupiter.api.Assertions;
20 import org.junit.jupiter.api.BeforeEach;
21 import org.junit.jupiter.api.Test;
22 import org.mockito.ArgumentMatchers;
23 import org.mockito.Mockito;
24 import org.orekit.Utils;
25 import org.orekit.errors.OrekitException;
26 import org.orekit.errors.OrekitMessages;
27 import org.orekit.frames.FramesFactory;
28 import org.orekit.time.AbsoluteDate;
29
30
31 public class AggregatedPVCoordinatesProviderTest {
32
33 private final PVCoordinatesProvider pv1 = Mockito.mock(PVCoordinatesProvider.class);
34
35 private final PVCoordinatesProvider pv2 = Mockito.mock(PVCoordinatesProvider.class);
36
37 private final PVCoordinatesProvider pv3 = Mockito.mock(PVCoordinatesProvider.class);
38
39 private final TimeStampedPVCoordinates pv = Mockito.mock(TimeStampedPVCoordinates.class);
40 private AbsoluteDate date1;
41 private AbsoluteDate date2;
42 private AbsoluteDate date3;
43 private AbsoluteDate date4;
44
45
46 @BeforeEach
47 public void setup() {
48 Utils.setDataRoot("regular-data");
49
50 date1 = AbsoluteDate.J2000_EPOCH;
51 date2 = date1.shiftedBy(86400);
52 date3 = date2.shiftedBy(86400);
53 date4 = date3.shiftedBy(86400);
54 }
55
56 @Test
57 public void invalidPVProvider() {
58 Assertions.assertThrows(OrekitException.class, () -> {
59 final PVCoordinatesProvider pvProv = new AggregatedPVCoordinatesProvider.InvalidPVProvider();
60 pvProv.getPVCoordinates(date1, FramesFactory.getGCRF());
61 });
62 }
63
64 @Test
65 public void nominalCase() {
66 final AggregatedPVCoordinatesProvider pvProv = new AggregatedPVCoordinatesProvider.Builder()
67 .addPVProviderAfter(date1, pv1, false)
68 .addPVProviderAfter(date2, pv2, false)
69 .addPVProviderAfter(date3, pv3, false)
70 .invalidAfter(date4)
71 .build();
72
73 Mockito.when(pv1.getPVCoordinates(ArgumentMatchers.any(), ArgumentMatchers.any())).thenReturn(pv);
74
75 Assertions.assertEquals(date1, pvProv.getMinDate());
76 Assertions.assertEquals(date4, pvProv.getMaxDate());
77
78
79 Assertions.assertSame(pv, pvProv.getPVCoordinates(date1, FramesFactory.getGCRF()));
80
81 Assertions.assertSame(pv, pvProv.getPVCoordinates(date1.shiftedBy(43200), FramesFactory.getGCRF()));
82
83 Mockito.verify(pv1, Mockito.times(2)).getPVCoordinates(ArgumentMatchers.any(),
84 ArgumentMatchers.eq(FramesFactory.getGCRF()));
85 Mockito.verifyNoMoreInteractions(pv1, pv2, pv3);
86 }
87
88 @Test
89 public void alwaysValid() {
90 final AggregatedPVCoordinatesProvider pvProv = new AggregatedPVCoordinatesProvider.Builder(pv1).build();
91
92 pvProv.getPVCoordinates(date1.shiftedBy(-1.), FramesFactory.getGCRF());
93 pvProv.getPVCoordinates(date1, FramesFactory.getGCRF());
94 pvProv.getPVCoordinates(date4, FramesFactory.getGCRF());
95
96 Assertions.assertEquals(AbsoluteDate.PAST_INFINITY, pvProv.getMinDate());
97 Assertions.assertEquals(AbsoluteDate.FUTURE_INFINITY, pvProv.getMaxDate());
98
99 Mockito.verify(pv1, Mockito.times(3)).getPVCoordinates(ArgumentMatchers.any(),
100 ArgumentMatchers.eq(FramesFactory.getGCRF()));
101 }
102
103 @Test
104 public void alwaysValidAfter() {
105 final AggregatedPVCoordinatesProvider pvProv = new AggregatedPVCoordinatesProvider.Builder(pv1)
106 .invalidBefore(date1)
107 .addPVProviderBefore(date2, pv2, false)
108 .build();
109
110 pvProv.getPVCoordinates(date1, FramesFactory.getGCRF());
111 pvProv.getPVCoordinates(date3, FramesFactory.getGCRF());
112
113 try {
114 pvProv.getPVCoordinates(date1.shiftedBy(-1.), FramesFactory.getGCRF());
115 Assertions.fail("expected exception not thrown");
116 } catch (final OrekitException ex) {
117 Assertions.assertEquals(OrekitMessages.OUT_OF_RANGE_DATE, ex.getSpecifier());
118 }
119
120 Assertions.assertEquals(date1, pvProv.getMinDate());
121 Assertions.assertEquals(AbsoluteDate.FUTURE_INFINITY, pvProv.getMaxDate());
122
123 Mockito.verify(pv1).getPVCoordinates(ArgumentMatchers.eq(date3),
124 ArgumentMatchers.eq(FramesFactory.getGCRF()));
125 Mockito.verify(pv2).getPVCoordinates(ArgumentMatchers.eq(date1),
126 ArgumentMatchers.eq(FramesFactory.getGCRF()));
127 }
128
129 @Test
130 public void invalidBefore() {
131 Assertions.assertThrows(OrekitException.class, () -> {
132 final PVCoordinatesProvider pvProv = new AggregatedPVCoordinatesProvider.Builder()
133 .addPVProviderAfter(date1, pv1, false)
134 .addPVProviderAfter(date2, pv2, false)
135 .addPVProviderAfter(date3, pv3, false)
136 .invalidAfter(date4)
137 .build();
138 pvProv.getPVCoordinates(date1.shiftedBy(-1.), FramesFactory.getGCRF());
139 });
140 }
141
142 @Test
143 public void invalidAfter() {
144 Assertions.assertThrows(OrekitException.class, () -> {
145 final PVCoordinatesProvider pvProv = new AggregatedPVCoordinatesProvider.Builder()
146 .addPVProviderAfter(date1, pv1, false)
147 .addPVProviderAfter(date2, pv2, false)
148 .addPVProviderAfter(date3, pv3, false)
149 .invalidAfter(date4)
150 .build();
151 pvProv.getPVCoordinates(date4.shiftedBy(1.), FramesFactory.getGCRF());
152 });
153 }
154 }