/**
* (c) Copyright 2012 WibiData, Inc.
*
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
* 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 org.kiji.mapreduce.kvstore;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.Arrays;
import org.apache.hadoop.conf.Configuration;
import org.junit.Test;
import org.kiji.mapreduce.kvstore.framework.KeyValueStoreConfiguration;
public class TestKeyValueStoreConfiguration {
@Test
public void testCopyFromConfiguration() {
Configuration conf = new Configuration(false);
conf.set("foo", "foo-value");
conf.setInt("bar", 123);
conf.setClass("qaz", String.class, Object.class);
KeyValueStoreConfiguration kvStoreConf = KeyValueStoreConfiguration.fromConf(conf);
assertEquals("foo-value", kvStoreConf.get("foo"));
assertEquals(123, kvStoreConf.getInt("bar", 0));
assertEquals(String.class, kvStoreConf.getClass("qaz", null));
}
@Test
public void testStoreString() {
Configuration parent = new Configuration(false);
KeyValueStoreConfiguration isolated =
KeyValueStoreConfiguration.createInConfiguration(parent, 0);
isolated.set("foo-key", "foo-value");
assertEquals("foo-value", isolated.get("foo-key"));
// Check that this value is stored in the namespace on the parent:
Configuration delegate = isolated.getDelegate();
assertEquals("foo-value",
delegate.get(KeyValueStoreConfiguration.confKeyAtIndex("foo-key", 0)));
}
@Test
public void testStoreBoolean() {
final boolean expected = true;
Configuration parent = new Configuration(false);
KeyValueStoreConfiguration isolated =
KeyValueStoreConfiguration.createInConfiguration(parent, 0);
isolated.setBoolean("foo-key", expected);
assertEquals(expected, isolated.getBoolean("foo-key", !expected));
// Check that this value is stored in the namespace on the parent:
Configuration delegate = isolated.getDelegate();
assertEquals(expected,
delegate.getBoolean(KeyValueStoreConfiguration.confKeyAtIndex("foo-key", 0), !expected));
}
@Test
public void testStoreClass() {
Configuration parent = new Configuration(false);
KeyValueStoreConfiguration isolated =
KeyValueStoreConfiguration.createInConfiguration(parent, 0);
isolated.setClass("foo-key", String.class, Object.class);
assertEquals(String.class, isolated.getClass("foo-key", null));
assertEquals(String.class, isolated.getClass("foo-key", null, Object.class));
// Check that this value is stored in the namespace on the parent:
Configuration delegate = isolated.getDelegate();
assertEquals(String.class,
delegate.getClass(KeyValueStoreConfiguration.confKeyAtIndex("foo-key", 0), null));
}
@Test
public void testStoreFloat() {
Configuration parent = new Configuration(false);
KeyValueStoreConfiguration isolated =
KeyValueStoreConfiguration.createInConfiguration(parent, 0);
isolated.setFloat("foo-key", 3.14F);
assertEquals(3.14F, isolated.getFloat("foo-key", 0.0F), 0.0F);
// Check that this value is stored in the namespace on the parent:
Configuration delegate = isolated.getDelegate();
assertEquals(3.14F,
delegate.getFloat(KeyValueStoreConfiguration.confKeyAtIndex("foo-key", 0), 0.0F), 0.0F);
}
@Test
public void testStoreInt() {
Configuration parent = new Configuration(false);
KeyValueStoreConfiguration isolated =
KeyValueStoreConfiguration.createInConfiguration(parent, 0);
isolated.setInt("foo-key", 123);
assertEquals(123, isolated.getInt("foo-key", 0));
// Check that this value is stored in the namespace on the parent:
Configuration delegate = isolated.getDelegate();
assertEquals(123, delegate.getInt(KeyValueStoreConfiguration.confKeyAtIndex("foo-key", 0), 0));
}
@Test
public void testStoreLong() {
Configuration parent = new Configuration(false);
KeyValueStoreConfiguration isolated =
KeyValueStoreConfiguration.createInConfiguration(parent, 0);
isolated.setLong("foo-key", 12345L);
assertEquals(12345L, isolated.getLong("foo-key", 0L));
// Check that this value is stored in the namespace on the parent:
Configuration delegate = isolated.getDelegate();
assertEquals(12345L,
delegate.getLong(KeyValueStoreConfiguration.confKeyAtIndex("foo-key", 0), 0L));
}
@Test
public void testStoreStringArray() {
Configuration parent = new Configuration(false);
KeyValueStoreConfiguration isolated =
KeyValueStoreConfiguration.createInConfiguration(parent, 0);
isolated.setStrings("foo-key", "first", "second", "third");
assertTrue(Arrays.equals(new String[] {"first", "second", "third"},
isolated.getStrings("foo-key")));
// Also test the specifying a defaultValue works.
assertTrue(Arrays.equals(new String[] {"first", "second", "third"},
isolated.getStrings("foo-key", new String[0])));
// Check that this value is stored in the namespace on the parent:
Configuration delegate = isolated.getDelegate();
assertTrue(Arrays.equals(new String[] {"first", "second", "third"},
delegate.getStrings(KeyValueStoreConfiguration.confKeyAtIndex("foo-key", 0))));
}
}