|
28 | 28 | import org.junit.Test; |
29 | 29 |
|
30 | 30 | import java.util.Set; |
| 31 | +import java.util.concurrent.CompletionStage; |
31 | 32 | import java.util.concurrent.ExecutorService; |
32 | 33 | import java.util.concurrent.Executors; |
33 | 34 | import java.util.concurrent.TimeUnit; |
@@ -227,6 +228,30 @@ public void shouldReturnServerVersionWhenReleased() |
227 | 228 | assertEquals( version, connection.serverVersion() ); |
228 | 229 | } |
229 | 230 |
|
| 231 | + @Test |
| 232 | + public void shouldReturnSameCompletionStageFromRelease() |
| 233 | + { |
| 234 | + EmbeddedChannel channel = new EmbeddedChannel(); |
| 235 | + InboundMessageDispatcher messageDispatcher = new InboundMessageDispatcher( channel, DEV_NULL_LOGGING ); |
| 236 | + ChannelAttributes.setMessageDispatcher( channel, messageDispatcher ); |
| 237 | + |
| 238 | + NettyConnection connection = newConnection( channel ); |
| 239 | + |
| 240 | + CompletionStage<Void> releaseStage1 = connection.release(); |
| 241 | + CompletionStage<Void> releaseStage2 = connection.release(); |
| 242 | + CompletionStage<Void> releaseStage3 = connection.release(); |
| 243 | + |
| 244 | + channel.runPendingTasks(); |
| 245 | + |
| 246 | + // RESET should be send only once |
| 247 | + assertEquals( 1, channel.outboundMessages().size() ); |
| 248 | + assertEquals( RESET, channel.outboundMessages().poll() ); |
| 249 | + |
| 250 | + // all returned stages should be the same |
| 251 | + assertEquals( releaseStage1, releaseStage2 ); |
| 252 | + assertEquals( releaseStage2, releaseStage3 ); |
| 253 | + } |
| 254 | + |
230 | 255 | private void testWriteInEventLoop( String threadName, Consumer<NettyConnection> action ) throws Exception |
231 | 256 | { |
232 | 257 | EmbeddedChannel channel = spy( new EmbeddedChannel() ); |
|
0 commit comments