/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this 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.activiti.management.jmx.mbeans;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.List;
import javax.management.JMException;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanInfo;
import javax.management.MBeanOperationInfo;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.modelmbean.ModelMBean;
import org.activiti.engine.ProcessEngineConfiguration;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.impl.persistence.entity.DeploymentEntity;
import org.activiti.engine.impl.persistence.entity.ProcessDefinitionEntity;
import org.activiti.engine.repository.Deployment;
import org.activiti.engine.repository.DeploymentBuilder;
import org.activiti.engine.repository.DeploymentQuery;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.repository.ProcessDefinitionQuery;
import org.activiti.management.jmx.DefaultManagementMBeanAssembler;
import org.activiti.management.jmx.ManagementMBeanAssembler;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
/**
* @author Saeid Mirzaei
*/
public class ProcessDefinitionsTest {
protected ProcessDefinitionsMBean processDefinitionsMBean;
@Mock
protected ProcessEngineConfiguration processEngineConfiguration;
@Mock
protected RepositoryService repositoryService;
@Mock
protected ProcessDefinitionQuery processDefinitionQuery;
@Mock
protected DeploymentQuery deploymentQuery;
@Mock
protected DeploymentBuilder deploymentBuilder;
protected ManagementMBeanAssembler assembler = new DefaultManagementMBeanAssembler();
@Before
public void initMocks() throws MalformedObjectNameException {
MockitoAnnotations.initMocks(this);
when(processEngineConfiguration.getRepositoryService()).thenReturn(repositoryService);
processDefinitionsMBean = new ProcessDefinitionsMBean(processEngineConfiguration);
}
@Test
public void testGetProcessDefinitions() {
when(repositoryService.createProcessDefinitionQuery()).thenReturn(processDefinitionQuery);
List<ProcessDefinition> processDefinitionList = new ArrayList<ProcessDefinition>();
ProcessDefinitionEntity pd = new ProcessDefinitionEntity();
pd.setId("testId");
pd.setName("testName");
pd.setVersion(175);
pd.setSuspensionState(1);
pd.setDescription("testDescription");
processDefinitionList.add(pd);
when(processDefinitionQuery.list()).thenReturn(processDefinitionList);
List<List<String>> result = processDefinitionsMBean.getProcessDefinitions();
assertNotNull(result);
assertEquals(1, result.size());
assertEquals(5, result.get(0).size());
assertEquals("testId", result.get(0).get(0));
assertEquals("testName", result.get(0).get(1));
assertEquals("175", result.get(0).get(2));
assertEquals("false", result.get(0).get(3));
assertEquals("testDescription", result.get(0).get(4));
pd.setSuspensionState(2);
result = processDefinitionsMBean.getProcessDefinitions();
assertEquals("true", result.get(0).get(3));
}
@Test
public void testDeployments() {
when(repositoryService.createDeploymentQuery()).thenReturn(deploymentQuery);
DeploymentEntity deployment = new DeploymentEntity();
List<Deployment> deploymentList = new ArrayList<Deployment>();
deployment.setId("testDeploymentId");
deployment.setName("testDeploymentName");
deployment.setTenantId("tenantId");
deploymentList.add(deployment);
when(deploymentQuery.list()).thenReturn(deploymentList);
List<List<String>> result = processDefinitionsMBean.getDeployments();
assertNotNull(result);
assertEquals(1, result.size());
assertEquals(3, result.get(0).size());
assertEquals("testDeploymentId", result.get(0).get(0));
assertEquals("testDeploymentName", result.get(0).get(1));
assertEquals("tenantId", result.get(0).get(2));
}
@Test
public void testDeleteDeployment() {
processDefinitionsMBean.deleteDeployment("id");
verify(repositoryService).deleteDeployment("id");
}
@Test
public void testSuspendProcessDefinitionById() {
processDefinitionsMBean.suspendProcessDefinitionById("id");
verify(repositoryService).suspendProcessDefinitionById("id");
}
@Test
public void testActivatedProcessDefinitionById() {
processDefinitionsMBean.activatedProcessDefinitionById("id");
verify(repositoryService).activateProcessDefinitionById("id");
}
@Test
public void testSuspendProcessDefinitionByKey() {
processDefinitionsMBean.suspendProcessDefinitionByKey("id");
verify(repositoryService).suspendProcessDefinitionByKey("id");
}
@Test
public void testActivatedProcessDefinitionByKey() {
processDefinitionsMBean.activatedProcessDefinitionByKey("id");
verify(repositoryService).activateProcessDefinitionByKey("id");
}
@Test
public void testAnnotations() throws MalformedObjectNameException, JMException {
ModelMBean modelBean = assembler.assemble(processDefinitionsMBean, new ObjectName("domain", "key", "value"));
assertNotNull(modelBean);
MBeanInfo beanInfo = modelBean.getMBeanInfo();
assertNotNull(beanInfo);
assertNotNull(beanInfo.getOperations());
assertEquals(9, beanInfo.getOperations().length);
int counter = 0;
for (MBeanOperationInfo op : beanInfo.getOperations()) {
if (op.getName().equals("deleteDeployment")) {
counter++;
assertEquals("delete deployment", op.getDescription());
assertEquals("void", op.getReturnType());
assertEquals(1, op.getSignature().length);
assertEquals("java.lang.String", op.getSignature()[0].getType());
} else if (op.getName().equals("suspendProcessDefinitionById")) {
counter++;
assertEquals("Suspend given process ID", op.getDescription());
assertEquals("void", op.getReturnType());
assertEquals(1, op.getSignature().length);
assertEquals("java.lang.String", op.getSignature()[0].getType());
} else if (op.getName().equals("activatedProcessDefinitionById")) {
counter++;
assertEquals("Activate given process ID", op.getDescription());
assertEquals("void", op.getReturnType());
assertEquals(1, op.getSignature().length);
assertEquals("java.lang.String", op.getSignature()[0].getType());
} else if (op.getName().equals("suspendProcessDefinitionByKey")) {
counter++;
assertEquals("Suspend given process ID", op.getDescription());
assertEquals("void", op.getReturnType());
assertEquals(1, op.getSignature().length);
assertEquals("java.lang.String", op.getSignature()[0].getType());
} else if (op.getName().equals("activatedProcessDefinitionByKey")) {
counter++;
assertEquals("Activate given process ID", op.getDescription());
assertEquals("void", op.getReturnType());
assertEquals(1, op.getSignature().length);
assertEquals("java.lang.String", op.getSignature()[0].getType());
} else if (op.getName().equals("deployProcessDefinition")) {
counter++;
assertEquals("Deploy Process Definition", op.getDescription());
assertEquals("void", op.getReturnType());
assertEquals(2, op.getSignature().length);
assertEquals("java.lang.String", op.getSignature()[0].getType());
assertEquals("java.lang.String", op.getSignature()[1].getType());
}
}
assertEquals(6, counter);
// check attributes
assertNotNull(beanInfo.getAttributes());
assertEquals(2, beanInfo.getAttributes().length);
counter = 0;
for (MBeanAttributeInfo attr : beanInfo.getAttributes()) {
if (attr.getName().equals("ProcessDefinitions")) {
counter++;
assertEquals("List of Process definitions", attr.getDescription());
assertEquals("java.util.List", attr.getType());
} else if (attr.getName().equals("Deployments")) {
counter++;
assertEquals("List of deployed Processes", attr.getDescription());
assertEquals("java.util.List", attr.getType());
}
}
assertEquals(2, counter);
}
}