blob: ea039041df774b4c8d3093318f1990b375b95e92 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.sling.commons.testing.junit;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
public class RetryRuleTest {
private int setupCounter;
private int callCount = 0;
private long callTime = -1;
@Rule
public final RetryRule retryRule = new RetryRule();
@Before
public void setup() {
setupCounter = 0;
}
@Retry
@Test
public void testDefaultParameters() {
callCount++;
setupCounter++;
if(callTime > 0) {
final long delta = System.currentTimeMillis();
assertTrue("Expecting at least 500 msec between calls", delta >= 500);
}
callTime = System.currentTimeMillis();
assertTrue("Expecting to be called several times before passing", callCount > 3);
assertEquals("Expecting setup() to be called before every retry", 1, setupCounter);
// Once we pass, reset counters for other tests
callTime = -1;
callCount = 0;
}
@Retry
@Test
public void testRetryOnException() throws Exception {
callCount++;
setupCounter++;
if(callCount <= 3) {
throw new Exception("Expecting to be called several times before passing");
}
assertEquals("Expecting setup() to be called before every retry", 1, setupCounter);
// Once we pass, reset counters for other tests
callTime = -1;
callCount = 0;
}
@Retry(timeoutMsec=500, intervalMsec=1)
@Test
public void testCustomParameters() {
callCount++;
setupCounter++;
assertTrue("Expecting to be called many times before passing", callCount > 100);
assertEquals("Expecting setup() to be called before every retry", 1, setupCounter);
// Once we pass, reset callTime for other tests
callTime = -1;
callCount = 0;
}
@Test
public void testDefaultDefaultTimings() {
final RetryRule r = new RetryRule();
assertEquals("Expecting default default timeout", RetryRule.DEFAULT_DEFAULT_TIMEOUT_MSEC, r.getTimeout(-1));
assertEquals("Expecting default default interval", RetryRule.DEFAULT_DEFAULT_INTERVAL_MSEC, r.getInterval(-1));
}
@Test
public void testSpecifiedDefaultTimings() {
final RetryRule r = new RetryRule(12, 42);
assertEquals("Expecting specified default timeout", 12, r.getTimeout(-1));
assertEquals("Expecting specified default interval", 42, r.getInterval(-1));
}
@Test
public void testRuleTimings() {
final RetryRule r = new RetryRule(12, 42);
assertEquals("Expecting timeout from Rule", 1012, r.getTimeout(1012));
assertEquals("Expecting interval from Rule", 1024, r.getInterval(1024));
}
}