/* * Copyright Terracotta, 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.ehcache.config.builders; import org.ehcache.PersistentUserManagedCache; import org.ehcache.Status; import org.ehcache.UserManagedCache; import org.ehcache.config.CacheRuntimeConfiguration; import org.ehcache.event.EventType; import org.ehcache.spi.loaderwriter.BulkCacheWritingException; import org.ehcache.core.internal.service.ServiceLocator; import org.ehcache.impl.internal.spi.event.DefaultCacheEventListenerProviderTest; import org.junit.Test; import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.concurrent.TimeUnit; import org.ehcache.expiry.Duration; import org.ehcache.expiry.Expirations; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.core.IsInstanceOf.instanceOf; import static org.hamcrest.core.IsNull.notNullValue; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; public class UserManagedCacheBuilderTest { @Test public void testIsExtensible() { final UserManagedCacheConfiguration<String, Object, TestUserManagedCache<String, Object>> cfg = new UserManagedCacheConfiguration<String, Object, TestUserManagedCache<String, Object>>() { @Override public UserManagedCacheBuilder<String, Object, TestUserManagedCache<String, Object>> builder(final UserManagedCacheBuilder<String, Object, ? extends UserManagedCache<String, Object>> builder) { return new UserManagedCacheBuilder<String, Object, TestUserManagedCache<String, Object>>(String.class, Object.class) { @Override TestUserManagedCache<String, Object> build(final ServiceLocator.DependencySet dependencySet) { return new TestUserManagedCache<String, Object>(); } }; } }; assertNotNull(cfg); final TestUserManagedCache<String, Object> cache = UserManagedCacheBuilder.newUserManagedCacheBuilder(String.class, Object.class) .with(cfg).build(); assertThat(cache, notNullValue()); assertThat(cache, instanceOf(TestUserManagedCache.class)); } @Test public void testInvalidListenerConfig() { try { UserManagedCacheBuilder.newUserManagedCacheBuilder(String.class, String.class) .withEventListeners(CacheEventListenerConfigurationBuilder .newEventListenerConfiguration(DefaultCacheEventListenerProviderTest.ListenerObject.class, EventType.CREATED, EventType.UPDATED) .synchronous() .unordered() .build()) .build(); fail(); } catch (IllegalArgumentException e) { assertThat(e.getMessage(), equalTo("Listeners will not work unless Executors or EventDispatcher is configured.")); } } @Test public void testTypedCacheWithExpirationPolicy() { UserManagedCache<String, String> cache = UserManagedCacheBuilder.newUserManagedCacheBuilder(String.class, String.class) .withExpiry(Expirations.timeToIdleExpiration(new Duration(30, TimeUnit.SECONDS))) .build(true); try { assertThat(cache, notNullValue()); } finally { cache.close(); } } private class TestUserManagedCache<K, V> implements PersistentUserManagedCache<K, V> { @Override public void destroy() { throw new UnsupportedOperationException("Implement me!"); } @Override public void init() { throw new UnsupportedOperationException("Implement me!"); } @Override public void close() { throw new UnsupportedOperationException("Implement me!"); } @Override public Status getStatus() { throw new UnsupportedOperationException("Implement me!"); } @Override public V get(final K key) { throw new UnsupportedOperationException("Implement me!"); } @Override public void put(final K key, final V value) { throw new UnsupportedOperationException("Implement me!"); } @Override public boolean containsKey(final K key) { throw new UnsupportedOperationException("Implement me!"); } @Override public void remove(final K key) { throw new UnsupportedOperationException("Implement me!"); } @Override public void clear() { throw new UnsupportedOperationException("Implement me!"); } @Override public Iterator<Entry<K, V>> iterator() { throw new UnsupportedOperationException("Implement me!"); } @Override public V putIfAbsent(K key, V value) { throw new UnsupportedOperationException("Implement me!"); } @Override public boolean remove(K key, V value) { throw new UnsupportedOperationException("Implement me!"); } @Override public V replace(K key, V value) throws NullPointerException { throw new UnsupportedOperationException("Implement me!"); } @Override public boolean replace(K key, V oldValue, V newValue) { throw new UnsupportedOperationException("Implement me!"); } @Override public CacheRuntimeConfiguration<K, V> getRuntimeConfiguration() { throw new UnsupportedOperationException("Implement me!"); } @Override public Map<K, V> getAll(Set<? extends K> keys) { throw new UnsupportedOperationException("Implement me!"); } @Override public void putAll(Map<? extends K, ? extends V> entries) throws BulkCacheWritingException { throw new UnsupportedOperationException("Implement me!"); } @Override public void removeAll(Set<? extends K> keys) { throw new UnsupportedOperationException("Implement me!"); } } }