junits fixes
[policy/drools-pdp.git] / feature-test-transaction / src / test / java / org / onap / policy / drools / testtransaction / TestTransactionTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * feature-test-transaction
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.policy.drools.testtransaction;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25
26 import java.io.IOException;
27 import java.nio.file.Files;
28 import java.nio.file.Path;
29 import java.nio.file.Paths;
30 import java.util.Properties;
31 import java.util.Set;
32
33 import org.junit.BeforeClass;
34 import org.junit.Test;
35 import org.onap.policy.drools.persistence.SystemPersistence;
36 import org.onap.policy.drools.properties.PolicyProperties;
37 import org.onap.policy.drools.system.PolicyController;
38 import org.onap.policy.drools.system.PolicyEngine;
39 import org.slf4j.Logger;
40 import org.slf4j.LoggerFactory;
41
42 public class TestTransactionTest {
43   /**
44    * Test JUnit Controller Name
45    */
46   public static final String TEST_CONTROLLER_NAME = "unnamed";
47   /**
48    * Controller Configuration File
49    */
50   public static final String TEST_CONTROLLER_FILE = TEST_CONTROLLER_NAME + "-controller.properties";
51
52   /**
53    * Controller Configuration Backup File
54    */
55   public static final String TEST_CONTROLLER_FILE_BAK =
56       TEST_CONTROLLER_NAME + "-controller.properties.bak";
57
58
59   /**
60    * logger
61    */
62   private static Logger logger = LoggerFactory.getLogger(TestTransactionTest.class);
63
64
65
66   @BeforeClass
67   public static void startUp() throws IOException {
68     logger.info("enter");
69
70     cleanUpWorkingDir();
71
72     /* ensure presence of config directory */
73     SystemPersistence.manager.setConfigurationDir(null);
74   }
75
76   @Test
77   public void registerUnregisterTest() throws InterruptedException {
78     final Properties controllerProperties = new Properties();
79     controllerProperties.put(PolicyProperties.PROPERTY_CONTROLLER_NAME, TEST_CONTROLLER_NAME);
80     final PolicyController controller =
81         PolicyEngine.manager.createPolicyController(TEST_CONTROLLER_NAME, controllerProperties);
82     assertNotNull(PolicyController.factory.get(TEST_CONTROLLER_NAME));
83     logger.info(controller.toString());
84
85     Thread ttThread = null;
86
87     TestTransaction.manager.register(controller);
88     assertNotNull(TestTransaction.manager);
89
90     /*
91      * Unregistering the controller should terminate its TestTransaction thread if it hasn't already
92      * been terminated
93      */
94     TestTransaction.manager.unregister(controller);
95
96     ttThread = this.getThread("tt-controller-task-" + TEST_CONTROLLER_NAME);
97     assertEquals(null, ttThread);
98
99
100   }
101
102   /*
103    * Returns thread object based on String name
104    */
105   public Thread getThread(String threadName) throws InterruptedException {
106     // give a chance to the transaction thread to be spawned/destroyed
107     Thread.sleep(5000L);
108
109     final Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
110     for (final Thread thread : threadSet) {
111       if (thread.getName().equals(threadName)) {
112         return thread;
113       }
114
115     }
116     return null;
117   }
118
119   /**
120    * clean up working directory
121    */
122   protected static void cleanUpWorkingDir() {
123     final Path testControllerPath = Paths
124         .get(SystemPersistence.manager.getConfigurationPath().toString(), TEST_CONTROLLER_FILE);
125     try {
126       Files.deleteIfExists(testControllerPath);
127     } catch (final Exception e) {
128       logger.info("Problem cleaning {}", testControllerPath, e);
129     }
130
131     final Path testControllerBakPath = Paths
132         .get(SystemPersistence.manager.getConfigurationPath().toString(), TEST_CONTROLLER_FILE_BAK);
133     try {
134       Files.deleteIfExists(testControllerBakPath);
135     } catch (final Exception e) {
136       logger.info("Problem cleaning {}", testControllerBakPath, e);
137     }
138   }
139
140 }