Skip to content

Commit 47c8a7c

Browse files
Let Spring search for us
getting a list of beans instead of searching in context
1 parent de10754 commit 47c8a7c

File tree

3 files changed

+85
-34
lines changed

3 files changed

+85
-34
lines changed

pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,13 @@
150150
</exclusion>
151151
</exclusions>
152152
</dependency>
153+
<dependency>
154+
<groupId>io.projectreactor</groupId>
155+
<artifactId>reactor-test</artifactId>
156+
<scope>test</scope>
157+
</dependency>
158+
159+
<!-- compile time only -->
153160
<dependency>
154161
<groupId>org.projectlombok</groupId>
155162
<artifactId>lombok</artifactId>

src/main/java/org/gridsuite/gateway/GatewayConfig.java

Lines changed: 9 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,15 @@
66
*/
77
package org.gridsuite.gateway;
88

9-
import org.gridsuite.gateway.endpoints.CgmesGlServer;
10-
import org.gridsuite.gateway.endpoints.*;
9+
import org.gridsuite.gateway.endpoints.EndPointServer;
1110
import org.springframework.cloud.gateway.route.RouteLocator;
1211
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
13-
import org.springframework.context.ApplicationContext;
1412
import org.springframework.context.annotation.Bean;
1513
import org.springframework.context.annotation.Configuration;
1614
import org.springframework.context.annotation.PropertySource;
1715

16+
import java.util.List;
17+
1818
/**
1919
* @author Chamseddine Benhamed <chamseddine.benhamed at rte-france.com>
2020
* @author Slimane Amar <slimane.amar at rte-france.com>
@@ -30,36 +30,11 @@ public class GatewayConfig {
3030
public static final String HEADER_CLIENT_ID = "clientId";
3131

3232
@Bean
33-
public RouteLocator myRoutes(RouteLocatorBuilder builder, ApplicationContext context) {
34-
return builder.routes()
35-
.route(p -> context.getBean(StudyServer.class).getRoute(p))
36-
.route(p -> context.getBean(CaseServer.class).getRoute(p))
37-
.route(p -> context.getBean(MergeServer.class).getRoute(p))
38-
.route(p -> context.getBean(StudyNotificationServer.class).getRoute(p))
39-
.route(p -> context.getBean(MergeNotificationServer.class).getRoute(p))
40-
.route(p -> context.getBean(DirectoryNotificationServer.class).getRoute(p))
41-
.route(p -> context.getBean(ContingencyServer.class).getRoute(p))
42-
.route(p -> context.getBean(ConfigServer.class).getRoute(p))
43-
.route(p -> context.getBean(ConfigNotificationServer.class).getRoute(p))
44-
.route(p -> context.getBean(DirectoryServer.class).getRoute(p))
45-
.route(p -> context.getBean(ExploreServer.class).getRoute(p))
46-
.route(p -> context.getBean(CgmesBoundaryServer.class).getRoute(p))
47-
.route(p -> context.getBean(DynamicMappingServer.class).getRoute(p))
48-
.route(p -> context.getBean(FilterServer.class).getRoute(p))
49-
.route(p -> context.getBean(ReportServer.class).getRoute(p))
50-
.route(p -> context.getBean(NetworkModificationServer.class).getRoute(p))
51-
.route(p -> context.getBean(NetworkConversionServer.class).getRoute(p))
52-
.route(p -> context.getBean(OdreServer.class).getRoute(p))
53-
.route(p -> context.getBean(GeoDataServer.class).getRoute(p))
54-
.route(p -> context.getBean(UserAdminServer.class).getRoute(p))
55-
.route(p -> context.getBean(CgmesGlServer.class).getRoute(p))
56-
.route(p -> context.getBean(SensitivityAnalysisServer.class).getRoute(p))
57-
.route(p -> context.getBean(LoadFlowServer.class).getRoute(p))
58-
.route(p -> context.getBean(SecurityAnalysisServer.class).getRoute(p))
59-
.route(p -> context.getBean(DynamicSimulationServer.class).getRoute(p))
60-
.route(p -> context.getBean(CaseImportServer.class).getRoute(p))
61-
.route(p -> context.getBean(VoltageInitServer.class).getRoute(p))
62-
.route(p -> context.getBean(ShortCircuitServer.class).getRoute(p))
63-
.build();
33+
public RouteLocator myRoutes(RouteLocatorBuilder builder, List<EndPointServer> servers) {
34+
final RouteLocatorBuilder.Builder routes = builder.routes();
35+
for (final EndPointServer server : servers) {
36+
routes.route(server.getClass().getName(), server::getRoute);
37+
}
38+
return routes.build();
6439
}
6540
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package org.gridsuite.gateway;
2+
3+
import org.assertj.core.api.InstanceOfAssertFactories;
4+
import org.assertj.core.api.WithAssertions;
5+
import org.gridsuite.gateway.endpoints.*;
6+
import org.junit.jupiter.api.Test;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.boot.test.context.SpringBootTest;
9+
import org.springframework.cloud.gateway.route.RouteLocator;
10+
import org.springframework.context.ApplicationContext;
11+
import reactor.test.StepVerifier;
12+
13+
import java.util.Map;
14+
15+
@SpringBootTest
16+
class GatewayApplicationTest implements WithAssertions {
17+
@Autowired
18+
private ApplicationContext applicationContext;
19+
20+
@Autowired
21+
private RouteLocator myRoutes;
22+
23+
@Test
24+
void testAllEndpointServersFound() {
25+
assertThat(applicationContext.getBeansOfType(EndPointServer.class)).as("found EndPointServer beans")
26+
.allSatisfy((name, srv) -> assertThat(name).isEqualTo(srv.getEndpointName()))
27+
.extracting(Map::values, InstanceOfAssertFactories.collection(EndPointServer.class)).as("EndPointServer beans")
28+
.doesNotHaveDuplicates()
29+
.extracting(EndPointServer::getClass).as("EndPointServer classes")
30+
.containsExactlyInAnyOrder(
31+
CaseImportServer.class,
32+
CaseServer.class,
33+
CgmesBoundaryServer.class,
34+
CgmesGlServer.class,
35+
ConfigNotificationServer.class,
36+
ConfigServer.class,
37+
ContingencyServer.class,
38+
DirectoryNotificationServer.class,
39+
DirectoryServer.class,
40+
DynamicMappingServer.class,
41+
DynamicSimulationServer.class,
42+
ExploreServer.class,
43+
FilterServer.class,
44+
GeoDataServer.class,
45+
LoadFlowServer.class,
46+
MergeNotificationServer.class,
47+
MergeServer.class,
48+
NetworkConversionServer.class,
49+
NetworkModificationServer.class,
50+
OdreServer.class,
51+
ReportServer.class,
52+
SecurityAnalysisServer.class,
53+
SensitivityAnalysisServer.class,
54+
ShortCircuitServer.class,
55+
StudyNotificationServer.class,
56+
StudyServer.class,
57+
UserAdminServer.class,
58+
VoltageInitServer.class
59+
);
60+
}
61+
62+
@Test
63+
void testRoutesInitialized() {
64+
StepVerifier.create(myRoutes.getRoutes())
65+
.as("routes found")
66+
.expectNextCount(28)
67+
.verifyComplete();
68+
}
69+
}

0 commit comments

Comments
 (0)