2 * Copyright (c) 2017 Red Hat, Inc. and others. All rights reserved.
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
8 package org.opendaylight.genius.datastoreutils.testutils.tests;
10 import static org.junit.Assert.assertTrue;
12 import com.google.common.util.concurrent.ListenableFuture;
13 import com.mycila.guice.ext.closeable.CloseableModule;
14 import com.mycila.guice.ext.jsr250.Jsr250Module;
15 import java.util.List;
16 import java.util.concurrent.Callable;
17 import java.util.concurrent.atomic.AtomicInteger;
18 import javax.inject.Inject;
19 import org.junit.Assert;
20 import org.junit.ClassRule;
21 import org.junit.Rule;
22 import org.junit.Test;
23 import org.opendaylight.genius.datastoreutils.testutils.JobCoordinatorTestModule;
24 import org.opendaylight.genius.datastoreutils.testutils.TestableJobCoordinatorCountedEventsWaiter;
25 import org.opendaylight.genius.datastoreutils.testutils.TestableJobCoordinatorEventsWaiter;
26 import org.opendaylight.infrautils.inject.guice.testutils.GuiceRule;
27 import org.opendaylight.infrautils.jobcoordinator.JobCoordinator;
28 import org.opendaylight.infrautils.testutils.LogCaptureRule;
29 import org.opendaylight.infrautils.testutils.LogRule;
30 import org.opendaylight.infrautils.testutils.RunUntilFailureClassRule;
31 import org.opendaylight.infrautils.testutils.RunUntilFailureRule;
34 * Unit test for DataStoreJobCoordinator.
36 * @author Michael Vorburger.ch
38 public class TestableJobCoordinatorEventsWaiterTest {
40 private static class TestCallable implements Callable<List<? extends ListenableFuture<?>>> {
42 boolean wasCalled = false;
43 AtomicInteger invocationCount = new AtomicInteger();
46 public List<ListenableFuture<Void>> call() {
48 invocationCount.incrementAndGet();
53 public @Rule LogRule logRule = new LogRule();
55 public @Rule LogCaptureRule logCaptureRule = new LogCaptureRule();
57 public @Rule GuiceRule guice = new GuiceRule(CloseableModule.class, Jsr250Module.class,
58 JobCoordinatorTestModule.class);
60 public static @ClassRule RunUntilFailureClassRule classRepeater = new RunUntilFailureClassRule(13);
61 public @Rule RunUntilFailureRule repeater = new RunUntilFailureRule(classRepeater);
63 @Inject JobCoordinator jobCoordinator;
64 @Inject TestableJobCoordinatorEventsWaiter jobCoordinatorEventsWaiter;
66 TestableJobCoordinatorCountedEventsWaiter jobCoordinatorCountedEventsWaiter;
69 public void testInfrautilsJobCoordinatorUsingTestableJobCoordinatorEventsWaiter() {
70 TestCallable testCallable = new TestCallable();
71 jobCoordinator.enqueueJob(getClass().getName().toString(), testCallable);
72 jobCoordinatorEventsWaiter.awaitEventsConsumption();
73 assertTrue(testCallable.wasCalled);
77 public void testInfrautilsJobCoordinatorUsingTestableJobCoordinatorCountedEventsWaiter() {
78 // Enqueue 3 jobs parallelly, and check if awaitEventsConsumption(jobCount) works as expected.
79 TestCallable testCallable = new TestCallable();
80 jobCoordinator.enqueueJob("key1", testCallable);
81 jobCoordinator.enqueueJob("key2", testCallable);
82 jobCoordinator.enqueueJob("key3", testCallable);
83 jobCoordinatorCountedEventsWaiter.awaitJobsConsumption(3);
84 Assert.assertEquals(3, testCallable.invocationCount.get());