InfraUtil JobCordinator Changes.
[genius.git] / mdsalutil / mdsalutil-testutils / src / test / java / org / opendaylight / genius / datastoreutils / testutils / tests / TestableJobCoordinatorEventsWaiterTest.java
1 /*
2  * Copyright (c) 2017 Red Hat, Inc. 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.tests;
9
10 import static org.junit.Assert.assertTrue;
11
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;
32
33 /**
34  * Unit test for DataStoreJobCoordinator.
35  *
36  * @author Michael Vorburger.ch
37  */
38 public class TestableJobCoordinatorEventsWaiterTest {
39
40     private static class TestCallable implements Callable<List<? extends ListenableFuture<?>>> {
41
42         boolean wasCalled = false;
43         AtomicInteger invocationCount = new AtomicInteger();
44
45         @Override
46         public List<ListenableFuture<Void>> call() {
47             wasCalled = true;
48             invocationCount.incrementAndGet();
49             return null;
50         }
51     }
52
53     public @Rule LogRule logRule = new LogRule();
54
55     public @Rule LogCaptureRule logCaptureRule = new LogCaptureRule();
56
57     public @Rule GuiceRule guice = new GuiceRule(CloseableModule.class, Jsr250Module.class,
58             JobCoordinatorTestModule.class);
59
60     public static @ClassRule RunUntilFailureClassRule classRepeater = new RunUntilFailureClassRule(13);
61     public @Rule RunUntilFailureRule repeater = new RunUntilFailureRule(classRepeater);
62
63     @Inject JobCoordinator jobCoordinator;
64     @Inject TestableJobCoordinatorEventsWaiter jobCoordinatorEventsWaiter;
65     @Inject
66     TestableJobCoordinatorCountedEventsWaiter jobCoordinatorCountedEventsWaiter;
67
68     @Test
69     public void testInfrautilsJobCoordinatorUsingTestableJobCoordinatorEventsWaiter() {
70         TestCallable testCallable = new TestCallable();
71         jobCoordinator.enqueueJob(getClass().getName().toString(), testCallable);
72         jobCoordinatorEventsWaiter.awaitEventsConsumption();
73         assertTrue(testCallable.wasCalled);
74     }
75
76     @Test
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());
85     }
86 }