mirror of
https://fuchsia.googlesource.com/third_party/pigweed.googlesource.com/pigweed/pigweed
synced 2024-09-20 05:41:06 +00:00
f490a080ec
Add sectors_ reset as part of the fixture, since reset is required before using sectors_. This prevents using uninitialized members, which sometimes passes tests. Change-Id: I293b3fe927eca1ec187f31b25087e8b2db3168d5 Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/13842 Commit-Queue: David Rogers <davidrogers@google.com> Reviewed-by: Wyatt Hepler <hepler@google.com>
87 lines
2.7 KiB
C++
87 lines
2.7 KiB
C++
// Copyright 2020 The Pigweed Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
|
|
// use this file except in compliance with the License. You may obtain a copy of
|
|
// the License at
|
|
//
|
|
// https://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
// License for the specific language governing permissions and limitations under
|
|
// the License.
|
|
|
|
#include "pw_kvs/internal/sectors.h"
|
|
|
|
#include "gtest/gtest.h"
|
|
#include "pw_kvs/fake_flash_memory.h"
|
|
|
|
namespace pw::kvs::internal {
|
|
namespace {
|
|
|
|
class SectorsTest : public ::testing::Test {
|
|
protected:
|
|
SectorsTest()
|
|
: partition_(&flash_),
|
|
sectors_(sector_descriptors_, partition_, nullptr) {
|
|
EXPECT_EQ(0u, sectors_.size());
|
|
sectors_.Reset();
|
|
}
|
|
|
|
FakeFlashMemoryBuffer<128, 16> flash_;
|
|
FlashPartition partition_;
|
|
Vector<SectorDescriptor, 32> sector_descriptors_;
|
|
Sectors sectors_;
|
|
};
|
|
|
|
TEST_F(SectorsTest, Reset) {
|
|
// Reset is done by the fixture.
|
|
EXPECT_EQ(partition_.sector_count(), sectors_.size());
|
|
EXPECT_EQ(32u, sectors_.max_size());
|
|
EXPECT_EQ(sectors_.begin(), sectors_.last_new());
|
|
}
|
|
|
|
TEST_F(SectorsTest, LastNew) {
|
|
sectors_.set_last_new_sector(130);
|
|
EXPECT_EQ(128u, sectors_.BaseAddress(*sectors_.last_new()));
|
|
}
|
|
|
|
TEST_F(SectorsTest, AddressInSector) {
|
|
SectorDescriptor& sector = sectors_.FromAddress(128);
|
|
|
|
EXPECT_FALSE(sectors_.AddressInSector(sector, 127));
|
|
for (size_t address = 128; address < 256; ++address) {
|
|
EXPECT_TRUE(sectors_.AddressInSector(sector, address));
|
|
}
|
|
EXPECT_FALSE(sectors_.AddressInSector(sector, 256));
|
|
EXPECT_FALSE(sectors_.AddressInSector(sector, 1025));
|
|
}
|
|
|
|
TEST_F(SectorsTest, BaseAddressAndFromAddress) {
|
|
for (size_t address = 0; address < 128; ++address) {
|
|
EXPECT_EQ(0u, sectors_.BaseAddress(sectors_.FromAddress(address)));
|
|
}
|
|
for (size_t address = 128; address < 256; ++address) {
|
|
EXPECT_EQ(128u, sectors_.BaseAddress(sectors_.FromAddress(address)));
|
|
}
|
|
for (size_t address = 256; address < 384; ++address) {
|
|
EXPECT_EQ(256u, sectors_.BaseAddress(sectors_.FromAddress(address)));
|
|
}
|
|
}
|
|
|
|
TEST_F(SectorsTest, NextWritableAddress_EmptySector) {
|
|
EXPECT_EQ(0u, sectors_.NextWritableAddress(*sectors_.begin()));
|
|
}
|
|
|
|
TEST_F(SectorsTest, NextWritableAddress_PartiallyWrittenSector) {
|
|
sectors_.begin()->RemoveWritableBytes(123);
|
|
EXPECT_EQ(123u, sectors_.NextWritableAddress(*sectors_.begin()));
|
|
}
|
|
|
|
// TODO: Add tests for FindSpace, FindSpaceDuringGarbageCollection, and
|
|
// FindSectorToGarbageCollect.
|
|
|
|
} // namespace
|
|
} // namespace pw::kvs::internal
|