Browse Source
Mainly adds reflection hints for the actuator infrastructure. Also adds the OperationReflectiveProcessor, which registers the @ReadMethod, @DeleteMethod and @WriteMethod annotated methods for reflection and adds reflection hints for method return types. See gh-31671pull/31796/head
70 changed files with 2413 additions and 30 deletions
@ -0,0 +1,45 @@
@@ -0,0 +1,45 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.autoconfigure.cloudfoundry; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.autoconfigure.cloudfoundry.CloudFoundryWebEndpointDiscoverer.CloudFoundryWebEndpointDiscovererRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link CloudFoundryWebEndpointDiscovererRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class CloudFoundryWebEndpointDiscovererRuntimeHintsTests { |
||||
|
||||
private final CloudFoundryWebEndpointDiscovererRuntimeHints sut = new CloudFoundryWebEndpointDiscovererRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(CloudFoundryEndpointFilter.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS)).accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.autoconfigure.cloudfoundry.reactive; |
||||
|
||||
import org.assertj.core.api.Assertions; |
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.autoconfigure.cloudfoundry.reactive.CloudFoundryWebFluxEndpointHandlerMapping.CloudFoundryLinksHandler; |
||||
import org.springframework.boot.actuate.autoconfigure.cloudfoundry.reactive.CloudFoundryWebFluxEndpointHandlerMapping.CloudFoundryWebFluxEndpointHandlerMappingRuntimeHints; |
||||
import org.springframework.boot.actuate.endpoint.web.Link; |
||||
|
||||
/** |
||||
* Tests for {@link CloudFoundryWebFluxEndpointHandlerMappingRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class CloudFoundryWebFluxEndpointHandlerMappingRuntimeHintsTests { |
||||
|
||||
private final CloudFoundryWebFluxEndpointHandlerMappingRuntimeHints sut = new CloudFoundryWebFluxEndpointHandlerMappingRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
Assertions.assertThat(RuntimeHintsPredicates.reflection().onMethod(CloudFoundryLinksHandler.class, "links")) |
||||
.accepts(runtimeHints); |
||||
Assertions.assertThat(RuntimeHintsPredicates.reflection().onType(Link.class)).accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.autoconfigure.cloudfoundry.servlet; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.autoconfigure.cloudfoundry.servlet.CloudFoundryWebEndpointServletHandlerMapping.CloudFoundryLinksHandler; |
||||
import org.springframework.boot.actuate.autoconfigure.cloudfoundry.servlet.CloudFoundryWebEndpointServletHandlerMapping.CloudFoundryWebEndpointServletHandlerMappingRuntimeHints; |
||||
import org.springframework.boot.actuate.endpoint.web.Link; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link CloudFoundryWebEndpointServletHandlerMappingRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class CloudFoundryWebEndpointServletHandlerMappingRuntimeHintsTests { |
||||
|
||||
private final CloudFoundryWebEndpointServletHandlerMappingRuntimeHints sut = new CloudFoundryWebEndpointServletHandlerMappingRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onMethod(CloudFoundryLinksHandler.class, "links")) |
||||
.accepts(runtimeHints); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(Link.class)).accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.aot; |
||||
|
||||
import java.util.stream.Stream; |
||||
|
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.RuntimeHintsRegistrar; |
||||
import org.springframework.aot.hint.support.RuntimeHintsUtils; |
||||
import org.springframework.boot.actuate.endpoint.annotation.DeleteOperation; |
||||
import org.springframework.boot.actuate.endpoint.annotation.Endpoint; |
||||
import org.springframework.boot.actuate.endpoint.annotation.EndpointExtension; |
||||
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; |
||||
import org.springframework.boot.actuate.endpoint.annotation.WriteOperation; |
||||
import org.springframework.core.annotation.SynthesizedAnnotation; |
||||
|
||||
/** |
||||
* Registrar which registers the annotations needed for actuator support. |
||||
* |
||||
* @author Moritz Halbritter |
||||
* @since 3.0.0 |
||||
*/ |
||||
public class ActuatorAnnotationsRuntimeHintsRegistrar implements RuntimeHintsRegistrar { |
||||
|
||||
@Override |
||||
public void registerHints(RuntimeHints hints, ClassLoader classLoader) { |
||||
Stream.of(Endpoint.class, ReadOperation.class, WriteOperation.class, DeleteOperation.class, |
||||
EndpointExtension.class) |
||||
.forEach((annotationType) -> RuntimeHintsUtils.registerAnnotation(hints, annotationType)); |
||||
// TODO: See https://github.com/spring-projects/spring-framework/issues/28767
|
||||
Stream.of(Endpoint.class, EndpointExtension.class).forEach( |
||||
(annotationType) -> hints.proxies().registerJdkProxy(annotationType, SynthesizedAnnotation.class)); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
/** |
||||
* Support classes for actuator in AOT mode. |
||||
*/ |
||||
package org.springframework.boot.actuate.aot; |
||||
@ -0,0 +1,74 @@
@@ -0,0 +1,74 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.endpoint.annotation; |
||||
|
||||
import java.lang.reflect.AnnotatedElement; |
||||
import java.lang.reflect.Method; |
||||
import java.lang.reflect.Type; |
||||
|
||||
import org.springframework.aot.hint.ExecutableMode; |
||||
import org.springframework.aot.hint.ReflectionHints; |
||||
import org.springframework.aot.hint.annotation.ReflectiveProcessor; |
||||
import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; |
||||
import org.springframework.context.aot.BindingReflectionHintsRegistrar; |
||||
import org.springframework.core.ResolvableType; |
||||
import org.springframework.core.io.Resource; |
||||
|
||||
/** |
||||
* Processor which registers the annotated operation method and its return type for |
||||
* reflection. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class OperationReflectiveProcessor implements ReflectiveProcessor { |
||||
|
||||
private final BindingReflectionHintsRegistrar bindingRegistrar = new BindingReflectionHintsRegistrar(); |
||||
|
||||
@Override |
||||
public void registerReflectionHints(ReflectionHints hints, AnnotatedElement element) { |
||||
if (!(element instanceof Method method)) { |
||||
throw new IllegalArgumentException("This processor can only be invoked for annotated methods"); |
||||
} |
||||
hints.registerMethod(method, (hint) -> hint.setModes(ExecutableMode.INVOKE)); |
||||
registerReturnValueHints(hints, method); |
||||
} |
||||
|
||||
private void registerReturnValueHints(ReflectionHints hints, Method method) { |
||||
ResolvableType returnType = ResolvableType.forMethodReturnType(method); |
||||
if (WebEndpointResponse.class.isAssignableFrom(method.getReturnType())) { |
||||
registerWebEndpointResponse(hints, returnType); |
||||
} |
||||
else { |
||||
registerReflectionHints(hints, returnType.getType()); |
||||
} |
||||
} |
||||
|
||||
private void registerWebEndpointResponse(ReflectionHints hints, ResolvableType returnType) { |
||||
ResolvableType genericParameter = returnType.getGeneric(0); |
||||
if (genericParameter.getRawClass() != null) { |
||||
registerReflectionHints(hints, genericParameter.getType()); |
||||
} |
||||
} |
||||
|
||||
private void registerReflectionHints(ReflectionHints hints, Type type) { |
||||
if (type.equals(Resource.class)) { |
||||
return; |
||||
} |
||||
this.bindingRegistrar.registerReflectionHints(hints, type); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,60 @@
@@ -0,0 +1,60 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.management; |
||||
|
||||
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; |
||||
import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; |
||||
import org.springframework.boot.actuate.endpoint.web.annotation.EndpointWebExtension; |
||||
import org.springframework.boot.actuate.management.ThreadDumpEndpoint.ThreadDumpDescriptor; |
||||
import org.springframework.boot.actuate.management.ThreadDumpEndpoint.ThreadDumperUnavailableException; |
||||
|
||||
/** |
||||
* {@link EndpointWebExtension @EndpointWebExtension} for the {@link ThreadDumpEndpoint}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
* @since 3.0.0 |
||||
*/ |
||||
@EndpointWebExtension(endpoint = ThreadDumpEndpoint.class) |
||||
public class ThreadDumpEndpointWebExtension { |
||||
|
||||
private final ThreadDumpEndpoint delegate; |
||||
|
||||
public ThreadDumpEndpointWebExtension(ThreadDumpEndpoint delegate) { |
||||
this.delegate = delegate; |
||||
} |
||||
|
||||
@ReadOperation |
||||
public WebEndpointResponse<ThreadDumpDescriptor> threadDump() { |
||||
try { |
||||
return new WebEndpointResponse<>(this.delegate.threadDump()); |
||||
} |
||||
catch (ThreadDumperUnavailableException ex) { |
||||
return new WebEndpointResponse<>(WebEndpointResponse.STATUS_SERVICE_UNAVAILABLE); |
||||
} |
||||
} |
||||
|
||||
@ReadOperation(produces = "text/plain;charset=UTF-8") |
||||
public WebEndpointResponse<String> textThreadDump() { |
||||
try { |
||||
return new WebEndpointResponse<>(this.delegate.textThreadDump()); |
||||
} |
||||
catch (ThreadDumperUnavailableException ex) { |
||||
return new WebEndpointResponse<>(WebEndpointResponse.STATUS_SERVICE_UNAVAILABLE); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,73 @@
@@ -0,0 +1,73 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.aot; |
||||
|
||||
import java.util.Set; |
||||
|
||||
import org.junit.jupiter.api.BeforeEach; |
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.endpoint.annotation.DeleteOperation; |
||||
import org.springframework.boot.actuate.endpoint.annotation.Endpoint; |
||||
import org.springframework.boot.actuate.endpoint.annotation.EndpointExtension; |
||||
import org.springframework.boot.actuate.endpoint.annotation.ReadOperation; |
||||
import org.springframework.boot.actuate.endpoint.annotation.WriteOperation; |
||||
import org.springframework.core.annotation.SynthesizedAnnotation; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link ActuatorAnnotationsRuntimeHintsRegistrar}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class ActuatorAnnotationsRuntimeHintsRegistrarTests { |
||||
|
||||
private final ActuatorAnnotationsRuntimeHintsRegistrar sut = new ActuatorAnnotationsRuntimeHintsRegistrar(); |
||||
|
||||
private RuntimeHints runtimeHints; |
||||
|
||||
@BeforeEach |
||||
void setUp() { |
||||
this.runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(this.runtimeHints, getClass().getClassLoader()); |
||||
} |
||||
|
||||
@Test |
||||
void shouldRegisterReflectionHints() { |
||||
Set<Class<?>> annotations = Set.of(Endpoint.class, ReadOperation.class, WriteOperation.class, |
||||
DeleteOperation.class, EndpointExtension.class); |
||||
for (Class<?> annotation : annotations) { |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(annotation) |
||||
.withAnyMemberCategory(MemberCategory.INVOKE_DECLARED_METHODS)).accepts(this.runtimeHints); |
||||
} |
||||
} |
||||
|
||||
@Test |
||||
void shouldRegisterProxyHints() { |
||||
Set<Class<?>> synthesizedAnnotations = Set.of(Endpoint.class, EndpointExtension.class); |
||||
for (Class<?> synthesizedAnnotation : synthesizedAnnotations) { |
||||
assertThat( |
||||
RuntimeHintsPredicates.proxies().forInterfaces(synthesizedAnnotation, SynthesizedAnnotation.class)) |
||||
.accepts(this.runtimeHints); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,132 @@
@@ -0,0 +1,132 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.endpoint.annotation; |
||||
|
||||
import java.lang.reflect.Method; |
||||
|
||||
import org.junit.jupiter.api.BeforeEach; |
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; |
||||
import org.springframework.core.io.Resource; |
||||
import org.springframework.util.ReflectionUtils; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link OperationReflectiveProcessor}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class OperationReflectiveProcessorTests { |
||||
|
||||
private final OperationReflectiveProcessor sut = new OperationReflectiveProcessor(); |
||||
|
||||
private RuntimeHints runtimeHints; |
||||
|
||||
@BeforeEach |
||||
void setUp() { |
||||
this.runtimeHints = new RuntimeHints(); |
||||
} |
||||
|
||||
@Test |
||||
void shouldRegisterMethodAsInvokable() { |
||||
Method method = ReflectionUtils.findMethod(Methods.class, "string"); |
||||
runProcessor(method); |
||||
assertThat(RuntimeHintsPredicates.reflection().onMethod(method)).accepts(this.runtimeHints); |
||||
} |
||||
|
||||
@Test |
||||
void shouldRegisterReturnType() { |
||||
Method method = ReflectionUtils.findMethod(Methods.class, "dto"); |
||||
runProcessor(method); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(Dto.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(this.runtimeHints); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(NestedDto.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(this.runtimeHints); |
||||
} |
||||
|
||||
@Test |
||||
void shouldRegisterWebEndpointResponseReturnType() { |
||||
Method method = ReflectionUtils.findMethod(Methods.class, "webEndpointResponse"); |
||||
runProcessor(method); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(Dto.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(this.runtimeHints); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(NestedDto.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(this.runtimeHints); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(WebEndpointResponse.class)).rejects(this.runtimeHints); |
||||
} |
||||
|
||||
@Test |
||||
void shouldNotRegisterResourceReturnType() { |
||||
Method method = ReflectionUtils.findMethod(Methods.class, "resource"); |
||||
runProcessor(method); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(Resource.class)).rejects(this.runtimeHints); |
||||
} |
||||
|
||||
private void runProcessor(Method method) { |
||||
this.sut.registerReflectionHints(this.runtimeHints.reflection(), method); |
||||
} |
||||
|
||||
private static class Methods { |
||||
|
||||
private String string() { |
||||
return null; |
||||
} |
||||
|
||||
private Dto dto() { |
||||
return null; |
||||
} |
||||
|
||||
private WebEndpointResponse<Dto> webEndpointResponse() { |
||||
return null; |
||||
} |
||||
|
||||
private Resource resource() { |
||||
return null; |
||||
} |
||||
|
||||
} |
||||
|
||||
public static class Dto { |
||||
|
||||
private final NestedDto nestedDto = new NestedDto(); |
||||
|
||||
public NestedDto getNestedDto() { |
||||
return this.nestedDto; |
||||
} |
||||
|
||||
} |
||||
|
||||
public static class NestedDto { |
||||
|
||||
private final String string = "some-string"; |
||||
|
||||
public String getString() { |
||||
return this.string; |
||||
} |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,45 @@
@@ -0,0 +1,45 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.endpoint.jmx.annotation; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.endpoint.jmx.annotation.JmxEndpointDiscoverer.JmxEndpointDiscovererRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link JmxEndpointDiscovererRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class JmxEndpointDiscovererRuntimeHintsTests { |
||||
|
||||
private final JmxEndpointDiscovererRuntimeHints sut = new JmxEndpointDiscovererRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(JmxEndpointFilter.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS)).accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.endpoint.web.annotation; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.endpoint.web.annotation.ControllerEndpointDiscoverer.ControllerEndpointDiscovererRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link ControllerEndpointDiscovererRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class ControllerEndpointDiscovererRuntimeHintsTests { |
||||
|
||||
private final ControllerEndpointDiscovererRuntimeHints sut = new ControllerEndpointDiscovererRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(ControllerEndpointFilter.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS)).accepts(runtimeHints); |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.endpoint.web.annotation; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.endpoint.web.annotation.ServletEndpointDiscoverer.ServletEndpointDiscovererRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link ServletEndpointDiscovererRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class ServletEndpointDiscovererRuntimeHintsTests { |
||||
|
||||
private final ServletEndpointDiscovererRuntimeHints sut = new ServletEndpointDiscovererRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(ServletEndpointFilter.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS)).accepts(runtimeHints); |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.endpoint.web.annotation; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.endpoint.web.annotation.WebEndpointDiscoverer.WebEndpointDiscovererRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link WebEndpointDiscovererRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class WebEndpointDiscovererRuntimeHintsTests { |
||||
|
||||
private final WebEndpointDiscovererRuntimeHints sut = new WebEndpointDiscovererRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(WebEndpointFilter.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS)).accepts(runtimeHints); |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.endpoint.web.reactive; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.TypeReference; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.endpoint.web.reactive.AbstractWebFluxEndpointHandlerMapping.AbstractWebFluxEndpointHandlerMappingRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link AbstractWebFluxEndpointHandlerMappingRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class AbstractWebFluxEndpointHandlerMappingRuntimeHintsTests { |
||||
|
||||
private final AbstractWebFluxEndpointHandlerMappingRuntimeHints sut = new AbstractWebFluxEndpointHandlerMappingRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(TypeReference.of( |
||||
"org.springframework.boot.actuate.endpoint.web.reactive.AbstractWebFluxEndpointHandlerMapping.WriteOperationHandler"))) |
||||
.accepts(runtimeHints); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(TypeReference.of( |
||||
"org.springframework.boot.actuate.endpoint.web.reactive.AbstractWebFluxEndpointHandlerMapping.ReadOperationHandler"))) |
||||
.accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.endpoint.web.reactive; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.endpoint.web.Link; |
||||
import org.springframework.boot.actuate.endpoint.web.reactive.WebFluxEndpointHandlerMapping.WebFluxEndpointHandlerMappingRuntimeHints; |
||||
import org.springframework.boot.actuate.endpoint.web.reactive.WebFluxEndpointHandlerMapping.WebFluxLinksHandler; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link WebFluxEndpointHandlerMappingRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class WebFluxEndpointHandlerMappingRuntimeHintsTests { |
||||
|
||||
private final WebFluxEndpointHandlerMappingRuntimeHints sut = new WebFluxEndpointHandlerMappingRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onMethod(WebFluxLinksHandler.class, "links")) |
||||
.accepts(runtimeHints); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(Link.class)).accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.endpoint.web.servlet; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.TypeReference; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping.AbstractWebMvcEndpointHandlerMappingRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link AbstractWebMvcEndpointHandlerMappingRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class AbstractWebMvcEndpointHandlerMappingRuntimeHintsTests { |
||||
|
||||
private final AbstractWebMvcEndpointHandlerMappingRuntimeHints sut = new AbstractWebMvcEndpointHandlerMappingRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(TypeReference.of( |
||||
"org.springframework.boot.actuate.endpoint.web.servlet.AbstractWebMvcEndpointHandlerMapping.OperationHandler"))) |
||||
.accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.endpoint.web.servlet; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.endpoint.web.Link; |
||||
import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping.WebMvcEndpointHandlerMappingRuntimeHints; |
||||
import org.springframework.boot.actuate.endpoint.web.servlet.WebMvcEndpointHandlerMapping.WebMvcLinksHandler; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link WebMvcEndpointHandlerMappingRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class WebMvcEndpointHandlerMappingRuntimeHintsTests { |
||||
|
||||
private final WebMvcEndpointHandlerMappingRuntimeHints sut = new WebMvcEndpointHandlerMappingRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onMethod(WebMvcLinksHandler.class, "links")) |
||||
.accepts(runtimeHints); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(Link.class)).accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,51 @@
@@ -0,0 +1,51 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.health; |
||||
|
||||
import java.util.Set; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.health.HealthEndpointWebExtension.HealthEndpointWebExtensionRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link HealthEndpointWebExtensionRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class HealthEndpointWebExtensionRuntimeHintsTests { |
||||
|
||||
private final HealthEndpointWebExtensionRuntimeHints sut = new HealthEndpointWebExtensionRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
Set<Class<?>> bindingTypes = Set.of(Health.class, SystemHealth.class, CompositeHealth.class); |
||||
for (Class<?> bindingType : bindingTypes) { |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(bindingType) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(runtimeHints); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.info; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.info.BuildInfoContributor.BuildInfoContributorRuntimeHints; |
||||
import org.springframework.boot.info.BuildProperties; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link BuildInfoContributorRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class BuildInfoContributorRuntimeHintsTests { |
||||
|
||||
private final BuildInfoContributorRuntimeHints sut = new BuildInfoContributorRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(BuildProperties.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,48 @@
@@ -0,0 +1,48 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.info; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.info.GitInfoContributor.GitInfoContributorRuntimeHints; |
||||
import org.springframework.boot.info.GitProperties; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests forr {@link GitInfoContributorRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class GitInfoContributorRuntimeHintsTests { |
||||
|
||||
private final GitInfoContributorRuntimeHints sut = new GitInfoContributorRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(GitProperties.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(runtimeHints); |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.info; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.info.JavaInfoContributor.JavaInfoContributorRuntimeHints; |
||||
import org.springframework.boot.info.JavaInfo; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link JavaInfoContributorRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class JavaInfoContributorRuntimeHintsTests { |
||||
|
||||
private final JavaInfoContributorRuntimeHints sut = new JavaInfoContributorRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(JavaInfo.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,48 @@
@@ -0,0 +1,48 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.info; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.info.OsInfoContributor.OsInfoContributorRuntimeHints; |
||||
import org.springframework.boot.info.OsInfo; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link OsInfoContributorRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class OsInfoContributorRuntimeHintsTests { |
||||
|
||||
private final OsInfoContributorRuntimeHints sut = new OsInfoContributorRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(OsInfo.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(runtimeHints); |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,72 @@
@@ -0,0 +1,72 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.integration; |
||||
|
||||
import java.util.Set; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.integration.IntegrationGraphEndpoint.IntegrationGraphEndpointRuntimeHints; |
||||
import org.springframework.integration.graph.CompositeMessageHandlerNode; |
||||
import org.springframework.integration.graph.DiscardingMessageHandlerNode; |
||||
import org.springframework.integration.graph.EndpointNode; |
||||
import org.springframework.integration.graph.ErrorCapableCompositeMessageHandlerNode; |
||||
import org.springframework.integration.graph.ErrorCapableDiscardingMessageHandlerNode; |
||||
import org.springframework.integration.graph.ErrorCapableEndpointNode; |
||||
import org.springframework.integration.graph.ErrorCapableMessageHandlerNode; |
||||
import org.springframework.integration.graph.ErrorCapableRoutingNode; |
||||
import org.springframework.integration.graph.Graph; |
||||
import org.springframework.integration.graph.MessageChannelNode; |
||||
import org.springframework.integration.graph.MessageGatewayNode; |
||||
import org.springframework.integration.graph.MessageHandlerNode; |
||||
import org.springframework.integration.graph.MessageProducerNode; |
||||
import org.springframework.integration.graph.MessageSourceNode; |
||||
import org.springframework.integration.graph.PollableChannelNode; |
||||
import org.springframework.integration.graph.RoutingMessageHandlerNode; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link IntegrationGraphEndpointRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class IntegrationGraphEndpointRuntimeHintsTests { |
||||
|
||||
private final IntegrationGraphEndpointRuntimeHints sut = new IntegrationGraphEndpointRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
Set<Class<?>> bindingTypes = Set.of(Graph.class, EndpointNode.class, CompositeMessageHandlerNode.class, |
||||
DiscardingMessageHandlerNode.class, ErrorCapableCompositeMessageHandlerNode.class, |
||||
ErrorCapableDiscardingMessageHandlerNode.class, ErrorCapableEndpointNode.class, |
||||
ErrorCapableMessageHandlerNode.class, ErrorCapableRoutingNode.class, MessageGatewayNode.class, |
||||
MessageProducerNode.class, PollableChannelNode.class, MessageChannelNode.class, |
||||
MessageHandlerNode.class, MessageSourceNode.class, RoutingMessageHandlerNode.class); |
||||
for (Class<?> bindingType : bindingTypes) { |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(bindingType) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(runtimeHints); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,63 @@
@@ -0,0 +1,63 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.management; |
||||
|
||||
import org.junit.jupiter.api.BeforeEach; |
||||
import org.junit.jupiter.api.Test; |
||||
import org.mockito.Mockito; |
||||
|
||||
import org.springframework.boot.actuate.endpoint.web.WebEndpointResponse; |
||||
import org.springframework.boot.actuate.management.ThreadDumpEndpoint.ThreadDumpDescriptor; |
||||
import org.springframework.boot.actuate.management.ThreadDumpEndpoint.ThreadDumperUnavailableException; |
||||
import org.springframework.http.HttpStatus; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link ThreadDumpEndpointWebExtension}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class ThreadDumpEndpointWebExtensionTests { |
||||
|
||||
private ThreadDumpEndpointWebExtension sut; |
||||
|
||||
private ThreadDumpEndpoint delegateMock; |
||||
|
||||
@BeforeEach |
||||
void setUp() { |
||||
this.delegateMock = Mockito.mock(ThreadDumpEndpoint.class); |
||||
this.sut = new ThreadDumpEndpointWebExtension(this.delegateMock); |
||||
} |
||||
|
||||
@Test |
||||
void shouldHandleThreadDumperUnavailable() { |
||||
Mockito.when(this.delegateMock.threadDump()) |
||||
.thenThrow(new ThreadDumperUnavailableException("No thread dumper available")); |
||||
WebEndpointResponse<ThreadDumpDescriptor> response = this.sut.threadDump(); |
||||
assertThat(response.getStatus()).isEqualTo(HttpStatus.SERVICE_UNAVAILABLE.value()); |
||||
} |
||||
|
||||
@Test |
||||
void shouldHandleThreadDumperUnavailableText() { |
||||
Mockito.when(this.delegateMock.textThreadDump()) |
||||
.thenThrow(new ThreadDumperUnavailableException("No thread dumper available")); |
||||
WebEndpointResponse<String> response = this.sut.textThreadDump(); |
||||
assertThat(response.getStatus()).isEqualTo(HttpStatus.SERVICE_UNAVAILABLE.value()); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.metrics.cache; |
||||
|
||||
import com.hazelcast.spring.cache.HazelcastCache; |
||||
import io.micrometer.core.instrument.binder.cache.HazelcastCacheMetrics; |
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.metrics.cache.HazelcastCacheMeterBinderProvider.HazelcastCacheMeterBinderProviderRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link HazelcastCacheMeterBinderProviderRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class HazelcastCacheMeterBinderProviderRuntimeHintsTests { |
||||
|
||||
private final HazelcastCacheMeterBinderProviderRuntimeHints sut = new HazelcastCacheMeterBinderProviderRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onMethod(HazelcastCache.class, "getNativeCache")) |
||||
.accepts(runtimeHints); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(HazelcastCacheMetrics.class)).accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.quartz; |
||||
|
||||
import java.util.Set; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzGroups; |
||||
import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobDetails; |
||||
import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzJobGroupSummary; |
||||
import org.springframework.boot.actuate.quartz.QuartzEndpoint.QuartzTriggerGroupSummary; |
||||
import org.springframework.boot.actuate.quartz.QuartzEndpointWebExtension.QuartzEndpointWebExtensionRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link QuartzEndpointWebExtensionRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class QuartzEndpointWebExtensionRuntimeHintsTests { |
||||
|
||||
private final QuartzEndpointWebExtensionRuntimeHints sut = new QuartzEndpointWebExtensionRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
Set<Class<?>> bindingTypes = Set.of(QuartzGroups.class, QuartzJobDetails.class, QuartzJobGroupSummary.class, |
||||
QuartzTriggerGroupSummary.class); |
||||
for (Class<?> bindingType : bindingTypes) { |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(bindingType) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(runtimeHints); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,56 @@
@@ -0,0 +1,56 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.scheduling; |
||||
|
||||
import java.util.Set; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.CronTaskDescription; |
||||
import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.CustomTriggerTaskDescription; |
||||
import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.FixedDelayTaskDescription; |
||||
import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.FixedRateTaskDescription; |
||||
import org.springframework.boot.actuate.scheduling.ScheduledTasksEndpoint.ScheduledTasksEndpointRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link ScheduledTasksEndpointRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class ScheduledTasksEndpointRuntimeHintsTests { |
||||
|
||||
private final ScheduledTasksEndpointRuntimeHints sut = new ScheduledTasksEndpointRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
Set<Class<?>> bindingTypes = Set.of(FixedRateTaskDescription.class, FixedDelayTaskDescription.class, |
||||
CronTaskDescription.class, CustomTriggerTaskDescription.class); |
||||
for (Class<?> bindingType : bindingTypes) { |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(bindingType) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(runtimeHints); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,53 @@
@@ -0,0 +1,53 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.startup; |
||||
|
||||
import java.util.Set; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.TypeReference; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.startup.StartupEndpoint.StartupEndpointRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link StartupEndpointRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class StartupEndpointRuntimeHintsTests { |
||||
|
||||
private final StartupEndpointRuntimeHints sut = new StartupEndpointRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
Set<TypeReference> bindingTypes = Set.of( |
||||
TypeReference.of("org.springframework.boot.context.metrics.buffering.BufferedStartupStep$DefaultTag"), |
||||
TypeReference.of("org.springframework.core.metrics.jfr.FlightRecorderStartupStep$FlightRecorderTag")); |
||||
for (TypeReference bindingType : bindingTypes) { |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(bindingType) |
||||
.withMemberCategories(MemberCategory.INVOKE_PUBLIC_METHODS)).accepts(runtimeHints); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.web.mappings.reactive; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.web.mappings.reactive.DispatcherHandlersMappingDescriptionProvider.DispatcherHandlersMappingDescriptionProviderRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link DispatcherHandlersMappingDescriptionProviderRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class DispatcherHandlersMappingDescriptionProviderRuntimeHintsTests { |
||||
|
||||
private final DispatcherHandlersMappingDescriptionProviderRuntimeHints sut = new DispatcherHandlersMappingDescriptionProviderRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(DispatcherHandlerMappingDescription.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(runtimeHints); |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.web.mappings.servlet; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.web.mappings.servlet.DispatcherServletsMappingDescriptionProvider.DispatcherServletsMappingDescriptionProviderRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link DispatcherServletsMappingDescriptionProviderRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class DispatcherServletsMappingDescriptionProviderRuntimeHintsTests { |
||||
|
||||
private final DispatcherServletsMappingDescriptionProviderRuntimeHints sut = new DispatcherServletsMappingDescriptionProviderRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(DispatcherServletMappingDescription.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,47 @@
@@ -0,0 +1,47 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.web.mappings.servlet; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.web.mappings.servlet.FiltersMappingDescriptionProvider.FiltersMappingDescriptionProviderRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link FiltersMappingDescriptionProviderRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class FiltersMappingDescriptionProviderRuntimeHintsTests { |
||||
|
||||
private final FiltersMappingDescriptionProviderRuntimeHints sut = new FiltersMappingDescriptionProviderRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(FilterRegistrationMappingDescription.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(runtimeHints); |
||||
|
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,46 @@
@@ -0,0 +1,46 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.actuate.web.mappings.servlet; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.MemberCategory; |
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.actuate.web.mappings.servlet.ServletsMappingDescriptionProvider.ServletsMappingDescriptionProviderRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link ServletsMappingDescriptionProviderRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class ServletsMappingDescriptionProviderRuntimeHintsTests { |
||||
|
||||
private final ServletsMappingDescriptionProviderRuntimeHints sut = new ServletsMappingDescriptionProviderRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.reflection().onType(ServletRegistrationMappingDescription.class) |
||||
.withMemberCategories(MemberCategory.INVOKE_DECLARED_CONSTRUCTORS, MemberCategory.DECLARED_FIELDS)) |
||||
.accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,44 @@
@@ -0,0 +1,44 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.info; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.info.BuildProperties.BuildPropertiesRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link BuildPropertiesRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class BuildPropertiesRuntimeHintsTests { |
||||
|
||||
private final BuildPropertiesRuntimeHints sut = new BuildPropertiesRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.resource().forResource("META-INF/build-info.properties")) |
||||
.accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
@ -0,0 +1,43 @@
@@ -0,0 +1,43 @@
|
||||
/* |
||||
* Copyright 2012-2022 the original author or authors. |
||||
* |
||||
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||
* you may not use this file except in compliance with the License. |
||||
* You may obtain a copy of the License at |
||||
* |
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
* |
||||
* Unless required by applicable law or agreed to in writing, software |
||||
* distributed under the License is distributed on an "AS IS" BASIS, |
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||
* See the License for the specific language governing permissions and |
||||
* limitations under the License. |
||||
*/ |
||||
|
||||
package org.springframework.boot.info; |
||||
|
||||
import org.junit.jupiter.api.Test; |
||||
|
||||
import org.springframework.aot.hint.RuntimeHints; |
||||
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates; |
||||
import org.springframework.boot.info.GitProperties.GitPropertiesRuntimeHints; |
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat; |
||||
|
||||
/** |
||||
* Tests for {@link GitPropertiesRuntimeHints}. |
||||
* |
||||
* @author Moritz Halbritter |
||||
*/ |
||||
class GitPropertiesRuntimeHintsTests { |
||||
|
||||
private final GitPropertiesRuntimeHints sut = new GitPropertiesRuntimeHints(); |
||||
|
||||
@Test |
||||
void shouldRegisterHints() { |
||||
RuntimeHints runtimeHints = new RuntimeHints(); |
||||
this.sut.registerHints(runtimeHints, getClass().getClassLoader()); |
||||
assertThat(RuntimeHintsPredicates.resource().forResource("git.properties")).accepts(runtimeHints); |
||||
} |
||||
|
||||
} |
||||
Loading…
Reference in new issue