package com.vaguehope.onosendai.provider; import static org.junit.Assert.assertEquals; import java.io.IOException; import org.junit.Test; import org.mockito.internal.util.reflection.Whitebox; import twitter4j.HttpResponseCode; import twitter4j.TwitterException; import com.vaguehope.onosendai.model.TaskOutcome; import com.vaguehope.onosendai.provider.successwhale.SuccessWhaleException; public class TaskUtilsTest { @Test public void itCountsGeneralExAsTemp () throws Exception { assertEquals(TaskOutcome.TEMPORARY_FAILURE, TaskUtils.failureType(new Exception("example."))); } @Test public void itCountsRuntimeExAsPerm () throws Exception { assertEquals(TaskOutcome.PERMANENT_FAILURE, TaskUtils.failureType(new RuntimeException("example."))); } @Test public void itCountsPermSwExAsPermanent () throws Exception { assertEquals(TaskOutcome.PERMANENT_FAILURE, TaskUtils.failureType(new SuccessWhaleException("example.", true))); } @Test public void itCountsNonPermSwExAsTemp () throws Exception { assertEquals(TaskOutcome.TEMPORARY_FAILURE, TaskUtils.failureType(new SuccessWhaleException("example.", false))); } @Test public void itCountsNetworkErrorAsTemp () throws Exception { assertEquals(TaskOutcome.TEMPORARY_FAILURE, TaskUtils.failureType(new TwitterException("", new IOException(), 0))); } @Test public void itCountsRateLimiteExceededAsTemp () throws Exception { assertEquals(TaskOutcome.TEMPORARY_FAILURE, TaskUtils.failureType(new TwitterException("", null, HttpResponseCode.TOO_MANY_REQUESTS))); } @Test public void itCounts300AsTemp() throws Exception { assertEquals(TaskOutcome.TEMPORARY_FAILURE, TaskUtils.failureType(new TwitterException("", null, 300))); } @Test public void itCounts400AsPerm() throws Exception { assertEquals(TaskOutcome.PERMANENT_FAILURE, TaskUtils.failureType(new TwitterException("", null, 400))); } @Test public void itCounts500AsTemp() throws Exception { assertEquals(TaskOutcome.TEMPORARY_FAILURE, TaskUtils.failureType(new TwitterException("", null, 500))); } /** * errorCode=187 errorMessage="Status is a duplicate." httpCode=403 * https://dev.twitter.com/docs/error-codes-responses */ @Test public void itCounts187AsPerm () throws Exception { final TwitterException te = new TwitterException("", null, 403); Whitebox.setInternalState(te, "errorCode", 187); assertEquals(TaskOutcome.PREVIOUS_ATTEMPT_SUCCEEDED, TaskUtils.failureType(te)); } }