pw_blob_store: Allow large deferred write buffers

Remove size restrictions on the internal buffer. These are no longer
needed since the addition of the flash_write_size_bytes parameter.

Remove flash_write_size_bytes argument default for BlobStoreBuffer

Change-Id: If47655ae19efc46942894e7b0f4727c84936849e
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/25100
Commit-Queue: David Rogers <davidrogers@google.com>
Reviewed-by: Ewout van Bekkum <ewout@google.com>
diff --git a/pw_blob_store/blob_store.cc b/pw_blob_store/blob_store.cc
index 27398cc..247886c 100644
--- a/pw_blob_store/blob_store.cc
+++ b/pw_blob_store/blob_store.cc
@@ -29,10 +29,8 @@
   PW_LOG_INFO("Init BlobStore");
 
   const size_t write_buffer_size_alignment =
-      write_buffer_.size_bytes() % partition_.alignment_bytes();
+      flash_write_size_bytes_ % partition_.alignment_bytes();
   PW_CHECK_UINT_EQ((write_buffer_size_alignment), 0);
-  PW_CHECK_UINT_GE(write_buffer_.size_bytes(), partition_.alignment_bytes());
-  PW_CHECK_UINT_LE(write_buffer_.size_bytes(), partition_.sector_size_bytes());
   PW_CHECK_UINT_GE(write_buffer_.size_bytes(), flash_write_size_bytes_);
   PW_CHECK_UINT_GE(flash_write_size_bytes_, partition_.alignment_bytes());
 
diff --git a/pw_blob_store/blob_store_chunk_write_test.cc b/pw_blob_store/blob_store_chunk_write_test.cc
index cf7219d..49e0016 100644
--- a/pw_blob_store/blob_store_chunk_write_test.cc
+++ b/pw_blob_store/blob_store_chunk_write_test.cc
@@ -59,7 +59,7 @@
     snprintf(name, sizeof(name), "Blob%u", static_cast<unsigned>(chunk_size));
 
     BlobStoreBuffer<kBufferSize> blob(
-        name, partition_, &checksum, kvs::TestKvs());
+        name, partition_, &checksum, kvs::TestKvs(), kBufferSize);
     EXPECT_EQ(Status::Ok(), blob.Init());
 
     BlobStore::BlobWriter writer(blob);
diff --git a/pw_blob_store/blob_store_deferred_write_test.cc b/pw_blob_store/blob_store_deferred_write_test.cc
index 71996e1..bd15ae3 100644
--- a/pw_blob_store/blob_store_deferred_write_test.cc
+++ b/pw_blob_store/blob_store_deferred_write_test.cc
@@ -52,7 +52,6 @@
   // Fill the source buffer with random pattern based on given seed, written to
   // BlobStore in specified chunk size.
   void ChunkWriteTest(size_t chunk_size, size_t flush_interval) {
-    constexpr size_t kBufferSize = 256;
     constexpr size_t kWriteSize = 64;
     kvs::ChecksumCrc16 checksum;
 
@@ -112,8 +111,9 @@
   }
 
   static constexpr size_t kFlashAlignment = 16;
-  static constexpr size_t kSectorSize = 2048;
-  static constexpr size_t kSectorCount = 2;
+  static constexpr size_t kSectorSize = 1024;
+  static constexpr size_t kSectorCount = 4;
+  static constexpr size_t kBufferSize = 2 * kSectorSize;
 
   kvs::FakeFlashMemoryBuffer<kSectorSize, kSectorCount> flash_;
   kvs::FlashPartition partition_;
@@ -157,7 +157,7 @@
 
 TEST_F(DeferredWriteTest, ChunkWrite64FullBufferFill) {
   InitBufferToRandom(0x9);
-  ChunkWriteTest(64, 256);
+  ChunkWriteTest(64, kBufferSize);
 }
 
 TEST_F(DeferredWriteTest, ChunkWrite256) {
diff --git a/pw_blob_store/blob_store_test.cc b/pw_blob_store/blob_store_test.cc
index 4c1fe3d..d2ea203 100644
--- a/pw_blob_store/blob_store_test.cc
+++ b/pw_blob_store/blob_store_test.cc
@@ -73,7 +73,7 @@
     snprintf(name, sizeof(name), "TestBlobBlock");
 
     BlobStoreBuffer<kBufferSize> blob(
-        name, partition_, &checksum, kvs::TestKvs());
+        name, partition_, &checksum, kvs::TestKvs(), kBufferSize);
     EXPECT_EQ(Status::Ok(), blob.Init());
 
     BlobStore::BlobWriter writer(blob);
@@ -99,7 +99,9 @@
     VerifyFlash(flash_.buffer());
 
     char name[16] = "TestBlobBlock";
-    BlobStoreBuffer<16> blob(name, partition_, &checksum, kvs::TestKvs());
+    constexpr size_t kBufferSize = 16;
+    BlobStoreBuffer<kBufferSize> blob(
+        name, partition_, &checksum, kvs::TestKvs(), kBufferSize);
     EXPECT_EQ(Status::Ok(), blob.Init());
 
     // Use reader to check for valid data.
@@ -158,12 +160,16 @@
 TEST_F(BlobStoreTest, Init_Ok) {
   // TODO: Do init test with flash/kvs explicitly in the different possible
   // entry states.
-  BlobStoreBuffer<256> blob("Blob_OK", partition_, nullptr, kvs::TestKvs());
+  constexpr size_t kBufferSize = 256;
+  BlobStoreBuffer<kBufferSize> blob(
+      "Blob_OK", partition_, nullptr, kvs::TestKvs(), kBufferSize);
   EXPECT_EQ(Status::Ok(), blob.Init());
 }
 
 TEST_F(BlobStoreTest, IsOpen) {
-  BlobStoreBuffer<256> blob("Blob_open", partition_, nullptr, kvs::TestKvs());
+  constexpr size_t kBufferSize = 256;
+  BlobStoreBuffer<kBufferSize> blob(
+      "Blob_open", partition_, nullptr, kvs::TestKvs(), kBufferSize);
   EXPECT_EQ(Status::Ok(), blob.Init());
 
   BlobStore::DeferredWriter deferred_writer(blob);
@@ -203,7 +209,9 @@
   // TODO: Do this test with flash/kvs in the different entry state
   // combinations.
 
-  BlobStoreBuffer<256> blob(blob_title, partition_, &checksum, kvs::TestKvs());
+  constexpr size_t kBufferSize = 256;
+  BlobStoreBuffer<kBufferSize> blob(
+      blob_title, partition_, &checksum, kvs::TestKvs(), kBufferSize);
   EXPECT_EQ(Status::OK, blob.Init());
 
   BlobStore::BlobWriter writer(blob);
@@ -227,7 +235,9 @@
 }
 
 TEST_F(BlobStoreTest, MultipleErase) {
-  BlobStoreBuffer<256> blob("Blob_OK", partition_, nullptr, kvs::TestKvs());
+  constexpr size_t kBufferSize = 256;
+  BlobStoreBuffer<kBufferSize> blob(
+      "Blob_OK", partition_, nullptr, kvs::TestKvs(), kBufferSize);
   EXPECT_EQ(Status::Ok(), blob.Init());
 
   BlobStore::BlobWriter writer(blob);
@@ -248,7 +258,9 @@
   kvs::ChecksumCrc16 checksum;
 
   char name[16] = "TestBlobBlock";
-  BlobStoreBuffer<16> blob(name, partition_, &checksum, kvs::TestKvs());
+  constexpr size_t kBufferSize = 16;
+  BlobStoreBuffer<kBufferSize> blob(
+      name, partition_, &checksum, kvs::TestKvs(), kBufferSize);
   EXPECT_EQ(Status::Ok(), blob.Init());
   BlobStore::BlobReader reader(blob);
   ASSERT_EQ(Status::Ok(), reader.Open(kOffset));
@@ -272,7 +284,9 @@
   kvs::ChecksumCrc16 checksum;
 
   char name[16] = "TestBlobBlock";
-  BlobStoreBuffer<16> blob(name, partition_, &checksum, kvs::TestKvs());
+  constexpr size_t kBufferSize = 16;
+  BlobStoreBuffer<kBufferSize> blob(
+      name, partition_, &checksum, kvs::TestKvs(), kBufferSize);
   EXPECT_EQ(Status::Ok(), blob.Init());
   BlobStore::BlobReader reader(blob);
   ASSERT_EQ(Status::InvalidArgument(), reader.Open(kOffset));
@@ -288,7 +302,9 @@
   kvs::ChecksumCrc16 checksum;
 
   char name[16] = "TestBlobBlock";
-  BlobStoreBuffer<16> blob(name, partition_, &checksum, kvs::TestKvs());
+  constexpr size_t kBufferSize = 16;
+  BlobStoreBuffer<kBufferSize> blob(
+      name, partition_, &checksum, kvs::TestKvs(), kBufferSize);
   EXPECT_EQ(Status::Ok(), blob.Init());
   BlobStore::BlobReader reader(blob);
   ASSERT_EQ(Status::Ok(), reader.Open());
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 6603693..f8f7b80 100644
--- a/pw_blob_store/public/pw_blob_store/blob_store.h
+++ b/pw_blob_store/public/pw_blob_store/blob_store.h
@@ -536,7 +536,7 @@
                            kvs::FlashPartition& partition,
                            kvs::ChecksumAlgorithm* checksum_algo,
                            kvs::KeyValueStore& kvs,
-                           size_t flash_write_size_bytes = kBufferSizeBytes)
+                           size_t flash_write_size_bytes)
       : BlobStore(name,
                   partition,
                   checksum_algo,