pw_blob_store: Fix write limit function
- The ConservativeWriteLimit() function for blob writers was incorrectly
implemented in the conversion to pw_stream.
- Add tests for the BlobStore read/write limit functions.
Change-Id: I033cd4c017e3982a140f29b33b94b25e1f6c0c81
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/58025
Pigweed-Auto-Submit: Wyatt Hepler <hepler@google.com>
Reviewed-by: Ewout van Bekkum <ewout@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
diff --git a/pw_blob_store/blob_store_test.cc b/pw_blob_store/blob_store_test.cc
index 8ed9c7c..f7b7d61 100644
--- a/pw_blob_store/blob_store_test.cc
+++ b/pw_blob_store/blob_store_test.cc
@@ -168,6 +168,40 @@
EXPECT_EQ(OkStatus(), blob.Init());
}
+TEST_F(BlobStoreTest, Writer_ConservativeLimits) {
+ constexpr size_t kBufferSize = 256;
+ BlobStoreBuffer<kBufferSize> blob(
+ "Blob_OK", partition_, nullptr, kvs::TestKvs(), kBufferSize);
+ ASSERT_EQ(OkStatus(), blob.Init());
+
+ BlobStore::BlobWriter writer(blob);
+ ASSERT_EQ(OkStatus(), writer.Open());
+ EXPECT_EQ(writer.ConservativeReadLimit(), 0u);
+ EXPECT_EQ(writer.ConservativeWriteLimit(), kSectorSize * kSectorCount);
+ ASSERT_EQ(OkStatus(), writer.Close());
+
+ BlobStore::DeferredWriter deferred_writer(blob);
+ ASSERT_EQ(OkStatus(), deferred_writer.Open());
+ EXPECT_EQ(deferred_writer.ConservativeReadLimit(), 0u);
+ EXPECT_EQ(deferred_writer.ConservativeWriteLimit(), kBufferSize);
+}
+
+TEST_F(BlobStoreTest, Reader_ConservativeLimits) {
+ InitSourceBufferToRandom(0x11309);
+ WriteTestBlock();
+
+ kvs::ChecksumCrc16 checksum;
+ constexpr size_t kBufferSize = 16;
+ BlobStoreBuffer<kBufferSize> blob(
+ "TestBlobBlock", partition_, &checksum, kvs::TestKvs(), kBufferSize);
+ EXPECT_EQ(OkStatus(), blob.Init());
+ BlobStore::BlobReader reader(blob);
+ ASSERT_EQ(OkStatus(), reader.Open());
+
+ EXPECT_EQ(kBlobDataSize, reader.ConservativeReadLimit());
+ EXPECT_EQ(0u, reader.ConservativeWriteLimit());
+}
+
TEST_F(BlobStoreTest, IsOpen) {
constexpr size_t kBufferSize = 256;
BlobStoreBuffer<kBufferSize> blob(
diff --git a/pw_blob_store/public/pw_blob_store/blob_store.h b/pw_blob_store/public/pw_blob_store/blob_store.h
index 7cbcd6d..a878cb3 100644
--- a/pw_blob_store/public/pw_blob_store/blob_store.h
+++ b/pw_blob_store/public/pw_blob_store/blob_store.h
@@ -137,7 +137,7 @@
// the blob. Returns zero if, in the current state, Write would return
// status other than OK. See stream.h for additional details.
size_t ConservativeLimit(LimitType limit) const override {
- if (limit == LimitType::kRead) {
+ if (limit == LimitType::kWrite) {
PW_DASSERT(open_);
return store_.WriteBytesRemaining();
}