mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-09-03 04:26:12 +08:00
Modify more tests for static resource location filtering
Fix `WebFluxAutoConfigurationTests` following upstream Spring Framework changes. Also refine `WebMvcAutoConfigurationTests` to check the locations are set even if they are filtered. See gh-28223
This commit is contained in:
parent
3d21ac7a20
commit
9abf9e6731
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2012-2020 the original author or authors.
|
* Copyright 2012-2021 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@ -50,7 +50,6 @@ import org.springframework.context.i18n.LocaleContext;
|
|||||||
import org.springframework.core.Ordered;
|
import org.springframework.core.Ordered;
|
||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
import org.springframework.core.convert.ConversionService;
|
import org.springframework.core.convert.ConversionService;
|
||||||
import org.springframework.core.io.ClassPathResource;
|
|
||||||
import org.springframework.format.Parser;
|
import org.springframework.format.Parser;
|
||||||
import org.springframework.format.Printer;
|
import org.springframework.format.Printer;
|
||||||
import org.springframework.format.support.FormattingConversionService;
|
import org.springframework.format.support.FormattingConversionService;
|
||||||
@ -151,12 +150,13 @@ class WebFluxAutoConfigurationTests {
|
|||||||
SimpleUrlHandlerMapping hm = context.getBean("resourceHandlerMapping", SimpleUrlHandlerMapping.class);
|
SimpleUrlHandlerMapping hm = context.getBean("resourceHandlerMapping", SimpleUrlHandlerMapping.class);
|
||||||
assertThat(hm.getUrlMap().get("/**")).isInstanceOf(ResourceWebHandler.class);
|
assertThat(hm.getUrlMap().get("/**")).isInstanceOf(ResourceWebHandler.class);
|
||||||
ResourceWebHandler staticHandler = (ResourceWebHandler) hm.getUrlMap().get("/**");
|
ResourceWebHandler staticHandler = (ResourceWebHandler) hm.getUrlMap().get("/**");
|
||||||
assertThat(staticHandler.getLocations()).hasSize(4);
|
assertThat(staticHandler).extracting("locationValues").asList().hasSize(4);
|
||||||
|
assertThat(staticHandler.getLocations()).hasSize(1);
|
||||||
|
assertThat(staticHandler.getLocations().get(0)).hasToString("class path resource [public/]");
|
||||||
assertThat(hm.getUrlMap().get("/webjars/**")).isInstanceOf(ResourceWebHandler.class);
|
assertThat(hm.getUrlMap().get("/webjars/**")).isInstanceOf(ResourceWebHandler.class);
|
||||||
ResourceWebHandler webjarsHandler = (ResourceWebHandler) hm.getUrlMap().get("/webjars/**");
|
ResourceWebHandler webjarsHandler = (ResourceWebHandler) hm.getUrlMap().get("/webjars/**");
|
||||||
assertThat(webjarsHandler.getLocations()).hasSize(1);
|
assertThat(webjarsHandler).extracting("locationValues").asList()
|
||||||
assertThat(webjarsHandler.getLocations().get(0))
|
.containsExactly("classpath:/META-INF/resources/webjars/");
|
||||||
.isEqualTo(new ClassPathResource("/META-INF/resources/webjars/"));
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,7 +166,7 @@ class WebFluxAutoConfigurationTests {
|
|||||||
SimpleUrlHandlerMapping hm = context.getBean("resourceHandlerMapping", SimpleUrlHandlerMapping.class);
|
SimpleUrlHandlerMapping hm = context.getBean("resourceHandlerMapping", SimpleUrlHandlerMapping.class);
|
||||||
assertThat(hm.getUrlMap().get("/static/**")).isInstanceOf(ResourceWebHandler.class);
|
assertThat(hm.getUrlMap().get("/static/**")).isInstanceOf(ResourceWebHandler.class);
|
||||||
ResourceWebHandler staticHandler = (ResourceWebHandler) hm.getUrlMap().get("/static/**");
|
ResourceWebHandler staticHandler = (ResourceWebHandler) hm.getUrlMap().get("/static/**");
|
||||||
assertThat(staticHandler.getLocations()).hasSize(4);
|
assertThat(staticHandler).extracting("locationValues").asList().hasSize(4);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import java.time.ZoneId;
|
|||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.format.FormatStyle;
|
import java.time.format.FormatStyle;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
@ -177,8 +178,10 @@ class WebMvcAutoConfigurationTests {
|
|||||||
void resourceHandlerMapping() {
|
void resourceHandlerMapping() {
|
||||||
this.contextRunner.run((context) -> {
|
this.contextRunner.run((context) -> {
|
||||||
Map<String, List<Resource>> locations = getResourceMappingLocations(context);
|
Map<String, List<Resource>> locations = getResourceMappingLocations(context);
|
||||||
assertThat(locations.get("/**")).hasSize(2);
|
assertThat(locations.get("/**")).hasSize(5);
|
||||||
assertThat(locations.get("/webjars/**")).hasSize(0);
|
assertThat(locations.get("/webjars/**")).hasSize(1);
|
||||||
|
assertThat(locations.get("/webjars/**").get(0))
|
||||||
|
.isEqualTo(new ClassPathResource("/META-INF/resources/webjars/"));
|
||||||
assertThat(getResourceResolvers(context, "/webjars/**")).hasSize(1);
|
assertThat(getResourceResolvers(context, "/webjars/**")).hasSize(1);
|
||||||
assertThat(getResourceTransformers(context, "/webjars/**")).hasSize(0);
|
assertThat(getResourceTransformers(context, "/webjars/**")).hasSize(0);
|
||||||
assertThat(getResourceResolvers(context, "/**")).hasSize(1);
|
assertThat(getResourceResolvers(context, "/**")).hasSize(1);
|
||||||
@ -190,17 +193,17 @@ class WebMvcAutoConfigurationTests {
|
|||||||
void customResourceHandlerMapping() {
|
void customResourceHandlerMapping() {
|
||||||
this.contextRunner.withPropertyValues("spring.mvc.static-path-pattern:/static/**").run((context) -> {
|
this.contextRunner.withPropertyValues("spring.mvc.static-path-pattern:/static/**").run((context) -> {
|
||||||
Map<String, List<Resource>> locations = getResourceMappingLocations(context);
|
Map<String, List<Resource>> locations = getResourceMappingLocations(context);
|
||||||
assertThat(locations.get("/static/**")).hasSize(2);
|
assertThat(locations.get("/static/**")).hasSize(5);
|
||||||
assertThat(getResourceResolvers(context, "/static/**")).hasSize(1);
|
assertThat(getResourceResolvers(context, "/static/**")).hasSize(1);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void resourceHandlerMappingOverrideWebjars() {
|
void resourceHandlerMappingOverrideWebjars() {
|
||||||
this.contextRunner.withUserConfiguration(WebJarsResources.class).run((context) -> {
|
this.contextRunner.withUserConfiguration(WebJars.class).run((context) -> {
|
||||||
Map<String, List<Resource>> locations = getResourceMappingLocations(context);
|
Map<String, List<Resource>> locations = getResourceMappingLocations(context);
|
||||||
assertThat(locations.get("/webjars/**")).hasSize(1);
|
assertThat(locations.get("/webjars/**")).hasSize(1);
|
||||||
assertThat(locations.get("/webjars/**").get(0).getFilename()).isEqualTo("test");
|
assertThat(locations.get("/webjars/**").get(0)).isEqualTo(new ClassPathResource("/foo/"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,7 +212,7 @@ class WebMvcAutoConfigurationTests {
|
|||||||
this.contextRunner.withUserConfiguration(AllResources.class).run((context) -> {
|
this.contextRunner.withUserConfiguration(AllResources.class).run((context) -> {
|
||||||
Map<String, List<Resource>> locations = getResourceMappingLocations(context);
|
Map<String, List<Resource>> locations = getResourceMappingLocations(context);
|
||||||
assertThat(locations.get("/**")).hasSize(1);
|
assertThat(locations.get("/**")).hasSize(1);
|
||||||
assertThat(locations.get("/**").get(0).getFilename()).isEqualTo("test");
|
assertThat(locations.get("/**").get(0)).isEqualTo(new ClassPathResource("/foo/"));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1040,7 +1043,7 @@ class WebMvcAutoConfigurationTests {
|
|||||||
protected Map<String, List<Resource>> getResourceMappingLocations(ApplicationContext context) {
|
protected Map<String, List<Resource>> getResourceMappingLocations(ApplicationContext context) {
|
||||||
Object bean = context.getBean("resourceHandlerMapping");
|
Object bean = context.getBean("resourceHandlerMapping");
|
||||||
if (bean instanceof HandlerMapping) {
|
if (bean instanceof HandlerMapping) {
|
||||||
return getMappingLocations((HandlerMapping) bean);
|
return getMappingLocations(context, (HandlerMapping) bean);
|
||||||
}
|
}
|
||||||
assertThat(bean.toString()).isEqualTo("null");
|
assertThat(bean.toString()).isEqualTo("null");
|
||||||
return Collections.emptyMap();
|
return Collections.emptyMap();
|
||||||
@ -1059,11 +1062,18 @@ class WebMvcAutoConfigurationTests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
protected Map<String, List<Resource>> getMappingLocations(HandlerMapping mapping) {
|
private Map<String, List<Resource>> getMappingLocations(ApplicationContext context, HandlerMapping mapping) {
|
||||||
Map<String, List<Resource>> mappingLocations = new LinkedHashMap<>();
|
Map<String, List<Resource>> mappingLocations = new LinkedHashMap<>();
|
||||||
getHandlerMap(mapping).forEach((key, value) -> {
|
getHandlerMap(mapping).forEach((key, value) -> {
|
||||||
Object locations = ReflectionTestUtils.getField(value, "locationsToUse");
|
List<String> locationValues = (List<String>) ReflectionTestUtils.getField(value, "locationValues");
|
||||||
mappingLocations.put(key, (List<Resource>) locations);
|
List<Resource> locationResources = (List<Resource>) ReflectionTestUtils.getField(value,
|
||||||
|
"locationResources");
|
||||||
|
List<Resource> resources = new ArrayList<>();
|
||||||
|
for (String locationValue : locationValues) {
|
||||||
|
resources.add(context.getResource(locationValue));
|
||||||
|
}
|
||||||
|
resources.addAll(locationResources);
|
||||||
|
mappingLocations.put(key, resources);
|
||||||
});
|
});
|
||||||
return mappingLocations;
|
return mappingLocations;
|
||||||
}
|
}
|
||||||
@ -1094,11 +1104,11 @@ class WebMvcAutoConfigurationTests {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Configuration(proxyBeanMethods = false)
|
@Configuration(proxyBeanMethods = false)
|
||||||
static class WebJarsResources implements WebMvcConfigurer {
|
static class WebJars implements WebMvcConfigurer {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
||||||
registry.addResourceHandler("/webjars/**").addResourceLocations(new ClassPathResource("/test", getClass()));
|
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/foo/");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -1108,7 +1118,7 @@ class WebMvcAutoConfigurationTests {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
public void addResourceHandlers(ResourceHandlerRegistry registry) {
|
||||||
registry.addResourceHandler("/**").addResourceLocations(new ClassPathResource("/test", getClass()));
|
registry.addResourceHandler("/**").addResourceLocations("classpath:/foo/");
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user