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