pw_kvs: Fix return value for Get()

- Update KVS Get() to properly return the size of the value read when
verify_on_read is true. Previously only the status portion of the return was valid.
- Enable KVS test RepeatingValueWithOtherData.
- Add LogKeyDescriptor() helper and update LogSectors().

Change-Id: I5003fc58ed7d4342fd3b66155eda7ef8569e6aa6
diff --git a/pw_kvs/key_value_store.cc b/pw_kvs/key_value_store.cc
index 7ee058e..9949b88 100644
--- a/pw_kvs/key_value_store.cc
+++ b/pw_kvs/key_value_store.cc
@@ -261,9 +261,16 @@
 
   StatusWithSize result = ReadEntryValue(*key_descriptor, header, value_buffer);
   if (result.ok() && options_.verify_on_read) {
-    return header.VerifyChecksum(entry_header_format_.checksum,
-                                 key,
-                                 value_buffer.subspan(0, result.size()));
+    Status verify_result =
+        header.VerifyChecksum(entry_header_format_.checksum,
+                              key,
+                              value_buffer.subspan(0, result.size()));
+    if (!verify_result.ok()) {
+      memset(value_buffer.subspan(0, result.size()).data(), 0, result.size());
+      return verify_result;
+    }
+
+    return StatusWithSize(verify_result, result.size());
   }
   return result;
 }
@@ -846,7 +853,8 @@
   DBG("////////////////////// KEY VALUE STORE DUMP END /////////////////////");
 }
 
-void KeyValueStore::LogSectors(void) {
+void KeyValueStore::LogSectors() const {
+  DBG("Sector descriptors: count %zu", sectors_.size());
   for (auto& sector : sectors_) {
     DBG("  - Sector %zu: valid %hu, recoverable %zu, free %hu",
         SectorIndex(&sector),
@@ -856,6 +864,17 @@
   }
 }
 
+void KeyValueStore::LogKeyDescriptor() const {
+  DBG("Key descriptors: count %zu", key_descriptors_.size());
+  for (auto& key : key_descriptors_) {
+    DBG("  - Key: %s, hash %#zx, version %zu, address %#zx",
+        key.deleted() ? "Deleted" : "Valid",
+        static_cast<size_t>(key.key_hash),
+        static_cast<size_t>(key.key_version),
+        static_cast<size_t>(key.address));
+  }
+}
+
 void KeyValueStore::SectorDescriptor::RemoveValidBytes(size_t size) {
   // TODO: add safety check for valid_bytes > size.
   if (size > valid_bytes) {