diff options
Diffstat (limited to 'framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/TestTools.java')
-rw-r--r-- | framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/TestTools.java | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/TestTools.java b/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/TestTools.java new file mode 100644 index 00000000..80ae180d --- /dev/null +++ b/framework/src/onos/core/api/src/test/java/org/onosproject/net/intent/TestTools.java @@ -0,0 +1,141 @@ +/* + * Copyright 2014 Open Networking Laboratory + * + * Licensed 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.onosproject.net.intent; + +import static org.junit.Assert.fail; + +/** + * Set of test tools. + */ +public final class TestTools { + + // Disallow construction + private TestTools() { + } + + /** + * Utility method to pause the current thread for the specified number of + * milliseconds. + * + * @param ms number of milliseconds to pause + */ + public static void delay(int ms) { + try { + Thread.sleep(ms); + } catch (InterruptedException e) { + fail("unexpected interrupt"); + } + } + + /** + * Periodically runs the given runnable, which should contain a series of + * test assertions until all the assertions succeed, in which case it will + * return, or until the the time expires, in which case it will throw the + * first failed assertion error. + * + * @param start start time, in millis since start of epoch from which the + * duration will be measured + * @param delay initial delay (in milliseconds) before the first assertion + * attempt + * @param step delay (in milliseconds) between successive assertion + * attempts + * @param duration number of milliseconds beyond the given start time, + * after which the failed assertions will be propagated and allowed + * to fail the test + * @param assertions runnable housing the test assertions + */ + public static void assertAfter(long start, int delay, int step, + int duration, Runnable assertions) { + delay(delay); + while (true) { + try { + assertions.run(); + break; + } catch (AssertionError e) { + if (System.currentTimeMillis() - start > duration) { + throw e; + } + } + delay(step); + } + } + + /** + * Periodically runs the given runnable, which should contain a series of + * test assertions until all the assertions succeed, in which case it will + * return, or until the the time expires, in which case it will throw the + * first failed assertion error. + * <p> + * The start of the period is the current time. + * + * @param delay initial delay (in milliseconds) before the first assertion + * attempt + * @param step delay (in milliseconds) between successive assertion + * attempts + * @param duration number of milliseconds beyond the current time time, + * after which the failed assertions will be propagated and allowed + * to fail the test + * @param assertions runnable housing the test assertions + */ + public static void assertAfter(int delay, int step, int duration, + Runnable assertions) { + assertAfter(System.currentTimeMillis(), delay, step, duration, + assertions); + } + + /** + * Periodically runs the given runnable, which should contain a series of + * test assertions until all the assertions succeed, in which case it will + * return, or until the the time expires, in which case it will throw the + * first failed assertion error. + * <p> + * The start of the period is the current time and the first assertion + * attempt is delayed by the value of {@code step} parameter. + * + * @param step delay (in milliseconds) between successive assertion + * attempts + * @param duration number of milliseconds beyond the current time time, + * after which the failed assertions will be propagated and allowed + * to fail the test + * @param assertions runnable housing the test assertions + */ + public static void assertAfter(int step, int duration, + Runnable assertions) { + assertAfter(step, step, duration, assertions); + } + + /** + * Periodically runs the given runnable, which should contain a series of + * test assertions until all the assertions succeed, in which case it will + * return, or until the the time expires, in which case it will throw the + * first failed assertion error. + * <p> + * The start of the period is the current time and each successive + * assertion attempt is delayed by at least 10 milliseconds unless the + * {@code duration} is less than that, in which case the one and only + * assertion is made after that delay. + * + * @param duration number of milliseconds beyond the current time, + * after which the failed assertions will be propagated and allowed + * to fail the test + * @param assertions runnable housing the test assertions + */ + public static void assertAfter(int duration, Runnable assertions) { + int step = Math.min(duration, Math.max(10, duration / 10)); + assertAfter(step, duration, assertions); + } + +} |