3f13b7fab4b6fa870cdff2dfe1c532e5eae1f629
[dcaegen2/analytics/tca.git] / dcae-analytics-cdap-tca / src / test / java / org / openecomp / dcae / apod / analytics / cdap / tca / worker / BaseTCADMaaPMRWorkerTest.java
1 /*\r
2  * ===============================LICENSE_START======================================\r
3  *  dcae-analytics\r
4  * ================================================================================\r
5  *    Copyright © 2017 AT&T Intellectual Property. All rights reserved.\r
6  * ================================================================================\r
7  *  Licensed under the Apache License, Version 2.0 (the "License");\r
8  *  you may not use this file except in compliance with the License.\r
9  *   You may obtain a copy of the License at\r
10  *\r
11  *          http://www.apache.org/licenses/LICENSE-2.0\r
12  *\r
13  *  Unless required by applicable law or agreed to in writing, software\r
14  *  distributed under the License is distributed on an "AS IS" BASIS,\r
15  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  *  See the License for the specific language governing permissions and\r
17  *  limitations under the License.\r
18  *  ============================LICENSE_END===========================================\r
19  */\r
20 \r
21 package org.openecomp.dcae.apod.analytics.cdap.tca.worker;\r
22 \r
23 import org.junit.Before;\r
24 import org.junit.Test;\r
25 import org.openecomp.dcae.apod.analytics.cdap.tca.BaseAnalyticsCDAPTCAUnitTest;\r
26 import org.openecomp.dcae.apod.analytics.common.AnalyticsConstants;\r
27 import org.quartz.Scheduler;\r
28 \r
29 import java.util.concurrent.atomic.AtomicBoolean;\r
30 \r
31 import static org.mockito.Mockito.doNothing;\r
32 import static org.mockito.Mockito.mock;\r
33 import static org.mockito.Mockito.times;\r
34 import static org.mockito.Mockito.verify;\r
35 import static org.mockito.Mockito.when;\r
36 \r
37 /**\r
38  * @author Rajiv Singla . Creation Date: 12/19/2016.\r
39  */\r
40 public class BaseTCADMaaPMRWorkerTest extends BaseAnalyticsCDAPTCAUnitTest {\r
41 \r
42     private static final String SCHEDULER_NAME = "testSchedulerName";\r
43 \r
44     private Scheduler mockScheduler;\r
45     private AtomicBoolean mockIsSchedulerShutdown;\r
46     private BaseTestTCADMaaPMRWorker baseTestTCADMaaPMRWorker;\r
47 \r
48     private static class BaseTestTCADMaaPMRWorker extends BaseTCADMaaPMRWorker {\r
49 \r
50         public BaseTestTCADMaaPMRWorker(final Scheduler scheduler, final AtomicBoolean isSchedulerShutdown) {\r
51             this.scheduler = scheduler;\r
52             this.isSchedulerShutdown = isSchedulerShutdown;\r
53         }\r
54 \r
55     }\r
56 \r
57     @Before\r
58     public void before() throws Exception {\r
59         mockScheduler = mock(Scheduler.class);\r
60         mockIsSchedulerShutdown = mock(AtomicBoolean.class);\r
61         baseTestTCADMaaPMRWorker = new BaseTestTCADMaaPMRWorker(mockScheduler, mockIsSchedulerShutdown);\r
62         when(mockScheduler.getSchedulerName()).thenReturn(SCHEDULER_NAME);\r
63         doNothing().when(mockScheduler).start();\r
64         doNothing().when(mockScheduler).shutdown();\r
65     }\r
66 \r
67     @Test\r
68     public void testRun() throws Exception {\r
69         createShutdownHookThread();\r
70         baseTestTCADMaaPMRWorker.run();\r
71         verify(mockScheduler, times(1)).start();\r
72     }\r
73 \r
74     @Test\r
75     public void testStop() throws Exception {\r
76         baseTestTCADMaaPMRWorker.stop();\r
77         verify(mockScheduler, times(1)).shutdown();\r
78     }\r
79 \r
80     /**\r
81      * A helper thread which shuts down the scheduler after some time\r
82      */\r
83     public void createShutdownHookThread() {\r
84         new Thread(new Runnable() {\r
85             @Override\r
86             public void run() {\r
87                 try {\r
88                     Thread.yield();\r
89                     Thread.sleep(AnalyticsConstants.TCA_DEFAULT_WORKER_SHUTDOWN_CHECK_INTERVAL_MS * 2);\r
90                 } catch (InterruptedException e) {\r
91                     LOG.error("Interrupted Exception while running test: {}", e);\r
92                     throw new RuntimeException(e);\r
93                 }\r
94                 mockIsSchedulerShutdown.getAndSet(true);\r
95             }\r
96         }).start();\r
97     }\r
98 \r
99 }\r