1690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang/* 2690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang * Copyright (C) 2017 The Android Open Source Project 3690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang * 4690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang * Licensed under the Apache License, Version 2.0 (the "License"); 5690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang * you may not use this file except in compliance with the License. 6690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang * You may obtain a copy of the License at 7690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang * 8690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang * http://www.apache.org/licenses/LICENSE-2.0 9690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang * 10690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang * Unless required by applicable law or agreed to in writing, software 11690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang * distributed under the License is distributed on an "AS IS" BASIS, 12690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang * See the License for the specific language governing permissions and 14690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang * limitations under the License. 15690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang */ 16690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 17690986d37052eecf60d38c7d21697ecd28150c39Fan Zhangpackage android.util; 18690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 19cfd02742e46c069c5d700756b0fcbf502c90c7a5Fan Zhangimport static junit.framework.Assert.assertEquals; 20690986d37052eecf60d38c7d21697ecd28150c39Fan Zhangimport static junit.framework.Assert.assertFalse; 213080636f88a9d68fc9f3f5b84d621e3c4daa9986Fan Zhangimport static junit.framework.Assert.assertNotNull; 22690986d37052eecf60d38c7d21697ecd28150c39Fan Zhangimport static junit.framework.Assert.assertTrue; 23690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 2493d87e6964e754b5a18326a89d1d5fbf2928f786Fan Zhangimport android.content.Context; 25690986d37052eecf60d38c7d21697ecd28150c39Fan Zhangimport android.os.SystemProperties; 26aa1387c6dec6e9d2941afca293abf667c7476274Fan Zhangimport android.provider.Settings; 2793d87e6964e754b5a18326a89d1d5fbf2928f786Fan Zhangimport android.support.test.InstrumentationRegistry; 28690986d37052eecf60d38c7d21697ecd28150c39Fan Zhangimport android.support.test.runner.AndroidJUnit4; 29690986d37052eecf60d38c7d21697ecd28150c39Fan Zhangimport android.test.suitebuilder.annotation.SmallTest; 30690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 31690986d37052eecf60d38c7d21697ecd28150c39Fan Zhangimport org.junit.After; 32690986d37052eecf60d38c7d21697ecd28150c39Fan Zhangimport org.junit.Before; 33690986d37052eecf60d38c7d21697ecd28150c39Fan Zhangimport org.junit.Test; 34690986d37052eecf60d38c7d21697ecd28150c39Fan Zhangimport org.junit.runner.RunWith; 35690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 36690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang@RunWith(AndroidJUnit4.class) 37690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang@SmallTest 38690986d37052eecf60d38c7d21697ecd28150c39Fan Zhangpublic class FeatureFlagUtilsTest { 39690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 40690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang private static final String TEST_FEATURE_NAME = "feature_foobar"; 41690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 4293d87e6964e754b5a18326a89d1d5fbf2928f786Fan Zhang private Context mContext; 4393d87e6964e754b5a18326a89d1d5fbf2928f786Fan Zhang 44690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang @Before 45690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang public void setUp() { 4693d87e6964e754b5a18326a89d1d5fbf2928f786Fan Zhang mContext = InstrumentationRegistry.getTargetContext(); 47690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang cleanup(); 48690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang } 49690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 50690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang @After 51690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang public void tearDown() { 52690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang cleanup(); 53690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang } 54690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 55690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang private void cleanup() { 56aa1387c6dec6e9d2941afca293abf667c7476274Fan Zhang Settings.Global.putString(mContext.getContentResolver(), TEST_FEATURE_NAME, ""); 57690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang SystemProperties.set(FeatureFlagUtils.FFLAG_PREFIX + TEST_FEATURE_NAME, ""); 58690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + TEST_FEATURE_NAME, ""); 59690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang } 60690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 61690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang @Test 62690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang public void testGetFlag_enabled_shouldReturnTrue() { 633080636f88a9d68fc9f3f5b84d621e3c4daa9986Fan Zhang FeatureFlagUtils.getAllFeatureFlags().put(TEST_FEATURE_NAME, "true"); 64690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 6593d87e6964e754b5a18326a89d1d5fbf2928f786Fan Zhang assertTrue(FeatureFlagUtils.isEnabled(mContext, TEST_FEATURE_NAME)); 66690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang } 67690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 68690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang @Test 69aa1387c6dec6e9d2941afca293abf667c7476274Fan Zhang public void testGetFlag_adb_override_shouldReturnTrue() { 70690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang SystemProperties.set(FeatureFlagUtils.FFLAG_PREFIX + TEST_FEATURE_NAME, "false"); 71690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + TEST_FEATURE_NAME, "true"); 72690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 7393d87e6964e754b5a18326a89d1d5fbf2928f786Fan Zhang assertTrue(FeatureFlagUtils.isEnabled(mContext, TEST_FEATURE_NAME)); 74690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang } 75690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 76690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang @Test 77aa1387c6dec6e9d2941afca293abf667c7476274Fan Zhang public void testGetFlag_settings_override_shouldReturnTrue() { 78aa1387c6dec6e9d2941afca293abf667c7476274Fan Zhang SystemProperties.set(FeatureFlagUtils.FFLAG_PREFIX + TEST_FEATURE_NAME, "false"); 79aa1387c6dec6e9d2941afca293abf667c7476274Fan Zhang SystemProperties.set(FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + TEST_FEATURE_NAME, "false"); 80aa1387c6dec6e9d2941afca293abf667c7476274Fan Zhang 81aa1387c6dec6e9d2941afca293abf667c7476274Fan Zhang Settings.Global.putString(mContext.getContentResolver(), TEST_FEATURE_NAME, "true"); 82aa1387c6dec6e9d2941afca293abf667c7476274Fan Zhang 83aa1387c6dec6e9d2941afca293abf667c7476274Fan Zhang assertTrue(FeatureFlagUtils.isEnabled(mContext, TEST_FEATURE_NAME)); 84aa1387c6dec6e9d2941afca293abf667c7476274Fan Zhang } 85aa1387c6dec6e9d2941afca293abf667c7476274Fan Zhang 86aa1387c6dec6e9d2941afca293abf667c7476274Fan Zhang @Test 87cfd02742e46c069c5d700756b0fcbf502c90c7a5Fan Zhang public void testSetEnabled_shouldSetOverrideFlag() { 8893d87e6964e754b5a18326a89d1d5fbf2928f786Fan Zhang assertFalse(FeatureFlagUtils.isEnabled(mContext, TEST_FEATURE_NAME)); 89cfd02742e46c069c5d700756b0fcbf502c90c7a5Fan Zhang 90aa1387c6dec6e9d2941afca293abf667c7476274Fan Zhang FeatureFlagUtils.setEnabled(null /* context */, TEST_FEATURE_NAME, true); 91cfd02742e46c069c5d700756b0fcbf502c90c7a5Fan Zhang 92cfd02742e46c069c5d700756b0fcbf502c90c7a5Fan Zhang assertEquals(SystemProperties.get(FeatureFlagUtils.FFLAG_PREFIX + TEST_FEATURE_NAME, null), 93cfd02742e46c069c5d700756b0fcbf502c90c7a5Fan Zhang ""); 94cfd02742e46c069c5d700756b0fcbf502c90c7a5Fan Zhang assertTrue(Boolean.parseBoolean(SystemProperties.get( 95cfd02742e46c069c5d700756b0fcbf502c90c7a5Fan Zhang FeatureFlagUtils.FFLAG_OVERRIDE_PREFIX + TEST_FEATURE_NAME, ""))); 96cfd02742e46c069c5d700756b0fcbf502c90c7a5Fan Zhang } 97cfd02742e46c069c5d700756b0fcbf502c90c7a5Fan Zhang 98cfd02742e46c069c5d700756b0fcbf502c90c7a5Fan Zhang @Test 99690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang public void testGetFlag_notSet_shouldReturnFalse() { 1003080636f88a9d68fc9f3f5b84d621e3c4daa9986Fan Zhang assertFalse(FeatureFlagUtils.isEnabled(mContext, TEST_FEATURE_NAME + "does_not_exist")); 101690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang } 102690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang 1033080636f88a9d68fc9f3f5b84d621e3c4daa9986Fan Zhang @Test 1043080636f88a9d68fc9f3f5b84d621e3c4daa9986Fan Zhang public void getAllFeatureFlags_shouldNotBeNull() { 1053080636f88a9d68fc9f3f5b84d621e3c4daa9986Fan Zhang assertNotNull(FeatureFlagUtils.getAllFeatureFlags()); 1063080636f88a9d68fc9f3f5b84d621e3c4daa9986Fan Zhang } 107690986d37052eecf60d38c7d21697ecd28150c39Fan Zhang} 108