I am trying to write up a scenario for my integration testing using Awaitility package in java.
I have a call as below:
System.out.println(...)
await().atMost(10,Duration.SECONDS).until(myFunction());
and some code here....
Here, it waits for 10 seconds until the myFunction() is called.
I want something like this,my requirement is: It should keep calling myFunction() for every second for a duration of 10 seconds. Is there any better approach for this?
The default poll interval for awaitility is 100 milliseconds (i.e. 0.1 of a second). It's documented under Polling in the wiki.
If you want to set the poll interval to a second, then add it to the await:
with().pollInterval(Duration.ONE_SECOND).await().atMost(Duration.TEN_SECONDS).until(myFunction());
This should accomplish the polling once a second for up to 10 seconds.
Here's a very simple example:
import static org.awaitility.Awaitility.*;
import org.awaitility.Duration;
import java.util.concurrent.Callable;
public class Test {
private Callable<Boolean> waitmeme(int timeout) {
return new Callable<Boolean>() {
int counter = 0;
int limit = timeout;
public Boolean call() throws Exception {
System.out.println("Hello");
counter++;
return (counter == limit);
}
};
}
public void runit(int timeout) {
try {
with().pollInterval(Duration.ONE_SECOND)
.await()
.atMost(Duration.TEN_SECONDS)
.until(waitmeme(timeout));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[]) throws Exception {
int timeout = 11;
if (args.length >= 1)
timeout = Integer.parseInt(args[0]);
new Test().runit(timeout);
}
}