Search in sources :

Example 1 with InvocationContext

use of org.springframework.boot.actuate.endpoint.InvocationContext in project spring-boot by spring-projects.

the class CloudFoundryWebEndpointDiscovererTests method getEndpointsShouldAddCloudFoundryHealthExtension.

@Test
void getEndpointsShouldAddCloudFoundryHealthExtension() {
    load(TestConfiguration.class, (discoverer) -> {
        Collection<ExposableWebEndpoint> endpoints = discoverer.getEndpoints();
        assertThat(endpoints.size()).isEqualTo(2);
        for (ExposableWebEndpoint endpoint : endpoints) {
            if (endpoint.getEndpointId().equals(EndpointId.of("health"))) {
                WebOperation operation = findMainReadOperation(endpoint);
                assertThat(operation.invoke(new InvocationContext(mock(SecurityContext.class), Collections.emptyMap()))).isEqualTo("cf");
            }
        }
    });
}
Also used : WebOperation(org.springframework.boot.actuate.endpoint.web.WebOperation) ExposableWebEndpoint(org.springframework.boot.actuate.endpoint.web.ExposableWebEndpoint) InvocationContext(org.springframework.boot.actuate.endpoint.InvocationContext) Test(org.junit.jupiter.api.Test)

Example 2 with InvocationContext

use of org.springframework.boot.actuate.endpoint.InvocationContext in project spring-boot by spring-projects.

the class CachingOperationInvokerTests method targetInvokedWithDifferentApiVersion.

@Test
void targetInvokedWithDifferentApiVersion() {
    OperationInvoker target = mock(OperationInvoker.class);
    Object expectedV2 = new Object();
    Object expectedV3 = new Object();
    InvocationContext contextV2 = new InvocationContext(mock(SecurityContext.class), Collections.emptyMap(), new ApiVersionArgumentResolver(ApiVersion.V2));
    InvocationContext contextV3 = new InvocationContext(mock(SecurityContext.class), Collections.emptyMap(), new ApiVersionArgumentResolver(ApiVersion.V3));
    given(target.invoke(contextV2)).willReturn(expectedV2);
    given(target.invoke(contextV3)).willReturn(expectedV3);
    CachingOperationInvoker invoker = new CachingOperationInvoker(target, CACHE_TTL);
    Object responseV2 = invoker.invoke(contextV2);
    assertThat(responseV2).isSameAs(expectedV2);
    then(target).should().invoke(contextV2);
    Object responseV3 = invoker.invoke(contextV3);
    assertThat(responseV3).isNotSameAs(responseV2);
    then(target).should().invoke(contextV3);
}
Also used : OperationInvoker(org.springframework.boot.actuate.endpoint.invoke.OperationInvoker) SecurityContext(org.springframework.boot.actuate.endpoint.SecurityContext) InvocationContext(org.springframework.boot.actuate.endpoint.InvocationContext) Test(org.junit.jupiter.api.Test)

Example 3 with InvocationContext

use of org.springframework.boot.actuate.endpoint.InvocationContext in project spring-boot by spring-projects.

the class CachingOperationInvokerTests method assertCacheIsUsed.

private void assertCacheIsUsed(Map<String, Object> parameters, Principal principal) {
    OperationInvoker target = mock(OperationInvoker.class);
    Object expected = new Object();
    SecurityContext securityContext = mock(SecurityContext.class);
    if (principal != null) {
        given(securityContext.getPrincipal()).willReturn(principal);
    }
    InvocationContext context = new InvocationContext(securityContext, parameters);
    given(target.invoke(context)).willReturn(expected);
    CachingOperationInvoker invoker = new CachingOperationInvoker(target, CACHE_TTL);
    Object response = invoker.invoke(context);
    assertThat(response).isSameAs(expected);
    then(target).should().invoke(context);
    Object cachedResponse = invoker.invoke(context);
    assertThat(cachedResponse).isSameAs(response);
    then(target).shouldHaveNoMoreInteractions();
}
Also used : OperationInvoker(org.springframework.boot.actuate.endpoint.invoke.OperationInvoker) SecurityContext(org.springframework.boot.actuate.endpoint.SecurityContext) InvocationContext(org.springframework.boot.actuate.endpoint.InvocationContext)

Example 4 with InvocationContext

use of org.springframework.boot.actuate.endpoint.InvocationContext in project spring-boot by spring-projects.

the class CachingOperationInvokerTests method targetAlwaysInvokedWithDifferentPrincipals.

@Test
void targetAlwaysInvokedWithDifferentPrincipals() {
    OperationInvoker target = mock(OperationInvoker.class);
    Map<String, Object> parameters = new HashMap<>();
    SecurityContext securityContext = mock(SecurityContext.class);
    given(securityContext.getPrincipal()).willReturn(mock(Principal.class), mock(Principal.class), mock(Principal.class));
    InvocationContext context = new InvocationContext(securityContext, parameters);
    Object result1 = new Object();
    Object result2 = new Object();
    Object result3 = new Object();
    given(target.invoke(context)).willReturn(result1, result2, result3);
    CachingOperationInvoker invoker = new CachingOperationInvoker(target, CACHE_TTL);
    assertThat(invoker.invoke(context)).isEqualTo(result1);
    assertThat(invoker.invoke(context)).isEqualTo(result2);
    assertThat(invoker.invoke(context)).isEqualTo(result3);
    then(target).should(times(3)).invoke(context);
}
Also used : OperationInvoker(org.springframework.boot.actuate.endpoint.invoke.OperationInvoker) HashMap(java.util.HashMap) SecurityContext(org.springframework.boot.actuate.endpoint.SecurityContext) InvocationContext(org.springframework.boot.actuate.endpoint.InvocationContext) Principal(java.security.Principal) Test(org.junit.jupiter.api.Test)

Example 5 with InvocationContext

use of org.springframework.boot.actuate.endpoint.InvocationContext in project spring-boot by spring-projects.

the class CachingOperationInvokerTests method invokeWithUniquePrincipal.

private void invokeWithUniquePrincipal(CachingOperationInvoker invoker) {
    SecurityContext securityContext = mock(SecurityContext.class);
    Principal principal = mock(Principal.class);
    given(securityContext.getPrincipal()).willReturn(principal);
    InvocationContext context = new InvocationContext(securityContext, Collections.emptyMap());
    ((Mono<?>) invoker.invoke(context)).block();
}
Also used : Mono(reactor.core.publisher.Mono) SecurityContext(org.springframework.boot.actuate.endpoint.SecurityContext) InvocationContext(org.springframework.boot.actuate.endpoint.InvocationContext) Principal(java.security.Principal)

Aggregations

InvocationContext (org.springframework.boot.actuate.endpoint.InvocationContext)17 Test (org.junit.jupiter.api.Test)14 SecurityContext (org.springframework.boot.actuate.endpoint.SecurityContext)11 OperationInvoker (org.springframework.boot.actuate.endpoint.invoke.OperationInvoker)7 HashMap (java.util.HashMap)4 Principal (java.security.Principal)3 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)2 Mono (reactor.core.publisher.Mono)2 AttributeNotFoundException (javax.management.AttributeNotFoundException)1 InvalidAttributeValueException (javax.management.InvalidAttributeValueException)1 MBeanException (javax.management.MBeanException)1 ReflectionException (javax.management.ReflectionException)1 ApiVersion (org.springframework.boot.actuate.endpoint.ApiVersion)1 InvalidEndpointRequestException (org.springframework.boot.actuate.endpoint.InvalidEndpointRequestException)1 ExposableWebEndpoint (org.springframework.boot.actuate.endpoint.web.ExposableWebEndpoint)1 WebOperation (org.springframework.boot.actuate.endpoint.web.WebOperation)1 Flux (reactor.core.publisher.Flux)1