2  * ============LICENSE_START=======================================================
 
   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
 
  11  *      http://www.apache.org/licenses/LICENSE-2.0
 
  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=========================================================
 
  21 package org.onap.policy.drools.controller.internal;
 
  23 import static org.junit.Assert.assertEquals;
 
  24 import static org.junit.Assert.assertTrue;
 
  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.BeforeClass;
 
  36 import org.junit.Test;
 
  37 import org.kie.api.builder.ReleaseId;
 
  38 import org.onap.policy.drools.controller.DroolsController;
 
  39 import org.onap.policy.drools.util.KieUtils;
 
  40 import org.onap.policy.drools.utils.logging.LoggerUtil;
 
  41 import org.slf4j.Logger;
 
  42 import org.slf4j.LoggerFactory;
 
  44 public class MavenDroolsController3Test {
 
  45     private static final String DROOLS_RESOURCES_DIR = "src/test/resources/";
 
  46     private static final String DROOLS_KJAR_RESOURCES_DIR = "src/main/resources/";
 
  47     private static final String DRL_EXT = ".drl";
 
  48     private static final String POM_EXT = ".pom";
 
  49     private static final String KMODULE_EXT = ".kmodule";
 
  51     private static final String RULES_BASE = "rules";
 
  52     private static final String KBNAME_RULES = "kbRules";
 
  53     private static final String KBSESSION_RULES = RULES_BASE;
 
  54     private static final String KBPACKAGE_RULES = RULES_BASE;
 
  56     public static final CountDownLatch running1a = new CountDownLatch(1);
 
  57     public static final CountDownLatch running1b = new CountDownLatch(1);
 
  58     public static final CountDownLatch running2a = new CountDownLatch(1);
 
  59     public static final CountDownLatch running2b = new CountDownLatch(1);
 
  61     private static final Logger logger = LoggerFactory.getLogger(MavenDroolsController3Test.class);
 
  63     private static ReleaseId install(String name, List<File> drls) throws IOException {
 
  65             KieUtils.installArtifact(
 
  66                 Paths.get(DROOLS_RESOURCES_DIR + RULES_BASE + KMODULE_EXT).toFile(),
 
  67                 Paths.get(DROOLS_RESOURCES_DIR + name + POM_EXT).toFile(),
 
  68                DROOLS_KJAR_RESOURCES_DIR + KBNAME_RULES + "/" + KBPACKAGE_RULES + "/",
 
  72     public static ReleaseId rulesDescriptor1;
 
  73     public static ReleaseId rulesDescriptor2;
 
  76      * Test Class Initialization.
 
  79     public static void setUpBeforeClass() throws IOException {
 
  82                 Stream.of(Paths.get(DROOLS_RESOURCES_DIR + "rules1" + DRL_EXT).toFile()).collect(Collectors.toList()));
 
  86                 Stream.of(Paths.get(DROOLS_RESOURCES_DIR + "rules1" + DRL_EXT).toFile(),
 
  87                           Paths.get(DROOLS_RESOURCES_DIR + "rules2" + DRL_EXT).toFile())
 
  88                       .collect(Collectors.toList()));
 
  90         LoggerUtil.setLevel("ROOT", "WARN");
 
  91         LoggerUtil.setLevel("org.onap.policy.drools.controller.internal", "INFO");
 
  95     public void upgrades() throws InterruptedException {
 
  96         DroolsController rules =
 
  97             new MavenDroolsController(
 
  98                 rulesDescriptor1.getGroupId(), rulesDescriptor1.getArtifactId(), rulesDescriptor1.getVersion(),
 
 101         assertTrue(rules.start());
 
 102         assertTrue(running1a.await(30, TimeUnit.SECONDS));
 
 104         assertKie(rules, Arrays.asList("SETUP.1", "VERSION.12"), 1);
 
 106         rules.updateToVersion(
 
 107             rulesDescriptor2.getGroupId(),
 
 108             rulesDescriptor2.getArtifactId(),
 
 109             rulesDescriptor2.getVersion(),
 
 112         assertTrue(running2a.await(30, TimeUnit.SECONDS));
 
 113         assertTrue(running2b.await(30, TimeUnit.SECONDS));
 
 115         assertKie(rules, Arrays.asList("SETUP.1", "VERSION.12", "SETUP.2", "VERSION.2"), 2);
 
 117         rules.updateToVersion(
 
 118             rulesDescriptor1.getGroupId(),
 
 119             rulesDescriptor1.getArtifactId(),
 
 120             rulesDescriptor1.getVersion(),
 
 123         assertTrue(running1b.await(30, TimeUnit.SECONDS));
 
 125         assertKie(rules, Arrays.asList("SETUP.1", "VERSION.12"), 1);
 
 128     private void summary(DroolsController rules) {
 
 129         logger.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
 
 130         logger.info("Controller: " + rules.getGroupId() + ":" + rules.getArtifactId() + ":" + rules.getVersion());
 
 131         logger.info(".....................................................................");
 
 132         logger.info("KIE-BASES: " + KieUtils.getBases(rules.getContainer().getKieContainer()));
 
 133         logger.info("KIE-PACKAGE-NAMES: " + KieUtils.getPackageNames(rules.getContainer().getKieContainer()));
 
 134         logger.info("KIE-RULE-NAMES: " + KieUtils.getRuleNames(rules.getContainer().getKieContainer()));
 
 135         logger.info("FACTS: " + rules.facts(KBSESSION_RULES, Object.class));
 
 136         logger.info("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
 
 139     private void assertKie(DroolsController controller, List<String> expectedRuleNames, long expectedFactCount) {
 
 140         assertEquals(Arrays.asList("kbRules"), KieUtils.getBases(controller.getContainer().getKieContainer()));
 
 141         assertEquals(expectedRuleNames, KieUtils.getRuleNames(controller.getContainer().getKieContainer()));
 
 142         assertEquals(expectedFactCount, controller.factCount(controller.getSessionNames().get(0)));