/* * Copyright 2016 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. * You may obtain a copy of the License at * * 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.kie.services.test; import java.io.File; import java.io.FileOutputStream; import java.util.Collection; import java.util.Collections; import java.util.List; import org.drools.compiler.kie.builder.impl.InternalKieModule; import org.jbpm.kie.services.impl.KModuleDeploymentUnit; import org.jbpm.kie.test.util.AbstractKieServicesBaseTest; import org.jbpm.runtime.manager.impl.deploy.DeploymentDescriptorImpl; import org.jbpm.services.api.model.DeployedUnit; import org.jbpm.services.api.model.ProcessDefinition; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.kie.api.KieServices; import org.kie.api.builder.ReleaseId; import org.kie.api.runtime.query.QueryContext; import org.kie.internal.runtime.conf.DeploymentDescriptor; import org.kie.internal.runtime.conf.NamedObjectModel; import static org.junit.Assert.*; import static org.kie.scanner.MavenRepository.*; public class IdentityProviderAwareProcessListenerTest extends AbstractKieServicesBaseTest { private KModuleDeploymentUnit deploymentUnit; @Before public void init() { configureServices(); final KieServices ks = KieServices.Factory.get(); ReleaseId releaseId = ks.newReleaseId(GROUP_ID, ARTIFACT_ID, VERSION); final List<String> processes = Collections.singletonList("repo/processes/general/humanTask.bpmn"); final InternalKieModule kJar1 = createKieJar(ks, releaseId, processes); final File pom = new File("target/kmodule", "pom.xml"); pom.getParentFile().mkdir(); try (FileOutputStream fs = new FileOutputStream(pom)) { fs.write(getPom(releaseId).getBytes()); } catch (Exception e) { e.printStackTrace(); } getMavenRepository().deployArtifact(releaseId, kJar1, pom); deploymentUnit = new KModuleDeploymentUnit(GROUP_ID, ARTIFACT_ID, VERSION); final DeploymentDescriptor descriptor = new DeploymentDescriptorImpl(); descriptor.getBuilder().addEventListener(new NamedObjectModel( "mvel", "processIdentity", "new org.jbpm.kie.services.impl.IdentityProviderAwareProcessListener(ksession)" )); deploymentUnit.setDeploymentDescriptor(descriptor); deploymentService.deploy(deploymentUnit); final DeployedUnit deployed = deploymentService.getDeployedUnit(deploymentUnit.getIdentifier()); assertNotNull(deployed); assertNotNull(deployed.getDeploymentUnit()); assertNotNull(runtimeDataService); Collection<ProcessDefinition> processDefinitions = runtimeDataService.getProcesses(new QueryContext()); assertNotNull(processDefinitions); assertEquals(1, processDefinitions.size()); } @After public void cleanup() { cleanupSingletonSessionId(); if (deploymentUnit != null) { deploymentService.undeploy(deploymentUnit); } close(); } @Test public void testStartProcessWithIdentityListener() { assertNotNull(processService); final String userId = "userId"; identityProvider.setName(userId); long processInstanceId = processService.startProcess(deploymentUnit.getIdentifier(), "org.jbpm.writedocument"); assertNotNull(processInstanceId); try { final String initiator = (String) processService.getProcessInstanceVariable(processInstanceId, "initiator"); assertEquals(userId, initiator); } finally { processService.abortProcessInstance(processInstanceId); } } }