/**
* Copyright 2011-2013 Terracotta, Inc.
* Copyright 2011-2013 Oracle, 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 org.jsr107.tck.spi;
import org.junit.Test;
import javax.cache.CacheManager;
import javax.cache.Caching;
import javax.cache.spi.CachingProvider;
import java.util.Properties;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNotSame;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.fail;
/**
* Functional Tests for {@link CachingProvider}s.
*
* @author Brian Oliver
* @see CachingProvider
*/
public class CachingProviderTest {
private static final ClassLoader CLASS_LOADER = CachingProviderTest.class.getClassLoader();
@Test
public void getCacheManagerUsingNulls() {
CachingProvider provider = Caching.getCachingProvider();
Properties properties = new Properties();
try {
provider.getCacheManager(null, null, null);
} catch (NullPointerException e) {
fail();
}
try {
provider.getCacheManager(null, null, properties);
} catch (NullPointerException e) {
fail();
}
try {
provider.getCacheManager(null, provider.getDefaultClassLoader(), null);
} catch (NullPointerException e) {
fail();
}
try {
provider.getCacheManager(null, provider.getDefaultClassLoader(), properties);
} catch (NullPointerException e) {
fail();
}
try {
provider.getCacheManager(provider.getDefaultURI(), null, null);
} catch (NullPointerException e) {
fail();
}
try {
provider.getCacheManager(provider.getDefaultURI(), null, properties);
} catch (NullPointerException e) {
fail();
}
try {
provider.getCacheManager(provider.getDefaultURI(), provider.getDefaultClassLoader(), null);
} catch (NullPointerException e) {
fail();
}
try {
provider.getCacheManager(provider.getDefaultURI(), provider.getDefaultClassLoader(), properties);
} catch (NullPointerException e) {
fail();
}
try {
provider.getCacheManager(null, null);
} catch (NullPointerException e) {
fail();
}
try {
provider.getCacheManager(provider.getDefaultURI(), null);
} catch (NullPointerException e) {
fail();
}
}
@Test
public void getCacheManagerUsingDefaultURI() {
CachingProvider provider = Caching.getCachingProvider();
CacheManager manager1 = provider.getCacheManager();
assertNotNull(manager1);
assertEquals(provider.getDefaultURI(), manager1.getURI());
CacheManager manager2 = provider.getCacheManager();
assertSame(manager1, manager2);
}
@Test
public void getCacheManagerUsingSameNameAndClassLoader() {
CachingProvider provider = Caching.getCachingProvider();
ClassLoader loader = CLASS_LOADER;
CacheManager manager1 = provider.getCacheManager(provider.getDefaultURI(), loader, null);
assertNotNull(manager1);
CacheManager manager2 = provider.getCacheManager(provider.getDefaultURI(), loader, null);
assertSame(manager1, manager2);
}
@Test
public void getCacheManagerUsingSameURIDifferentClassLoader() {
CachingProvider provider = Caching.getCachingProvider();
ClassLoader loader1 = CLASS_LOADER;
CacheManager manager1 = provider.getCacheManager(provider.getDefaultURI(), loader1, null);
assertNotNull(manager1);
ClassLoader loader2 = new MyClassLoader(CLASS_LOADER);
CacheManager manager2 = provider.getCacheManager(provider.getDefaultURI(), loader2, null);
assertNotNull(manager2);
assertNotSame(manager1, manager2);
}
@Test
public void closeCacheManagers() {
CachingProvider provider = Caching.getCachingProvider();
ClassLoader loader1 = CLASS_LOADER;
CacheManager manager1 = provider.getCacheManager(provider.getDefaultURI(), loader1, null);
manager1.close();
ClassLoader loader2 = new MyClassLoader(CLASS_LOADER);
CacheManager manager2 = provider.getCacheManager(provider.getDefaultURI(), loader2, null);
manager2.close();
assertNotSame(manager1, provider.getCacheManager(provider.getDefaultURI(), loader1, null));
assertNotSame(manager2, provider.getCacheManager(provider.getDefaultURI(), loader2, null));
}
@Test
public void closeCachingProvider() {
CachingProvider provider = Caching.getCachingProvider();
ClassLoader loader1 = CLASS_LOADER;
CacheManager manager1 = provider.getCacheManager(provider.getDefaultURI(), loader1, null);
ClassLoader loader2 = new MyClassLoader(CLASS_LOADER);
CacheManager manager2 = provider.getCacheManager(provider.getDefaultURI(), loader2, null);
provider.close();
assertNotSame(manager1, provider.getCacheManager(provider.getDefaultURI(), loader1, null));
assertNotSame(manager2, provider.getCacheManager(provider.getDefaultURI(), loader2, null));
}
@Test
public void closeCacheManagerByURIAndClassLoader() {
CachingProvider provider = Caching.getCachingProvider();
ClassLoader loader1 = CLASS_LOADER;
CacheManager manager1 = provider.getCacheManager(provider.getDefaultURI(), loader1, null);
ClassLoader loader2 = new MyClassLoader(CLASS_LOADER);
CacheManager manager2 = provider.getCacheManager(provider.getDefaultURI(), loader2, null);
provider.close(manager1.getURI(), loader1);
provider.close(manager2.getURI(), loader2);
assertNotSame(manager1, provider.getCacheManager(provider.getDefaultURI(), loader1, null));
assertNotSame(manager2, provider.getCacheManager(provider.getDefaultURI(), loader2, null));
}
@Test
public void closeCacheManagersByClassLoader() {
CachingProvider provider = Caching.getCachingProvider();
ClassLoader loader1 = CLASS_LOADER;
CacheManager manager1 = provider.getCacheManager(provider.getDefaultURI(), loader1, null);
ClassLoader loader2 = new MyClassLoader(CLASS_LOADER);
CacheManager manager2 = provider.getCacheManager(provider.getDefaultURI(), loader2, null);
provider.close(loader1);
provider.close(loader2);
assertNotSame(manager1, provider.getCacheManager(provider.getDefaultURI(), loader1, null));
assertNotSame(manager2, provider.getCacheManager(provider.getDefaultURI(), loader2, null));
}
private static class MyClassLoader extends ClassLoader {
public MyClassLoader(ClassLoader parent) {
super(parent);
}
}
}