blob: 8f9703ffbf92aa61abf65b3b7f124e331204f9c8 [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.chemistry.opencmis.client.bindings.cache;
import junit.framework.TestCase;
import org.apache.chemistry.opencmis.client.bindings.cache.impl.CacheImpl;
import org.apache.chemistry.opencmis.client.bindings.cache.impl.ContentTypeCacheLevelImpl;
import org.apache.chemistry.opencmis.client.bindings.cache.impl.LruCacheLevelImpl;
import org.apache.chemistry.opencmis.client.bindings.cache.impl.MapCacheLevelImpl;
/**
* Tests the cache implementation.
*/
public class CacheTest extends TestCase {
public static final String MAP_CACHE_LEVEL = "org.apache.chemistry.opencmis.client.bindings.cache.impl.MapCacheLevelImpl";
public static final String LRU_CACHE_LEVEL = "org.apache.chemistry.opencmis.client.bindings.cache.impl.LruCacheLevelImpl";
public void testCache() {
Cache cache;
cache = new CacheImpl();
cache.initialize(new String[] { MAP_CACHE_LEVEL, LRU_CACHE_LEVEL, MAP_CACHE_LEVEL, MAP_CACHE_LEVEL });
String value1 = "value1";
String value2 = "value2";
String value3 = "value3";
Object valueObj;
// put and get
cache.put(value1, "l1", "l2a", "l3", "l4");
cache.put(value2, "l1", "l2b", "l3", "l4");
cache.put(value3, "l1", "l2c", "l3", "l4");
valueObj = cache.get("l1", "l2a", "l3", "l4");
assertTrue(valueObj instanceof String);
assertSame(value1, valueObj);
valueObj = cache.get("l1", "l2b", "l3", "l4");
assertTrue(valueObj instanceof String);
assertSame(value2, valueObj);
valueObj = cache.get("l1", "l2c", "l3", "l4");
assertTrue(valueObj instanceof String);
assertSame(value3, valueObj);
// remove leaf
cache.remove("l1", "l2", "l3", "l4");
valueObj = cache.get("l1", "l2", "l3", "l4");
assertNull(valueObj);
// put and get
cache.put(value1, "l1", "l2", "l3", "l4");
valueObj = cache.get("l1", "l2", "l3", "l4");
assertTrue(valueObj instanceof String);
assertSame(value1, valueObj);
// remove branch
cache.remove("l1", "l2");
valueObj = cache.get("l1", "l2", "l3", "l4");
assertNull(valueObj);
}
public void testCacheBadUsage() {
Cache cache;
cache = new CacheImpl();
cache.initialize(new String[] { MAP_CACHE_LEVEL, LRU_CACHE_LEVEL, MAP_CACHE_LEVEL, MAP_CACHE_LEVEL });
// insufficient number of keys
try {
cache.put("value", "l1", "l2", "l3");
} catch (IllegalArgumentException e) {
}
// too many number of keys
try {
cache.put("value", "l1", "l2", "l3", "l4", "l5");
} catch (IllegalArgumentException e) {
}
// no keys
assertNull(cache.get((String[]) null));
}
public void testCacheConfig() {
Cache cache;
// empty config
try {
cache = new CacheImpl();
cache.initialize(new String[] {});
} catch (IllegalArgumentException e) {
}
// null config
try {
cache = new CacheImpl();
cache.initialize(null);
} catch (IllegalArgumentException e) {
}
// unknown class
try {
cache = new CacheImpl();
cache.initialize(new String[] { "this.is.not.a.valid.class" });
} catch (IllegalArgumentException e) {
}
// not a CacheLevel class
try {
cache = new CacheImpl();
cache.initialize(new String[] { "org.apache.chemistry.opencmis.client.provider.cache.CacheTest" });
} catch (IllegalArgumentException e) {
}
}
public void testMapCache() {
Cache cache;
cache = new CacheImpl();
cache.initialize(new String[] { MAP_CACHE_LEVEL + " " + MapCacheLevelImpl.CAPACITY + "=10,"
+ MapCacheLevelImpl.LOAD_FACTOR + "=0.5" });
for (int i = 0; i < 100; i++) {
cache.put("value" + i, "key" + i);
}
for (int i = 0; i < 100; i++) {
Object valueObj = cache.get("key" + i);
assertTrue(valueObj instanceof String);
assertEquals("value" + i, valueObj);
}
}
public void testURLCache() {
Cache cache;
cache = new CacheImpl();
cache.initialize(new String[] { LRU_CACHE_LEVEL + " " + LruCacheLevelImpl.MAX_ENTRIES + "=10" });
for (int i = 0; i < 100; i++) {
cache.put("value" + i, "key" + i);
}
for (int i = 0; i < 90; i++) {
Object valueObj = cache.get("key" + i);
assertNull(valueObj);
}
for (int i = 90; i < 100; i++) {
Object valueObj = cache.get("key" + i);
assertTrue(valueObj instanceof String);
assertEquals("value" + i, valueObj);
}
}
public void XtestFallback() {
Cache cache;
cache = new CacheImpl();
cache.initialize(new String[] { MAP_CACHE_LEVEL + " " + MapCacheLevelImpl.CAPACITY + "=10,"
+ MapCacheLevelImpl.LOAD_FACTOR + "=0.5" });
cache.put("value1", new String[] { null });
cache.put("value2", "key2");
assertEquals("value1", cache.get(new String[] { null }));
assertEquals("value2", cache.get("key2"));
assertEquals("value1", cache.get("key3"));
}
public void testContentTypeCache() {
ContentTypeCacheLevelImpl cl = new ContentTypeCacheLevelImpl();
cl.initialize(null);
String type1 = "type1";
cl.put(type1, "text/plain; param1=test; charset=UTF-8");
assertEquals(type1, cl.get("text/plain; param1=test; charset=UTF-8"));
assertEquals(type1, cl.get("text/plain; param1=test; charset=utf-8"));
assertEquals(type1, cl.get("text/plain; charset=utf-8; param1=test"));
assertEquals(type1, cl.get("text/plain; charset=utf-8; param1=test;"));
assertEquals(type1, cl.get("text/plain;charset=utf-8;param1=test"));
assertEquals(type1, cl.get("text/plain;\tcharset=utf-8; param1=test"));
assertEquals(type1, cl.get("text/plain; charset=\"utf-8\"; param1=test;"));
assertNull(cl.get("text/plain; param1=blah; charset=UTF-8"));
assertNull(cl.get("text/plain; param1=test; charset=us-ascii"));
}
}