pw_kvs: IgnoreChecksum class
Verify always passes for IgnoreChecksum.
Change-Id: Iba6d0812e5f11c46feb1938fc369163478e675a0
diff --git a/pw_kvs/checksum_test.cc b/pw_kvs/checksum_test.cc
index 205defb..4f0d8c5 100644
--- a/pw_kvs/checksum_test.cc
+++ b/pw_kvs/checksum_test.cc
@@ -67,6 +67,25 @@
EXPECT_EQ(state[1], byte{0xFF});
}
+TEST(IgnoreChecksum, NeverUpdate_VerifyWithoutData) {
+ IgnoreChecksum checksum;
+
+ EXPECT_EQ(Status::OK, checksum.Verify({}));
+}
+
+TEST(IgnoreChecksum, NeverUpdate_VerifyWithData) {
+ IgnoreChecksum checksum;
+
+ EXPECT_EQ(Status::OK, checksum.Verify(as_bytes(span(kString))));
+}
+
+TEST(IgnoreChecksum, AfterUpdate_Verify) {
+ IgnoreChecksum checksum;
+
+ checksum.Update(as_bytes(span(kString)));
+ EXPECT_EQ(Status::OK, checksum.Verify({}));
+}
+
constexpr size_t kAlignment = 10;
constexpr std::string_view kData =
diff --git a/pw_kvs/public/pw_kvs/checksum.h b/pw_kvs/public/pw_kvs/checksum.h
index e9cb85f..ff89d44 100644
--- a/pw_kvs/public/pw_kvs/checksum.h
+++ b/pw_kvs/public/pw_kvs/checksum.h
@@ -71,6 +71,16 @@
span<const std::byte> state_;
};
+// A checksum algorithm for which Verify always passes. This can be used to
+// disable checksum verification for a particular entry format.
+class IgnoreChecksum final : public ChecksumAlgorithm {
+ public:
+ constexpr IgnoreChecksum() : ChecksumAlgorithm({}) {}
+
+ void Reset() override {}
+ void Update(span<const std::byte>) override {}
+};
+
// Calculates a checksum in kAlignmentBytes chunks. Checksum classes can inherit
// from this and implement UpdateAligned and FinalizeAligned instead of Update
// and Finalize.