/* * 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.management.providers.actions; import org.ehcache.config.CacheRuntimeConfiguration; import org.ehcache.core.EhcacheWithLoaderWriter; import org.ehcache.management.ManagementRegistryServiceConfiguration; import org.ehcache.management.providers.CacheBinding; import org.ehcache.management.registry.DefaultManagementRegistryConfiguration; import org.hamcrest.Matcher; import org.junit.Test; import org.terracotta.management.model.call.Parameter; import org.terracotta.management.model.capabilities.context.CapabilityContext; import org.terracotta.management.model.capabilities.descriptors.CallDescriptor; import org.terracotta.management.model.capabilities.descriptors.Descriptor; import org.terracotta.management.model.context.Context; import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.Iterator; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsInAnyOrder; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; import static org.junit.Assert.fail; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; public class EhcacheActionProviderTest { Context cmContext = Context.create("cacheManagerName", "myCacheManagerName"); Context cmContext_0 = Context.create("cacheManagerName", "cache-manager-0"); ManagementRegistryServiceConfiguration cmConfig = new DefaultManagementRegistryConfiguration().setContext(cmContext); ManagementRegistryServiceConfiguration cmConfig_0 = new DefaultManagementRegistryConfiguration().setContext(cmContext_0); @Test @SuppressWarnings("unchecked") public void testDescriptions() throws Exception { EhcacheActionProvider ehcacheActionProvider = new EhcacheActionProvider(cmConfig); ehcacheActionProvider.register(new CacheBinding("myCacheName1", mock(EhcacheWithLoaderWriter.class))); ehcacheActionProvider.register(new CacheBinding("myCacheName2", mock(EhcacheWithLoaderWriter.class))); Collection<? extends Descriptor> descriptions = ehcacheActionProvider.getDescriptors(); assertThat(descriptions.size(), is(4)); assertThat(descriptions, (Matcher) containsInAnyOrder( new CallDescriptor("remove", "void", Collections.singletonList(new CallDescriptor.Parameter("key", "java.lang.Object"))), new CallDescriptor("get", "java.lang.Object", Collections.singletonList(new CallDescriptor.Parameter("key", "java.lang.Object"))), new CallDescriptor("put", "void", Arrays.asList(new CallDescriptor.Parameter("key", "java.lang.Object"), new CallDescriptor.Parameter("value", "java.lang.Object"))), new CallDescriptor("clear", "void", Collections.<CallDescriptor.Parameter>emptyList()) )); } @Test public void testCapabilityContext() throws Exception { EhcacheActionProvider ehcacheActionProvider = new EhcacheActionProvider(cmConfig); ehcacheActionProvider.register(new CacheBinding("myCacheName1", mock(EhcacheWithLoaderWriter.class))); ehcacheActionProvider.register(new CacheBinding("myCacheName2", mock(EhcacheWithLoaderWriter.class))); CapabilityContext capabilityContext = ehcacheActionProvider.getCapabilityContext(); assertThat(capabilityContext.getAttributes().size(), is(2)); Iterator<CapabilityContext.Attribute> iterator = capabilityContext.getAttributes().iterator(); CapabilityContext.Attribute next = iterator.next(); assertThat(next.getName(), equalTo("cacheManagerName")); assertThat(next.isRequired(), is(true)); next = iterator.next(); assertThat(next.getName(), equalTo("cacheName")); assertThat(next.isRequired(), is(true)); } @Test public void testCollectStatistics() throws Exception { EhcacheActionProvider ehcacheActionProvider = new EhcacheActionProvider(cmConfig); try { ehcacheActionProvider.collectStatistics(null, null); fail("expected UnsupportedOperationException"); } catch (UnsupportedOperationException uoe) { // expected } } @Test public void testCallAction_happyPathNoParam() throws Exception { EhcacheActionProvider ehcacheActionProvider = new EhcacheActionProvider(cmConfig_0); EhcacheWithLoaderWriter ehcache = mock(EhcacheWithLoaderWriter.class); CacheRuntimeConfiguration cacheRuntimeConfiguration = mock(CacheRuntimeConfiguration.class); when(cacheRuntimeConfiguration.getClassLoader()).thenReturn(ClassLoader.getSystemClassLoader()); when(ehcache.getRuntimeConfiguration()).thenReturn(cacheRuntimeConfiguration); ehcacheActionProvider.register(new CacheBinding("cache-0", ehcache)); Context context = cmContext_0.with("cacheName", "cache-0"); ehcacheActionProvider.callAction(context, "clear", Void.class); verify(ehcache, times(1)).clear(); } @Test public void testCallAction_happyPathWithParams() throws Exception { EhcacheActionProvider ehcacheActionProvider = new EhcacheActionProvider(cmConfig_0); @SuppressWarnings("unchecked") EhcacheWithLoaderWriter<Long, String> ehcache = mock(EhcacheWithLoaderWriter.class); @SuppressWarnings("unchecked") CacheRuntimeConfiguration<Long, String> cacheRuntimeConfiguration = mock(CacheRuntimeConfiguration.class); when(cacheRuntimeConfiguration.getClassLoader()).thenReturn(ClassLoader.getSystemClassLoader()); when(cacheRuntimeConfiguration.getKeyType()).thenReturn(Long.class); when(ehcache.getRuntimeConfiguration()).thenReturn(cacheRuntimeConfiguration); ehcacheActionProvider.register(new CacheBinding("cache-0", ehcache)); Context context = cmContext_0.with("cacheName", "cache-0"); ehcacheActionProvider.callAction(context, "get", Object.class, new Parameter("1", Object.class.getName())); verify(ehcache, times(1)).get(eq(1L)); } @Test public void testCallAction_noSuchCache() throws Exception { EhcacheActionProvider ehcacheActionProvider = new EhcacheActionProvider(cmConfig_0); EhcacheWithLoaderWriter ehcache = mock(EhcacheWithLoaderWriter.class); ehcacheActionProvider.register(new CacheBinding("cache-0", ehcache)); Context context = cmContext_0.with("cacheName", "cache-1"); try { ehcacheActionProvider.callAction(context, "clear", Void.class); fail("expected IllegalArgumentException"); } catch (IllegalArgumentException iae) { // expected } verify(ehcache, times(0)).clear(); } @Test public void testCallAction_noSuchCacheManager() throws Exception { EhcacheActionProvider ehcacheActionProvider = new EhcacheActionProvider(cmConfig_0); EhcacheWithLoaderWriter ehcache = mock(EhcacheWithLoaderWriter.class); ehcacheActionProvider.register(new CacheBinding("cache-0", ehcache)); Context context = Context.empty() .with("cacheManagerName", "cache-manager-1") .with("cacheName", "cache-0"); try { ehcacheActionProvider.callAction(context, "clear", Void.class); fail("expected IllegalArgumentException"); } catch (IllegalArgumentException iae) { // expected } verify(ehcache, times(0)).clear(); } @Test public void testCallAction_noSuchMethodName() throws Exception { EhcacheActionProvider ehcacheActionProvider = new EhcacheActionProvider(cmConfig_0); EhcacheWithLoaderWriter ehcache = mock(EhcacheWithLoaderWriter.class); CacheRuntimeConfiguration cacheRuntimeConfiguration = mock(CacheRuntimeConfiguration.class); when(cacheRuntimeConfiguration.getClassLoader()).thenReturn(ClassLoader.getSystemClassLoader()); when(ehcache.getRuntimeConfiguration()).thenReturn(cacheRuntimeConfiguration); ehcacheActionProvider.register(new CacheBinding("cache-0", ehcache)); Context context = cmContext_0.with("cacheName", "cache-0"); try { ehcacheActionProvider.callAction(context, "clearer", Void.class); fail("expected IllegalArgumentException"); } catch (IllegalArgumentException iae) { // expected } } @Test public void testCallAction_noSuchMethod() throws Exception { EhcacheActionProvider ehcacheActionProvider = new EhcacheActionProvider(cmConfig_0); @SuppressWarnings("unchecked") EhcacheWithLoaderWriter<Long, String> ehcache = mock(EhcacheWithLoaderWriter.class); @SuppressWarnings("unchecked") CacheRuntimeConfiguration<Long, String> cacheRuntimeConfiguration = mock(CacheRuntimeConfiguration.class); when(cacheRuntimeConfiguration.getClassLoader()).thenReturn(ClassLoader.getSystemClassLoader()); when(ehcache.getRuntimeConfiguration()).thenReturn(cacheRuntimeConfiguration); ehcacheActionProvider.register(new CacheBinding("cache-0", ehcache)); Context context = Context.empty() .with("cacheManagerName", "cache-manager-1") .with("cacheName", "cache-0"); try { ehcacheActionProvider.callAction(context, "get", Object.class, new Parameter(0L, Long.class.getName())); fail("expected IllegalArgumentException"); } catch (IllegalArgumentException iae) { // expected } verify(ehcache, times(0)).get(null); } }