Re-enable interface-manager l2vlan component tests
[genius.git] / mdsalutil / mdsalutil-testutils / src / main / java / org / opendaylight / genius / datastoreutils / testutils / AbstractTestableJobCoordinatorEventsWaiter.java
1 /*
2  * Copyright (c) 2018 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.genius.datastoreutils.testutils;
9
10 import static java.util.concurrent.TimeUnit.MILLISECONDS;
11 import static java.util.concurrent.TimeUnit.SECONDS;
12 import static org.hamcrest.Matchers.is;
13
14 import java.util.function.Supplier;
15 import javax.inject.Inject;
16
17 import org.awaitility.Awaitility;
18 import org.awaitility.core.ConditionTimeoutException;
19 import org.opendaylight.infrautils.jobcoordinator.JobCoordinatorMonitor;
20 import org.slf4j.Logger;
21 import org.slf4j.LoggerFactory;
22
23 public abstract class AbstractTestableJobCoordinatorEventsWaiter {
24
25     private static final Logger LOG = LoggerFactory.getLogger(AbstractTestableJobCoordinatorEventsWaiter.class);
26
27     protected final JobCoordinatorMonitor jobCoordinatorMonitor;
28
29     @Inject
30     public AbstractTestableJobCoordinatorEventsWaiter(JobCoordinatorMonitor jobCoordinatorMonitor) {
31         this.jobCoordinatorMonitor = jobCoordinatorMonitor;
32     }
33
34     protected boolean awaitJobsConsumption(Supplier<Long> countSupplier, long expectedCount)
35             throws ConditionTimeoutException {
36         try {
37             Awaitility.await("TestableJobCoordinatorEventsWaiter")
38                     .atMost(120, SECONDS)
39                     .pollDelay(0, MILLISECONDS)
40                     .conditionEvaluationListener(condition -> LOG.info(
41                             "awaitEventsConsumption: Elapsed time {}s, remaining time {}s; current count: {}"
42                                     + " expected event count: {}",
43                             condition.getElapsedTimeInMS() / 1000, condition.getRemainingTimeInMS() / 1000,
44                             condition.getValue(), expectedCount))
45                     .until(countSupplier::get, is(expectedCount));
46         } catch (ConditionTimeoutException e) {
47             LOG.error("Details about stuck JobCoordinator: {}", jobCoordinatorMonitor.toString());
48             throw e;
49         }
50         return true;
51     }
52 }