blob: c71237f6d7ad76a0df35708d7b3ff4d8877462f4 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.apache.activemq.kaha;
import java.io.IOException;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.apache.activemq.kaha.impl.container.BaseContainerImpl;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import junit.framework.TestCase;
public class MapContainerTest extends TestCase {
private static final Logger LOG = LoggerFactory.getLogger(MapContainerTest.class);
protected static final int COUNT = 10;
protected String name = "test";
protected Store store;
protected MapContainer<String, String> container;
protected Map<String, String> testMap;
public void testBasicAllocations() throws Exception {
String key = "key";
Object value = testMap;
MapContainer<String, Object> test = store.getMapContainer("test", "test");
test.put(key, value);
store.close();
store = getStore();
assertFalse(store.getMapContainerIds().isEmpty());
test = store.getMapContainer("test", "test");
assertEquals(value, test.get(key));
}
/*
* Test method for 'org.apache.activemq.kaha.MapContainer.size()'
*/
public void testSize() throws Exception {
container.putAll(testMap);
assertTrue(container.size() == testMap.size());
}
/*
* Test method for 'org.apache.activemq.kaha.MapContainer.isEmpty()'
*/
public void testIsEmpty() throws Exception {
assertTrue(container.isEmpty());
}
/*
* Test method for 'org.apache.activemq.kaha.MapContainer.clear()'
*/
public void testClear() throws Exception {
container.putAll(testMap);
assertTrue(container.size() == testMap.size());
container.clear();
assertTrue(container.isEmpty());
}
/*
* Test method for
* 'org.apache.activemq.kaha.MapContainer.containsKey(Object)'
*/
public void testContainsKeyObject() throws Exception {
container.putAll(testMap);
for (Iterator i = testMap.entrySet().iterator(); i.hasNext();) {
Map.Entry entry = (Entry)i.next();
assertTrue(container.containsKey(entry.getKey()));
}
}
/*
* Test method for 'org.apache.activemq.kaha.MapContainer.get(Object)'
*/
public void testGetObject() throws Exception {
container.putAll(testMap);
for (Iterator i = testMap.entrySet().iterator(); i.hasNext();) {
Map.Entry entry = (Entry)i.next();
Object value = container.get(entry.getKey());
assertNotNull(value);
assertTrue(value.equals(entry.getValue()));
}
}
/*
* Test method for
* 'org.apache.activemq.kaha.MapContainer.containsValue(Object)'
*/
public void testContainsValueObject() throws Exception {
container.putAll(testMap);
for (Iterator i = testMap.entrySet().iterator(); i.hasNext();) {
Map.Entry entry = (Entry)i.next();
assertTrue(container.containsValue(entry.getValue()));
}
}
/*
* Test method for 'org.apache.activemq.kaha.MapContainer.putAll(Map)'
*/
public void testPutAllMap() throws Exception {
container.putAll(testMap);
for (Iterator i = testMap.entrySet().iterator(); i.hasNext();) {
Map.Entry entry = (Entry)i.next();
assertTrue(container.containsValue(entry.getValue()));
assertTrue(container.containsKey(entry.getKey()));
}
}
/*
* Test method for 'org.apache.activemq.kaha.MapContainer.keySet()'
*/
public void testKeySet() throws Exception {
container.putAll(testMap);
Set<String> keys = container.keySet();
assertTrue(keys.size() == testMap.size());
for (Iterator<String> i = testMap.keySet().iterator(); i.hasNext();) {
Object key = i.next();
assertTrue(keys.contains(key));
keys.remove(key);
}
assertTrue(container.isEmpty());
}
/*
* Test method for 'org.apache.activemq.kaha.MapContainer.values()'
*/
public void testValues() throws Exception {
container.putAll(testMap);
Collection<String> values = container.values();
assertTrue(values.size() == testMap.size());
for (Iterator<String> i = testMap.values().iterator(); i.hasNext();) {
Object value = i.next();
assertTrue(values.contains(value));
assertTrue(values.remove(value));
}
assertTrue(container.isEmpty());
}
/*
* Test method for 'org.apache.activemq.kaha.MapContainer.entrySet()'
*/
public void testEntrySet() throws Exception {
container.putAll(testMap);
Set entries = container.entrySet();
assertTrue(entries.size() == testMap.size());
for (Iterator i = entries.iterator(); i.hasNext();) {
Map.Entry entry = (Entry)i.next();
assertTrue(testMap.containsKey(entry.getKey()));
assertTrue(testMap.containsValue(entry.getValue()));
}
}
/*
* Test method for 'org.apache.activemq.kaha.MapContainer.remove(Object)'
*/
public void testRemoveObject() throws Exception {
container.putAll(testMap);
for (Iterator<String> i = testMap.keySet().iterator(); i.hasNext();) {
container.remove(i.next());
}
assertTrue(container.isEmpty());
}
public void testDuplicatesOk() throws Exception {
StoreEntry first, entry;
container.put("M1", "DD");
first = container.getFirst();
LOG.info("First=" + first);
assertEquals(-1, first.getNextItem());
// add duplicate
String old = container.put("M1", "DD");
assertNotNull(old);
assertEquals(1, container.size());
entry = container.getFirst();
LOG.info("New First=" + entry);
assertEquals(-1, entry.getNextItem());
assertEquals(first, entry);
container.remove("M1");
entry = container.getFirst();
assertNull(entry);
}
public void testDuplicatesFreeListShared() throws Exception {
StoreEntry batchEntry;
MapContainer other = store.getMapContainer(getName()+"2", "test", true);
other.load();
other.put("M1", "DD");
container.put("M1", "DD");
batchEntry = container.getFirst();
LOG.info("First=" + batchEntry);
assertEquals(-1, batchEntry.getNextItem());
// have something on free list before duplicate
other.remove("M1");
// add duplicate
String old = container.put("M1", "DD");
assertNotNull(old);
assertEquals(1, container.size());
// entry now on free list on its own
batchEntry = container.refresh(batchEntry);
assertEquals(-1, batchEntry.getNextItem());
LOG.info("refreshed=" + batchEntry);
// ack
container.remove("M1");
//container is valid (empty)
assertNull(container.getFirst());
// batchEntry now has next as there is another on the free list
batchEntry = container.refresh(batchEntry);
LOG.info("refreshed=" + batchEntry);
assertTrue(batchEntry.getNextItem() != -1);
}
protected Store getStore() throws IOException {
return StoreFactory.open(name, "rw");
}
protected void setUp() throws Exception {
super.setUp();
name = System.getProperty("basedir", ".") + "/target/activemq-data/map-container.db";
store = getStore();
container = store.getMapContainer(getName(), "test", true);
container.load();
testMap = new HashMap<String, String>();
for (int i = 0; i < COUNT; i++) {
String key = "key:" + i;
String value = "value:" + i;
testMap.put(key, value);
}
}
protected void tearDown() throws Exception {
super.tearDown();
if (store != null) {
store.close();
store = null;
}
assertTrue(StoreFactory.delete(name));
}
}