mirror of https://github.com/apache/cloudstack.git
111 lines
4.0 KiB
Java
111 lines
4.0 KiB
Java
// 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
|
|
// 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 com.cloud.utils.backoff.impl;
|
|
|
|
import java.util.HashMap;
|
|
|
|
import org.apache.commons.logging.Log;
|
|
import org.apache.commons.logging.LogFactory;
|
|
import org.junit.Assert;
|
|
import org.junit.Test;
|
|
|
|
public class ConstantTimeBackoffTest {
|
|
final static private Log LOG = LogFactory
|
|
.getLog(ConstantTimeBackoffTest.class);
|
|
|
|
@Test
|
|
public void waitBeforeRetryWithInterrupt() throws InterruptedException {
|
|
final ConstantTimeBackoff backoff = new ConstantTimeBackoff();
|
|
backoff.setTimeToWait(10);
|
|
Assert.assertTrue(backoff.getWaiters().isEmpty());
|
|
Thread waitThread = new Thread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
backoff.waitBeforeRetry();
|
|
}
|
|
});
|
|
waitThread.start();
|
|
Thread.sleep(100);
|
|
Assert.assertFalse(backoff.getWaiters().isEmpty());
|
|
waitThread.interrupt();
|
|
Thread.sleep(100);
|
|
Assert.assertTrue(backoff.getWaiters().isEmpty());
|
|
}
|
|
|
|
@Test
|
|
public void waitBeforeRetry() throws InterruptedException {
|
|
final ConstantTimeBackoff backoff = new ConstantTimeBackoff();
|
|
// let's not wait too much in a test
|
|
backoff.setTimeToWait(0);
|
|
// check if the list of waiters is empty
|
|
Assert.assertTrue(backoff.getWaiters().isEmpty());
|
|
// call the waitBeforeRetry which will wait 0 ms and return
|
|
backoff.waitBeforeRetry();
|
|
// on normal exit the list of waiters should be cleared
|
|
Assert.assertTrue(backoff.getWaiters().isEmpty());
|
|
}
|
|
|
|
@Test
|
|
public void configureEmpty() {
|
|
// at this point this is the only way rhe configure method gets invoked,
|
|
// therefore have to make sure it works correctly
|
|
final ConstantTimeBackoff backoff = new ConstantTimeBackoff();
|
|
backoff.configure("foo", new HashMap<String, Object>());
|
|
Assert.assertEquals(5000, backoff.getTimeToWait());
|
|
}
|
|
|
|
@Test
|
|
public void configureWithValue() {
|
|
final ConstantTimeBackoff backoff = new ConstantTimeBackoff();
|
|
HashMap<String, Object> params = new HashMap<String, Object>();
|
|
params.put("seconds", "100");
|
|
backoff.configure("foo", params);
|
|
Assert.assertEquals(100000, backoff.getTimeToWait());
|
|
}
|
|
|
|
/**
|
|
* Test that wakeup returns false when trying to wake a non existing thread.
|
|
*/
|
|
@Test
|
|
public void wakeupNotExisting() {
|
|
final ConstantTimeBackoff backoff = new ConstantTimeBackoff();
|
|
Assert.assertFalse(backoff.wakeup("NOT EXISTING THREAD"));
|
|
}
|
|
|
|
/**
|
|
* Test that wakeup will return true if the thread is waiting.
|
|
*/
|
|
@Test
|
|
public void wakeupExisting() throws InterruptedException {
|
|
final ConstantTimeBackoff backoff = new ConstantTimeBackoff();
|
|
backoff.setTimeToWait(10);
|
|
Thread thread = new Thread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
LOG.debug("before");
|
|
backoff.waitBeforeRetry();
|
|
LOG.debug("after");
|
|
}
|
|
});
|
|
thread.start();
|
|
LOG.debug("thread started");
|
|
Thread.sleep(100);
|
|
LOG.debug("testing wakeup");
|
|
Assert.assertTrue(backoff.wakeup(thread.getName()));
|
|
}
|
|
}
|