From ced08a6effddac8cbf54a6157c2e421630c4bc37 Mon Sep 17 00:00:00 2001 From: hongqiaowei Date: Fri, 29 Oct 2021 10:29:46 +0800 Subject: [PATCH] Fix no gateway group in unit test --- .../main/java/we/filter/PreprocessFilter.java | 7 +- .../java/we/plugin/auth/ApiConfigService.java | 2 +- .../src/test/java/we/plugin/PluginTests.java | 91 +++++++++++-------- 3 files changed, 62 insertions(+), 38 deletions(-) diff --git a/fizz-core/src/main/java/we/filter/PreprocessFilter.java b/fizz-core/src/main/java/we/filter/PreprocessFilter.java index 93cb324..68dc612 100644 --- a/fizz-core/src/main/java/we/filter/PreprocessFilter.java +++ b/fizz-core/src/main/java/we/filter/PreprocessFilter.java @@ -31,6 +31,7 @@ import we.plugin.FizzPluginFilterChain; import we.plugin.PluginConfig; import we.plugin.auth.ApiConfig; import we.plugin.auth.AuthPluginFilter; +import we.plugin.auth.GatewayGroup; import we.plugin.auth.GatewayGroupService; import we.plugin.stat.StatPluginFilter; import we.proxy.Route; @@ -92,7 +93,11 @@ public class PreprocessFilter extends FizzWebFilter { return executeFixedPluginFilters(exchange).thenReturn(ReactorUtils.Void).flatMap(checkDirectRespOrChainFilter(exchange, chain)); } - List gatewayGroupPluginConfigs = gatewayGroupService.get(ac.firstGatewayGroup).pluginConfigs; + List gatewayGroupPluginConfigs = null; + GatewayGroup gatewayGroup = gatewayGroupService.get(ac.firstGatewayGroup); + if (gatewayGroup != null) { + gatewayGroupPluginConfigs = gatewayGroup.pluginConfigs; + } Route route = ac.getRoute(exchange, gatewayGroupPluginConfigs); eas.put(WebUtils.ROUTE, route); afterAuth(exchange, ac, route); diff --git a/fizz-core/src/main/java/we/plugin/auth/ApiConfigService.java b/fizz-core/src/main/java/we/plugin/auth/ApiConfigService.java index 479b155..d47b2ec 100644 --- a/fizz-core/src/main/java/we/plugin/auth/ApiConfigService.java +++ b/fizz-core/src/main/java/we/plugin/auth/ApiConfigService.java @@ -287,7 +287,7 @@ public class ApiConfigService implements ApplicationListener serviceConfigMap) { + public void updateServiceConfigMap(ApiConfig ac, Map serviceConfigMap) { ServiceConfig sc = serviceConfigMap.get(ac.service); if (ac.isDeleted == ApiConfig.DELETED) { if (sc != null) { diff --git a/fizz-core/src/test/java/we/plugin/PluginTests.java b/fizz-core/src/test/java/we/plugin/PluginTests.java index 2b3deb6..3cd58a6 100644 --- a/fizz-core/src/test/java/we/plugin/PluginTests.java +++ b/fizz-core/src/test/java/we/plugin/PluginTests.java @@ -4,19 +4,23 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.test.web.reactive.server.WebTestClient; import org.springframework.web.server.ServerWebExchange; +import org.springframework.web.server.WebFilter; +import org.springframework.web.server.WebFilterChain; import org.springframework.web.server.WebHandler; import reactor.core.publisher.Mono; +import we.Fizz; import we.FizzAppContext; +import we.config.SystemConfig; import we.filter.PreprocessFilter; -import we.plugin.auth.ApiConfig; -import we.plugin.auth.ApiConfigService; -import we.plugin.auth.AuthPluginFilter; +import we.plugin.auth.*; import we.plugin.stat.StatPluginFilter; +import we.plugin.stat.StatPluginFilterProperties; import we.util.ReactorUtils; import we.util.ReflectionUtils; import we.util.WebUtils; @@ -45,14 +49,33 @@ public class PluginTests { // @BeforeEach void beforeEach() { authPluginFilter = new AuthPluginFilter(); + statPluginFilter = new StatPluginFilter(); + StatPluginFilterProperties statPluginFilterProperties = new StatPluginFilterProperties(); + statPluginFilterProperties.setStatOpen(false); + ReflectionUtils.set(statPluginFilter, "statPluginFilterProperties", statPluginFilterProperties); + preprocessFilter = new PreprocessFilter(); + apiConfigService = new ApiConfigService(); + SystemConfig systemConfig = new SystemConfig(); + systemConfig.setAggregateTestAuth(false); + ReflectionUtils.set(apiConfigService, "systemConfig", systemConfig); + + ApiConfigServiceProperties apiConfigServiceProperties = new ApiConfigServiceProperties(); + apiConfigServiceProperties.setNeedAuth(false); + ReflectionUtils.set(apiConfigService, "apiConfigServiceProperties", apiConfigServiceProperties); + + GatewayGroupService gatewayGroupService = new GatewayGroupService(); + ReflectionUtils.set(apiConfigService, "gatewayGroupService", gatewayGroupService); + ReflectionUtils.set(preprocessFilter, "statPluginFilter", statPluginFilter); ReflectionUtils.set(authPluginFilter, "apiConfigService", apiConfigService); ReflectionUtils.set(preprocessFilter, "authPluginFilter", authPluginFilter); + ReflectionUtils.set(preprocessFilter, "gatewayGroupService", gatewayGroupService); - FizzAppContext.appContext = mock(ConfigurableApplicationContext.class); + Fizz.context = mock(ConfigurableApplicationContext.class); + FizzAppContext.appContext = Fizz.context; } // @Test @@ -125,15 +148,33 @@ public class PluginTests { return next.defaultIfEmpty(ReactorUtils.NULL).flatMap( v -> { String val = (String) exchange.getAttributes().get("11"); - System.err.println(val + " === "); return Mono.empty(); } ); } }; - when(FizzAppContext.appContext.getBean(plugin, FizzPluginFilter.class)).thenReturn(fizzPlugin); - when(FizzAppContext.appContext.getBean(plugin0, FizzPluginFilter.class)).thenReturn(fizzPlugin0); + when(Fizz.context.getBean(plugin, FizzPluginFilter.class)).thenReturn(fizzPlugin); + when(Fizz.context.getBean(plugin0, FizzPluginFilter.class)).thenReturn(fizzPlugin0); + when(FizzAppContext.appContext.getBeansOfType(FixedPluginFilter.class)).thenReturn(Collections.emptyMap()); + + ApiConfig apiConfig = new ApiConfig(); + apiConfig.service = "xservice"; + apiConfig.path = "/ypath"; + apiConfig.backendPath = apiConfig.path; + apiConfig.fizzMethod = HttpMethod.GET; + apiConfig.firstGatewayGroup = GatewayGroup.DEFAULT; + apiConfig.pluginConfigs = new ArrayList<>(); + + PluginConfig pc = new PluginConfig(); + pc.plugin = "fizzPlugin"; + apiConfig.pluginConfigs.add(pc); + + PluginConfig pc0 = new PluginConfig(); + pc0.plugin = "fizzPlugin0"; + apiConfig.pluginConfigs.add(pc0); + + apiConfigService.updateServiceConfigMap(apiConfig, apiConfigService.serviceConfigMap); WebTestClient client = WebTestClient .bindToWebHandler( @@ -151,39 +192,17 @@ public class PluginTests { } } ) + .webFilter(new WebFilter() { + @Override + public Mono filter(ServerWebExchange exchange, WebFilterChain chain) { + exchange.getAttributes().put("oi@", "6.6.6.6"); + return chain.filter(exchange); + } + }) .webFilter(preprocessFilter) .build(); WebTestClient.ResponseSpec exchange = client.get().uri("/proxy/xservice/ypath").exchange(); exchange.expectHeader().valueEquals("22bb", "xx"); } - - // @Test - void legacyPluginFilter_Mix_FizzPluginFilterTest() { - if (true) { - ApiConfig ac = new ApiConfig(); - ac.type = ApiConfig.Type.SERVICE_DISCOVERY; - ac.service = "xservice"; - ac.backendService = "xservice"; - ac.path = "/ypath"; - ac.backendPath = "/ypath"; - ac.pluginConfigs = new ArrayList<>(); - - // PluginConfig pc = new PluginConfig(); - // pc.plugin = "legacyPlugin"; - // ac.pluginConfigs.add(pc); - // PluginConfig pc0 = new PluginConfig(); - // pc0.plugin = "legacyPlugin0"; - // ac.pluginConfigs.add(pc0); - - PluginConfig pc = new PluginConfig(); - pc.plugin = "fizzPlugin"; - ac.pluginConfigs.add(pc); - PluginConfig pc0 = new PluginConfig(); - pc0.plugin = "fizzPlugin0"; - ac.pluginConfigs.add(pc0); - - // return Mono.just(ac); - } - } }