Disk: Predictable behavior for zero length reads
parent
f8a46b7196
commit
4ef8fe8794
|
|
@ -6,6 +6,9 @@ using namespace icsneo::Disk;
|
|||
|
||||
optional<uint64_t> ReadDriver::readLogicalDisk(Communication& com, device_eventhandler_t report,
|
||||
uint64_t pos, uint8_t* into, uint64_t amount, std::chrono::milliseconds timeout) {
|
||||
if(amount == 0)
|
||||
return 0;
|
||||
|
||||
optional<uint64_t> ret;
|
||||
|
||||
// Read into here if we can't read directly into the user buffer
|
||||
|
|
|
|||
|
|
@ -9,6 +9,9 @@ const APIEvent::Severity WriteDriver::NonatomicSeverity = APIEvent::Severity::Ev
|
|||
|
||||
optional<uint64_t> WriteDriver::writeLogicalDisk(Communication& com, device_eventhandler_t report, ReadDriver& readDriver,
|
||||
uint64_t pos, const uint8_t* from, uint64_t amount, std::chrono::milliseconds timeout) {
|
||||
if(amount == 0)
|
||||
return 0;
|
||||
|
||||
optional<uint64_t> ret;
|
||||
|
||||
const uint32_t idealBlockSize = getBlockSizeBounds().second;
|
||||
|
|
|
|||
|
|
@ -11,6 +11,15 @@ TEST_F(DiskDriverTest, Read) {
|
|||
EXPECT_EQ(driver->readCalls, 1u);
|
||||
}
|
||||
|
||||
TEST_F(DiskDriverTest, ReadZero) {
|
||||
uint8_t b = 0xCDu;
|
||||
const auto amountRead = readLogicalDisk(0, &b, 0);
|
||||
EXPECT_TRUE(amountRead.has_value());
|
||||
EXPECT_EQ(amountRead, 0u);
|
||||
EXPECT_EQ(b, 0xCDu);
|
||||
EXPECT_EQ(driver->readCalls, 0u);
|
||||
}
|
||||
|
||||
TEST_F(DiskDriverTest, ReadUnaligned) {
|
||||
std::array<uint8_t, 120> buf;
|
||||
buf.fill(0u);
|
||||
|
|
|
|||
|
|
@ -12,6 +12,17 @@ TEST_F(DiskDriverTest, Write) {
|
|||
EXPECT_EQ(driver->writeCalls, 1u);
|
||||
}
|
||||
|
||||
TEST_F(DiskDriverTest, WriteZero) {
|
||||
uint8_t b = 0xCDu;
|
||||
const auto amountWritten = writeLogicalDisk(0, &b, 0);
|
||||
EXPECT_TRUE(amountWritten.has_value());
|
||||
EXPECT_EQ(amountWritten, 0u);
|
||||
EXPECT_EQ(driver->mockDisk[0], TEST_STRING[0]);
|
||||
EXPECT_EQ(driver->atomicityChecks, 0u);
|
||||
EXPECT_EQ(driver->readCalls, 0u);
|
||||
EXPECT_EQ(driver->writeCalls, 0u);
|
||||
}
|
||||
|
||||
TEST_F(DiskDriverTest, WriteNoAtomicityCheck) {
|
||||
driver->supportsAtomic = false;
|
||||
expectedErrors.push({ APIEvent::Type::AtomicOperationCompletedNonatomically, APIEvent::Severity::EventInfo });
|
||||
|
|
|
|||
Loading…
Reference in New Issue