• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (C) 2021 The Android Open Source Project
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //      http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #include "src/flags/FlagProvider.h"
16 
17 #include <android-modules-utils/sdk_level.h>
18 #include <gtest/gtest.h>
19 
20 #include "tests/statsd_test_util.h"
21 
22 namespace android {
23 namespace os {
24 namespace statsd {
25 
26 #ifdef __ANDROID__
27 
28 using android::modules::sdklevel::IsAtLeastS;
29 using namespace std;
30 
31 const string TEST_FLAG = "MyFlagTest";
32 
33 struct FlagParam {
34     string flagValue;
35     string label;
36 };
37 
38 class FlagProviderTest_SPlus : public testing::TestWithParam<FlagParam> {
TearDown()39     void TearDown() override {
40         FlagProvider::getInstance().resetOverrides();
41     }
42 };
43 
44 INSTANTIATE_TEST_SUITE_P(DefaultValues, FlagProviderTest_SPlus,
45                          testing::ValuesIn<FlagParam>({
46                                  // Default values.
47                                  {FLAG_FALSE, "DefaultFalse"},
48                                  {FLAG_TRUE, "DefaultTrue"},
49                          }),
__anona2be88380102(const testing::TestParamInfo<FlagProviderTest_SPlus::ParamType>& info) 50                          [](const testing::TestParamInfo<FlagProviderTest_SPlus::ParamType>& info) {
51                              return info.param.label;
52                          });
53 
TEST_P(FlagProviderTest_SPlus,TestGetFlagBoolServerFlagTrue)54 TEST_P(FlagProviderTest_SPlus, TestGetFlagBoolServerFlagTrue) {
55     FlagProvider::getInstance().overrideFuncs(&isAtLeastSFuncTrue, &getServerFlagFuncTrue);
56     EXPECT_TRUE(FlagProvider::getInstance().getFlagBool(TEST_FLAG, GetParam().flagValue));
57 }
58 
TEST_P(FlagProviderTest_SPlus,TestGetFlagBoolServerFlagFalse)59 TEST_P(FlagProviderTest_SPlus, TestGetFlagBoolServerFlagFalse) {
60     FlagProvider::getInstance().overrideFuncs(&isAtLeastSFuncTrue, &getServerFlagFuncFalse);
61     EXPECT_FALSE(FlagProvider::getInstance().getFlagBool(TEST_FLAG, GetParam().flagValue));
62 }
63 
TEST_P(FlagProviderTest_SPlus,TestOverrideLocalFlags)64 TEST_P(FlagProviderTest_SPlus, TestOverrideLocalFlags) {
65     FlagProvider::getInstance().overrideFuncs(&isAtLeastSFuncTrue);
66 
67     FlagProvider::getInstance().overrideFlag(TEST_FLAG, FLAG_FALSE, /*isBootFlag=*/false);
68     FlagProvider::getInstance().overrideFlag(TEST_FLAG, FLAG_FALSE, /*isBootFlag=*/true);
69     EXPECT_FALSE(FlagProvider::getInstance().getFlagBool(TEST_FLAG, GetParam().flagValue));
70     EXPECT_FALSE(FlagProvider::getInstance().getBootFlagBool(TEST_FLAG, GetParam().flagValue));
71 
72     FlagProvider::getInstance().overrideFlag(TEST_FLAG, FLAG_TRUE, /*isBootFlag=*/false);
73     FlagProvider::getInstance().overrideFlag(TEST_FLAG, FLAG_TRUE, /*isBootFlag=*/true);
74     EXPECT_TRUE(FlagProvider::getInstance().getFlagBool(TEST_FLAG, GetParam().flagValue));
75     EXPECT_TRUE(FlagProvider::getInstance().getBootFlagBool(TEST_FLAG, GetParam().flagValue));
76 }
77 
78 class FlagProviderTest_SPlus_RealValues : public testing::TestWithParam<FlagParam> {
SetUp()79     void SetUp() override {
80         if (!IsAtLeastS()) {
81             GTEST_SKIP() << "Cannot query flags from system property on R-.";
82         }
83     }
84 
TearDown()85     void TearDown() override {
86         writeFlag(TEST_FLAG, FLAG_EMPTY);
87         writeBootFlag(TEST_FLAG, FLAG_EMPTY);
88         FlagProvider::getInstance().initBootFlags({TEST_FLAG});
89     }
90 };
91 
92 INSTANTIATE_TEST_SUITE_P(DefaultValues, FlagProviderTest_SPlus_RealValues,
93                          testing::ValuesIn<FlagParam>({
94                                  // Default values.
95                                  {FLAG_FALSE, "DefaultFalse"},
96                                  {FLAG_TRUE, "DefaultTrue"},
97                          }),
__anona2be88380202(const testing::TestParamInfo<FlagProviderTest_SPlus::ParamType>& info) 98                          [](const testing::TestParamInfo<FlagProviderTest_SPlus::ParamType>& info) {
99                              return info.param.label;
100                          });
101 
TEST_P(FlagProviderTest_SPlus_RealValues,TestGetFlagBoolServerFlagTrue)102 TEST_P(FlagProviderTest_SPlus_RealValues, TestGetFlagBoolServerFlagTrue) {
103     writeFlag(TEST_FLAG, FLAG_TRUE);
104     EXPECT_TRUE(FlagProvider::getInstance().getFlagBool(TEST_FLAG, GetParam().flagValue));
105 }
106 
TEST_P(FlagProviderTest_SPlus_RealValues,TestGetFlagBoolServerFlagFalse)107 TEST_P(FlagProviderTest_SPlus_RealValues, TestGetFlagBoolServerFlagFalse) {
108     writeFlag(TEST_FLAG, FLAG_FALSE);
109     EXPECT_FALSE(FlagProvider::getInstance().getFlagBool(TEST_FLAG, GetParam().flagValue));
110 }
111 
TEST_F(FlagProviderTest_SPlus_RealValues,TestGetFlagBoolServerFlagEmptyDefaultFalse)112 TEST_F(FlagProviderTest_SPlus_RealValues, TestGetFlagBoolServerFlagEmptyDefaultFalse) {
113     writeFlag(TEST_FLAG, FLAG_EMPTY);
114     EXPECT_FALSE(FlagProvider::getInstance().getFlagBool(TEST_FLAG, FLAG_FALSE));
115 }
116 
TEST_F(FlagProviderTest_SPlus_RealValues,TestGetFlagBoolServerFlagEmptyDefaultTrue)117 TEST_F(FlagProviderTest_SPlus_RealValues, TestGetFlagBoolServerFlagEmptyDefaultTrue) {
118     writeFlag(TEST_FLAG, FLAG_EMPTY);
119     EXPECT_TRUE(FlagProvider::getInstance().getFlagBool(TEST_FLAG, FLAG_TRUE));
120 }
121 
TEST_P(FlagProviderTest_SPlus_RealValues,TestGetBootFlagBoolServerFlagTrue)122 TEST_P(FlagProviderTest_SPlus_RealValues, TestGetBootFlagBoolServerFlagTrue) {
123     writeBootFlag(TEST_FLAG, FLAG_TRUE);
124     FlagProvider::getInstance().initBootFlags({TEST_FLAG});
125     EXPECT_TRUE(FlagProvider::getInstance().getBootFlagBool(TEST_FLAG, GetParam().flagValue));
126 }
127 
TEST_P(FlagProviderTest_SPlus_RealValues,TestGetBootFlagBoolServerFlagFalse)128 TEST_P(FlagProviderTest_SPlus_RealValues, TestGetBootFlagBoolServerFlagFalse) {
129     writeBootFlag(TEST_FLAG, FLAG_FALSE);
130     FlagProvider::getInstance().initBootFlags({TEST_FLAG});
131     EXPECT_FALSE(FlagProvider::getInstance().getBootFlagBool(TEST_FLAG, GetParam().flagValue));
132 }
133 
TEST_P(FlagProviderTest_SPlus_RealValues,TestGetBootFlagBoolServerFlagUpdated)134 TEST_P(FlagProviderTest_SPlus_RealValues, TestGetBootFlagBoolServerFlagUpdated) {
135     writeBootFlag(TEST_FLAG, FLAG_FALSE);
136     FlagProvider::getInstance().initBootFlags({TEST_FLAG});
137     writeBootFlag(TEST_FLAG, FLAG_TRUE);
138     EXPECT_FALSE(FlagProvider::getInstance().getBootFlagBool(TEST_FLAG, GetParam().flagValue));
139 }
140 
TEST_F(FlagProviderTest_SPlus_RealValues,TestGetFlagBoolNoInitServerFlagEmptyDefaultFalse)141 TEST_F(FlagProviderTest_SPlus_RealValues, TestGetFlagBoolNoInitServerFlagEmptyDefaultFalse) {
142     writeBootFlag(TEST_FLAG, FLAG_EMPTY);
143     EXPECT_FALSE(FlagProvider::getInstance().getFlagBool(TEST_FLAG, FLAG_FALSE));
144 }
145 
TEST_F(FlagProviderTest_SPlus_RealValues,TestGetFlagBoolNoInitServerFlagEmptyDefaultTrue)146 TEST_F(FlagProviderTest_SPlus_RealValues, TestGetFlagBoolNoInitServerFlagEmptyDefaultTrue) {
147     writeBootFlag(TEST_FLAG, FLAG_EMPTY);
148     EXPECT_TRUE(FlagProvider::getInstance().getFlagBool(TEST_FLAG, FLAG_TRUE));
149 }
150 
151 class FlagProviderTest_RMinus : public testing::TestWithParam<FlagParam> {
SetUp()152     void SetUp() override {
153         writeFlag(TEST_FLAG, GetParam().flagValue);
154         FlagProvider::getInstance().overrideFuncs(&isAtLeastSFuncFalse);
155     }
156 
TearDown()157     void TearDown() override {
158         FlagProvider::getInstance().resetOverrides();
159         writeFlag(TEST_FLAG, FLAG_EMPTY);
160     }
161 };
162 
163 INSTANTIATE_TEST_SUITE_P(
164         ServerFlagValues, FlagProviderTest_RMinus,
165         testing::ValuesIn<FlagParam>({
166                 // Server flag values.
167                 {FLAG_TRUE, "ServerFlagTrue"},
168                 {FLAG_FALSE, "ServerFlagFalse"},
169                 {FLAG_EMPTY, "ServerFlagEmpty"},
170         }),
__anona2be88380302(const testing::TestParamInfo<FlagProviderTest_RMinus::ParamType>& info) 171         [](const testing::TestParamInfo<FlagProviderTest_RMinus::ParamType>& info) {
172             return info.param.label;
173         });
174 
TEST_P(FlagProviderTest_RMinus,TestGetFlagBoolDefaultValueFalse)175 TEST_P(FlagProviderTest_RMinus, TestGetFlagBoolDefaultValueFalse) {
176     EXPECT_FALSE(FlagProvider::getInstance().getFlagBool(TEST_FLAG, FLAG_FALSE));
177 }
178 
TEST_P(FlagProviderTest_RMinus,TestGetFlagBoolDefaultValueTrue)179 TEST_P(FlagProviderTest_RMinus, TestGetFlagBoolDefaultValueTrue) {
180     EXPECT_TRUE(FlagProvider::getInstance().getFlagBool(TEST_FLAG, FLAG_TRUE));
181 }
182 
183 #else
184 GTEST_LOG_(INFO) << "This test does nothing.\n";
185 #endif
186 
187 }  // namespace statsd
188 }  // namespace os
189 }  // namespace android
190