/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.jclouds.functions;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.fail;
import java.util.concurrent.ExecutionException;
import org.testng.annotations.Test;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
import com.google.common.util.concurrent.UncheckedExecutionException;
/**
*
* @author Adrian Cole
*/
@Test(groups = "unit", singleThreaded = true, testName = "CacheLearningTest")
public class CacheLearningTest {
@Test
public void howTo() throws ExecutionException {
LoadingCache<String, String> cache = CacheBuilder.newBuilder().build(new CacheLoader<String, String>() {
@Override
public String load(String key) throws Exception {
if (key.equals("runtimeexception"))
throw new RuntimeException("runtimeexception");
if (key.equals("exception"))
throw new Exception("exception");
return key.equals("foo") ? null : key;
}
@Override
public String toString() {
return "testLoader";
}
});
try {
cache.get("foo");
fail("expected exception on miss");
} catch (CacheLoader.InvalidCacheLoadException e) {
assertEquals(e.getMessage(), "CacheLoader returned null for key foo.");
}
try {
cache.getUnchecked("foo");
fail("expected exception on miss");
} catch (CacheLoader.InvalidCacheLoadException e) {
assertEquals(e.getMessage(), "CacheLoader returned null for key foo.");
}
assertEquals(cache.asMap().keySet().size(), 0);
assertEquals(cache.asMap().size(), 0);
// check insert behind
cache.asMap().put("foo", "bar");
assertEquals(cache.get("foo"), "bar");
assertEquals(cache.asMap().keySet().size(), 1);
assertEquals(cache.asMap().size(), 1);
// check delete behind invalidates
cache.asMap().remove("foo");
assertEquals(cache.asMap().keySet().size(), 0);
assertEquals(cache.asMap().size(), 0);
try {
cache.get("exception");
fail("expected checked exception in loader to rethrow as ExecutionException");
} catch (ExecutionException e) {
assertEquals(e.getMessage(), "java.lang.Exception: exception");
}
try {
cache.get("runtimeexception");
fail("expected unchecked exception in loader to rethrow as UncheckedExecutionException");
} catch (UncheckedExecutionException e) {
assertEquals(e.getMessage(), "java.lang.RuntimeException: runtimeexception");
}
try {
cache.getUnchecked("exception");
fail("expected checked exception in loader to rethrow as UncheckedExecutionException, when getUnchecked called");
} catch (UncheckedExecutionException e) {
assertEquals(e.getMessage(), "java.lang.Exception: exception");
}
assertEquals(cache.get("bar"), "bar");
assertEquals(cache.get("baz"), "baz");
assertEquals(cache.asMap().size(), 2);
}
}