1 /*
2  * Copyright (C) 2023 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 com.android.server.flags;
18 
19 import static com.google.common.truth.Truth.assertThat;
20 
21 import static org.mockito.Mockito.verify;
22 import static org.mockito.Mockito.when;
23 
24 import android.platform.test.annotations.Presubmit;
25 
26 import androidx.test.filters.SmallTest;
27 
28 import org.junit.Before;
29 import org.junit.Rule;
30 import org.junit.Test;
31 import org.mockito.Mock;
32 import org.mockito.junit.MockitoJUnit;
33 import org.mockito.junit.MockitoRule;
34 
35 @Presubmit
36 @SmallTest
37 public class FlagOverrideStoreTest {
38     private static final String NS = "ns";
39     private static final String NAME = "name";
40     private static final String PROP_NAME = FlagOverrideStore.getPropName(NS, NAME);
41 
42     @Rule
43     public final MockitoRule mockito = MockitoJUnit.rule();
44 
45     @Mock
46     private SettingsProxy mSettingsProxy;
47     @Mock
48     private FlagOverrideStore.FlagChangeCallback mCallback;
49 
50     private FlagOverrideStore mFlagStore;
51 
52     @Before
setup()53     public void setup() {
54         mFlagStore = new FlagOverrideStore(mSettingsProxy);
55         mFlagStore.setChangeCallback(mCallback);
56     }
57 
58     @Test
testSet_unset()59     public void testSet_unset() {
60         mFlagStore.set(NS, NAME, "value");
61         verify(mSettingsProxy).putString(PROP_NAME, "value");
62     }
63 
64     @Test
testSet_setTwice()65     public void testSet_setTwice() {
66         mFlagStore.set(NS, NAME, "value");
67         mFlagStore.set(NS, NAME, "newvalue");
68         verify(mSettingsProxy).putString(PROP_NAME, "value");
69         verify(mSettingsProxy).putString(PROP_NAME, "newvalue");
70     }
71 
72     @Test
testGet_unset()73     public void testGet_unset() {
74         assertThat(mFlagStore.get(NS, NAME)).isNull();
75     }
76 
77     @Test
testGet_set()78     public void testGet_set() {
79         when(mSettingsProxy.getString(PROP_NAME)).thenReturn("value");
80         assertThat(mFlagStore.get(NS, NAME)).isEqualTo("value");
81     }
82 
83     @Test
testErase()84     public void testErase() {
85         mFlagStore.erase(NS, NAME);
86         verify(mSettingsProxy).putString(PROP_NAME, null);
87     }
88 
89     @Test
testContains_unset()90     public void testContains_unset() {
91         assertThat(mFlagStore.contains(NS, NAME)).isFalse();
92     }
93 
94     @Test
testContains_set()95     public void testContains_set() {
96         when(mSettingsProxy.getString(PROP_NAME)).thenReturn("value");
97         assertThat(mFlagStore.contains(NS, NAME)).isTrue();
98     }
99 
100     @Test
testCallback_onSet()101     public void testCallback_onSet() {
102         mFlagStore.set(NS, NAME, "value");
103         verify(mCallback).onFlagChanged(NS, NAME, "value");
104     }
105 
106     @Test
testCallback_onErase()107     public void testCallback_onErase() {
108         mFlagStore.erase(NS, NAME);
109         verify(mCallback).onFlagChanged(NS, NAME, null);
110     }
111 }
112