6c60c5acc98beb375736b9b32babc9d6a6338343
[policy/drools-pdp.git] /
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() {
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     Thread ttThread = null;
83
84     TestTransaction.manager.register(controller);
85     assertNotNull(TestTransaction.manager);
86
87     /*
88      * If the controller was successfully registered it will have a thread created.
89      */
90     ttThread = this.getThread("tt-controller-task-" + TEST_CONTROLLER_NAME);
91     assertNotNull(ttThread);
92
93     /*
94      * Unregistering the controller should terminate its TestTransaction thread if it hasn't already
95      * been terminated
96      */
97     TestTransaction.manager.unregister(controller);
98
99     /*
100      * Put this thread to sleep so the TestTransaction thread has enough time to terminate before we
101      * check.
102      */
103     try {
104       Thread.sleep(2000);
105     } catch (final InterruptedException e) {
106
107     }
108     ttThread = this.getThread("tt-controller-task-" + TEST_CONTROLLER_NAME);
109     assertEquals(null, ttThread);
110
111
112   }
113
114   /*
115    * Returns thread object based on String name
116    */
117   public Thread getThread(String threadName) {
118
119     final Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
120     for (final Thread thread : threadSet) {
121       if (thread.getName().equals(threadName)) {
122         return thread;
123       }
124
125     }
126     return null;
127   }
128
129   /**
130    * clean up working directory
131    */
132   protected static void cleanUpWorkingDir() {
133     final Path testControllerPath = Paths
134         .get(SystemPersistence.manager.getConfigurationPath().toString(), TEST_CONTROLLER_FILE);
135     try {
136       Files.deleteIfExists(testControllerPath);
137     } catch (final Exception e) {
138       logger.info("Problem cleaning {}", testControllerPath, e);
139     }
140
141     final Path testControllerBakPath = Paths
142         .get(SystemPersistence.manager.getConfigurationPath().toString(), TEST_CONTROLLER_FILE_BAK);
143     try {
144       Files.deleteIfExists(testControllerBakPath);
145     } catch (final Exception e) {
146       logger.info("Problem cleaning {}", testControllerBakPath, e);
147     }
148   }
149
150 }