Skip to content

JwksCacheSpec is flaky #2172

@sdelamo

Description

@sdelamo

Expected Behavior

io.micronaut.security.token.jwt.signature.jwks.JwksCacheSpec test is flaky. It often fails with errors such as:

JwksCacheSpec JWK are cached FAILED

  io.micronaut.http.client.exceptions.HttpClientResponseException: Internal Server Error
      at app//io.micronaut.http.client.netty.DefaultHttpClient.makeErrorFromRequestBody(DefaultHttpClient.java:2140)
      at app//io.micronaut.http.client.netty.DefaultHttpClient.handleExchangeResponse(DefaultHttpClient.java:960)
      at app//io.micronaut.http.client.netty.DefaultHttpClient.lambda$exchange$4(DefaultHttpClient.java:913)
      at app//io.micronaut.core.execution.ImperativeExecutionFlowImpl.flatMap(ImperativeExecutionFlowImpl.java:73)
      at app//io.micronaut.http.client.netty.DefaultHttpClient.lambda$exchange$2(DefaultHttpClient.java:913)
      at app//io.micronaut.http.client.netty.DefaultHttpClient.lambda$sendRequestWithRedirectsNoFilter$1(DefaultHttpClient.java:1666)
      at app//io.micronaut.core.execution.ImperativeExecutionFlowImpl.flatMap(ImperativeExecutionFlowImpl.java:73)
      at app//io.micronaut.core.execution.DelayedExecutionFlowImpl$FlatMap.apply(DelayedExecutionFlowImpl.java:379)
      at app//io.micronaut.core.execution.DelayedExecutionFlowImpl.work(DelayedExecutionFlowImpl.java:62)
      at app//io.micronaut.core.execution.DelayedExecutionFlowImpl.completeLazy(DelayedExecutionFlowImpl.java:82)
      at app//io.micronaut.core.execution.DelayedExecutionFlowImpl.complete(DelayedExecutionFlowImpl.java:101)
      at app//io.micronaut.http.client.netty.DefaultHttpClient$6.complete(DefaultHttpClient.java:1763)
      at app//io.micronaut.http.client.netty.Http1ResponseHandler$BufferedContent.complete(Http1ResponseHandler.java:227)
      at app//io.micronaut.http.client.netty.Http1ResponseHandler$BufferedContent.read(Http1ResponseHandler.java:194)
      at app//io.micronaut.http.client.netty.Http1ResponseHandler$BufferedContent.read(Http1ResponseHandler.java:161)
      at app//io.micronaut.http.client.netty.Http1ResponseHandler.channelReadInstrumented(Http1ResponseHandler.java:75)
      at app//io.micronaut.http.client.netty.Http1ResponseHandler.channelReadInstrumented(Http1ResponseHandler.java:50)
      at app//io.micronaut.http.client.netty.SimpleChannelInboundHandlerInstrumented.lambda$channelRead0$0(SimpleChannelInboundHandlerInstrumented.java:46)
      at app//io.micronaut.core.propagation.ThreadContext.propagate(ThreadContext.java:111)
      at app//io.micronaut.core.propagation.PropagatedContextImpl.propagateCall(PropagatedContextImpl.java:121)
      at app//io.micronaut.http.client.netty.SimpleChannelInboundHandlerInstrumented.channelRead0(SimpleChannelInboundHandlerInstrumented.java:45)
      at app//io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:99)
      at app//io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
      at app//io.netty.handler.codec.http.HttpContentDecoder.decode(HttpContentDecoder.java:170)
      at app//io.netty.handler.codec.http.HttpContentDecoder.decode(HttpContentDecoder.java:48)
      at app//io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:91)
      at app//io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
      at app//io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:434)
      at app//io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:361)
      at app//io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:325)
      at app//io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:249)
      at app//io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
      at app//io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:288)
      at app//io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
      at app//io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1429)
      at app//io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918)
      at app//io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:176)
      at app//io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.handle(AbstractNioChannel.java:445)
      at app//io.netty.channel.nio.NioIoHandler$DefaultNioRegistration.handle(NioIoHandler.java:388)
      at app//io.netty.channel.nio.NioIoHandler.processSelectedKey(NioIoHandler.java:596)
      at app//io.netty.channel.nio.NioIoHandler.processSelectedKeysPlain(NioIoHandler.java:541)
      at app//io.netty.channel.nio.NioIoHandler.processSelectedKeys(NioIoHandler.java:514)
      at app//io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:484)
      at app//io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
      at app//io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
      at app//io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1195)
      at app//io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
      at app//io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
      at java.base@25.0.2/java.lang.Thread.run(Thread.java:1474)


  19:24:51.260 [main] INFO  i.m.context.env.DefaultEnvironment - Established active environments: [test]
  19:24:51.545 [main] INFO  i.m.context.env.DefaultEnvironment - Established active environments: [test]
  19:24:51.580 [main] INFO  i.m.context.env.DefaultEnvironment - Established active environments: [test]
  19:24:51.623 [main] INFO  i.m.context.env.DefaultEnvironment - Established active environments: [test]


  19:24:52.553 [default-eventLoopGroup-4-1] ERROR i.m.http.server.RouteExecutor - Unexpected error occurred: Error instantiating bean of type  [io.micronaut.security.token.generator.DefaultAccessRefreshTokenGenerator]
  
  Message: Recursive update
  Path Taken:
  new i.m.s.e.LoginController(Authenticator<HttpRequest<Object>> authenticator, LoginHandler<HttpRequest<Object>, MutableHttpResponse<Object>> loginHandler, ApplicationEventPublisher<LoginSuccessfulEvent> loginSuccessfulEventPublisher, ApplicationEventPublisher<LoginFailedEvent> loginFailedEventPublisher, HttpHostResolver httpHostResolver, HttpLocaleResolver httpLocaleResolver, LoginControllerConfiguration loginControllerConfiguration)
  ---> new i.m.s.e.LoginController(Authenticator<HttpRequest<Object>> authenticator, [LoginHandler<HttpRequest<Object>, MutableHttpResponse<Object>> loginHandler], ApplicationEventPublisher<LoginSuccessfulEvent> loginSuccessfulEventPublisher, ApplicationEventPublisher<LoginFailedEvent> loginFailedEventPublisher, HttpHostResolver httpHostResolver, HttpLocaleResolver httpLocaleResolver, LoginControllerConfiguration loginControllerConfiguration)
        ---> new @j.i.Singleton i.m.s.t.b.AccessRefreshTokenLoginHandler([AccessRefreshTokenGenerator accessRefreshTokenGenerator])
              ---> new @j.i.Singleton i.m.s.t.g.DefaultAccessRefreshTokenGenerator(AccessTokenConfiguration accessTokenConfiguration, TokenRenderer tokenRenderer, [TokenGenerator tokenGenerator], BeanContext beanContext, RefreshTokenGenerator refreshTokenGenerator, ClaimsGenerator claimsGenerator, ApplicationEventPublisher<RefreshTokenGeneratedEvent> refreshTokenGeneratedEventPublisher, ApplicationEventPublisher<AccessTokenGeneratedEvent> accessTokenGeneratedEventPublisher)
  io.micronaut.context.exceptions.BeanInstantiationException: Error instantiating bean of type  [io.micronaut.security.token.generator.DefaultAccessRefreshTokenGenerator]
  
  Message: Recursive update
  Path Taken:
  new i.m.s.e.LoginController(Authenticator<HttpRequest<Object>> authenticator, LoginHandler<HttpRequest<Object>, MutableHttpResponse<Object>> loginHandler, ApplicationEventPublisher<LoginSuccessfulEvent> loginSuccessfulEventPublisher, ApplicationEventPublisher<LoginFailedEvent> loginFailedEventPublisher, HttpHostResolver httpHostResolver, HttpLocaleResolver httpLocaleResolver, LoginControllerConfiguration loginControllerConfiguration)
  ---> new i.m.s.e.LoginController(Authenticator<HttpRequest<Object>> authenticator, [LoginHandler<HttpRequest<Object>, MutableHttpResponse<Object>> loginHandler], ApplicationEventPublisher<LoginSuccessfulEvent> loginSuccessfulEventPublisher, ApplicationEventPublisher<LoginFailedEvent> loginFailedEventPublisher, HttpHostResolver httpHostResolver, HttpLocaleResolver httpLocaleResolver, LoginControllerConfiguration loginControllerConfiguration)
        ---> new @j.i.Singleton i.m.s.t.b.AccessRefreshTokenLoginHandler([AccessRefreshTokenGenerator accessRefreshTokenGenerator])
              ---> new @j.i.Singleton i.m.s.t.g.DefaultAccessRefreshTokenGenerator(AccessTokenConfiguration accessTokenConfiguration, TokenRenderer tokenRenderer, [TokenGenerator tokenGenerator], BeanContext beanContext, RefreshTokenGenerator refreshTokenGenerator, ClaimsGenerator claimsGenerator, ApplicationEventPublisher<RefreshTokenGeneratedEvent> refreshTokenGeneratedEventPublisher, ApplicationEventPublisher<AccessTokenGeneratedEvent> accessTokenGeneratedEventPublisher)
        at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2108)
        at io.micronaut.context.DefaultBeanContext.createRegistration(DefaultBeanContext.java:2803)
        at io.micronaut.context.DefaultBeanContext$6.create(DefaultBeanContext.java:2769)
        at io.micronaut.runtime.context.scope.refresh.RefreshScope.lambda$getOrCreate$0(RefreshScope.java:86)
        at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1724)
        at io.micronaut.runtime.context.scope.refresh.RefreshScope.getOrCreate(RefreshScope.java:85)
        at io.micronaut.context.DefaultBeanContext.getOrCreateScopedRegistration(DefaultBeanContext.java:2755)
        at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2683)
        at io.micronaut.context.DefaultBeanContext.getProxyTargetBean(DefaultBeanContext.java:1477)
        at io.micronaut.context.AbstractBeanResolutionContext.getProxyTargetBean(AbstractBeanResolutionContext.java:572)
        at io.micronaut.security.token.jwt.signature.jwks.$JwksCacheSpec$JwtTokenGeneratorReplacement$Definition$Intercepted.interceptedTarget(Unknown Source)
        at io.micronaut.security.token.jwt.signature.jwks.$JwksCacheSpec$JwtTokenGeneratorReplacement$Definition$Intercepted.generateToken(Unknown Source)
        at io.micronaut.security.token.generator.DefaultAccessRefreshTokenGenerator.generate(DefaultAccessRefreshTokenGenerator.java:172)
        at io.micronaut.security.token.generator.DefaultAccessRefreshTokenGenerator.generate(DefaultAccessRefreshTokenGenerator.java:106)
        at io.micronaut.security.token.bearer.AccessRefreshTokenLoginHandler.loginSuccess(AccessRefreshTokenLoginHandler.java:54)
        at io.micronaut.security.token.bearer.AccessRefreshTokenLoginHandler.loginSuccess(AccessRefreshTokenLoginHandler.java:39)
        at io.micronaut.security.endpoints.LoginController.lambda$login$0(LoginController.java:124)
        at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:106)
        at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:75)
        at reactor.core.publisher.FluxLimitRequest$FluxLimitRequestSubscriber.onNext(FluxLimitRequest.java:99)
        at reactor.core.publisher.FluxOnErrorResume$ResumeSubscriber.onNext(FluxOnErrorResume.java:80)
        at reactor.core.publisher.FluxSwitchMapNoPrefetch$SwitchMapInner.onNext(FluxSwitchMapNoPrefetch.java:414)
        at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2564)
        at reactor.core.publisher.FluxSwitchMapNoPrefetch$SwitchMapInner.onSubscribe(FluxSwitchMapNoPrefetch.java:384)
        at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:56)
        at reactor.core.publisher.Mono.subscribe(Mono.java:4569)
        at reactor.core.publisher.FluxSwitchMapNoPrefetch$SwitchMapMain.subscribeInner(FluxSwitchMapNoPrefetch.java:221)
        at reactor.core.publisher.FluxSwitchMapNoPrefetch$SwitchMapMain.onNext(FluxSwitchMapNoPrefetch.java:164)
        at reactor.core.publisher.FluxCreate$NoOverflowBaseAsyncSink.next(FluxCreate.java:741)
        at reactor.core.publisher.FluxCreate$SerializedFluxSink.next(FluxCreate.java:164)
        at io.micronaut.security.testutils.authprovider.MockAuthenticationProvider.lambda$authenticate$0(MockAuthenticationProvider.java:69)
        at reactor.core.publisher.FluxCreate.subscribe(FluxCreate.java:97)
        at reactor.core.publisher.InternalFluxOperator.subscribe(InternalFluxOperator.java:67)
        at io.micronaut.core.async.propagation.ReactivePropagation$1.subscribe(ReactivePropagation.java:77)
        at io.micronaut.core.async.propagation.ReactivePropagation$1.subscribe(ReactivePropagation.java:86)
        at reactor.core.publisher.MonoFromPublisher.subscribe(MonoFromPublisher.java:63)
        at reactor.core.publisher.Mono.subscribe(Mono.java:4569)
        at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onNext(MonoFlatMapMany.java:197)
        at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:83)
        at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.innerNext(FluxConcatMapNoPrefetch.java:258)
        at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:868)
        at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onNext(MonoPeekTerminal.java:184)
        at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onNext(FluxFilterFuseable.java:338)
        at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2564)
        at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.request(FluxFilterFuseable.java:411)
        at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.request(MonoPeekTerminal.java:142)
        at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2361)
        at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2235)
        at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onSubscribe(MonoPeekTerminal.java:155)
        at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onSubscribe(FluxFilterFuseable.java:305)
        at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:56)
        at reactor.core.publisher.Mono.subscribe(Mono.java:4569)
        at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.onNext(FluxConcatMapNoPrefetch.java:206)
        at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:335)
        at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:294)
        at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.innerComplete(FluxConcatMapNoPrefetch.java:274)
        at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onComplete(FluxConcatMap.java:892)
        at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.onComplete(MonoPeekTerminal.java:303)
        at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.onComplete(FluxFilterFuseable.java:392)
        at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2566)
        at reactor.core.publisher.FluxFilterFuseable$FilterFuseableConditionalSubscriber.request(FluxFilterFuseable.java:411)
        at reactor.core.publisher.MonoPeekTerminal$MonoTerminalPeekSubscriber.request(MonoPeekTerminal.java:142)
        at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.request(Operators.java:2325)
        at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.request(FluxConcatMapNoPrefetch.java:338)
        at reactor.core.publisher.MonoNext$NextSubscriber.request(MonoNext.java:109)
        at reactor.core.publisher.MonoFlatMapMany$FlatMapManyMain.onSubscribe(MonoFlatMapMany.java:142)
        at reactor.core.publisher.MonoNext$NextSubscriber.onSubscribe(MonoNext.java:71)
        at reactor.core.publisher.FluxConcatMapNoPrefetch$FluxConcatMapNoPrefetchSubscriber.onSubscribe(FluxConcatMapNoPrefetch.java:163)
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:200)
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:82)
        at reactor.core.publisher.InternalFluxOperator.subscribe(InternalFluxOperator.java:67)
        at reactor.core.publisher.FluxDefer.subscribe(FluxDefer.java:55)
        at reactor.core.publisher.Mono.subscribe(Mono.java:4569)
        at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onComplete(FluxSwitchIfEmpty.java:83)
        at reactor.core.publisher.MonoFlatMap$FlatMapMain.onComplete(MonoFlatMap.java:189)
        at reactor.core.publisher.MonoNext$NextSubscriber.onComplete(MonoNext.java:103)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.checkTerminated(FluxFlatMap.java:851)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.drainLoop(FluxFlatMap.java:613)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.drain(FluxFlatMap.java:593)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.onComplete(FluxFlatMap.java:470)
        at reactor.core.publisher.FluxIterable$IterableSubscription.slowPath(FluxIterable.java:357)
        at reactor.core.publisher.FluxIterable$IterableSubscription.request(FluxIterable.java:294)
        at reactor.core.publisher.FluxFlatMap$FlatMapMain.onSubscribe(FluxFlatMap.java:374)
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:200)
        at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:82)
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:75)
        at io.micronaut.core.async.propagation.ReactivePropagation$1.subscribe(ReactivePropagation.java:77)
        at io.micronaut.core.async.propagation.ReactivePropagation$1.subscribe(ReactivePropagation.java:86)
        at reactor.core.publisher.MonoFromPublisher.subscribe(MonoFromPublisher.java:63)
        at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:75)
        at io.micronaut.http.reactive.execution.ReactorExecutionFlowImpl.onComplete(ReactorExecutionFlowImpl.java:243)
        at io.micronaut.http.server.netty.NettyRequestLifecycle.handleNormal(NettyRequestLifecycle.java:105)
        at io.micronaut.http.server.netty.RoutingInBoundHandler.lambda$accept$1(RoutingInBoundHandler.java:205)
        at io.micronaut.core.propagation.ThreadContext.propagate(ThreadContext.java:125)
        at io.micronaut.core.propagation.PropagatedContextImpl.propagate(PropagatedContextImpl.java:152)
        at io.micronaut.http.server.netty.RoutingInBoundHandler.accept(RoutingInBoundHandler.java:205)
        at io.micronaut.http.server.netty.websocket.NettyServerWebSocketUpgradeHandler.accept(NettyServerWebSocketUpgradeHandler.java:198)
        at io.micronaut.http.server.netty.handler.PipeliningServerHandler$OptimisticBufferingInboundHandler.read(PipeliningServerHandler.java:571)
        at io.micronaut.http.server.netty.handler.PipeliningServerHandler.channelRead(PipeliningServerHandler.java:247)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
        at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93)
        at io.netty.handler.codec.http.websocketx.extensions.WebSocketServerExtensionHandler.channelRead(WebSocketServerExtensionHandler.java:84)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
        at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:434)
        at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:361)
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:325)
        at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:249)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
        at io.netty.handler.timeout.IdleStateHandler.channelRead(IdleStateHandler.java:288)
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:355)
        at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1429)
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:918)
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:176)
        at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.handle(AbstractNioChannel.java:445)
        at io.netty.channel.nio.NioIoHandler$DefaultNioRegistration.handle(NioIoHandler.java:388)
        at io.netty.channel.nio.NioIoHandler.processSelectedKey(NioIoHandler.java:596)
        at io.netty.channel.nio.NioIoHandler.processSelectedKeysPlain(NioIoHandler.java:541)
        at io.netty.channel.nio.NioIoHandler.processSelectedKeys(NioIoHandler.java:514)
        at io.netty.channel.nio.NioIoHandler.run(NioIoHandler.java:484)
        at io.netty.channel.SingleThreadIoEventLoop.runIo(SingleThreadIoEventLoop.java:225)
        at io.netty.channel.SingleThreadIoEventLoop.run(SingleThreadIoEventLoop.java:196)
        at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:1195)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.base/java.lang.Thread.run(Thread.java:1474)
  Caused by: java.lang.IllegalStateException: Recursive update
        at java.base/java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1779)
        at io.micronaut.runtime.context.scope.refresh.RefreshScope.getOrCreate(RefreshScope.java:85)
        at io.micronaut.context.DefaultBeanContext.getOrCreateScopedRegistration(DefaultBeanContext.java:2755)
        at io.micronaut.context.DefaultBeanContext.resolveBeanRegistration(DefaultBeanContext.java:2683)
        at io.micronaut.context.DefaultBeanContext.getProxyTargetBean(DefaultBeanContext.java:1477)
        at io.micronaut.context.AbstractBeanResolutionContext.getProxyTargetBean(AbstractBeanResolutionContext.java:572)
        at io.micronaut.security.token.jwt.signature.jwks.$JwksCacheSpec$CognitoSignatureConfiguration$Definition$Intercepted.interceptedTarget(Unknown Source)
        at io.micronaut.security.token.jwt.signature.jwks.$JwksCacheSpec$CognitoSignatureConfiguration$Definition$Intercepted.getPublicKey(Unknown Source)
        at io.micronaut.security.token.jwt.signature.rsa.RSASignature.<init>(RSASignature.java:44)
        at io.micronaut.security.token.jwt.signature.rsa.RSASignatureGenerator.<init>(RSASignatureGenerator.java:47)
        at org.codehaus.groovy.vmplugin.v8.IndyInterface.fromCache(IndyInterface.java:344)
        at io.micronaut.security.token.jwt.signature.jwks.JwksCacheSpec$JwtTokenGeneratorReplacement.<init>(JwksCacheSpec.groovy:390)
        at io.micronaut.security.token.jwt.signature.jwks.$JwksCacheSpec$JwtTokenGeneratorReplacement$Definition.instantiate(Unknown Source)
        at io.micronaut.context.DefaultBeanContext.resolveByBeanFactory(DefaultBeanContext.java:2092)
        ... 124 common frames omitted

The test should be re-written while keeping the same verifications but in none flaky way.

Actual Behaviour

No response

Steps To Reproduce

No response

Environment Information

No response

Example Application

No response

Version

5.0.0

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions