package com.cookpad.puree.retryable;
import com.cookpad.puree.internal.RetryableTaskRunner;
import org.junit.Test;
import org.junit.runner.RunWith;
import android.support.test.runner.AndroidJUnit4;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
@RunWith(AndroidJUnit4.class)
public class RetryableTaskRunnerTest {
private ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
@Test
public void testEnsureToCallMeAfterSetTime() throws Exception {
final CountDownLatch latch = new CountDownLatch(1);
RetryableTaskRunner task = new RetryableTaskRunner(new Runnable() {
@Override
public void run() {
latch.countDown();
}
}, 10, 5, executor);
task.tryToStart();
assertThat(latch.await(20, TimeUnit.MILLISECONDS), is(true));
}
@Test
public void testRetryLater() throws Exception {
final CountDownLatch latch = new CountDownLatch(2);
RetryableTaskRunner task = new RetryableTaskRunner(new Runnable() {
@Override
public void run() {
latch.countDown();
}
}, 10, 5, executor);
task.tryToStart();
assertThat(latch.await(20, TimeUnit.MILLISECONDS), is(false));
task.retryLater();
assertThat(latch.await(40, TimeUnit.MILLISECONDS), is(true));
assertThat(latch.getCount(), is(0L));
}
}