/*
* Copyright © 2015 Cask Data, Inc.
*
* 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 co.cask.cdap.config;
import co.cask.cdap.internal.app.services.http.AppFabricTestBase;
import co.cask.cdap.proto.Id;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
import org.junit.Assert;
import org.junit.Test;
import java.util.Map;
/**
* Tests for {@link PreferencesStore}
*/
public class PreferencesStoreTest extends AppFabricTestBase {
@Test
public void testCleanSlate() throws Exception {
Map<String, String> emptyMap = ImmutableMap.of();
PreferencesStore store = getInjector().getInstance(PreferencesStore.class);
Assert.assertEquals(emptyMap, store.getProperties());
Assert.assertEquals(emptyMap, store.getProperties("somenamespace"));
Assert.assertEquals(emptyMap, store.getProperties(Id.Namespace.DEFAULT.getId()));
Assert.assertEquals(emptyMap, store.getResolvedProperties());
Assert.assertEquals(emptyMap, store.getResolvedProperties("a", "b", "c", "d"));
// should not throw any exception if try to delete properties without storing anything
store.deleteProperties();
store.deleteProperties(Id.Namespace.DEFAULT.getId());
store.deleteProperties("a", "x", "y", "z");
}
@Test
public void testBasicProperties() throws Exception {
Map<String, String> propMap = Maps.newHashMap();
propMap.put("key", "instance");
PreferencesStore store = getInjector().getInstance(PreferencesStore.class);
store.setProperties(propMap);
Assert.assertEquals(propMap, store.getProperties());
Assert.assertEquals(propMap, store.getResolvedProperties("a", "b", "c", "d"));
Assert.assertEquals(propMap, store.getResolvedProperties("myspace"));
Assert.assertEquals(ImmutableMap.<String, String>of(), store.getProperties("myspace"));
store.deleteProperties();
propMap.clear();
Assert.assertEquals(propMap, store.getProperties());
Assert.assertEquals(propMap, store.getResolvedProperties("a", "b", "c", "d"));
Assert.assertEquals(propMap, store.getResolvedProperties("myspace"));
}
@Test
public void testMultiLevelProperties() throws Exception {
Map<String, String> propMap = Maps.newHashMap();
propMap.put("key", "namespace");
PreferencesStore store = getInjector().getInstance(PreferencesStore.class);
store.setProperties("myspace", propMap);
propMap.put("key", "application");
store.setProperties("myspace", "app", propMap);
Assert.assertEquals(propMap, store.getProperties("myspace", "app"));
Assert.assertEquals("namespace", store.getProperties("myspace").get("key"));
Assert.assertTrue(store.getProperties("myspace", "notmyapp").isEmpty());
Assert.assertEquals("namespace", store.getResolvedProperties("myspace", "notmyapp").get("key"));
Assert.assertTrue(store.getProperties("notmyspace").isEmpty());
store.deleteProperties("myspace");
Assert.assertTrue(store.getProperties("myspace").isEmpty());
Assert.assertTrue(store.getResolvedProperties("myspace", "notmyapp").isEmpty());
Assert.assertEquals(propMap, store.getProperties("myspace", "app"));
store.deleteProperties("myspace", "app");
Assert.assertTrue(store.getProperties("myspace", "app").isEmpty());
propMap.put("key", "program");
store.setProperties("myspace", "app", "type", "prog", propMap);
Assert.assertEquals(propMap, store.getProperties("myspace", "app", "type", "prog"));
store.setProperties(ImmutableMap.of("key", "instance"));
Assert.assertEquals(propMap, store.getProperties("myspace", "app", "type", "prog"));
store.deleteProperties("myspace", "app", "type", "prog");
Assert.assertTrue(store.getProperties("myspace", "app", "type", "prog").isEmpty());
Assert.assertEquals("instance", store.getResolvedProperties("myspace", "app", "type", "prog").get("key"));
store.deleteProperties();
Assert.assertEquals(ImmutableMap.<String, String>of(), store.getProperties("myspace", "app", "type", "prog"));
}
}