blob: 865f0ede07ecb3e23dbc5cfab16ffb729e265d2b [file] [log] [blame]
// Copyright 2019 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/piece_tracker.h"
#include "gmock/gmock.h"
#include "gtest/gtest.h"
#include "src/ledger/bin/storage/impl/object_digest.h"
#include "src/ledger/bin/storage/impl/storage_test_utils.h"
#include "src/ledger/bin/testing/test_with_environment.h"
namespace storage {
namespace {
using ::testing::IsEmpty;
using ::testing::Pair;
using ::testing::UnorderedElementsAre;
using PieceTokenTest = ledger::TestWithEnvironment;
ObjectIdentifier CreateObjectIdentifier(ObjectDigest digest) { return {1u, 2u, std::move(digest)}; }
TEST_F(PieceTokenTest, PieceTracker) {
const ObjectIdentifier identifier = RandomObjectIdentifier(environment_.random());
const ObjectIdentifier another_identifier = RandomObjectIdentifier(environment_.random());
PieceTracker tracker;
EXPECT_EQ(tracker.count(identifier), 0);
EXPECT_EQ(tracker.size(), 0);
auto token_1 = tracker.GetPieceToken(identifier);
EXPECT_EQ(tracker.count(identifier), 1);
EXPECT_EQ(tracker.size(), 1);
auto token_2 = tracker.GetPieceToken(identifier);
EXPECT_NE(token_1.get(), token_2.get());
EXPECT_EQ(tracker.count(identifier), 2);
EXPECT_EQ(tracker.size(), 1);
auto token_3 = tracker.GetPieceToken(another_identifier);
EXPECT_EQ(tracker.count(identifier), 2);
EXPECT_EQ(tracker.count(another_identifier), 1);
EXPECT_EQ(tracker.size(), 2);
token_1.reset();
EXPECT_EQ(tracker.count(identifier), 1);
EXPECT_EQ(tracker.count(another_identifier), 1);
EXPECT_EQ(tracker.size(), 2);
token_2.reset();
EXPECT_EQ(tracker.count(identifier), 0);
EXPECT_EQ(tracker.count(another_identifier), 1);
EXPECT_EQ(tracker.size(), 1);
token_3.reset();
EXPECT_EQ(tracker.count(identifier), 0);
EXPECT_EQ(tracker.count(another_identifier), 0);
EXPECT_EQ(tracker.size(), 0);
}
TEST_F(PieceTokenTest, DiscardableToken) {
std::string data = RandomString(environment_.random(), 12);
ObjectIdentifier identifier =
CreateObjectIdentifier(ComputeObjectDigest(PieceType::CHUNK, ObjectType::BLOB, data));
const DiscardableToken token(identifier);
EXPECT_EQ(token.GetIdentifier(), identifier);
}
} // namespace
} // namespace storage