Skip to content

Commit

Permalink
JBPM-8976: Fix kie-server expected capabilities comparison (#1977)
Browse files Browse the repository at this point in the history
* JBPM-8976: Fix kie-server expected capabilities comparision

For more details see https://issues.redhat.com/browse/JBPM-8976

* JBPM-8976: Fix KieControllerValidationIntegrationTest

* JBPM-8976: Do not use static field double brace initialization
  • Loading branch information
Jozef Marko authored and MarianMacik committed Jan 22, 2020
1 parent e69e8df commit 7b2bb48
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 35 deletions.
Expand Up @@ -11,7 +11,7 @@
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
*/

package org.kie.server.controller.impl;

Expand All @@ -20,7 +20,9 @@
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

import org.kie.server.api.KieServerConstants;
import org.kie.server.api.model.KieContainerResource;
Expand Down Expand Up @@ -55,7 +57,6 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public abstract class KieServerControllerImpl implements KieServerController {

private static final Logger logger = LoggerFactory.getLogger(KieServerControllerImpl.class);
Expand Down Expand Up @@ -155,11 +156,11 @@ public synchronized KieServerSetup connect(KieServerInfo serverInfo) {
containers.add(containerResource);

containerList.add(new Container(containerSpec.getId(),
containerSpec.getContainerName(),
serverInstanceKey,
new ArrayList<Message>(),
containerSpec.getReleasedId(),
serverInstanceKey.getUrl()+"/containers/"+containerSpec.getId()));
containerSpec.getContainerName(),
serverInstanceKey,
new ArrayList<Message>(),
containerSpec.getReleasedId(),
serverInstanceKey.getUrl() + "/containers/" + containerSpec.getId()));
}
serverSetup.setContainers(containers);

Expand All @@ -186,14 +187,12 @@ public synchronized KieServerSetup connect(KieServerInfo serverInfo) {
serverTemplate.setId(serverInfo.getServerId());
serverTemplate.setName(serverInfo.getName());
List<String> capabilities = new ArrayList<String>();
if (serverInfo.getCapabilities().contains(KieServerConstants.CAPABILITY_BRM)) {
capabilities.add(Capability.RULE.toString());
}
if (serverInfo.getCapabilities().contains(KieServerConstants.CAPABILITY_BPM)) {
capabilities.add(Capability.PROCESS.toString());
}
if (serverInfo.getCapabilities().contains(KieServerConstants.CAPABILITY_BRP)) {
capabilities.add(Capability.PLANNING.toString());
if (serverInfo.getCapabilities() != null) {
for (final String serverCapability : serverInfo.getCapabilities()) {
if (getCompatibleServerTemplateCapability(serverCapability) != null) {
capabilities.add(getCompatibleServerTemplateCapability(serverCapability));
}
}
}
serverTemplate.setCapabilities(capabilities);

Expand All @@ -218,7 +217,6 @@ public synchronized KieServerSetup connect(KieServerInfo serverInfo) {

serverInstance.setContainers(containerList);


notifyOnConnect(serverInstance);
return serverSetup;
}
Expand All @@ -235,11 +233,19 @@ private boolean checkValidServerInstance(ServerTemplate serverTemplate, KieServe
List<String> currentCapabilities = serverInfo.getCapabilities() != null ? serverInfo.getCapabilities() : Collections.emptyList();
List<String> expectedCababilities = new ArrayList<>(serverTemplate.getCapabilities());

expectedCababilities.removeAll(currentCapabilities);
List<String> convertedCurrentCapabilities = currentCapabilities.stream()
.filter(currentCapability -> getCompatibleServerTemplateCapability(currentCapability) != null)
.map(currentCapability -> getCompatibleServerTemplateCapability(currentCapability))
.collect(Collectors.toList());

if (!expectedCababilities.isEmpty()) {
if (!Objects.equals(expectedCababilities, convertedCurrentCapabilities)) {
serverSetup.getMessages().add(new Message(Severity.ERROR, "Expected capabilities were " + serverTemplate.getCapabilities()));
logger.warn("Server id {} capabilities expected {} but there was {}", serverInfo.getServerId(), currentCapabilities, serverTemplate.getCapabilities());
List<String> missingCapabilities = expectedCababilities;
missingCapabilities.removeAll(convertedCurrentCapabilities);
logger.warn("Server id {} capabilities expected {} but there was missing {}",
serverInfo.getServerId(),
serverTemplate.getCapabilities(),
missingCapabilities);
}
}

Expand Down Expand Up @@ -272,13 +278,13 @@ protected void notifyOnConnect(ServerInstance serverInstance) {
notificationService.notify(new ServerInstanceUpdated(serverInstance));
notificationService.notify(new ServerInstanceConnected(serverInstance));
}

protected void notifyOnDisconnect(ServerInstanceKey serverInstanceKey, ServerTemplate serverTemplate) {
notificationService.notify(new ServerInstanceDeleted(serverInstanceKey.getServerInstanceId()));
notificationService.notify(new ServerTemplateUpdated(serverTemplate));
notificationService.notify(new ServerInstanceDisconnected(serverInstanceKey.getServerInstanceId()));
}

public KieServerTemplateStorage getTemplateStorage() {
return templateStorage;
}
Expand All @@ -287,7 +293,6 @@ public void setTemplateStorage(KieServerTemplateStorage templateStorage) {
this.templateStorage = templateStorage;
}


public NotificationService getNotificationService() {
return notificationService;
}
Expand All @@ -296,4 +301,18 @@ public void setNotificationService(NotificationService notificationService) {
this.notificationService = notificationService;
}

private static String getCompatibleServerTemplateCapability(final String serverInstanceCapability) {

if (Objects.equals(KieServerConstants.CAPABILITY_BRM, serverInstanceCapability)) {
return Capability.RULE.toString();
}
if (Objects.equals(KieServerConstants.CAPABILITY_BPM, serverInstanceCapability)) {
return Capability.PROCESS.toString();
}
if (Objects.equals(KieServerConstants.CAPABILITY_BRP, serverInstanceCapability)) {
return Capability.PLANNING.toString();
}

return null;
}
}
@@ -1,17 +1,17 @@
/*
* Copyright 2019 Red Hat, Inc. and/or its affiliates.
* Copyright 2019 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
*/

package org.kie.server.integrationtests.controller;

Expand All @@ -28,6 +28,7 @@
import org.kie.server.controller.api.KieServerController;
import org.kie.server.controller.api.model.KieServerSetup;
import org.kie.server.controller.api.model.runtime.ServerInstanceKeyList;
import org.kie.server.controller.api.model.spec.Capability;
import org.kie.server.controller.api.model.spec.ServerTemplate;
import org.kie.server.controller.api.model.spec.ServerTemplateList;
import org.kie.server.integrationtests.config.TestConfig;
Expand All @@ -46,7 +47,6 @@
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;


public class KieControllerValidationIntegrationTest extends KieControllerManagementBaseTest {

protected static Logger logger = LoggerFactory.getLogger(KieControllerValidationIntegrationTest.class);
Expand All @@ -61,15 +61,16 @@ public void init() {
dummyKieServerStateRepository = new KieServerStateRepository() {

@Override
public void store(String serverId, KieServerState kieServerState) {}
public void store(String serverId, KieServerState kieServerState) {
}

@Override
public KieServerState load(String serverId) {
KieServerState kieServerState = new KieServerState();
kieServerState.setControllers(Collections.singleton(TestConfig.getControllerHttpUrl()));
kieServerState.setConfiguration(new KieServerConfig());

if(TestConfig.isLocalServer()) {
if (TestConfig.isLocalServer()) {
kieServerState.getConfiguration().addConfigItem(new KieServerConfigItem(KieServerConstants.CFG_KIE_CONTROLLER_USER, "", null));
kieServerState.getConfiguration().addConfigItem(new KieServerConfigItem(KieServerConstants.CFG_KIE_CONTROLLER_PASSWORD, "", null));
} else {
Expand All @@ -78,7 +79,6 @@ public KieServerState load(String serverId) {
}
return kieServerState;
}

};
registry = new KieServerRegistryImpl();
registry.registerStateRepository(dummyKieServerStateRepository);
Expand All @@ -90,7 +90,11 @@ public void testBadRegistered() throws Exception {
final String SERVER_NAME = "server-name";
KieServerEnvironment.setServerId(SERVER_TEMPLATE_ID);

ServerTemplate serverTemplate = buildServerTemplate(SERVER_TEMPLATE_ID, SERVER_NAME, null, KieServerMode.DEVELOPMENT, Collections.singletonList("BPMN"));
ServerTemplate serverTemplate = buildServerTemplate(SERVER_TEMPLATE_ID,
SERVER_NAME,
null,
KieServerMode.DEVELOPMENT,
Collections.singletonList(Capability.PROCESS.name()));
controllerClient.saveServerTemplate(serverTemplate);

ServerTemplateList instanceList = controllerClient.listServerTemplates();
Expand All @@ -102,7 +106,7 @@ public void testBadRegistered() throws Exception {
kieServerInfo.setMode(KieServerMode.PRODUCTION);
kieServerInfo.setName(SERVER_NAME);

KieServerController controller = new DefaultRestControllerImpl(registry);
KieServerController controller = new DefaultRestControllerImpl(registry);
assertThatThrownBy(() -> controller.connect(kieServerInfo)).isInstanceOf(KieControllerNotConnectedException.class);

// Check that kie server is not registered.
Expand All @@ -113,7 +117,6 @@ public void testBadRegistered() throws Exception {
// clear up
controller.disconnect(kieServerInfo);
controllerClient.deleteServerTemplate(SERVER_TEMPLATE_ID);

}

@Test
Expand All @@ -122,7 +125,11 @@ public void testGoodRegistered() throws Exception {
final String SERVER_NAME = "server-name";
KieServerEnvironment.setServerId(SERVER_TEMPLATE_ID);

ServerTemplate serverTemplate = buildServerTemplate(SERVER_TEMPLATE_ID, SERVER_NAME, null, KieServerMode.DEVELOPMENT, Collections.singletonList("BPMN"));
ServerTemplate serverTemplate = buildServerTemplate(SERVER_TEMPLATE_ID,
SERVER_NAME,
null,
KieServerMode.DEVELOPMENT,
Collections.singletonList(Capability.PROCESS.name()));
controllerClient.saveServerTemplate(serverTemplate);

ServerTemplateList instanceList = controllerClient.listServerTemplates();
Expand All @@ -132,7 +139,7 @@ public void testGoodRegistered() throws Exception {
KieServerInfo kieServerInfo = new KieServerInfo(SERVER_TEMPLATE_ID, "1.0.0");
kieServerInfo.setLocation("http://127.0.0.1:20000");
kieServerInfo.setMode(KieServerMode.DEVELOPMENT);
kieServerInfo.setCapabilities(Collections.singletonList("BPMN"));
kieServerInfo.setCapabilities(Collections.singletonList(KieServerConstants.CAPABILITY_BPM));
kieServerInfo.setName(SERVER_NAME);

KieServerRegistry registry = new KieServerRegistryImpl();
Expand All @@ -151,5 +158,4 @@ public void testGoodRegistered() throws Exception {
controller.disconnect(kieServerInfo);
controllerClient.deleteServerTemplate(SERVER_TEMPLATE_ID);
}

}

0 comments on commit 7b2bb48

Please sign in to comment.