e237a45546cb4b7c68c70945b96cfb1baa2a1405
[policy/drools-pdp.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * ONAP
4  * ================================================================================
5  * Copyright (C) 2019 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.controller.internal;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertTrue;
25
26 import java.io.File;
27 import java.io.IOException;
28 import java.nio.file.Paths;
29 import java.util.Arrays;
30 import java.util.List;
31 import java.util.concurrent.CountDownLatch;
32 import java.util.concurrent.TimeUnit;
33 import java.util.stream.Collectors;
34 import java.util.stream.Stream;
35 import org.junit.Assert;
36 import org.junit.BeforeClass;
37 import org.junit.Test;
38 import org.kie.api.builder.ReleaseId;
39 import org.onap.policy.drools.controller.DroolsController;
40 import org.onap.policy.drools.util.KieUtils;
41 import org.onap.policy.drools.utils.logging.LoggerUtil;
42 import org.slf4j.Logger;
43 import org.slf4j.LoggerFactory;
44
45 public class MavenDroolsController3Test {
46     private static final String DROOLS_RESOURCES_DIR = "src/test/resources/";
47     private static final String DROOLS_KJAR_RESOURCES_DIR = "src/main/resources/";
48     private static final String DRL_EXT = ".drl";
49     private static final String POM_EXT = ".pom";
50     private static final String KMODULE_EXT = ".kmodule";
51
52     private static final String RULES_BASE = "rules";
53     private static final String KBNAME_RULES = "kbRules";
54     private static final String KBSESSION_RULES = RULES_BASE;
55     private static final String KBPACKAGE_RULES = RULES_BASE;
56
57     public static final CountDownLatch running1a = new CountDownLatch(1);
58     public static final CountDownLatch running1b = new CountDownLatch(1);
59     public static final CountDownLatch running2a = new CountDownLatch(1);
60     public static final CountDownLatch running2b = new CountDownLatch(1);
61
62     private static final Logger logger = LoggerFactory.getLogger(MavenDroolsController3Test.class);
63
64     private static ReleaseId install(String name, List<File> drls) throws IOException {
65         return
66             KieUtils.installArtifact(
67                 Paths.get(DROOLS_RESOURCES_DIR + RULES_BASE + KMODULE_EXT).toFile(),
68                 Paths.get(DROOLS_RESOURCES_DIR + name + POM_EXT).toFile(),
69                DROOLS_KJAR_RESOURCES_DIR + KBNAME_RULES + "/" + KBPACKAGE_RULES + "/",
70                 drls);
71     }
72
73     public static ReleaseId rulesDescriptor1;
74     public static ReleaseId rulesDescriptor2;
75
76     /**
77      * Test Class Initialization.
78      */
79     @BeforeClass
80     public static void setUpBeforeClass() throws IOException {
81         rulesDescriptor1 =
82             install("rules1",
83                 Stream.of(Paths.get(DROOLS_RESOURCES_DIR + "rules1" + DRL_EXT).toFile()).collect(Collectors.toList()));
84
85         rulesDescriptor2 =
86             install("rules2",
87                 Stream.of(Paths.get(DROOLS_RESOURCES_DIR + "rules1" + DRL_EXT).toFile(),
88                           Paths.get(DROOLS_RESOURCES_DIR + "rules2" + DRL_EXT).toFile())
89                       .collect(Collectors.toList()));
90
91         LoggerUtil.setLevel("ROOT", "WARN");
92         LoggerUtil.setLevel("org.onap.policy.drools.controller.internal", "INFO");
93     }
94
95     @Test
96     public void upgrades() throws InterruptedException {
97         DroolsController rules =
98             new MavenDroolsController(
99                 rulesDescriptor1.getGroupId(), rulesDescriptor1.getArtifactId(), rulesDescriptor1.getVersion(),
100                 null, null);
101
102         assertTrue(rules.start());
103         assertTrue(running1a.await(30, TimeUnit.SECONDS));
104         summary(rules);
105         assertKie(rules, Arrays.asList("SETUP.1", "VERSION.12"), 1);
106
107         rules.updateToVersion(
108             rulesDescriptor2.getGroupId(),
109             rulesDescriptor2.getArtifactId(),
110             rulesDescriptor2.getVersion(),
111             null, null);
112
113         assertTrue(running2a.await(30, TimeUnit.SECONDS));
114         assertTrue(running2b.await(30, TimeUnit.SECONDS));
115         summary(rules);
116         assertKie(rules, Arrays.asList("SETUP.1", "VERSION.12", "SETUP.2", "VERSION.2"), 2);
117
118         rules.updateToVersion(
119             rulesDescriptor1.getGroupId(),
120             rulesDescriptor1.getArtifactId(),
121             rulesDescriptor1.getVersion(),
122             null, null);
123
124         assertTrue(running1b.await(30, TimeUnit.SECONDS));
125         summary(rules);
126         assertKie(rules, Arrays.asList("SETUP.1", "VERSION.12"), 1);
127     }
128
129     private void summary(DroolsController rules) {
130         logger.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
131         logger.info("Controller: " + rules.getGroupId() + ":" + rules.getArtifactId() + ":" + rules.getVersion());
132         logger.info(".....................................................................");
133         logger.info("KIE-BASES: " + KieUtils.getBases(rules.getContainer().getKieContainer()));
134         logger.info("KIE-PACKAGE-NAMES: " + KieUtils.getPackageNames(rules.getContainer().getKieContainer()));
135         logger.info("KIE-RULE-NAMES: " + KieUtils.getRuleNames(rules.getContainer().getKieContainer()));
136         logger.info("FACTS: " + rules.facts(KBSESSION_RULES, Object.class));
137         logger.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
138     }
139
140     private void assertKie(DroolsController controller, List<String> expectedRuleNames, long expectedFactCount) {
141         assertEquals(Arrays.asList("kbRules"), KieUtils.getBases(controller.getContainer().getKieContainer()));
142         assertEquals(expectedRuleNames, KieUtils.getRuleNames(controller.getContainer().getKieContainer()));
143         assertEquals(expectedFactCount, controller.factCount(controller.getSessionNames().get(0)));
144     }
145 }