blob: 90bc4f5c4a57ca12e086f724d2831cd8ceb5402a [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "libsegmentation/feature_management.h"
#include "libsegmentation/feature_management_fake.h"
#include "proto/feature_management.pb.h"
namespace segmentation {
using chromiumos::feature_management::api::software::Feature;
using ::testing::Return;
class FeatureManagementTest : public ::testing::Test {
protected:
void SetUp() override {
auto fake = std::make_unique<fake::FeatureManagementFake>();
fake_ = fake.get();
feature_management_ = std::make_unique<FeatureManagement>(std::move(fake));
}
std::unique_ptr<FeatureManagement> feature_management_;
fake::FeatureManagementFake* fake_;
};
TEST_F(FeatureManagementTest, GetInterface) {
using chromiumos::feature_management::api::software::Feature;
// Be sure the copied interface matches the protobuffer.
EXPECT_EQ(USAGE_LOCAL, Feature::USAGE_LOCAL);
EXPECT_EQ(USAGE_CHROME, Feature::USAGE_CHROME);
EXPECT_EQ(USAGE_ANDROID, Feature::USAGE_ANDROID);
}
TEST_F(FeatureManagementTest, GetFeature) {
fake_->SetFeature("my_feature", USAGE_LOCAL);
EXPECT_EQ(feature_management_->IsFeatureEnabled("my_feature"), true);
}
TEST_F(FeatureManagementTest, GetFeatureDoesNotExist) {
EXPECT_EQ(feature_management_->IsFeatureEnabled("fake"), false);
}
TEST_F(FeatureManagementTest, GetFeatureLevel) {
EXPECT_EQ(feature_management_->GetFeatureLevel(), 0);
fake_->SetFeatureLevel(
FeatureManagementInterface::FeatureLevel::FEATURE_LEVEL_1);
EXPECT_EQ(feature_management_->GetFeatureLevel(), 1);
}
TEST_F(FeatureManagementTest, ListFeatures) {
fake_->SetFeature("my_feature", USAGE_LOCAL);
fake_->SetFeature("my_other_feature", USAGE_LOCAL);
std::set<std::string> features =
feature_management_->ListFeatures(USAGE_LOCAL);
EXPECT_EQ(features.size(), 2);
EXPECT_NE(features.find("my_feature"), features.end());
EXPECT_NE(features.find("my_other_feature"), features.end());
features = feature_management_->ListFeatures(USAGE_ANDROID);
EXPECT_EQ(features.size(), 0);
}
} // namespace segmentation