blob: 765aaad45efb343336c033429936fff58a8d3c9f [file] [log] [blame]
/*
* Copyright (C) 2018 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License
*/
package com.android.server.am;
import android.content.ContentResolver;
import android.provider.Settings;
import android.test.mock.MockContentResolver;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
import com.android.internal.util.Preconditions;
import com.android.internal.util.test.FakeSettingsProvider;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.HashMap;
import java.util.Map;
/**
* Tests for {@link GlobalSettingsToPropertiesMapper}
*/
@RunWith(AndroidJUnit4.class)
@SmallTest
public class GlobalSettingsToPropertiesMapperTest {
private static final String[][] TEST_MAPPING = new String[][] {
{Settings.Global.SQLITE_COMPATIBILITY_WAL_FLAGS, "TestProperty"}
};
private TestMapper mTestMapper;
private MockContentResolver mMockContentResolver;
@Before
public void setup() {
// Use FakeSettingsProvider to not affect global state
mMockContentResolver = new MockContentResolver(InstrumentationRegistry.getContext());
mMockContentResolver.addProvider(Settings.AUTHORITY, new FakeSettingsProvider());
mTestMapper = new TestMapper(mMockContentResolver);
}
@Test
public void testUpdatePropertiesFromGlobalSettings() {
Settings.Global.putString(mMockContentResolver,
Settings.Global.SQLITE_COMPATIBILITY_WAL_FLAGS, "testValue");
mTestMapper.updatePropertiesFromGlobalSettings();
String propValue = mTestMapper.systemPropertiesGet("TestProperty");
Assert.assertEquals("testValue", propValue);
Settings.Global.putString(mMockContentResolver,
Settings.Global.SQLITE_COMPATIBILITY_WAL_FLAGS, "testValue2");
mTestMapper.updatePropertyFromSetting(Settings.Global.SQLITE_COMPATIBILITY_WAL_FLAGS,
"TestProperty");
propValue = mTestMapper.systemPropertiesGet("TestProperty");
Assert.assertEquals("testValue2", propValue);
Settings.Global.putString(mMockContentResolver,
Settings.Global.SQLITE_COMPATIBILITY_WAL_FLAGS, null);
mTestMapper.updatePropertyFromSetting(Settings.Global.SQLITE_COMPATIBILITY_WAL_FLAGS,
"TestProperty");
propValue = mTestMapper.systemPropertiesGet("TestProperty");
Assert.assertEquals("", propValue);
}
@Test
public void testUpdatePropertiesFromGlobalSettings_PropertyAndSettingNotPresent() {
// Test that empty property will not not be set if setting is not set
mTestMapper.updatePropertiesFromGlobalSettings();
String propValue = mTestMapper.systemPropertiesGet("TestProperty");
Assert.assertNull("Property should not be set if setting is null", propValue);
}
private static class TestMapper extends GlobalSettingsToPropertiesMapper {
private final Map<String, String> mProps = new HashMap<>();
TestMapper(ContentResolver contentResolver) {
super(contentResolver, TEST_MAPPING);
}
@Override
protected String systemPropertiesGet(String key) {
Preconditions.checkNotNull(key);
return mProps.get(key);
}
@Override
protected void systemPropertiesSet(String key, String value) {
Preconditions.checkNotNull(value);
Preconditions.checkNotNull(key);
mProps.put(key, value);
}
}
}