/
RadarCollectorApplicationTests.java
99 lines (79 loc) · 3.14 KB
/
RadarCollectorApplicationTests.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package io.spring.sample.radarcollector;
import java.util.List;
import java.util.regex.Pattern;
import io.spring.sample.radarcollector.radars.AircraftSignal;
import io.spring.sample.radarcollector.radars.AirportLocation;
import io.spring.sample.radarcollector.radars.LatLng;
import io.spring.sample.radarcollector.radars.ViewBox;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.rsocket.context.LocalRSocketServerPort;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.messaging.rsocket.RSocketRequester;
import static org.assertj.core.api.Assertions.assertThat;
@SpringBootTest(properties = "spring.rsocket.server.port=0")
class RadarCollectorApplicationTests {
private static Logger logger = LoggerFactory.getLogger(RadarCollectorApplicationTests.class);
@Autowired
private RSocketRequester.Builder requesterBuilder;
@LocalRSocketServerPort
private int port;
@Test
void findRadarByCode() {
Mono<RSocketRequester> requester = this.requesterBuilder
.dataMimeType(MediaType.APPLICATION_CBOR)
.connectTcp("localhost", this.port);
Mono<AirportLocation> airport = requester.flatMap(req ->
req.route("find.radar.{code}", "LYS")
.retrieveMono(AirportLocation.class));
StepVerifier.create(airport)
.assertNext(airportLocation -> {
logger.info("Airport found for code 'LYS': {}", airportLocation);
assertThat(airportLocation.getCode()).isEqualTo("LYS");
assertThat(airportLocation.getName()).isEqualTo("Lyon Saint-Exupery Airport");
})
.verifyComplete();
}
@Test
void findRadarWithinViewBox() {
Mono<RSocketRequester> requester = this.requesterBuilder
.dataMimeType(MediaType.APPLICATION_CBOR)
.connectTcp("localhost", this.port);
ViewBox viewBox = new ViewBox(new LatLng(45.9372734, 4.3803839),
new LatLng(45.3887426, 5.5078417));
Mono<List<AirportLocation>> airports = requester.flatMapMany(req ->
req.route("locate.radars.within")
.data(viewBox)
.retrieveFlux(AirportLocation.class))
.collectList();
StepVerifier.create(airports)
.assertNext(list -> {
logger.info("Fetched airports {}", list);
assertThat(list).extracting(AirportLocation::getCode).contains("LYS", "LYN");
})
.verifyComplete();
}
@Test
public void streamAircraftSignalsForAirport() {
Mono<RSocketRequester> requester = this.requesterBuilder
.dataMimeType(MediaType.APPLICATION_CBOR)
.connectTcp("localhost", this.port);
Mono<List<AircraftSignal>> signals = requester.flatMapMany(req ->
req.route("listen.radar.{code}", "LYS")
.retrieveFlux(AircraftSignal.class))
.take(20)
.collectList();
Pattern callSignPattern = Pattern.compile("[A-Z]{2}[0-9]{3}");
StepVerifier.create(signals)
.assertNext(list -> {
logger.info("Fetched signals {}", list);
assertThat(list).extracting(AircraftSignal::getCallSign).allMatch(callSignPattern.asPredicate());
})
.verifyComplete();
}
}