blob: e7507667b17f5b473de161bf6eda783faeeede09 [file] [log] [blame]
Michal Karpinski2c37b082018-01-18 16:14:27 +00001/*
2 * Copyright (C) 2018 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
17package android.provider;
18
19import static org.junit.Assert.fail;
Michal Karpinski6fe6c8e2018-01-24 15:40:09 +000020import static org.junit.Assert.assertFalse;
21import static org.junit.Assert.assertTrue;
Michal Karpinski2c37b082018-01-18 16:14:27 +000022
23import android.platform.test.annotations.Presubmit;
Michal Karpinski5db1e432018-01-18 20:10:24 +000024import android.provider.SettingsValidators.Validator;
Michal Karpinski2c37b082018-01-18 16:14:27 +000025import android.support.test.filters.SmallTest;
26import android.support.test.runner.AndroidJUnit4;
27
28import org.junit.Test;
29import org.junit.runner.RunWith;
30
Michal Karpinski5db1e432018-01-18 20:10:24 +000031import java.util.Map;
32
Michal Karpinski6fe6c8e2018-01-24 15:40:09 +000033/**
34 * Tests that ensure all backed up settings have non-null validators. Also, common validators
35 * are tested.
36 */
Michal Karpinski2c37b082018-01-18 16:14:27 +000037@Presubmit
38@RunWith(AndroidJUnit4.class)
39@SmallTest
40public class SettingsValidatorsTest {
41
42 @Test
Michal Karpinski6fe6c8e2018-01-24 15:40:09 +000043 public void testNonNegativeIntegerValidator() {
44 assertTrue(SettingsValidators.NON_NEGATIVE_INTEGER_VALIDATOR.validate("1"));
45 assertTrue(SettingsValidators.NON_NEGATIVE_INTEGER_VALIDATOR.validate("0"));
46 assertFalse(SettingsValidators.NON_NEGATIVE_INTEGER_VALIDATOR.validate("-1"));
47 assertFalse(SettingsValidators.NON_NEGATIVE_INTEGER_VALIDATOR.validate("rectangle"));
48 }
49
50 @Test
51 public void testAnyIntegerValidator() {
52 assertTrue(SettingsValidators.ANY_INTEGER_VALIDATOR.validate("1"));
53 assertTrue(SettingsValidators.ANY_INTEGER_VALIDATOR.validate("0"));
54 assertTrue(SettingsValidators.ANY_INTEGER_VALIDATOR.validate("-1"));
55 assertFalse(SettingsValidators.ANY_INTEGER_VALIDATOR.validate("rectangle"));
56 }
57
58 @Test
59 public void testComponentNameValidator() {
60 assertTrue(SettingsValidators.COMPONENT_NAME_VALIDATOR.validate(
61 "android/com.android.internal.backup.LocalTransport"));
62 assertFalse(SettingsValidators.COMPONENT_NAME_VALIDATOR.validate("rectangle"));
63 }
64
65 @Test
66 public void testLocaleValidator() {
67 assertTrue(SettingsValidators.LOCALE_VALIDATOR.validate("en_US"));
68 assertTrue(SettingsValidators.LOCALE_VALIDATOR.validate("es"));
69 assertFalse(SettingsValidators.LOCALE_VALIDATOR.validate("rectangle"));
70 }
71
72 @Test
73 public void testPackageNameValidator() {
74 assertTrue(SettingsValidators.PACKAGE_NAME_VALIDATOR.validate(
75 "com.google.android"));
76 assertFalse(SettingsValidators.PACKAGE_NAME_VALIDATOR.validate("com.google.@android"));
77 assertFalse(SettingsValidators.PACKAGE_NAME_VALIDATOR.validate(".com.google.android"));
78 assertFalse(SettingsValidators.PACKAGE_NAME_VALIDATOR.validate(".com.google.5android"));
79 }
80
81 @Test
82 public void testDiscreteValueValidator() {
83 String[] beerTypes = new String[]{"Ale", "American IPA", "Stout"};
84 Validator v = new SettingsValidators.DiscreteValueValidator(beerTypes);
85 assertTrue(v.validate("Ale"));
86 assertTrue(v.validate("American IPA"));
87 assertTrue(v.validate("Stout"));
88 assertFalse(v.validate("Cider")); // just juice pretending to be beer
89 }
90
91 @Test
92 public void testInclusiveIntegerRangeValidator() {
93 Validator v = new SettingsValidators.InclusiveIntegerRangeValidator(0, 5);
94 assertTrue(v.validate("0"));
95 assertTrue(v.validate("2"));
96 assertTrue(v.validate("5"));
97 assertFalse(v.validate("-1"));
98 assertFalse(v.validate("6"));
99 }
100
101 @Test
102 public void testInclusiveFloatRangeValidator() {
103 Validator v = new SettingsValidators.InclusiveFloatRangeValidator(0.0f, 5.0f);
104 assertTrue(v.validate("0.0"));
105 assertTrue(v.validate("2.0"));
106 assertTrue(v.validate("5.0"));
107 assertFalse(v.validate("-1.0"));
108 assertFalse(v.validate("6.0"));
109 }
110
111 @Test
112 public void testComponentNameListValidator() {
113 Validator v = new SettingsValidators.ComponentNameListValidator(",");
114 assertTrue(v.validate("android/com.android.internal.backup.LocalTransport,"
115 + "com.google.android.gms/.backup.migrate.service.D2dTransport"));
116 assertFalse(v.validate("com.google.5android,android"));
117 }
118
119 @Test
120 public void testPackageNameListValidator() {
121 Validator v = new SettingsValidators.PackageNameListValidator(",");
122 assertTrue(v.validate("com.android.internal.backup.LocalTransport,com.google.android.gms"));
123 assertFalse(v.validate("5com.android.internal.backup.LocalTransport,android"));
124 }
125
126
127 @Test
Michal Karpinski2c37b082018-01-18 16:14:27 +0000128 public void ensureAllBackedUpSystemSettingsHaveValidators() {
Michal Karpinski964943a2018-01-19 16:28:26 +0000129 String offenders = getOffenders(concat(Settings.System.SETTINGS_TO_BACKUP,
130 Settings.System.LEGACY_RESTORE_SETTINGS), Settings.System.VALIDATORS);
Michal Karpinski5db1e432018-01-18 20:10:24 +0000131
132 failIfOffendersPresent(offenders, "Settings.System");
133 }
134
135 @Test
136 public void ensureAllBackedUpGlobalSettingsHaveValidators() {
Michal Karpinski964943a2018-01-19 16:28:26 +0000137 String offenders = getOffenders(concat(Settings.Global.SETTINGS_TO_BACKUP,
138 Settings.Global.LEGACY_RESTORE_SETTINGS), Settings.Global.VALIDATORS);
Michal Karpinski5db1e432018-01-18 20:10:24 +0000139
140 failIfOffendersPresent(offenders, "Settings.Global");
141 }
142
Michal Karpinski964943a2018-01-19 16:28:26 +0000143 @Test
144 public void ensureAllBackedUpSecureSettingsHaveValidators() {
145 String offenders = getOffenders(concat(Settings.Secure.SETTINGS_TO_BACKUP,
146 Settings.Secure.LEGACY_RESTORE_SETTINGS), Settings.Secure.VALIDATORS);
147
148 failIfOffendersPresent(offenders, "Settings.Secure");
149 }
150
Michal Karpinski5db1e432018-01-18 20:10:24 +0000151 private void failIfOffendersPresent(String offenders, String settingsType) {
152 if (offenders.length() > 0) {
153 fail("All " + settingsType + " settings that are backed up have to have a non-null"
154 + " validator, but those don't: " + offenders);
155 }
156 }
157
158 private String getOffenders(String[] settingsToBackup, Map<String, Validator> validators) {
Michal Karpinski2c37b082018-01-18 16:14:27 +0000159 StringBuilder offenders = new StringBuilder();
Michal Karpinski5db1e432018-01-18 20:10:24 +0000160 for (String setting : settingsToBackup) {
161 if (validators.get(setting) == null) {
Michal Karpinski2c37b082018-01-18 16:14:27 +0000162 offenders.append(setting).append(" ");
163 }
164 }
Michal Karpinski5db1e432018-01-18 20:10:24 +0000165 return offenders.toString();
Michal Karpinski2c37b082018-01-18 16:14:27 +0000166 }
Michal Karpinski964943a2018-01-19 16:28:26 +0000167
168 private String[] concat(String[] first, String[] second) {
169 if (second == null || second.length == 0) {
170 return first;
171 }
172 final int firstLen = first.length;
173 final int secondLen = second.length;
174 String[] both = new String[firstLen + secondLen];
175 System.arraycopy(first, 0, both, 0, firstLen);
176 System.arraycopy(second, 0, both, firstLen, secondLen);
177 return both;
178 }
Michal Karpinski2c37b082018-01-18 16:14:27 +0000179}