• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2023 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.net.httpflags;
6 
7 import static com.google.common.truth.Truth.assertThat;
8 
9 import static org.junit.Assert.assertThrows;
10 
11 import androidx.test.ext.junit.runners.AndroidJUnit4;
12 import androidx.test.filters.SmallTest;
13 
14 import com.google.protobuf.ByteString;
15 
16 import org.junit.Test;
17 import org.junit.runner.RunWith;
18 
19 import org.chromium.base.test.util.Batch;
20 
21 import java.nio.charset.StandardCharsets;
22 import java.util.HashMap;
23 
24 /** Tests {@link BaseFeature} */
25 @Batch(Batch.UNIT_TESTS)
26 @RunWith(AndroidJUnit4.class)
27 public final class BaseFeatureTest {
28     @Test
29     @SmallTest
testGetOverrides_emptyIfNoFlags()30     public void testGetOverrides_emptyIfNoFlags() {
31         assertThat(
32                         BaseFeature.getOverrides(
33                                 new ResolvedFlags(new HashMap<String, ResolvedFlags.Value>())))
34                 .isEqualTo(BaseFeatureOverrides.newBuilder().build());
35     }
36 
37     @Test
38     @SmallTest
testGetOverrides_emptyIfNoBaseFeatureOverrideFlags()39     public void testGetOverrides_emptyIfNoBaseFeatureOverrideFlags() {
40         HashMap<String, ResolvedFlags.Value> flags = new HashMap<String, ResolvedFlags.Value>();
41         flags.put("NotABaseFeatureOverride", new ResolvedFlags.Value("test value"));
42 
43         assertThat(BaseFeature.getOverrides(new ResolvedFlags(flags)))
44                 .isEqualTo(BaseFeatureOverrides.newBuilder().build());
45     }
46 
47     @Test
48     @SmallTest
testGetOverrides_returnsOverrides()49     public void testGetOverrides_returnsOverrides() {
50         HashMap<String, ResolvedFlags.Value> flags = new HashMap<String, ResolvedFlags.Value>();
51         flags.put("NotABaseFeatureOverride1", new ResolvedFlags.Value(true));
52         flags.put(BaseFeature.FLAG_PREFIX + "BaseFeatureOverride1", new ResolvedFlags.Value(true));
53         flags.put("NotABaseFeatureOverride2", new ResolvedFlags.Value(false));
54         flags.put(BaseFeature.FLAG_PREFIX + "BaseFeatureOverride2", new ResolvedFlags.Value(false));
55         flags.put("NotABaseFeatureOverride3", new ResolvedFlags.Value(true));
56 
57         assertThat(BaseFeature.getOverrides(new ResolvedFlags(flags)))
58                 .isEqualTo(
59                         BaseFeatureOverrides.newBuilder()
60                                 .putFeatureStates(
61                                         "BaseFeatureOverride1",
62                                         BaseFeatureOverrides.FeatureState.newBuilder()
63                                                 .setEnabled(true)
64                                                 .build())
65                                 .putFeatureStates(
66                                         "BaseFeatureOverride2",
67                                         BaseFeatureOverrides.FeatureState.newBuilder()
68                                                 .setEnabled(false)
69                                                 .build())
70                                 .build());
71     }
72 
73     @Test
74     @SmallTest
testGetOverrides_throwsOnNonBooleanOverride()75     public void testGetOverrides_throwsOnNonBooleanOverride() {
76         HashMap<String, ResolvedFlags.Value> flags = new HashMap<String, ResolvedFlags.Value>();
77         flags.put(
78                 BaseFeature.FLAG_PREFIX + "BaseFeatureOverride",
79                 new ResolvedFlags.Value("test value"));
80         ResolvedFlags resolvedFlags = new ResolvedFlags(flags);
81 
82         assertThrows(
83                 IllegalArgumentException.class,
84                 () -> {
85                     BaseFeature.getOverrides(resolvedFlags);
86                 });
87     }
88 
89     @Test
90     @SmallTest
testGetOverrides_returnsParamOverrides()91     public void testGetOverrides_returnsParamOverrides() {
92         HashMap<String, ResolvedFlags.Value> flags = new HashMap<String, ResolvedFlags.Value>();
93         flags.put(
94                 BaseFeature.FLAG_PREFIX
95                         + "TestBaseFeatureName"
96                         + BaseFeature.PARAM_DELIMITER
97                         + "TestBooleanParam",
98                 new ResolvedFlags.Value(true));
99         flags.put(
100                 BaseFeature.FLAG_PREFIX
101                         + "TestBaseFeatureName"
102                         + BaseFeature.PARAM_DELIMITER
103                         + "TestIntParam",
104                 new ResolvedFlags.Value(123));
105         flags.put(
106                 BaseFeature.FLAG_PREFIX
107                         + "TestBaseFeatureName"
108                         + BaseFeature.PARAM_DELIMITER
109                         + "TestFloatParam",
110                 new ResolvedFlags.Value(42.42f));
111         flags.put(
112                 BaseFeature.FLAG_PREFIX
113                         + "TestBaseFeatureName"
114                         + BaseFeature.PARAM_DELIMITER
115                         + "TestStringParam",
116                 new ResolvedFlags.Value("test_string_value"));
117         ByteString byteString = ByteString.copyFrom(new byte[] {0, 1, 2, 42, -128, 127});
118         flags.put(
119                 BaseFeature.FLAG_PREFIX
120                         + "TestBaseFeatureName"
121                         + BaseFeature.PARAM_DELIMITER
122                         + "TestBytesParam",
123                 new ResolvedFlags.Value(byteString));
124 
125         assertThat(BaseFeature.getOverrides(new ResolvedFlags(flags)))
126                 .isEqualTo(
127                         BaseFeatureOverrides.newBuilder()
128                                 .putFeatureStates(
129                                         "TestBaseFeatureName",
130                                         BaseFeatureOverrides.FeatureState.newBuilder()
131                                                 .putParams(
132                                                         "TestBooleanParam",
133                                                         ByteString.copyFrom(
134                                                                 "true", StandardCharsets.UTF_8))
135                                                 .putParams(
136                                                         "TestIntParam",
137                                                         ByteString.copyFrom(
138                                                                 "123", StandardCharsets.UTF_8))
139                                                 .putParams(
140                                                         "TestFloatParam",
141                                                         ByteString.copyFrom(
142                                                                 "42.42", StandardCharsets.UTF_8))
143                                                 .putParams(
144                                                         "TestStringParam",
145                                                         ByteString.copyFrom(
146                                                                 "test_string_value",
147                                                                 StandardCharsets.UTF_8))
148                                                 .putParams("TestBytesParam", byteString)
149                                                 .build())
150                                 .build());
151     }
152 
153     @Test
154     @SmallTest
testGetOverrides_associatesParamsWithFeatures()155     public void testGetOverrides_associatesParamsWithFeatures() {
156         HashMap<String, ResolvedFlags.Value> flags = new HashMap<String, ResolvedFlags.Value>();
157         flags.put(
158                 BaseFeature.FLAG_PREFIX
159                         + "TestBaseFeature1Name"
160                         + BaseFeature.PARAM_DELIMITER
161                         + "TestParam1",
162                 new ResolvedFlags.Value("test_value1"));
163         flags.put(
164                 BaseFeature.FLAG_PREFIX
165                         + "TestBaseFeature2Name"
166                         + BaseFeature.PARAM_DELIMITER
167                         + "TestParam2",
168                 new ResolvedFlags.Value("test_value2"));
169 
170         assertThat(BaseFeature.getOverrides(new ResolvedFlags(flags)))
171                 .isEqualTo(
172                         BaseFeatureOverrides.newBuilder()
173                                 .putFeatureStates(
174                                         "TestBaseFeature1Name",
175                                         BaseFeatureOverrides.FeatureState.newBuilder()
176                                                 .putParams(
177                                                         "TestParam1",
178                                                         ByteString.copyFrom(
179                                                                 "test_value1",
180                                                                 StandardCharsets.UTF_8))
181                                                 .build())
182                                 .putFeatureStates(
183                                         "TestBaseFeature2Name",
184                                         BaseFeatureOverrides.FeatureState.newBuilder()
185                                                 .putParams(
186                                                         "TestParam2",
187                                                         ByteString.copyFrom(
188                                                                 "test_value2",
189                                                                 StandardCharsets.UTF_8))
190                                                 .build())
191                                 .build());
192     }
193 
194     @Test
195     @SmallTest
testGetOverrides_combinesEnabledStateWithParam()196     public void testGetOverrides_combinesEnabledStateWithParam() {
197         HashMap<String, ResolvedFlags.Value> flags = new HashMap<String, ResolvedFlags.Value>();
198         flags.put(BaseFeature.FLAG_PREFIX + "TestBaseFeatureName", new ResolvedFlags.Value(true));
199         flags.put(
200                 BaseFeature.FLAG_PREFIX
201                         + "TestBaseFeatureName"
202                         + BaseFeature.PARAM_DELIMITER
203                         + "TestParam",
204                 new ResolvedFlags.Value("test_value"));
205 
206         assertThat(BaseFeature.getOverrides(new ResolvedFlags(flags)))
207                 .isEqualTo(
208                         BaseFeatureOverrides.newBuilder()
209                                 .putFeatureStates(
210                                         "TestBaseFeatureName",
211                                         BaseFeatureOverrides.FeatureState.newBuilder()
212                                                 .setEnabled(true)
213                                                 .putParams(
214                                                         "TestParam",
215                                                         ByteString.copyFrom(
216                                                                 "test_value",
217                                                                 StandardCharsets.UTF_8))
218                                                 .build())
219                                 .build());
220     }
221 }
222