blob: 00f7254c59841d4dce94641020b5058837d65150 [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/object_digest.h"
#include "gtest/gtest.h"
#include "src/ledger/bin/encryption/primitives/hash.h"
#include "third_party/abseil-cpp/absl/strings/string_view.h"
namespace storage {
namespace {
absl::string_view operator"" _s(const char* str, size_t size) {
return absl::string_view(str, size);
}
// Test for object ids smaller than the inlining threshold.
using ObjectDigestSmallTest = ::testing::TestWithParam<absl::string_view>;
TEST_P(ObjectDigestSmallTest, Index) {
ObjectDigest object_digest = ComputeObjectDigest(PieceType::INDEX, ObjectType::BLOB, GetParam());
ASSERT_TRUE(IsDigestValid(object_digest));
ObjectDigestInfo info = GetObjectDigestInfo(object_digest);
EXPECT_EQ(info.piece_type, PieceType::INDEX);
EXPECT_EQ(info.object_type, ObjectType::BLOB);
EXPECT_EQ(info.inlined, InlinedPiece::YES);
EXPECT_EQ(ExtractObjectDigestData(object_digest), GetParam());
}
TEST_P(ObjectDigestSmallTest, Value) {
ObjectDigest object_digest =
ComputeObjectDigest(PieceType::CHUNK, ObjectType::TREE_NODE, GetParam());
ASSERT_TRUE(IsDigestValid(object_digest));
ObjectDigestInfo info = GetObjectDigestInfo(object_digest);
EXPECT_EQ(info.piece_type, PieceType::CHUNK);
EXPECT_EQ(info.inlined, InlinedPiece::YES);
EXPECT_EQ(info.object_type, ObjectType::TREE_NODE);
EXPECT_EQ(ExtractObjectDigestData(object_digest), GetParam());
}
INSTANTIATE_TEST_SUITE_P(ObjectDigestTest, ObjectDigestSmallTest,
::testing::Values("", "hello", "world\0withzero"_s,
"01234567890123456789012345678901"));
// Test for object ids bigger than the inlining threshold.
using ObjectDigestBigTest = ::testing::TestWithParam<absl::string_view>;
TEST_P(ObjectDigestBigTest, Index) {
ObjectDigest object_digest =
ComputeObjectDigest(PieceType::INDEX, ObjectType::TREE_NODE, GetParam());
ASSERT_TRUE(IsDigestValid(object_digest));
ObjectDigestInfo info = GetObjectDigestInfo(object_digest);
EXPECT_EQ(info.piece_type, PieceType::INDEX);
EXPECT_EQ(info.object_type, ObjectType::TREE_NODE);
EXPECT_EQ(info.inlined, InlinedPiece::NO);
EXPECT_EQ(ExtractObjectDigestData(object_digest), encryption::SHA256WithLengthHash(GetParam()));
}
TEST_P(ObjectDigestBigTest, Value) {
ObjectDigest object_digest = ComputeObjectDigest(PieceType::CHUNK, ObjectType::BLOB, GetParam());
ASSERT_TRUE(IsDigestValid(object_digest));
ObjectDigestInfo info = GetObjectDigestInfo(object_digest);
EXPECT_EQ(info.piece_type, PieceType::CHUNK);
EXPECT_EQ(info.object_type, ObjectType::BLOB);
EXPECT_EQ(info.inlined, InlinedPiece::NO);
EXPECT_EQ(ExtractObjectDigestData(object_digest), encryption::SHA256WithLengthHash(GetParam()));
}
INSTANTIATE_TEST_SUITE_P(ObjectDigestTest, ObjectDigestBigTest,
::testing::Values("012345678901234567890123456789012",
"012345678900123456789001234567890012"
"345678900123456789001234567890012345"
"67890"));
} // namespace
} // namespace storage