- Add error injection features to InMemoryFakeFlash. Reads or Writes can
be programmed to fail.
- Introduce key_value_store_error_handling_test.cc, which focuses on
corruption and read/write failure cases.
- Add functions for creating binary KVS entries at compile time.
Change-Id: Ie52ba5eb13eb60244835ef43314282beacc3a659
- Move EntryHeaderFormat and the EntryHeader struct to pw_kvs/format.h.
- Rename EntryHeaderFormat to EntryFormat.
Change-Id: Ic5e53c688cd3a483101c7985def6e4bef9c3cbaf
- Switch from per-key versions to a monotonically increasing KVS-global
transcation ID.
- Move KeyDescriptor and the hash function to their own files.
Change-Id: I05287137579d4fe2d72c6e176969d46006c2aae6
- Move SectorDescriptor to internal/sector_descriptor.h.
- Make SectorDescriptor a class and move functions that don't reference
the sector descriptor map to it.
Change-Id: I342d89e844c4a97be8e186aea91bf9ac52b03445
- Update comments for FlashMemory class.
- Split InMemoryFakeFlash to move the fixed-size buffer into the
derived FakeFlashBuffer class.
- Support initializing FakeFlashBuffer to data provided at construction.
- Allow direct access to the underlying fake flash buffer for testing.
- Create utilities for working with byte arrays in byte_utils.h.
Change-Id: I90d33621cb91da079d7213fe7d33823494120e48
- Add the FlashPartition and address to the Entry class.
- Move functions for reading or writing the entry header, key, and value
to the Entry class.
Change-Id: I0af3c140a519c8b050fcef81eca4f3b45560f75c
Introduce a system for writing tests against flash memories with
different parameters. The tests use a std::unordered_map as an oracle,
and all operations are checked against it. Invalid inputs and the KVS
filling up are handled.
Disable most of the tests because they are currently failing.
Change-Id: Ib817e30a199c81b3146823252be91e0db016c9b3
- Define the Output interface.
- Create AlignedWriter class, which handles writing aligned and padded
data to a buffer.
- Define AlignedWriterBuffer, which provides a buffer to an
AlignedWriter.
Change-Id: I791c5fc2d47617b0866fa779a506cb977905f245
The pw::Vector class is similar to std::vector but is backed by a
fixed-size array. Using pw::Vector for descriptor lists cleans up the
code and makes iterating over these lists less error-prone. It also
opens the possibility of working with descriptor types that are not
default constructible.
Change-Id: I3ad05dacef1cc77108a9d35128aa2100535048b2
- Move long-running Put test to a separate file.
- Do not dump the KVS state to file by default to prevent files from
showing up when the tests run.
Change-Id: Ie466d06aa3e22819cad03713e866afae5c63cbe6
- Add an 8-bit alignment field to the entry header. This makes the
entry header a complete description of the entry's representation in
flash (assuming the checksum algorithm is implied by the magic).
- Write basic tests for the EntryHeader class.
Change-Id: I7e48d5c16451ceb81f7c191d2f261e0a9bef14b7
- Make in_memory_fake_flash.h a separate library that is only visible
within pw_kvs (for now).
- Have the fake flash use PW_LOG_ERROR instead of the short names, since
it's logging from the header.
Change-Id: I686024bad1e532632d0c9e6eefe74207fdc1f22e
- Allow checksums to verify data larger than their internal state. This
facilitates using a CRC16 in a uint32_t.
- Move checksum functions to the EntryHeader class, since it ultimately
stores the checksums and is included with it.
- Enable one checksum test. Further tests are needed.
- Make some tweaks to the Get overload for objects.
Change-Id: I989b72905e140794f75c8f8619aaab1623f6f195
- Create CRC16 implementation of pw::kvs::ChecksumAlgorithm.
- Add tests for the ChecksumAlgorithm class.
Change-Id: I3d7268e49c4eec06d61e113602ce24c05a3b0fa0
Builds, but lots more work needed.
Fun fact: this code was written collaboratively in a Google Doc.
Change-Id: I8a89c5d0fdc71ec28cf432350e65d17e24a6f25c
- Use std::string_view for keys to avoid the need for null termination.
- Use std::span and std::byte for data.
- Use StatusWithSize and size_t.
- Other minor adjustments.
Change-Id: I10d2f0f47b386071ed4ecf81586decfcc99244cd