package com.netflix.hystrix.contrib.javanica.test.common.configuration.fallback; import com.netflix.hystrix.HystrixThreadPoolProperties; import com.netflix.hystrix.contrib.javanica.annotation.DefaultProperties; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty; import com.netflix.hystrix.contrib.javanica.test.common.BasicHystrixTest; import org.junit.Before; import org.junit.Test; import static com.netflix.hystrix.contrib.javanica.conf.HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS; import static com.netflix.hystrix.contrib.javanica.test.common.CommonUtils.getHystrixCommandByKey; import static org.junit.Assert.assertEquals; public abstract class BasicFallbackDefaultPropertiesTest extends BasicHystrixTest { private Service service; protected abstract Service createService(); @Before public void setUp() throws Exception { service = createService(); } @Test public void testFallbackInheritsDefaultGroupKey() { service.commandWithFallbackInheritsDefaultProperties(); com.netflix.hystrix.HystrixInvokableInfo fallbackCommand = getHystrixCommandByKey("fallbackInheritsDefaultProperties"); assertEquals("DefaultGroupKey", fallbackCommand.getCommandGroup().name()); } @Test public void testFallbackInheritsDefaultThreadPoolKey() { service.commandWithFallbackInheritsDefaultProperties(); com.netflix.hystrix.HystrixInvokableInfo fallbackCommand = getHystrixCommandByKey("fallbackInheritsDefaultProperties"); assertEquals("DefaultThreadPoolKey", fallbackCommand.getThreadPoolKey().name()); } @Test public void testFallbackInheritsDefaultCommandProperties() { service.commandWithFallbackInheritsDefaultProperties(); com.netflix.hystrix.HystrixInvokableInfo fallbackCommand = getHystrixCommandByKey("fallbackInheritsDefaultProperties"); assertEquals(456, fallbackCommand.getProperties().executionTimeoutInMilliseconds().get().intValue()); } @Test public void testFallbackInheritsThreadPollProperties() { service.commandWithFallbackInheritsDefaultProperties(); com.netflix.hystrix.HystrixInvokableInfo fallbackCommand = getHystrixCommandByKey("fallbackInheritsDefaultProperties"); HystrixThreadPoolProperties properties = getThreadPoolProperties(fallbackCommand); assertEquals(123, properties.maxQueueSize().get().intValue()); } @Test public void testFallbackOverridesDefaultGroupKey() { service.commandWithFallbackOverridesDefaultProperties(); com.netflix.hystrix.HystrixInvokableInfo fallbackCommand = getHystrixCommandByKey("fallbackOverridesDefaultProperties"); assertEquals("FallbackGroupKey", fallbackCommand.getCommandGroup().name()); } @Test public void testFallbackOverridesDefaultThreadPoolKey() { service.commandWithFallbackOverridesDefaultProperties(); com.netflix.hystrix.HystrixInvokableInfo fallbackCommand = getHystrixCommandByKey("fallbackOverridesDefaultProperties"); assertEquals("FallbackThreadPoolKey", fallbackCommand.getThreadPoolKey().name()); } @Test public void testFallbackOverridesDefaultCommandProperties() { service.commandWithFallbackOverridesDefaultProperties(); com.netflix.hystrix.HystrixInvokableInfo fallbackCommand = getHystrixCommandByKey("fallbackOverridesDefaultProperties"); assertEquals(654, fallbackCommand.getProperties().executionTimeoutInMilliseconds().get().intValue()); } @Test public void testFallbackOverridesThreadPollProperties() { service.commandWithFallbackOverridesDefaultProperties(); com.netflix.hystrix.HystrixInvokableInfo fallbackCommand = getHystrixCommandByKey("fallbackOverridesDefaultProperties"); HystrixThreadPoolProperties properties = getThreadPoolProperties(fallbackCommand); assertEquals(321, properties.maxQueueSize().get().intValue()); } @Test public void testCommandOverridesDefaultPropertiesWithFallbackInheritsDefaultProperties(){ service.commandOverridesDefaultPropertiesWithFallbackInheritsDefaultProperties(); com.netflix.hystrix.HystrixInvokableInfo fallbackCommand = getHystrixCommandByKey("fallbackInheritsDefaultProperties"); HystrixThreadPoolProperties properties = getThreadPoolProperties(fallbackCommand); assertEquals("DefaultGroupKey", fallbackCommand.getCommandGroup().name()); assertEquals("DefaultThreadPoolKey", fallbackCommand.getThreadPoolKey().name()); assertEquals(456, fallbackCommand.getProperties().executionTimeoutInMilliseconds().get().intValue()); assertEquals(123, properties.maxQueueSize().get().intValue()); } @DefaultProperties(groupKey = "DefaultGroupKey", threadPoolKey = "DefaultThreadPoolKey", commandProperties = { @HystrixProperty(name = EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS, value = "456") }, threadPoolProperties = { @HystrixProperty(name = "maxQueueSize", value = "123") }) public static class Service { @HystrixCommand(fallbackMethod = "fallbackInheritsDefaultProperties") public Object commandWithFallbackInheritsDefaultProperties() { throw new RuntimeException(); } @HystrixCommand(fallbackMethod = "fallbackOverridesDefaultProperties") public Object commandWithFallbackOverridesDefaultProperties() { throw new RuntimeException(); } @HystrixCommand(groupKey = "CommandGroupKey", threadPoolKey = "CommandThreadPoolKey", commandProperties = { @HystrixProperty(name = EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS, value = "654") }, threadPoolProperties = { @HystrixProperty(name = "maxQueueSize", value = "321") }, fallbackMethod = "fallbackInheritsDefaultProperties") public Object commandOverridesDefaultPropertiesWithFallbackInheritsDefaultProperties() { throw new RuntimeException(); } @HystrixCommand private Object fallbackInheritsDefaultProperties() { return null; } @HystrixCommand(groupKey = "FallbackGroupKey", threadPoolKey = "FallbackThreadPoolKey", commandProperties = { @HystrixProperty(name = EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS, value = "654") }, threadPoolProperties = { @HystrixProperty(name = "maxQueueSize", value = "321") }) private Object fallbackOverridesDefaultProperties() { return null; } } }