• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 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 
17 package android.content.pm;
18 
19 import static android.provider.DeviceConfig.NAMESPACE_CONSTRAIN_DISPLAY_APIS;
20 
21 import static org.junit.Assert.assertEquals;
22 
23 import android.annotation.Nullable;
24 import android.platform.test.annotations.Presubmit;
25 import android.provider.DeviceConfig;
26 import android.provider.DeviceConfig.Properties;
27 
28 import androidx.test.filters.SmallTest;
29 
30 import org.junit.After;
31 import org.junit.Before;
32 import org.junit.Ignore;
33 import org.junit.Test;
34 
35 /**
36  * Test for {@link ConstrainDisplayApisConfig}.
37  *
38  * Build/Install/Run:
39  * atest FrameworksCoreTests:ConstrainDisplayApisConfigTest
40  */
41 @SmallTest
42 @Presubmit
43 public final class ConstrainDisplayApisConfigTest {
44 
45     private Properties mInitialConstrainDisplayApisFlags;
46 
47     @Before
setUp()48     public void setUp() throws Exception {
49         mInitialConstrainDisplayApisFlags = DeviceConfig.getProperties(
50                 NAMESPACE_CONSTRAIN_DISPLAY_APIS);
51         DeviceConfig.setProperties(
52                 new Properties.Builder(NAMESPACE_CONSTRAIN_DISPLAY_APIS).build());
53     }
54 
55     @After
tearDown()56     public void tearDown() throws Exception {
57         DeviceConfig.setProperties(mInitialConstrainDisplayApisFlags);
58     }
59 
60     @Test
neverConstrainDisplayApis_allPackagesFlagTrue_returnsTrue()61     public void neverConstrainDisplayApis_allPackagesFlagTrue_returnsTrue() {
62         setNeverConstrainDisplayApisAllPackagesFlag("true");
63         // Setting 'never_constrain_display_apis' as well to make sure it is ignored.
64         setNeverConstrainDisplayApisFlag("com.android.other:1:2,com.android.other2::");
65 
66         testNeverConstrainDisplayApis("com.android.test", /* version= */ 5, /* expected= */ true);
67         testNeverConstrainDisplayApis("com.android.other", /* version= */ 0, /* expected= */ true);
68         testNeverConstrainDisplayApis("com.android.other", /* version= */ 3, /* expected= */ true);
69     }
70 
71     @Test
neverConstrainDisplayApis_flagsNoSet_returnsFalse()72     public void neverConstrainDisplayApis_flagsNoSet_returnsFalse() {
73         testNeverConstrainDisplayApis("com.android.test", /* version= */ 1, /* expected= */ false);
74     }
75 
76     @Ignore("b/257375674")
77     @Test
neverConstrainDisplayApis_flagsHasSingleEntry_returnsTrueForPackageWithinRange()78     public void neverConstrainDisplayApis_flagsHasSingleEntry_returnsTrueForPackageWithinRange() {
79         setNeverConstrainDisplayApisFlag("com.android.test:1:1");
80 
81         testNeverConstrainDisplayApis("com.android.other", /* version= */ 5, /* expected= */ false);
82         testNeverConstrainDisplayApis("com.android.test", /* version= */ 0, /* expected= */ false);
83         testNeverConstrainDisplayApis("com.android.test", /* version= */ 1, /* expected= */ true);
84         testNeverConstrainDisplayApis("com.android.test", /* version= */ 2, /* expected= */ false);
85     }
86 
87     @Test
neverConstrainDisplayApis_flagHasEntries_returnsTrueForPackagesWithinRange()88     public void neverConstrainDisplayApis_flagHasEntries_returnsTrueForPackagesWithinRange() {
89         setNeverConstrainDisplayApisFlag("com.android.test1::,com.android.test2:1:3,"
90                 + "com.android.test3:5:,com.android.test4::8");
91 
92         // Package 'com.android.other'
93         testNeverConstrainDisplayApis("com.android.other", /* version= */ 5, /* expected= */ false);
94         // Package 'com.android.test1'
95         testNeverConstrainDisplayApis("com.android.test1", /* version= */ 5, /* expected= */ true);
96         // Package 'com.android.test2'
97         testNeverConstrainDisplayApis("com.android.test2", /* version= */ 0, /* expected= */ false);
98         testNeverConstrainDisplayApis("com.android.test2", /* version= */ 1, /* expected= */ true);
99         testNeverConstrainDisplayApis("com.android.test2", /* version= */ 2, /* expected= */ true);
100         testNeverConstrainDisplayApis("com.android.test2", /* version= */ 3, /* expected= */ true);
101         testNeverConstrainDisplayApis("com.android.test2", /* version= */ 4, /* expected= */ false);
102         // Package 'com.android.test3'
103         testNeverConstrainDisplayApis("com.android.test3", /* version= */ 4, /* expected= */ false);
104         testNeverConstrainDisplayApis("com.android.test3", /* version= */ 5, /* expected= */ true);
105         testNeverConstrainDisplayApis("com.android.test3", /* version= */ 6, /* expected= */ true);
106         // Package 'com.android.test4'
107         testNeverConstrainDisplayApis("com.android.test4", /* version= */ 7, /* expected= */ true);
108         testNeverConstrainDisplayApis("com.android.test4", /* version= */ 8, /* expected= */ true);
109         testNeverConstrainDisplayApis("com.android.test4", /* version= */ 9, /* expected= */ false);
110     }
111 
112     @Ignore("b/257375674")
113     @Test
neverConstrainDisplayApis_flagHasInvalidEntries_ignoresInvalidEntries()114     public void neverConstrainDisplayApis_flagHasInvalidEntries_ignoresInvalidEntries() {
115         // We add a valid entry before and after the invalid ones to make sure they are applied.
116         setNeverConstrainDisplayApisFlag("com.android.test1::,com.android.test2:1,"
117                 + "com.android.test3:5:ten,com.android.test4:5::,com.android.test5::");
118 
119         testNeverConstrainDisplayApis("com.android.test1", /* version= */ 5, /* expected= */ true);
120         testNeverConstrainDisplayApis("com.android.test2", /* version= */ 2, /* expected= */ false);
121         testNeverConstrainDisplayApis("com.android.test3", /* version= */ 7, /* expected= */ false);
122         testNeverConstrainDisplayApis("com.android.test4", /* version= */ 7, /* expected= */ false);
123         testNeverConstrainDisplayApis("com.android.test5", /* version= */ 5, /* expected= */ true);
124     }
125 
126     @Test
alwaysConstrainDisplayApis_flagsNoSet_returnsFalse()127     public void alwaysConstrainDisplayApis_flagsNoSet_returnsFalse() {
128         testAlwaysConstrainDisplayApis("com.android.test", /* version= */ 1, /* expected= */ false);
129     }
130 
131     @Test
alwaysConstrainDisplayApis_flagHasEntries_returnsTrueForPackagesWithinRange()132     public void alwaysConstrainDisplayApis_flagHasEntries_returnsTrueForPackagesWithinRange() {
133         setAlwaysConstrainDisplayApisFlag("com.android.test1::,com.android.test2:1:2");
134 
135         // Package 'com.android.other'
136         testAlwaysConstrainDisplayApis("com.android.other", /* version= */ 5, /* expected= */
137                 false);
138         // Package 'com.android.test1'
139         testAlwaysConstrainDisplayApis("com.android.test1", /* version= */ 5, /* expected= */ true);
140         // Package 'com.android.test2'
141         testAlwaysConstrainDisplayApis("com.android.test2", /* version= */ 0, /* expected= */
142                 false);
143         testAlwaysConstrainDisplayApis("com.android.test2", /* version= */ 1, /* expected= */ true);
144         testAlwaysConstrainDisplayApis("com.android.test2", /* version= */ 2, /* expected= */ true);
145         testAlwaysConstrainDisplayApis("com.android.test2", /* version= */ 3, /* expected= */
146                 false);
147     }
148 
testNeverConstrainDisplayApis(String packageName, long version, boolean expected)149     private static void testNeverConstrainDisplayApis(String packageName, long version,
150             boolean expected) {
151         ConstrainDisplayApisConfig config = new ConstrainDisplayApisConfig();
152         assertEquals(expected,
153                 config.getNeverConstrainDisplayApis(buildApplicationInfo(packageName, version)));
154     }
155 
testAlwaysConstrainDisplayApis(String packageName, long version, boolean expected)156     private static void testAlwaysConstrainDisplayApis(String packageName, long version,
157             boolean expected) {
158         ConstrainDisplayApisConfig config = new ConstrainDisplayApisConfig();
159 
160         assertEquals(expected,
161                 config.getAlwaysConstrainDisplayApis(buildApplicationInfo(packageName, version)));
162     }
163 
buildApplicationInfo(String packageName, long version)164     private static ApplicationInfo buildApplicationInfo(String packageName, long version) {
165         ApplicationInfo applicationInfo = new ApplicationInfo();
166         applicationInfo.packageName = packageName;
167         applicationInfo.longVersionCode = version;
168         return applicationInfo;
169     }
170 
setNeverConstrainDisplayApisFlag(@ullable String value)171     private static void setNeverConstrainDisplayApisFlag(@Nullable String value) {
172         DeviceConfig.setProperty(NAMESPACE_CONSTRAIN_DISPLAY_APIS, "never_constrain_display_apis",
173                 value, /* makeDefault= */ false);
174     }
175 
setNeverConstrainDisplayApisAllPackagesFlag(@ullable String value)176     private static void setNeverConstrainDisplayApisAllPackagesFlag(@Nullable String value) {
177         DeviceConfig.setProperty(NAMESPACE_CONSTRAIN_DISPLAY_APIS,
178                 "never_constrain_display_apis_all_packages",
179                 value, /* makeDefault= */ false);
180     }
181 
setAlwaysConstrainDisplayApisFlag(@ullable String value)182     private static void setAlwaysConstrainDisplayApisFlag(@Nullable String value) {
183         DeviceConfig.setProperty(NAMESPACE_CONSTRAIN_DISPLAY_APIS, "always_constrain_display_apis",
184                 value, /* makeDefault= */ false);
185     }
186 }
187