blob: 32c4d0591912547089d852a60e553e81f836a6ee [file] [log] [blame]
rnlee81d32602021-07-27 13:24:07 -07001/*
2 * Copyright 2021 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
rnlee81d32602021-07-27 13:24:07 -070017#undef LOG_TAG
18#define LOG_TAG "FlagManagerTest"
19
20#include "FlagManager.h"
21
rnlee81d32602021-07-27 13:24:07 -070022#include <gmock/gmock.h>
23#include <gtest/gtest.h>
24#include <log/log.h>
rnlee81d32602021-07-27 13:24:07 -070025
26namespace android {
27
28using testing::Return;
29
Ady Abrahamc589dc42023-10-26 16:20:53 -070030class TestableFlagManager : public FlagManager {
rnlee81d32602021-07-27 13:24:07 -070031public:
Ady Abrahamc589dc42023-10-26 16:20:53 -070032 TestableFlagManager() : FlagManager(ConstructorTag{}) { markBootCompleted(); }
33 ~TestableFlagManager() = default;
rnlee81d32602021-07-27 13:24:07 -070034
Ady Abrahamc589dc42023-10-26 16:20:53 -070035 MOCK_METHOD(std::optional<bool>, getBoolProperty, (const char*), (const, override));
36 MOCK_METHOD(bool, getServerConfigurableFlag, (const char*), (const, override));
37
38 void markBootIncomplete() { mBootCompleted = false; }
rnlee81d32602021-07-27 13:24:07 -070039};
40
41class FlagManagerTest : public testing::Test {
42public:
Ady Abrahamc589dc42023-10-26 16:20:53 -070043 FlagManagerTest() {
44 const ::testing::TestInfo* const test_info =
45 ::testing::UnitTest::GetInstance()->current_test_info();
46 ALOGD("**** Setting up for %s.%s\n", test_info->test_case_name(), test_info->name());
47 }
48 ~FlagManagerTest() override {
49 const ::testing::TestInfo* const test_info =
50 ::testing::UnitTest::GetInstance()->current_test_info();
51 ALOGD("**** Tearing down after %s.%s\n", test_info->test_case_name(), test_info->name());
52 }
rnlee81d32602021-07-27 13:24:07 -070053
Ady Abrahamc589dc42023-10-26 16:20:53 -070054 TestableFlagManager mFlagManager;
rnlee81d32602021-07-27 13:24:07 -070055};
56
Ady Abrahamc589dc42023-10-26 16:20:53 -070057TEST_F(FlagManagerTest, isSingleton) {
58 EXPECT_EQ(&FlagManager::getInstance(), &FlagManager::getInstance());
rnlee81d32602021-07-27 13:24:07 -070059}
60
Ady Abrahamc589dc42023-10-26 16:20:53 -070061TEST_F(FlagManagerTest, creashesIfQueriedBeforeBoot) {
62 mFlagManager.markBootIncomplete();
63 EXPECT_DEATH(FlagManager::getInstance().use_adpf_cpu_hint(), "");
rnlee81d32602021-07-27 13:24:07 -070064}
65
Ady Abrahamc589dc42023-10-26 16:20:53 -070066TEST_F(FlagManagerTest, returnsOverride) {
67 EXPECT_CALL(mFlagManager, getBoolProperty).WillOnce(Return(true));
68 EXPECT_EQ(true, mFlagManager.test_flag());
69
70 EXPECT_CALL(mFlagManager, getBoolProperty).WillOnce(Return(false));
71 EXPECT_EQ(false, mFlagManager.test_flag());
rnlee81d32602021-07-27 13:24:07 -070072}
73
Ady Abrahamc589dc42023-10-26 16:20:53 -070074TEST_F(FlagManagerTest, returnsValue) {
75 EXPECT_CALL(mFlagManager, getBoolProperty).WillRepeatedly(Return(std::nullopt));
76
77 EXPECT_CALL(mFlagManager, getServerConfigurableFlag).WillOnce(Return(true));
78 EXPECT_EQ(true, mFlagManager.test_flag());
79
80 EXPECT_CALL(mFlagManager, getServerConfigurableFlag).WillOnce(Return(false));
81 EXPECT_EQ(false, mFlagManager.test_flag());
rnlee81d32602021-07-27 13:24:07 -070082}
83
rnlee81d32602021-07-27 13:24:07 -070084} // namespace android