package com.opower.rest.client.generator.hystrix; import com.netflix.hystrix.HystrixCommandGroupKey; import com.opower.rest.client.generator.core.BaseClientResponse; import com.opower.rest.client.generator.core.ResourceInterface; import com.opower.rest.client.generator.core.SimpleUriProvider; import com.opower.rest.client.generator.core.UriProvider; import com.opower.rest.client.generator.hystrix.HystrixClientErrorHandler.BadRequestCriteria; import com.opower.rest.test.resource.FrobResource; import java.lang.reflect.Method; import java.util.Map; import org.junit.BeforeClass; import org.junit.Test; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; /** * Tests for the HystrixClient.Builder. * @author chris.phillips */ public class TestHystrixClientBuilder { private static final UriProvider URI_PROVIDER = new SimpleUriProvider("http://localhost"); static final HystrixCommandGroupKey GROUP_KEY = HystrixCommandGroupKey.Factory.asKey("test"); private static final ResourceInterface<FrobResource> RESOURCE_INTERFACE = new ResourceInterface<>(FrobResource.class); private static final Method FROB_METHOD = FrobResource.class.getMethods()[0]; private HystrixClient.Builder<FrobResource> builder = new HystrixClient.Builder<>(RESOURCE_INTERFACE, URI_PROVIDER, GROUP_KEY); /** * Initializes the system property to ensure the RuntimeDelegate gets properly loaded. */ @BeforeClass public static void init() { System.setProperty("javax.ws.rs.ext.RuntimeDelegate","com.opower.rest.client.generator.core.BasicRuntimeDelegate"); } @Test(expected = IllegalArgumentException.class) public void nullMethod() { builder.methodBadRequestCriteria(null, null); } @Test(expected = IllegalArgumentException.class) public void wrongMethod() { builder.methodBadRequestCriteria(TestHystrixClientBuilder.class.getMethods()[0], null); } @Test(expected = NullPointerException.class) public void nullCriteria() { builder.methodBadRequestCriteria(FROB_METHOD, null); } @Test public void setMethodCriteria() { builder.methodBadRequestCriteria(FROB_METHOD, new BadRequestCriteria() { @Override public boolean apply(BaseClientResponse response, Exception exception) { return false; } }); Map<Method, ? extends BadRequestCriteria> criteriaMap = ((HystrixClientErrorHandler)builder.getClientErrorHandler()).getCriteriaMap(); assertTrue(criteriaMap.containsKey(FROB_METHOD)); assertThat(criteriaMap.size(), is(1)); } @Test public void setResourceCriteria() { builder.badRequestCriteria(new BadRequestCriteria() { @Override public boolean apply(BaseClientResponse response, Exception exception) { return false; } }); Map<Method, ? extends BadRequestCriteria> criteriaMap = ((HystrixClientErrorHandler)builder.getClientErrorHandler()).getCriteriaMap(); Method[] methods = FrobResource.class.getMethods(); for (Method method : methods) { assertTrue(criteriaMap.containsKey(method)); } assertThat(criteriaMap.size(), is(methods.length)); } }