|
17 | 17 |
|
18 | 18 | package org.apache.spark.util
|
19 | 19 |
|
20 |
| -import java.io.{ByteArrayInputStream, ByteArrayOutputStream, File, FileOutputStream, PrintStream} |
| 20 | +import java.io.{ByteArrayInputStream, ByteArrayOutputStream, DataOutput, DataOutputStream, File, |
| 21 | + FileOutputStream, PrintStream} |
21 | 22 | import java.lang.{Double => JDouble, Float => JFloat}
|
22 | 23 | import java.net.{BindException, ServerSocket, URI}
|
23 | 24 | import java.nio.{ByteBuffer, ByteOrder}
|
@@ -389,6 +390,28 @@ class UtilsSuite extends SparkFunSuite with ResetSystemProperties with Logging {
|
389 | 390 | assert(Utils.deserializeLongValue(bbuf.array) === testval)
|
390 | 391 | }
|
391 | 392 |
|
| 393 | + test("writeByteBuffer should not change ByteBuffer position") { |
| 394 | + // Test a buffer with an underlying array, for both writeByteBuffer methods. |
| 395 | + val testBuffer = ByteBuffer.wrap(Array[Byte](1, 2, 3, 4)) |
| 396 | + assert(testBuffer.hasArray) |
| 397 | + val bytesOut = new ByteBufferOutputStream(4096) |
| 398 | + Utils.writeByteBuffer(testBuffer, bytesOut) |
| 399 | + assert(testBuffer.position() === 0) |
| 400 | + |
| 401 | + val dataOut = new DataOutputStream(bytesOut) |
| 402 | + Utils.writeByteBuffer(testBuffer, dataOut: DataOutput) |
| 403 | + assert(testBuffer.position() === 0) |
| 404 | + |
| 405 | + // Test a buffer without an underlying array, for both writeByteBuffer methods. |
| 406 | + val testDirectBuffer = ByteBuffer.allocateDirect(8) |
| 407 | + assert(!testDirectBuffer.hasArray()) |
| 408 | + Utils.writeByteBuffer(testDirectBuffer, bytesOut) |
| 409 | + assert(testDirectBuffer.position() === 0) |
| 410 | + |
| 411 | + Utils.writeByteBuffer(testDirectBuffer, dataOut: DataOutput) |
| 412 | + assert(testDirectBuffer.position() === 0) |
| 413 | + } |
| 414 | + |
392 | 415 | test("get iterator size") {
|
393 | 416 | val empty = Seq[Int]()
|
394 | 417 | assert(Utils.getIteratorSize(empty.toIterator) === 0L)
|
|
0 commit comments