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();
       }