blob: ced406a469ed05076365c233188a372c7a15787c [file] [log] [blame]
// Copyright 2017 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/ledger/bin/storage/impl/file_index.h"
#include "gtest/gtest.h"
#include "src/ledger/bin/storage/impl/object_identifier_encoding.h"
#include "src/ledger/bin/storage/impl/storage_test_utils.h"
#include "src/ledger/bin/testing/test_with_environment.h"
namespace storage {
namespace {
using FileIndexSerializationTest = ledger::TestWithEnvironment;
TEST_F(FileIndexSerializationTest, CheckInvalid) {
EXPECT_FALSE(FileIndexSerialization::CheckValidFileIndexSerialization(""));
std::string ones(200, '\1');
EXPECT_FALSE(FileIndexSerialization::CheckValidFileIndexSerialization(ones));
}
TEST_F(FileIndexSerializationTest, SerializationDeserialization) {
const std::vector<FileIndexSerialization::ObjectIdentifierAndSize> elements =
{
{RandomObjectIdentifier(environment_.random()), 1},
{RandomObjectIdentifier(environment_.random()), 2},
{RandomObjectIdentifier(environment_.random()), 3},
{RandomObjectIdentifier(environment_.random()), 4},
{RandomObjectIdentifier(environment_.random()), 3},
{RandomObjectIdentifier(environment_.random()), 2},
{RandomObjectIdentifier(environment_.random()), 1},
};
constexpr size_t expected_total_size = 16;
std::unique_ptr<DataSource::DataChunk> chunk;
size_t total_size;
FileIndexSerialization::BuildFileIndex(elements, &chunk, &total_size);
EXPECT_EQ(expected_total_size, total_size);
const FileIndex* file_index;
Status status =
FileIndexSerialization::ParseFileIndex(chunk->Get(), &file_index);
ASSERT_EQ(Status::OK, status);
EXPECT_EQ(expected_total_size, file_index->size());
ASSERT_EQ(elements.size(), file_index->children()->size());
const auto& children = *(file_index->children());
for (size_t i = 0; i < elements.size(); ++i) {
EXPECT_EQ(elements[i].size, children[i]->size());
EXPECT_EQ(elements[i].identifier,
ToObjectIdentifier(children[i]->object_identifier()));
}
}
} // namespace
} // namespace storage