package com.netflix.hystrix.contrib.javanica.test.common.configuration.command; import com.netflix.hystrix.HystrixInvokableInfo; import com.netflix.hystrix.HystrixRequestLog; 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 org.junit.Assert.assertEquals; /** * Created by dmgcodevil. */ public abstract class BasicCommandDefaultPropertiesTest extends BasicHystrixTest { private Service service; protected abstract Service createService(); @Before public void setUp() throws Exception { service = createService(); } @Test public void testCommandInheritsDefaultGroupKey() { service.commandInheritsDefaultProperties(); HystrixInvokableInfo<?> command = HystrixRequestLog.getCurrentRequest() .getAllExecutedCommands().iterator().next(); assertEquals("DefaultGroupKey", command.getCommandGroup().name()); } @Test public void testCommandOverridesDefaultGroupKey() { service.commandOverridesGroupKey(); HystrixInvokableInfo<?> command = HystrixRequestLog.getCurrentRequest() .getAllExecutedCommands().iterator().next(); assertEquals("SpecificGroupKey", command.getCommandGroup().name()); } @Test public void testCommandInheritsDefaultThreadPoolKey() { service.commandInheritsDefaultProperties(); HystrixInvokableInfo<?> command = HystrixRequestLog.getCurrentRequest() .getAllExecutedCommands().iterator().next(); assertEquals("DefaultThreadPoolKey", command.getThreadPoolKey().name()); } @Test public void testCommandOverridesDefaultThreadPoolKey() { service.commandOverridesThreadPoolKey(); HystrixInvokableInfo<?> command = HystrixRequestLog.getCurrentRequest() .getAllExecutedCommands().iterator().next(); assertEquals("SpecificThreadPoolKey", command.getThreadPoolKey().name()); } @Test public void testCommandInheritsDefaultCommandProperties() { service.commandInheritsDefaultProperties(); HystrixInvokableInfo<?> command = HystrixRequestLog.getCurrentRequest() .getAllExecutedCommands().iterator().next(); assertEquals(456, command.getProperties().executionTimeoutInMilliseconds().get().intValue()); } @Test public void testCommandOverridesDefaultCommandProperties() { service.commandOverridesDefaultCommandProperties(); HystrixInvokableInfo<?> command = HystrixRequestLog.getCurrentRequest() .getAllExecutedCommands().iterator().next(); assertEquals(654, command.getProperties().executionTimeoutInMilliseconds().get().intValue()); } @Test public void testCommandInheritsThreadPollProperties() { service.commandInheritsDefaultProperties(); HystrixInvokableInfo<?> command = HystrixRequestLog.getCurrentRequest() .getAllExecutedCommands().iterator().next(); HystrixThreadPoolProperties properties = getThreadPoolProperties(command); assertEquals(123, properties.maxQueueSize().get().intValue()); } @Test public void testCommandOverridesDefaultThreadPollProperties() { service.commandOverridesDefaultThreadPoolProperties(); HystrixInvokableInfo<?> command = HystrixRequestLog.getCurrentRequest() .getAllExecutedCommands().iterator().next(); HystrixThreadPoolProperties properties = getThreadPoolProperties(command); assertEquals(321, 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 public Object commandInheritsDefaultProperties() { return null; } @HystrixCommand(groupKey = "SpecificGroupKey") public Object commandOverridesGroupKey() { return null; } @HystrixCommand(threadPoolKey = "SpecificThreadPoolKey") public Object commandOverridesThreadPoolKey() { return null; } @HystrixCommand(commandProperties = { @HystrixProperty(name = EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS, value = "654") }) public Object commandOverridesDefaultCommandProperties() { return null; } @HystrixCommand(threadPoolProperties = { @HystrixProperty(name = "maxQueueSize", value = "321") }) public Object commandOverridesDefaultThreadPoolProperties() { return null; } } }