Skip to content

Commit

Permalink
JBPM 5236 - EJB Migration Tests and fix of transactions (#540)
Browse files Browse the repository at this point in the history
  • Loading branch information
ibek authored and mswiderski committed Aug 16, 2016
1 parent 954d0c1 commit db6f39d
Show file tree
Hide file tree
Showing 9 changed files with 848 additions and 2 deletions.
Expand Up @@ -109,4 +109,8 @@ public boolean accept(File dir, String name) {
//EJB COMPLIANCE
public static final String THREAD_INFO_PROCESS_ID = "org.jboss.qa.bpms.ThreadInfo";

//MIGRATION
public static final String EVALUATION_PROCESS_ID_V1 = "definition-project.evaluation";
public static final String EVALUATION_PROCESS_ID_V2 = "definition-project.evaluation2";

}
Expand Up @@ -224,6 +224,32 @@ public DeploymentUnit deployEJBComplianceKieJar() {
return deploymentUnit;
}

public DeploymentUnit deployMigrationV1KieJar() {
KieServices ks = KieServices.Factory.get();
ReleaseId releaseId = ks.newReleaseId(KieJar.MIGRATIONV1.groupId, KieJar.MIGRATIONV1.artifactId, KieJar.MIGRATIONV1.version);
List<String> assets = new ArrayList<String>();
assets.add("evaluation1.bpmn2");
deployKieJar(ks, releaseId, assets);

DeploymentUnit deploymentUnit = new KModuleDeploymentUnit(KieJar.MIGRATIONV1.getGroupId(), KieJar.MIGRATIONV1.getArtifactId(), KieJar.MIGRATIONV1.getVersion());
deploymentService.deploy(deploymentUnit);
units.add(deploymentUnit);
return deploymentUnit;
}

public DeploymentUnit deployMigrationV2KieJar() {
KieServices ks = KieServices.Factory.get();
ReleaseId releaseId = ks.newReleaseId(KieJar.MIGRATIONV2.groupId, KieJar.MIGRATIONV2.artifactId, KieJar.MIGRATIONV2.version);
List<String> assets = new ArrayList<String>();
assets.add("evaluation2.bpmn2");
deployKieJar(ks, releaseId, assets);

DeploymentUnit deploymentUnit = new KModuleDeploymentUnit(KieJar.MIGRATIONV2.getGroupId(), KieJar.MIGRATIONV2.getArtifactId(), KieJar.MIGRATIONV2.getVersion());
deploymentService.deploy(deploymentUnit);
units.add(deploymentUnit);
return deploymentUnit;
}

public void undeployDeploymentUnit(DeploymentUnit deploymentUnit) {
deploymentService.undeploy(deploymentUnit);
units.remove(deploymentUnit);
Expand Down Expand Up @@ -335,7 +361,9 @@ public static enum KieJar {
VARIABLE("org.jbpm.test.container", "ejb-services-variable", "1.0-SNAPSHOT"),
SERVICE("org.jbpm.test.container", "ejb-services-service", "1.0-SNAPSHOT"),
TX("org.jbpm.test.container", "ejb-services-tx", "1.0-SNAPSHOT"),
EJBCOMPL("org.jbpm.test.container", "ejb-services-compl", "1.0-SNAPSHOT");
EJBCOMPL("org.jbpm.test.container", "ejb-services-compl", "1.0-SNAPSHOT"),
MIGRATIONV1("org.jbpm.test.container", "ejb-migration", "1.0-SNAPSHOT"),
MIGRATIONV2("org.jbpm.test.container", "ejb-migration", "2.0-SNAPSHOT");

private String groupId;

Expand Down
@@ -0,0 +1,253 @@
/*
* 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.
*
* 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.test.container.test.ejbservices.process;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;

import org.assertj.core.api.Assertions;
import org.jbpm.services.api.admin.MigrationReport;
import org.jbpm.services.ejb.api.admin.ProcessInstanceMigrationServiceEJBLocal;
import org.jbpm.test.container.AbstractRuntimeEJBServicesTest;
import org.jbpm.test.container.groups.EAP;
import org.jbpm.test.container.groups.WAS;
import org.jbpm.test.container.groups.WLS;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.kie.api.task.model.TaskSummary;
import org.kie.internal.query.QueryFilter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Category({ EAP.class, WAS.class, WLS.class })
public class EMigrateProcessTest extends AbstractRuntimeEJBServicesTest {

private static final Logger LOGGER = LoggerFactory.getLogger(EMigrateProcessTest.class);

protected static final String USER_YODA = "yoda";

@EJB
protected ProcessInstanceMigrationServiceEJBLocal migrationService;

protected static String kieJar2;

@Before
@Override
public void deployKieJar() {
if (kieJar == null) {
kieJar = archive.deployMigrationV1KieJar().getIdentifier();
}
if (kieJar2 == null) {
kieJar2 = archive.deployMigrationV2KieJar().getIdentifier();
}
}

@After
@Override
public void cleanup() {
super.cleanup();
kieJar2 = null;
}

@Test
public void testUpgradeProcessInstance() throws Exception {
Long processInstanceId = processService.startProcess(kieJar, EVALUATION_PROCESS_ID_V1);
if (processInstanceId != null) {
archive.getPids().add(processInstanceId);
}

List<TaskSummary> tasks = runtimeDataService.getTasksAssignedAsPotentialOwner(USER_YODA, new QueryFilter(0,
10));
Assertions.assertThat(tasks.size()).isEqualTo(1);

TaskSummary task = tasks.get(0);
Assertions.assertThat(task.getName()).isEqualTo("Evaluate items");
Assertions.assertThat(task.getDeploymentId()).isEqualTo(kieJar);
Assertions.assertThat(task.getProcessId()).isEqualTo(EVALUATION_PROCESS_ID_V1);
Assertions.assertThat(task.getProcessInstanceId()).isEqualTo(processInstanceId);

// migrate process instance to evaluation 2 in container 2
MigrationReport report = migrationService.migrate(kieJar, processInstanceId, kieJar2, EVALUATION_PROCESS_ID_V2);
Assertions.assertThat(report).isNotNull();
Assertions.assertThat(report.isSuccessful()).isTrue();

// it stays in the same task
tasks = runtimeDataService.getTasksAssignedAsPotentialOwner(USER_YODA, new QueryFilter(0, 10));
Assertions.assertThat(tasks.size()).isEqualTo(1);

task = tasks.get(0);
Assertions.assertThat(task.getName()).isEqualTo("Evaluate items");
Assertions.assertThat(task.getDeploymentId()).isEqualTo(kieJar2);
Assertions.assertThat(task.getProcessId()).isEqualTo(EVALUATION_PROCESS_ID_V2);
Assertions.assertThat(task.getProcessInstanceId()).isEqualTo(processInstanceId);

userTaskService.completeAutoProgress(task.getId(), USER_YODA, null);

// but next task should be Approve user task
tasks = runtimeDataService.getTasksAssignedAsPotentialOwner(USER_YODA, new QueryFilter(0, 10));
Assertions.assertThat(tasks.size()).isEqualTo(1);

task = tasks.get(0);
Assertions.assertThat(task.getName()).isEqualTo("Approve");
Assertions.assertThat(task.getDeploymentId()).isEqualTo(kieJar2);
Assertions.assertThat(task.getProcessId()).isEqualTo(EVALUATION_PROCESS_ID_V2);
Assertions.assertThat(task.getProcessInstanceId()).isEqualTo(processInstanceId);

}

@Test
public void testUpgradeProcessInstanceWithNodeMapping() throws Exception {
Long processInstanceId = processService.startProcess(kieJar, EVALUATION_PROCESS_ID_V1);
if (processInstanceId != null) {
archive.getPids().add(processInstanceId);
}

List<TaskSummary> tasks = runtimeDataService.getTasksAssignedAsPotentialOwner(USER_YODA, new QueryFilter(0,
10));
Assertions.assertThat(tasks.size()).isEqualTo(1);

TaskSummary task = tasks.get(0);
Assertions.assertThat(tasks.get(0).getName()).isEqualTo("Evaluate items");
Assertions.assertThat(task.getDeploymentId()).isEqualTo(kieJar);
Assertions.assertThat(task.getProcessId()).isEqualTo(EVALUATION_PROCESS_ID_V1);
Assertions.assertThat(task.getProcessInstanceId()).isEqualTo(processInstanceId);

Map<String, String> nodeMapping = new HashMap<String, String>();
nodeMapping.put("_4E8E7545-FB70-494E-9136-2B9ABE655889", "_56FB3E50-DEDD-415B-94DD-0357C91836B9");
// migrate process instance to evaluation 2 in container 2
MigrationReport report = migrationService.migrate(kieJar, processInstanceId, kieJar2, EVALUATION_PROCESS_ID_V2,
nodeMapping);
Assertions.assertThat(report).isNotNull();
Assertions.assertThat(report.isSuccessful()).isTrue();

// migrated to Approve user task
tasks = runtimeDataService.getTasksAssignedAsPotentialOwner(USER_YODA, new QueryFilter(0, 10));
Assertions.assertThat(tasks.size()).isEqualTo(1);

task = tasks.get(0);
Assertions.assertThat(task.getName()).isEqualTo("Approve");
Assertions.assertThat(task.getDeploymentId()).isEqualTo(kieJar2);
Assertions.assertThat(task.getProcessId()).isEqualTo(EVALUATION_PROCESS_ID_V2);
Assertions.assertThat(task.getProcessInstanceId()).isEqualTo(processInstanceId);

}

@Test
public void testUpgradeProcessInstances() throws Exception {

List<Long> ids = new ArrayList<Long>();

for (int i = 0; i < 5; i++) {
Long processInstanceId = processService.startProcess(kieJar, EVALUATION_PROCESS_ID_V1);
ids.add(processInstanceId);
if (processInstanceId != null) {
archive.getPids().add(processInstanceId);
}
}

List<TaskSummary> tasks = runtimeDataService.getTasksAssignedAsPotentialOwner(USER_YODA, new QueryFilter(0,
10));
Assertions.assertThat(tasks.size()).isEqualTo(5);

for (TaskSummary task : tasks) {
Assertions.assertThat(task.getName()).isEqualTo("Evaluate items");
Assertions.assertThat(task.getDeploymentId()).isEqualTo(kieJar);
Assertions.assertThat(task.getProcessId()).isEqualTo(EVALUATION_PROCESS_ID_V1);
}

// migrate process instance to evaluation 2 in container 2
List<MigrationReport> reports = migrationService.migrate(kieJar, ids, kieJar2, EVALUATION_PROCESS_ID_V2);
Assertions.assertThat(reports).isNotNull();

for (MigrationReport report : reports) {
Assertions.assertThat(report.isSuccessful()).isTrue();
}

// it stays in the same task
tasks = runtimeDataService.getTasksAssignedAsPotentialOwner(USER_YODA, new QueryFilter(0, 10));
Assertions.assertThat(tasks.size()).isEqualTo(5);

for (TaskSummary task : tasks) {
Assertions.assertThat(task.getName()).isEqualTo("Evaluate items");
Assertions.assertThat(task.getDeploymentId()).isEqualTo(kieJar2);
Assertions.assertThat(task.getProcessId()).isEqualTo(EVALUATION_PROCESS_ID_V2);

userTaskService.completeAutoProgress(task.getId(), USER_YODA, null);
}
// but next task should be Approve user task
tasks = runtimeDataService.getTasksAssignedAsPotentialOwner(USER_YODA, new QueryFilter(0, 10));
Assertions.assertThat(tasks.size()).isEqualTo(5);

for (TaskSummary task : tasks) {
Assertions.assertThat(task.getName()).isEqualTo("Approve");
Assertions.assertThat(task.getDeploymentId()).isEqualTo(kieJar2);
Assertions.assertThat(task.getProcessId()).isEqualTo(EVALUATION_PROCESS_ID_V2);
}

}

@Test
public void testUpgradeProcessInstancesWithNodeMapping() throws Exception {

List<Long> ids = new ArrayList<Long>();

for (int i = 0; i < 5; i++) {
Long processInstanceId = processService.startProcess(kieJar, EVALUATION_PROCESS_ID_V1);
ids.add(processInstanceId);
if (processInstanceId != null) {
archive.getPids().add(processInstanceId);
}
}

List<TaskSummary> tasks = runtimeDataService.getTasksAssignedAsPotentialOwner(USER_YODA, new QueryFilter(0,
10));
Assertions.assertThat(tasks.size()).isEqualTo(5);

for (TaskSummary task : tasks) {
Assertions.assertThat(task.getName()).isEqualTo("Evaluate items");
Assertions.assertThat(task.getDeploymentId()).isEqualTo(kieJar);
Assertions.assertThat(task.getProcessId()).isEqualTo(EVALUATION_PROCESS_ID_V1);
}

Map<String, String> nodeMapping = new HashMap<String, String>();
nodeMapping.put("_4E8E7545-FB70-494E-9136-2B9ABE655889", "_56FB3E50-DEDD-415B-94DD-0357C91836B9");
// migrate process instance to evaluation 2 in container 2
List<MigrationReport> reports = migrationService.migrate(kieJar, ids, kieJar2, EVALUATION_PROCESS_ID_V2,
nodeMapping);
Assertions.assertThat(reports).isNotNull();

for (MigrationReport report : reports) {
Assertions.assertThat(report.isSuccessful()).isTrue();
}

// but next task should be Approve user task
tasks = runtimeDataService.getTasksAssignedAsPotentialOwner(USER_YODA, new QueryFilter(0, 10));
Assertions.assertThat(tasks.size()).isEqualTo(5);

for (TaskSummary task : tasks) {
Assertions.assertThat(task.getName()).isEqualTo("Approve");
Assertions.assertThat(task.getDeploymentId()).isEqualTo(kieJar2);
Assertions.assertThat(task.getProcessId()).isEqualTo(EVALUATION_PROCESS_ID_V2);
}
}

}
Expand Up @@ -3,6 +3,7 @@ usersgroups = [
new User('john') : [new Group( "engineering" ), new Group( "admin" ), new Group( "analyst" )],
new User('mary') : [new Group( "engineering" ), new Group( "admin" ), new Group( "analyst" )],
new User('guest') : [new Group( "guest" ), new Group( "analyst" )],
new User('yoda') : [new Group( "HR" )],
new User('Administrator') : [new Group( "Administrators" )],
];
return usersgroups;

0 comments on commit db6f39d

Please sign in to comment.