/* * Copyright 2015 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.jbpm.runtime.manager.impl.deploy; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.junit.Test; import org.kie.internal.runtime.conf.AuditMode; import org.kie.internal.runtime.conf.DeploymentDescriptor; import org.kie.internal.runtime.conf.NamedObjectModel; import org.kie.internal.runtime.conf.ObjectModel; import org.kie.internal.runtime.conf.PersistenceMode; import org.kie.internal.runtime.conf.RuntimeStrategy; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class DeploymentDescriptorTest { private static final Logger logger = LoggerFactory.getLogger(DeploymentDescriptorTest.class); @Test public void testWriteDeploymentDescriptorXml() { DeploymentDescriptor descriptor = new DeploymentDescriptorImpl("org.jbpm.domain"); descriptor.getBuilder() .addMarshalingStrategy(new ObjectModel("org.jbpm.testCustomStrategy", new Object[]{ new ObjectModel("java.lang.String", new Object[]{"param1"}), "param2"})) .addRequiredRole("experts"); String deploymentDescriptorXml = descriptor.toXml(); assertNotNull(deploymentDescriptorXml); logger.info(deploymentDescriptorXml); ByteArrayInputStream stream = new ByteArrayInputStream(deploymentDescriptorXml.getBytes()); DeploymentDescriptor fromXml = DeploymentDescriptorIO.fromXml(stream); assertNotNull(fromXml); assertEquals("org.jbpm.domain", fromXml.getPersistenceUnit()); assertEquals("org.jbpm.domain", fromXml.getAuditPersistenceUnit()); assertEquals(AuditMode.JPA, fromXml.getAuditMode()); assertEquals(PersistenceMode.JPA, fromXml.getPersistenceMode()); assertEquals(RuntimeStrategy.SINGLETON, fromXml.getRuntimeStrategy()); assertEquals(1, fromXml.getMarshallingStrategies().size()); assertEquals(0, fromXml.getConfiguration().size()); assertEquals(0, fromXml.getEnvironmentEntries().size()); assertEquals(0, fromXml.getEventListeners().size()); assertEquals(0, fromXml.getGlobals().size()); assertEquals(0, fromXml.getTaskEventListeners().size()); assertEquals(0, fromXml.getWorkItemHandlers().size()); assertEquals(1, fromXml.getRequiredRoles().size()); } @Test public void testReadDeploymentDescriptorFromXml() throws Exception { InputStream input = this.getClass().getResourceAsStream("/deployment/deployment-descriptor-defaults.xml"); DeploymentDescriptor descriptor = DeploymentDescriptorIO.fromXml(input); assertNotNull(descriptor); assertEquals("org.jbpm.domain", descriptor.getPersistenceUnit()); assertEquals("org.jbpm.domain", descriptor.getAuditPersistenceUnit()); assertEquals(AuditMode.JPA, descriptor.getAuditMode()); assertEquals(PersistenceMode.JPA, descriptor.getPersistenceMode()); assertEquals(RuntimeStrategy.SINGLETON, descriptor.getRuntimeStrategy()); assertEquals(0, descriptor.getMarshallingStrategies().size()); assertEquals(0, descriptor.getConfiguration().size()); assertEquals(0, descriptor.getEnvironmentEntries().size()); assertEquals(0, descriptor.getEventListeners().size()); assertEquals(0, descriptor.getGlobals().size()); assertEquals(0, descriptor.getTaskEventListeners().size()); assertEquals(0, descriptor.getWorkItemHandlers().size()); assertEquals(0, descriptor.getRequiredRoles().size()); } @Test public void testReadDeploymentDescriptorMSFromXml() throws Exception { InputStream input = this.getClass().getResourceAsStream("/deployment/deployment-descriptor-defaults-and-ms.xml"); DeploymentDescriptor descriptor = DeploymentDescriptorIO.fromXml(input); assertNotNull(descriptor); assertEquals("org.jbpm.domain", descriptor.getPersistenceUnit()); assertEquals("org.jbpm.domain", descriptor.getAuditPersistenceUnit()); assertEquals(AuditMode.JPA, descriptor.getAuditMode()); assertEquals(PersistenceMode.JPA, descriptor.getPersistenceMode()); assertEquals(RuntimeStrategy.SINGLETON, descriptor.getRuntimeStrategy()); assertEquals(1, descriptor.getMarshallingStrategies().size()); assertEquals(0, descriptor.getConfiguration().size()); assertEquals(0, descriptor.getEnvironmentEntries().size()); assertEquals(0, descriptor.getEventListeners().size()); assertEquals(0, descriptor.getGlobals().size()); assertEquals(0, descriptor.getTaskEventListeners().size()); assertEquals(0, descriptor.getWorkItemHandlers().size()); assertEquals(1, descriptor.getRequiredRoles().size()); } @Test public void testReadPartialDeploymentDescriptorFromXml() throws Exception { InputStream input = this.getClass().getResourceAsStream("/deployment/partial-deployment-descriptor.xml"); DeploymentDescriptor descriptor = DeploymentDescriptorIO.fromXml(input); assertNotNull(descriptor); assertEquals("org.jbpm.domain", descriptor.getPersistenceUnit()); assertEquals("org.jbpm.domain", descriptor.getAuditPersistenceUnit()); assertEquals(AuditMode.JPA, descriptor.getAuditMode()); assertEquals(PersistenceMode.JPA, descriptor.getPersistenceMode()); assertEquals(RuntimeStrategy.PER_PROCESS_INSTANCE, descriptor.getRuntimeStrategy()); assertEquals(0, descriptor.getMarshallingStrategies().size()); assertEquals(0, descriptor.getConfiguration().size()); assertEquals(0, descriptor.getEnvironmentEntries().size()); assertEquals(0, descriptor.getEventListeners().size()); assertEquals(0, descriptor.getGlobals().size()); assertEquals(0, descriptor.getTaskEventListeners().size()); assertEquals(0, descriptor.getWorkItemHandlers().size()); assertEquals(0, descriptor.getRequiredRoles().size()); } @Test public void testCreateDeploymentDescriptorWithSetters() { DeploymentDescriptorImpl descriptor = new DeploymentDescriptorImpl("org.jbpm.domain"); descriptor.setAuditMode(AuditMode.JMS); descriptor.setEnvironmentEntries(null); List<ObjectModel> marshallingStrategies = new ArrayList<ObjectModel>(); marshallingStrategies.add(new ObjectModel("org.jbpm.testCustomStrategy", new Object[]{ new ObjectModel("java.lang.String", new Object[]{"param1"}), "param2"})); descriptor.setMarshallingStrategies(marshallingStrategies); List<String> roles = new ArrayList<String>(); roles.add("experts"); descriptor.setRequiredRoles(roles); assertNotNull(descriptor); assertEquals("org.jbpm.domain", descriptor.getPersistenceUnit()); assertEquals("org.jbpm.domain", descriptor.getAuditPersistenceUnit()); assertEquals(AuditMode.JMS, descriptor.getAuditMode()); assertEquals(PersistenceMode.JPA, descriptor.getPersistenceMode()); assertEquals(RuntimeStrategy.SINGLETON, descriptor.getRuntimeStrategy()); assertEquals(1, descriptor.getMarshallingStrategies().size()); assertEquals(0, descriptor.getConfiguration().size()); assertEquals(0, descriptor.getEnvironmentEntries().size()); assertEquals(0, descriptor.getEventListeners().size()); assertEquals(0, descriptor.getGlobals().size()); assertEquals(0, descriptor.getTaskEventListeners().size()); assertEquals(0, descriptor.getWorkItemHandlers().size()); assertEquals(1, descriptor.getRequiredRoles().size()); } @Test public void testPrintDescriptor() { DeploymentDescriptor descriptor = new DeploymentDescriptorImpl("org.jbpm.domain"); descriptor.getBuilder() .addWorkItemHandler(new NamedObjectModel("mvel", "Log", "new org.jbpm.process.instance.impl.demo.SystemOutWorkItemHandler()")) .addWorkItemHandler(new NamedObjectModel("mvel", "WebService", "new org.jbpm.process.workitem.webservice.WebServiceWorkItemHandler(ksession)")) .addWorkItemHandler(new NamedObjectModel("mvel", "Rest", "new org.jbpm.process.workitem.rest.RESTWorkItemHandler()")) .addWorkItemHandler(new NamedObjectModel("mvel", "Service Task", "new org.jbpm.process.workitem.bpmn2.ServiceTaskHandler(ksession)")); logger.debug(descriptor.toXml()); } @Test public void testWriteDeploymentDescriptorXmlWithDuplicateNamedObjects() { DeploymentDescriptor descriptor = new DeploymentDescriptorImpl("org.jbpm.domain"); descriptor.getBuilder() .addWorkItemHandler(new NamedObjectModel("mvel", "Log", "new org.jbpm.process.instance.impl.demo.SystemOutWorkItemHandler()")) .addWorkItemHandler(new NamedObjectModel("mvel", "Log", "new org.jbpm.process.instance.impl.demo.CustomSystemOutWorkItemHandler()")) .addRequiredRole("experts"); String deploymentDescriptorXml = descriptor.toXml(); assertNotNull(deploymentDescriptorXml); logger.info(deploymentDescriptorXml); ByteArrayInputStream stream = new ByteArrayInputStream(deploymentDescriptorXml.getBytes()); DeploymentDescriptor fromXml = DeploymentDescriptorIO.fromXml(stream); assertNotNull(fromXml); assertEquals("org.jbpm.domain", fromXml.getPersistenceUnit()); assertEquals("org.jbpm.domain", fromXml.getAuditPersistenceUnit()); assertEquals(AuditMode.JPA, fromXml.getAuditMode()); assertEquals(PersistenceMode.JPA, fromXml.getPersistenceMode()); assertEquals(RuntimeStrategy.SINGLETON, fromXml.getRuntimeStrategy()); assertEquals(0, fromXml.getMarshallingStrategies().size()); assertEquals(0, fromXml.getConfiguration().size()); assertEquals(0, fromXml.getEnvironmentEntries().size()); assertEquals(0, fromXml.getEventListeners().size()); assertEquals(0, fromXml.getGlobals().size()); assertEquals(0, fromXml.getTaskEventListeners().size()); assertEquals(1, fromXml.getWorkItemHandlers().size()); assertEquals(1, fromXml.getRequiredRoles().size()); } @Test public void testCreateDeploymentDescriptorWithPrefixedRoles() { DeploymentDescriptorImpl descriptor = new DeploymentDescriptorImpl("org.jbpm.domain"); descriptor.setAuditMode(AuditMode.JMS); descriptor.setEnvironmentEntries(null); List<ObjectModel> marshallingStrategies = new ArrayList<ObjectModel>(); marshallingStrategies.add(new ObjectModel("org.jbpm.testCustomStrategy", new Object[]{ new ObjectModel("java.lang.String", new Object[]{"param1"}), "param2"})); descriptor.setMarshallingStrategies(marshallingStrategies); List<String> roles = new ArrayList<String>(); roles.add("view:managers"); roles.add("execute:experts"); roles.add("all:everyone"); roles.add("employees"); descriptor.setRequiredRoles(roles); assertNotNull(descriptor); assertEquals("org.jbpm.domain", descriptor.getPersistenceUnit()); assertEquals("org.jbpm.domain", descriptor.getAuditPersistenceUnit()); assertEquals(AuditMode.JMS, descriptor.getAuditMode()); assertEquals(PersistenceMode.JPA, descriptor.getPersistenceMode()); assertEquals(RuntimeStrategy.SINGLETON, descriptor.getRuntimeStrategy()); assertEquals(1, descriptor.getMarshallingStrategies().size()); assertEquals(0, descriptor.getConfiguration().size()); assertEquals(0, descriptor.getEnvironmentEntries().size()); assertEquals(0, descriptor.getEventListeners().size()); assertEquals(0, descriptor.getGlobals().size()); assertEquals(0, descriptor.getTaskEventListeners().size()); assertEquals(0, descriptor.getWorkItemHandlers().size()); assertEquals(4, descriptor.getRequiredRoles().size()); List<String> toVerify = descriptor.getRequiredRoles(); assertEquals(4, toVerify.size()); assertTrue(toVerify.contains("view:managers")); assertTrue(toVerify.contains("execute:experts")); assertTrue(toVerify.contains("all:everyone")); assertTrue(toVerify.contains("employees")); toVerify = descriptor.getRequiredRoles(DeploymentDescriptor.TYPE_ALL); assertEquals(4, toVerify.size()); assertTrue(toVerify.contains("managers")); assertTrue(toVerify.contains("experts")); assertTrue(toVerify.contains("everyone")); assertTrue(toVerify.contains("employees")); toVerify = descriptor.getRequiredRoles(DeploymentDescriptor.TYPE_EXECUTE); assertEquals(2, toVerify.size()); assertTrue(toVerify.contains("experts")); assertTrue(toVerify.contains("employees")); toVerify = descriptor.getRequiredRoles(DeploymentDescriptor.TYPE_VIEW); assertEquals(2, toVerify.size()); assertTrue(toVerify.contains("managers")); assertTrue(toVerify.contains("employees")); } @Test public void testWriteDeploymentDescriptorXmlWithTransientElements() { DeploymentDescriptor descriptor = new DeploymentDescriptorImpl("org.jbpm.domain"); descriptor.getBuilder() .addMarshalingStrategy(new TransientObjectModel("org.jbpm.testCustomStrategy", new Object[]{ new ObjectModel("java.lang.String", new Object[]{"param1"}), "param2"})) .addWorkItemHandler(new TransientNamedObjectModel("mvel", "Log", "new org.jbpm.process.instance.impl.demo.SystemOutWorkItemHandler()")) .addRequiredRole("experts"); String deploymentDescriptorXml = descriptor.toXml(); assertNotNull(deploymentDescriptorXml); logger.info(deploymentDescriptorXml); ByteArrayInputStream stream = new ByteArrayInputStream(deploymentDescriptorXml.getBytes()); DeploymentDescriptor fromXml = DeploymentDescriptorIO.fromXml(stream); assertNotNull(fromXml); assertEquals("org.jbpm.domain", fromXml.getPersistenceUnit()); assertEquals("org.jbpm.domain", fromXml.getAuditPersistenceUnit()); assertEquals(AuditMode.JPA, fromXml.getAuditMode()); assertEquals(PersistenceMode.JPA, fromXml.getPersistenceMode()); assertEquals(RuntimeStrategy.SINGLETON, fromXml.getRuntimeStrategy()); assertEquals(0, fromXml.getMarshallingStrategies().size()); assertEquals(0, fromXml.getConfiguration().size()); assertEquals(0, fromXml.getEnvironmentEntries().size()); assertEquals(0, fromXml.getEventListeners().size()); assertEquals(0, fromXml.getGlobals().size()); assertEquals(0, fromXml.getTaskEventListeners().size()); assertEquals(0, fromXml.getWorkItemHandlers().size()); assertEquals(1, fromXml.getRequiredRoles().size()); } @Test public void testEmptyDeploymentDescriptor() { DeploymentDescriptorImpl descriptor = new DeploymentDescriptorImpl("org.jbpm.domain"); descriptor.getBuilder() .addMarshalingStrategy(new ObjectModel("org.jbpm.testCustomStrategy", new Object[]{ new ObjectModel("java.lang.String", new Object[]{"param1"}), "param2"})) .addRequiredRole("experts"); assertFalse(descriptor.isEmpty()); InputStream input = this.getClass().getResourceAsStream("/deployment/empty-descriptor.xml"); DeploymentDescriptor fromXml = DeploymentDescriptorIO.fromXml(input); assertNotNull(fromXml); assertTrue(((DeploymentDescriptorImpl)fromXml).isEmpty()); assertNull(fromXml.getPersistenceUnit()); assertNull(fromXml.getAuditPersistenceUnit()); assertEquals(AuditMode.JPA, fromXml.getAuditMode()); assertEquals(PersistenceMode.JPA, fromXml.getPersistenceMode()); assertEquals(RuntimeStrategy.SINGLETON, fromXml.getRuntimeStrategy()); assertEquals(0, fromXml.getMarshallingStrategies().size()); assertEquals(0, fromXml.getConfiguration().size()); assertEquals(0, fromXml.getEnvironmentEntries().size()); assertEquals(0, fromXml.getEventListeners().size()); assertEquals(0, fromXml.getGlobals().size()); assertEquals(0, fromXml.getTaskEventListeners().size()); assertEquals(0, fromXml.getWorkItemHandlers().size()); assertEquals(0, fromXml.getRequiredRoles().size()); } }