blob: a3a7c7c17f498ffb92ae34600d2ebded05c33f86 [file] [log] [blame]
// Copyright 2018 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 "peridot/lib/commit_pack/commit_pack.h"
#include <gtest/gtest.h>
#include <lib/fsl/vmo/strings.h>
#include "peridot/lib/convert/convert.h"
#include "sdk/fidl/fuchsia.ledger.cloud/serialized_commits_generated.h"
namespace cloud_provider {
namespace {
using CommitPackTest = ::testing::TestWithParam<std::vector<CommitPackEntry>>;
TEST_P(CommitPackTest, BackAndForth) {
const std::vector<CommitPackEntry> commits = GetParam();
CommitPack commit_pack;
ASSERT_TRUE(EncodeCommitPack(commits, &commit_pack));
std::vector<CommitPackEntry> result;
ASSERT_TRUE(DecodeCommitPack(commit_pack, &result));
EXPECT_EQ(commits, result);
}
INSTANTIATE_TEST_SUITE_P(CommitPackTest, CommitPackTest,
::testing::Values(std::vector<CommitPackEntry>(),
std::vector<CommitPackEntry>{
{"id_0", "data_0"},
{"id_1", "data_1"}}));
TEST_F(CommitPackTest, NullPack) {
// Encode SerializedCommits with the field |commits| left null.
flatbuffers::FlatBufferBuilder builder;
SerializedCommitsBuilder commits_builder(builder);
CommitPack commit_pack;
flatbuffers::Offset<SerializedCommits> off = commits_builder.Finish();
builder.Finish(off);
fsl::VmoFromString(convert::ToStringView(builder), &commit_pack.buffer);
// Should be rejected.
std::vector<CommitPackEntry> result;
EXPECT_FALSE(DecodeCommitPack(commit_pack, &result));
}
TEST_F(CommitPackTest, NullFields) {
// Encode a SerializedCommit with all null fields.
flatbuffers::FlatBufferBuilder builder;
SerializedCommitBuilder commit_builder(builder);
CommitPack commit_pack;
flatbuffers::Offset<SerializedCommit> off = commit_builder.Finish();
auto entries_offsets = builder.CreateVector(
std::vector<flatbuffers::Offset<SerializedCommit>>({off}));
builder.Finish(CreateSerializedCommits(builder, entries_offsets));
fsl::VmoFromString(convert::ToStringView(builder), &commit_pack.buffer);
// Should be rejected.
std::vector<CommitPackEntry> result;
EXPECT_FALSE(DecodeCommitPack(commit_pack, &result));
}
} // namespace
} // namespace cloud_provider