Add test for array read in BlockDeviceInputStream, fix found bugs
This commit is contained in:
parent
4e2f589d00
commit
f10e1b982f
2 changed files with 55 additions and 1 deletions
|
@ -67,7 +67,7 @@ class BlockDeviceInputStream(
|
||||||
if (isNextByteAfterEOF())
|
if (isNextByteAfterEOF())
|
||||||
return -1
|
return -1
|
||||||
|
|
||||||
val maxPos = (off + len) % (b.size + 1)
|
val maxPos = Math.min(off + len, b.size)
|
||||||
|
|
||||||
if (len <= 0 || off > b.size)
|
if (len <= 0 || off > b.size)
|
||||||
return 0
|
return 0
|
||||||
|
@ -81,6 +81,7 @@ class BlockDeviceInputStream(
|
||||||
break
|
break
|
||||||
|
|
||||||
b[i] = readByte.toByte()
|
b[i] = readByte.toByte()
|
||||||
|
bytesRead++
|
||||||
}
|
}
|
||||||
|
|
||||||
return bytesRead
|
return bytesRead
|
||||||
|
|
|
@ -87,6 +87,59 @@ class BlockDeviceInputStreamTest {
|
||||||
Assert.assertEquals(106 and 0xFF, inputStream.read())
|
Assert.assertEquals(106 and 0xFF, inputStream.read())
|
||||||
Assert.assertEquals(107 and 0xFF, inputStream.read())
|
Assert.assertEquals(107 and 0xFF, inputStream.read())
|
||||||
|
|
||||||
|
// Go back to beginning
|
||||||
|
inputStream.skip(-testDevSize)
|
||||||
|
|
||||||
|
// Read to array
|
||||||
|
var byteArray = ByteArray(8)
|
||||||
|
Assert.assertEquals(byteArray.size, inputStream.read(byteArray))
|
||||||
|
|
||||||
|
Assert.assertArrayEquals(
|
||||||
|
byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7),
|
||||||
|
byteArray
|
||||||
|
)
|
||||||
|
|
||||||
|
// Read to array with offset + length
|
||||||
|
byteArray = byteArrayOf(0, 0, 0, 0, 0, 0, 0, 0)
|
||||||
|
Assert.assertEquals(4, inputStream.read(byteArray, 4, 4))
|
||||||
|
Assert.assertArrayEquals(
|
||||||
|
byteArrayOf(0, 0, 0, 0, 8, 9, 10, 11),
|
||||||
|
byteArray
|
||||||
|
)
|
||||||
|
|
||||||
|
// Read to array with length > array size
|
||||||
|
Assert.assertEquals(4, inputStream.read(byteArray, 4, 200))
|
||||||
|
Assert.assertArrayEquals(
|
||||||
|
byteArrayOf(0, 0, 0, 0, 12, 13, 14, 15),
|
||||||
|
byteArray
|
||||||
|
)
|
||||||
|
|
||||||
|
// Read to array with offset outside of array
|
||||||
|
Assert.assertEquals(0, inputStream.read(byteArray, 10, 4))
|
||||||
|
|
||||||
|
// Go to end of prefetched blocks
|
||||||
|
inputStream.skip(-testDevSize)
|
||||||
|
inputStream.skip((testPrefetchBlocks * testBlockSize - 4).toLong())
|
||||||
|
|
||||||
|
// Read to array, second half needs to be fetched
|
||||||
|
Assert.assertEquals(byteArray.size, inputStream.read(byteArray))
|
||||||
|
|
||||||
|
val currentPos = testPrefetchBlocks * testBlockSize - 4
|
||||||
|
|
||||||
|
Assert.assertArrayEquals(
|
||||||
|
byteArrayOf(
|
||||||
|
((currentPos + 0) % 0xFF).toByte(),
|
||||||
|
((currentPos + 1) % 0xFF).toByte(),
|
||||||
|
((currentPos + 2) % 0xFF).toByte(),
|
||||||
|
((currentPos + 3) % 0xFF).toByte(),
|
||||||
|
((currentPos + 4) % 0xFF).toByte(),
|
||||||
|
((currentPos + 5) % 0xFF).toByte(),
|
||||||
|
((currentPos + 6) % 0xFF).toByte(),
|
||||||
|
((currentPos + 7) % 0xFF).toByte()
|
||||||
|
),
|
||||||
|
byteArray
|
||||||
|
)
|
||||||
|
|
||||||
} finally {
|
} finally {
|
||||||
testFile.delete()
|
testFile.delete()
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue