blob: f4e7f64efe6b03bec8aeb0cebb6821945653446a [file] [log] [blame]
// Copyright 2022 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 "build_info.h"
#include <fuchsia/buildinfo/cpp/fidl.h>
#include <fuchsia/buildinfo/test/cpp/fidl.h>
#include <fuchsia/component/cpp/fidl.h>
#include <lib/fidl/cpp/binding.h>
#include <lib/sys/component/cpp/testing/realm_builder.h>
#include <lib/sys/component/cpp/testing/realm_builder_types.h>
#include <gtest/gtest.h>
#include "src/lib/testing/loop_fixture/real_loop_fixture.h"
namespace {
using component_testing::RealmBuilder;
using component_testing::RealmRoot;
using fuchsia::buildinfo::BuildInfo;
using fuchsia::buildinfo::Provider;
using fuchsia::buildinfo::test::BuildInfoTestController;
using component_testing::ChildRef;
using component_testing::ParentRef;
using component_testing::Protocol;
using component_testing::Route;
} // namespace
class FakeBuildInfoTestFixture : public gtest::RealLoopFixture {
public:
static constexpr char fake_provider_url[] =
"fuchsia-pkg://fuchsia.com/fake_build_info_test#meta/fake_build_info.cm";
static constexpr char fake_provider_name[] = "fake_provider";
static constexpr auto kProductFileName = "workstation";
static constexpr auto kBoardFileName = "x64";
static constexpr auto kVersionFileName = "2022-03-28T15:42:20+00:00";
static constexpr auto kLastCommitDateFileName = "2022-03-28T15:42:20+00:00";
FakeBuildInfoTestFixture()
: realm_builder_(std::make_unique<RealmBuilder>(RealmBuilder::Create())) {}
void SetUp() override {
SetUpRealm(realm_builder_.get());
realm_ = std::make_unique<RealmRoot>(realm_builder_->Build(dispatcher()));
}
protected:
void SetUpRealm(RealmBuilder* builder) {
realm_builder_->AddChild(fake_provider_name, fake_provider_url);
realm_builder_->AddRoute(
Route{.capabilities = {Protocol{Provider::Name_}, Protocol{BuildInfoTestController::Name_}},
.source = ChildRef{fake_provider_name},
.targets = {ParentRef()}});
}
RealmRoot* realm() { return realm_.get(); }
private:
std::unique_ptr<RealmRoot> realm_;
std::unique_ptr<RealmBuilder> realm_builder_;
};
TEST_F(FakeBuildInfoTestFixture, SetBuildInfo) {
auto provider = realm()->ConnectSync<Provider>();
auto test_controller = realm()->ConnectSync<BuildInfoTestController>();
BuildInfo result;
provider->GetBuildInfo(&result);
EXPECT_TRUE(result.has_product_config());
EXPECT_EQ(result.product_config(), FakeProviderImpl::kProductFileNameDefault);
EXPECT_TRUE(result.has_board_config());
EXPECT_EQ(result.board_config(), FakeProviderImpl::kBoardFileNameDefault);
EXPECT_TRUE(result.has_version());
EXPECT_EQ(result.version(), FakeProviderImpl::kVersionFileNameDefault);
EXPECT_TRUE(result.has_latest_commit_date());
EXPECT_EQ(result.latest_commit_date(), FakeProviderImpl::kLastCommitDateFileNameDefault);
auto build_info = BuildInfo();
build_info.set_board_config(FakeBuildInfoTestFixture::kBoardFileName);
build_info.set_product_config(FakeBuildInfoTestFixture::kProductFileName);
build_info.set_version(FakeBuildInfoTestFixture::kVersionFileName);
build_info.set_latest_commit_date(FakeBuildInfoTestFixture::kLastCommitDateFileName);
test_controller->SetBuildInfo(std::move(build_info));
provider->GetBuildInfo(&result);
EXPECT_TRUE(result.has_product_config());
EXPECT_EQ(result.product_config(), FakeBuildInfoTestFixture::kProductFileName);
EXPECT_TRUE(result.has_board_config());
EXPECT_EQ(result.board_config(), FakeBuildInfoTestFixture::kBoardFileName);
EXPECT_TRUE(result.has_version());
EXPECT_EQ(result.version(), FakeBuildInfoTestFixture::kVersionFileName);
EXPECT_TRUE(result.has_latest_commit_date());
EXPECT_EQ(result.latest_commit_date(), FakeBuildInfoTestFixture::kLastCommitDateFileName);
}