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