Skip to content

Commit

Permalink
Ensure release is not called more than once
Browse files Browse the repository at this point in the history
  • Loading branch information
jameskleeh committed Feb 12, 2020
1 parent f3df879 commit 6b459cb
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -206,10 +206,7 @@ public void channelInactive(ChannelHandlerContext ctx) throws Exception {
}

private void cleanupIfNecessary(ChannelHandlerContext ctx) {
NettyHttpRequest request = NettyHttpRequest.remove(ctx);
if (request != null) {
cleanupRequest(ctx, request);
}
NettyHttpRequest.remove(ctx);
}

private void cleanupRequest(ChannelHandlerContext ctx, NettyHttpRequest request) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,12 @@
*/
package io.micronaut.runtime.http.scope


import io.micronaut.context.event.ApplicationEventListener
import io.micronaut.http.HttpRequest
import io.micronaut.http.annotation.Controller
import io.micronaut.http.annotation.Get
import io.micronaut.http.context.event.HttpRequestTerminatedEvent
import io.micronaut.http.server.netty.AbstractMicronautSpec
import io.micronaut.runtime.http.scope.RequestCustomScope
import io.micronaut.runtime.http.scope.RequestScope
import spock.util.concurrent.PollingConditions

import javax.annotation.PreDestroy
Expand All @@ -37,35 +36,42 @@ class RequestScopeSpec extends AbstractMicronautSpec {
void "test @Request bean created per request"() {
given:
PollingConditions conditions = new PollingConditions(delay: 0.5, timeout: 3)
ReqTerminatedListener listener = applicationContext.getBean(ReqTerminatedListener)

when:
def result = rxClient.retrieve(HttpRequest.GET("/test-request-scope"), String).blockingFirst()

then:
result == "message count 1, count within request 1"
RequestBean.BEANS_CREATED.size() == 1
conditions.eventually {
listener.callCount == 1
RequestBean.BEANS_CREATED.first().dead
}

when:
RequestBean.BEANS_CREATED.clear()
listener.callCount = 0
result = rxClient.retrieve(HttpRequest.GET("/test-request-scope"), String).blockingFirst()

then:
result == "message count 2, count within request 1"
RequestBean.BEANS_CREATED.size() == 1
conditions.eventually {
listener.callCount == 1
RequestBean.BEANS_CREATED.first().dead
}

when:
RequestBean.BEANS_CREATED.clear()
listener.callCount = 0
result = rxClient.retrieve(HttpRequest.GET("/test-request-scope"), String).blockingFirst()

then:
result == "message count 3, count within request 1"
RequestBean.BEANS_CREATED.size() == 1
conditions.eventually {
listener.callCount == 1
RequestBean.BEANS_CREATED.first().dead
}
}
Expand Down Expand Up @@ -154,4 +160,14 @@ class RequestScopeSpec extends AbstractMicronautSpec {
throw new IllegalStateException("Request does not match")
}
}

@Singleton
static class ReqTerminatedListener implements ApplicationEventListener<HttpRequestTerminatedEvent> {
int callCount

@Override
void onApplicationEvent(HttpRequestTerminatedEvent event) {
callCount++
}
}
}

0 comments on commit 6b459cb

Please sign in to comment.