Skip to content

Commit 323a5c3

Browse files
committed
Add a unit test
1 parent c52d806 commit 323a5c3

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

msgpack-core/src/test/scala/org/msgpack/core/buffer/MessageBufferInputTest.scala

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,17 @@
1616
package org.msgpack.core.buffer
1717

1818
import java.io._
19+
import java.net.{InetSocketAddress, ServerSocket, Socket}
1920
import java.nio.ByteBuffer
21+
import java.nio.channels.{ServerSocketChannel, SocketChannel}
22+
import java.util.concurrent
23+
import java.util.concurrent.{Callable, Executors, TimeUnit}
2024
import java.util.zip.{GZIPInputStream, GZIPOutputStream}
2125

2226
import org.msgpack.core.{MessagePack, MessagePackSpec, MessageUnpacker}
2327
import xerial.core.io.IOUtil._
2428

29+
import scala.concurrent.Future
2530
import scala.util.Random
2631

2732
class MessageBufferInputTest
@@ -201,5 +206,44 @@ class MessageBufferInputTest
201206
buf.reset(in1)
202207
readInt(buf) shouldBe 42
203208
}
209+
210+
"unpack without blocking" in {
211+
val server = ServerSocketChannel.open.bind(new InetSocketAddress("localhost", 0))
212+
val executorService = Executors.newCachedThreadPool
213+
214+
try {
215+
executorService.execute(new Runnable {
216+
override def run {
217+
val server_ch = server.accept
218+
val packer = MessagePack.newDefaultPacker(server_ch)
219+
packer.packString("0123456789")
220+
packer.flush
221+
// Keep the connection open
222+
while (!executorService.isShutdown) {
223+
TimeUnit.SECONDS.sleep(1)
224+
}
225+
packer.close
226+
}
227+
})
228+
229+
val future = executorService.submit(new Callable[String] {
230+
override def call: String = {
231+
val conn_ch = SocketChannel.open(new InetSocketAddress("localhost", server.socket.getLocalPort))
232+
val unpacker = MessagePack.newDefaultUnpacker(conn_ch)
233+
val s = unpacker.unpackString
234+
unpacker.close
235+
s
236+
}
237+
})
238+
239+
future.get(5, TimeUnit.SECONDS) shouldBe "0123456789"
240+
}
241+
finally {
242+
executorService.shutdown
243+
if (!executorService.awaitTermination(5, TimeUnit.SECONDS)) {
244+
executorService.shutdownNow
245+
}
246+
}
247+
}
204248
}
205249
}

0 commit comments

Comments
 (0)