/** * Copyright 2010 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.process.audit; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Properties; import org.drools.core.io.impl.ClassPathResource; import org.hamcrest.core.AnyOf; import org.hamcrest.core.Is; import org.jbpm.process.instance.impl.demo.SystemOutWorkItemHandler; import org.jbpm.test.util.AbstractBaseTest; import org.kie.api.KieBase; import org.kie.api.io.ResourceType; import org.kie.api.runtime.Environment; import org.kie.api.runtime.KieSession; import org.kie.api.runtime.KieSessionConfiguration; import org.kie.api.runtime.process.ProcessInstance; import org.kie.api.runtime.process.WorkItem; import org.kie.api.runtime.process.WorkItemHandler; import org.kie.api.runtime.process.WorkItemManager; import org.kie.internal.KnowledgeBase; import org.kie.internal.KnowledgeBaseFactory; import org.kie.internal.builder.KnowledgeBuilder; import org.kie.internal.builder.KnowledgeBuilderFactory; import org.kie.internal.persistence.jpa.JPAKnowledgeService; import org.kie.internal.runtime.StatefulKnowledgeSession; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * This class tests the following classes: * <ul> * <li>JPAWorkingMemoryDbLogger</li> * <li>AuditLogService</li> * </ul> */ public abstract class AbstractAuditLogServiceTest extends AbstractBaseTest { private static final Logger logger = LoggerFactory.getLogger(AbstractAuditLogServiceTest.class); public static KnowledgeBase createKnowledgeBase() { KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); kbuilder.add(new ClassPathResource("ruleflow.rf"), ResourceType.DRF); kbuilder.add(new ClassPathResource("ruleflow2.rf"), ResourceType.DRF); kbuilder.add(new ClassPathResource("ruleflow3.rf"), ResourceType.DRF); KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase(); kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); return kbase; } public static StatefulKnowledgeSession createKieSession(KieBase kbase, Environment env) { // create a new session Properties properties = new Properties(); properties.put("drools.processInstanceManagerFactory", "org.jbpm.persistence.processinstance.JPAProcessInstanceManagerFactory"); properties.put("drools.processSignalManagerFactory", "org.jbpm.persistence.processinstance.JPASignalManagerFactory"); KieSessionConfiguration config = KnowledgeBaseFactory.newKnowledgeSessionConfiguration(properties); StatefulKnowledgeSession session = JPAKnowledgeService.newStatefulKnowledgeSession(kbase, config, env); return session; } public static void runTestLogger1(KieSession session, AuditLogService auditLogService) throws Exception { session.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler()); // record the initial count to compare to later List<ProcessInstanceLog> processInstances = auditLogService.findProcessInstances("com.sample.ruleflow"); int initialProcessInstanceSize = processInstances.size(); // start process instance long processInstanceId = session.startProcess("com.sample.ruleflow").getId(); logger.debug("Checking process instances for process 'com.sample.ruleflow'"); processInstances = auditLogService.findProcessInstances("com.sample.ruleflow"); assertEquals(initialProcessInstanceSize + 1, processInstances.size()); ProcessInstanceLog processInstance = processInstances.get(initialProcessInstanceSize); logger.debug( "{} -> {} - {}",processInstance.toString(), processInstance.getStart(), processInstance.getEnd()); assertNotNull(processInstance.getStart()); assertNotNull("ProcessInstanceLog does not contain end date.", processInstance.getEnd()); assertEquals(processInstanceId, processInstance.getProcessInstanceId().longValue()); assertEquals("com.sample.ruleflow", processInstance.getProcessId()); List<NodeInstanceLog> nodeInstances = auditLogService.findNodeInstances(processInstanceId); assertEquals(6, nodeInstances.size()); for (NodeInstanceLog nodeInstance: nodeInstances) { logger.debug(nodeInstance.toString()); assertEquals(processInstanceId, processInstance.getProcessInstanceId().longValue()); assertEquals("com.sample.ruleflow", processInstance.getProcessId()); assertNotNull(nodeInstance.getDate()); } auditLogService.clear(); processInstances = auditLogService.findProcessInstances("com.sample.ruleflow"); assertTrue(processInstances.isEmpty()); } public static void runTestLogger2(KieSession session, AuditLogService auditLogService) { session.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler()); // record the initial count to compare to later List<ProcessInstanceLog> processInstances = auditLogService.findProcessInstances("com.sample.ruleflow"); int initialProcessInstanceSize = processInstances.size(); // start process instance session.startProcess("com.sample.ruleflow"); session.startProcess("com.sample.ruleflow"); logger.debug("Checking process instances for process 'com.sample.ruleflow'"); processInstances = auditLogService.findProcessInstances("com.sample.ruleflow"); assertEquals(initialProcessInstanceSize + 2, processInstances.size()); for (ProcessInstanceLog processInstance: processInstances) { logger.debug("{} -> {} - {}", processInstance.toString(), processInstance.getStart(), processInstance.getEnd()); List<NodeInstanceLog> nodeInstances = auditLogService.findNodeInstances(processInstance.getProcessInstanceId()); for (NodeInstanceLog nodeInstance: nodeInstances) { logger.debug("{} -> {}",nodeInstance.toString(), nodeInstance.getDate()); } assertEquals(6, nodeInstances.size()); } auditLogService.clear(); } public static void runTestLogger3(KieSession session, AuditLogService auditLogService) { session.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler()); // record the initial count to compare to later List<ProcessInstanceLog> processInstances = auditLogService.findProcessInstances("com.sample.ruleflow"); int initialProcessInstanceSize = processInstances.size(); // start process instance long processInstanceId = session.startProcess("com.sample.ruleflow2").getId(); logger.debug("Checking process instances for process 'com.sample.ruleflow2'"); processInstances = auditLogService.findProcessInstances("com.sample.ruleflow2"); assertEquals(initialProcessInstanceSize + 1, processInstances.size()); ProcessInstanceLog processInstance = processInstances.get(initialProcessInstanceSize); logger.debug("{} -> {} - {}", processInstance.toString(), processInstance.getStart(), processInstance.getEnd()); assertNotNull(processInstance.getStart()); assertNotNull("ProcessInstanceLog does not contain end date.", processInstance.getEnd()); assertEquals(processInstanceId, processInstance.getProcessInstanceId().longValue()); assertEquals("com.sample.ruleflow2", processInstance.getProcessId()); List<NodeInstanceLog> nodeInstances = auditLogService.findNodeInstances(processInstanceId); for (NodeInstanceLog nodeInstance: nodeInstances) { logger.debug("{} -> {}", nodeInstance.toString(), nodeInstance.getDate()); assertEquals(processInstanceId, processInstance.getProcessInstanceId().longValue()); assertEquals("com.sample.ruleflow2", processInstance.getProcessId()); assertNotNull(nodeInstance.getDate()); } assertEquals(14, nodeInstances.size()); auditLogService.clear(); } public static void runTestLogger4(KieSession session, AuditLogService auditLogService) throws Exception { final List<Long> workItemIds = new ArrayList<Long>(); session.getWorkItemManager().registerWorkItemHandler("Human Task", new WorkItemHandler() { public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { workItemIds.add(workItem.getId()); } public void abortWorkItem(WorkItem workItem, WorkItemManager manager) { } }); // record the initial count to compare to later List<ProcessInstanceLog> processInstances = auditLogService.findProcessInstances("com.sample.ruleflow"); int initialProcessInstanceSize = processInstances.size(); // start process instance Map<String, Object> params = new HashMap<String, Object>(); List<String> list = new ArrayList<String>(); list.add("One"); list.add("Two"); list.add("Three"); params.put("list", list); long processInstanceId = session.startProcess("com.sample.ruleflow3", params).getId(); // Test findVariableInstancesByName* methods: check for variables (only) in active processes List<VariableInstanceLog> varLogs = auditLogService.findVariableInstancesByName("s", true) ; assertFalse( varLogs.isEmpty() ); assertEquals( 1, varLogs.size() ); for( Long workItemId : workItemIds ) { Map<String, Object> results = new HashMap<String, Object>(); results.put("Result", "ResultValue"); session.getWorkItemManager().completeWorkItem(workItemId, results); } logger.debug("Checking process instances for process 'com.sample.ruleflow3'"); processInstances = auditLogService.findProcessInstances("com.sample.ruleflow3"); assertEquals(initialProcessInstanceSize + 1, processInstances.size()); ProcessInstanceLog processInstance = processInstances.get(initialProcessInstanceSize); logger.debug("{} -> {} - {}", processInstance.toString(), processInstance.getStart(), processInstance.getEnd()); assertNotNull(processInstance.getStart()); assertNotNull("ProcessInstanceLog does not contain end date.", processInstance.getEnd()); assertEquals(processInstanceId, processInstance.getProcessInstanceId().longValue()); assertEquals("com.sample.ruleflow3", processInstance.getProcessId()); List<VariableInstanceLog> variableInstances = auditLogService.findVariableInstances(processInstanceId); assertEquals(11, variableInstances.size()); for (VariableInstanceLog variableInstance: variableInstances) { logger.debug(variableInstance.toString()); assertEquals(processInstanceId, processInstance.getProcessInstanceId().longValue()); assertEquals("com.sample.ruleflow3", processInstance.getProcessId()); assertNotNull(variableInstance.getDate()); } // Test findVariableInstancesByName* methods List<VariableInstanceLog> emptyVarLogs = auditLogService.findVariableInstancesByName("s", true) ; assertTrue( emptyVarLogs.isEmpty()); for( VariableInstanceLog origVarLog : variableInstances ) { varLogs = auditLogService.findVariableInstancesByName(origVarLog.getVariableId(), false) ; for( VariableInstanceLog varLog : varLogs ) { assertEquals( origVarLog.getVariableId(), varLog.getVariableId()); } } emptyVarLogs = auditLogService.findVariableInstancesByNameAndValue("s", "InitialValue", true); assertTrue( emptyVarLogs.isEmpty() ); String varId = "s"; String varValue = "ResultValue"; variableInstances = auditLogService.findVariableInstancesByNameAndValue(varId, varValue, false); assertEquals( 3, variableInstances.size() ); VariableInstanceLog varLog = variableInstances.get(0); assertEquals( varId, varLog.getVariableId() ); assertEquals( varValue, varLog.getValue() ); auditLogService.clear(); processInstances = auditLogService.findProcessInstances("com.sample.ruleflow3"); assertTrue(processInstances.isEmpty()); } public static void runTestLogger4LargeVariable(KieSession session, AuditLogService auditLogService) throws Exception { session.getWorkItemManager().registerWorkItemHandler("Human Task", new WorkItemHandler() { public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { Map<String, Object> results = new HashMap<String, Object>(); results.put("Result", "ResultValue"); manager.completeWorkItem(workItem.getId(), results); } public void abortWorkItem(WorkItem workItem, WorkItemManager manager) { } }); // record the initial count to compare to later List<ProcessInstanceLog> processInstances = auditLogService.findProcessInstances("com.sample.ruleflow3"); int initialProcessInstanceSize = processInstances.size(); // start process instance Map<String, Object> params = new HashMap<String, Object>(); List<String> list = new ArrayList<String>(); list.add("One"); list.add("Two"); String three = ""; for (int i = 0; i < 1024; i++) { three += "*"; } list.add(three); params.put("list", list); long processInstanceId = session.startProcess("com.sample.ruleflow3", params).getId(); logger.debug("Checking process instances for process 'com.sample.ruleflow3'"); processInstances = auditLogService.findProcessInstances("com.sample.ruleflow3"); int expected = initialProcessInstanceSize + 1; assertEquals("[Expected " + expected + " ProcessInstanceLog instances, not " + processInstances.size() + "]", expected, processInstances.size()); ProcessInstanceLog processInstance = processInstances.get(initialProcessInstanceSize); logger.debug("{} -> {} - {}",processInstance.toString(), processInstance.getStart(), processInstance.getEnd()); assertNotNull(processInstance.getStart()); assertNotNull("ProcessInstanceLog does not contain end date.", processInstance.getEnd()); assertEquals(processInstanceId, processInstance.getProcessInstanceId().longValue()); assertEquals("com.sample.ruleflow3", processInstance.getProcessId()); List<VariableInstanceLog> variableInstances = auditLogService.findVariableInstances(processInstanceId); assertEquals(8, variableInstances.size()); for (VariableInstanceLog variableInstance: variableInstances) { logger.debug(variableInstance.toString()); assertEquals(processInstanceId, processInstance.getProcessInstanceId().longValue()); assertEquals("com.sample.ruleflow3", processInstance.getProcessId()); assertNotNull(variableInstance.getDate()); } auditLogService.clear(); processInstances = auditLogService.findProcessInstances("com.sample.ruleflow3"); assertTrue(processInstances.isEmpty()); } public static void runTestLogger5(KieSession session, AuditLogService auditLogService) throws Exception { session.getWorkItemManager().registerWorkItemHandler("Human Task", new SystemOutWorkItemHandler()); // record the initial count to compare to later List<ProcessInstanceLog> processInstances = auditLogService.findProcessInstances("com.sample.ruleflow"); int initialProcessInstanceSize = processInstances.size(); // start process instance long processInstanceId = session.startProcess("com.sample.ruleflow").getId(); logger.debug("Checking process instances for process 'com.sample.ruleflow'"); processInstances = auditLogService.findProcessInstances("com.sample.ruleflow"); assertEquals(initialProcessInstanceSize + 1, processInstances.size()); ProcessInstanceLog processInstance = processInstances.get(initialProcessInstanceSize); logger.debug("{} -> {} - {}", processInstance.toString(), processInstance.getStart(), processInstance.getEnd()); assertNotNull(processInstance.getStart()); assertNotNull(processInstance.getEnd()); assertEquals(processInstanceId, processInstance.getProcessInstanceId().longValue()); assertEquals("com.sample.ruleflow", processInstance.getProcessId()); assertEquals(ProcessInstance.STATE_COMPLETED, processInstance.getStatus().intValue()); List<NodeInstanceLog> nodeInstances = auditLogService.findNodeInstances(processInstanceId); assertEquals(6, nodeInstances.size()); for (NodeInstanceLog nodeInstance: nodeInstances) { logger.debug(nodeInstance.toString()); assertEquals(processInstanceId, processInstance.getProcessInstanceId().longValue()); assertEquals("com.sample.ruleflow", processInstance.getProcessId()); assertNotNull(nodeInstance.getDate()); } auditLogService.clear(); processInstances = auditLogService.findProcessInstances("com.sample.ruleflow"); assertTrue(processInstances.isEmpty()); } public static void runTestLoggerWithCustomVariableLogLength(KieSession session, AuditLogService auditLogService) throws Exception { System.setProperty("org.jbpm.var.log.length", "15"); final List<Long> workItemIds = new ArrayList<Long>(); session.getWorkItemManager().registerWorkItemHandler("Human Task", new WorkItemHandler() { public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { workItemIds.add(workItem.getId()); } public void abortWorkItem(WorkItem workItem, WorkItemManager manager) { } }); // record the initial count to compare to later List<ProcessInstanceLog> processInstances = auditLogService.findProcessInstances("com.sample.ruleflow"); int initialProcessInstanceSize = processInstances.size(); processInstances = auditLogService.findActiveProcessInstances(); int initialActiveProcessInstanceSize = processInstances.size(); // prepare variable value String variableValue = "very short value that should be trimmed by custom variable log length"; // start process instance Map<String, Object> params = new HashMap<String, Object>(); List<String> list = new ArrayList<String>(); list.add("One"); list.add("Two"); list.add("Three"); params.put("list", list); params.put("s", variableValue); long processInstanceId = session.startProcess("com.sample.ruleflow3", params).getId(); int numActiveProcesses = auditLogService.findActiveProcessInstances().size(); assertEquals( "find active processes did not work", initialActiveProcessInstanceSize + 1, numActiveProcesses ); // Test findVariableInstancesByName* methods: check for variables (only) in active processes List<VariableInstanceLog> varLogs = auditLogService.findVariableInstancesByName("s", true) ; assertFalse( varLogs.isEmpty() ); assertEquals( 2, varLogs.size() ); VariableInstanceLog varLogS = varLogs.get(1); assertEquals(variableValue.substring(0, 15), varLogS.getValue()); for( Long workItemId : workItemIds ) { Map<String, Object> results = new HashMap<String, Object>(); results.put("Result", "ResultValue"); session.getWorkItemManager().completeWorkItem(workItemId, results); } logger.debug("Checking process instances for process 'com.sample.ruleflow3'"); processInstances = auditLogService.findProcessInstances("com.sample.ruleflow3"); assertEquals(initialProcessInstanceSize + 1, processInstances.size()); ProcessInstanceLog processInstance = processInstances.get(initialProcessInstanceSize); logger.debug("{} -> {} - {}", processInstance.toString(), processInstance.getStart(), processInstance.getEnd()); assertNotNull(processInstance.getStart()); assertNotNull("ProcessInstanceLog does not contain end date.", processInstance.getEnd()); assertEquals(processInstanceId, processInstance.getProcessInstanceId().longValue()); assertEquals("com.sample.ruleflow3", processInstance.getProcessId()); List<VariableInstanceLog> variableInstances = auditLogService.findVariableInstances(processInstanceId); assertEquals(12, variableInstances.size()); for (VariableInstanceLog variableInstance: variableInstances) { logger.debug(variableInstance.toString()); assertEquals(processInstanceId, processInstance.getProcessInstanceId().longValue()); assertEquals("com.sample.ruleflow3", processInstance.getProcessId()); assertNotNull(variableInstance.getDate()); } // Test findVariableInstancesByName* methods List<VariableInstanceLog> emptyVarLogs = auditLogService.findVariableInstancesByName("s", true) ; assertTrue( emptyVarLogs.isEmpty()); for( VariableInstanceLog origVarLog : variableInstances ) { varLogs = auditLogService.findVariableInstancesByName(origVarLog.getVariableId(), false) ; for( VariableInstanceLog varLog : varLogs ) { assertEquals( origVarLog.getVariableId(), varLog.getVariableId()); } } emptyVarLogs = auditLogService.findVariableInstancesByNameAndValue("s", "InitialValue", true); assertTrue( emptyVarLogs.isEmpty() ); String varId = "s"; String varValue = "ResultValue"; variableInstances = auditLogService.findVariableInstancesByNameAndValue(varId, varValue, false); assertEquals( 3, variableInstances.size() ); VariableInstanceLog varLog = variableInstances.get(0); assertEquals( varId, varLog.getVariableId() ); assertEquals( varValue, varLog.getValue() ); auditLogService.clear(); processInstances = auditLogService.findProcessInstances("com.sample.ruleflow3"); assertTrue(processInstances.isEmpty()); } public static void runTestLogger4WithCustomVariableIndexer(KieSession session, AuditLogService auditLogService) throws Exception { final List<Long> workItemIds = new ArrayList<Long>(); session.getWorkItemManager().registerWorkItemHandler("Human Task", new WorkItemHandler() { public void executeWorkItem(WorkItem workItem, WorkItemManager manager) { workItemIds.add(workItem.getId()); } public void abortWorkItem(WorkItem workItem, WorkItemManager manager) { } }); // record the initial count to compare to later List<ProcessInstanceLog> processInstances = auditLogService.findProcessInstances("com.sample.ruleflow"); int initialProcessInstanceSize = processInstances.size(); // start process instance Map<String, Object> params = new HashMap<String, Object>(); List<String> list = new LinkedList<String>(); list.add("One"); list.add("Two"); list.add("Three"); params.put("list", list); long processInstanceId = session.startProcess("com.sample.ruleflow3", params).getId(); // Test findVariableInstancesByName* methods: check for variables (only) in active processes List<VariableInstanceLog> varLogs = auditLogService.findVariableInstancesByName("s", true) ; assertFalse( varLogs.isEmpty() ); assertEquals( 1, varLogs.size() ); for( Long workItemId : workItemIds ) { Map<String, Object> results = new HashMap<String, Object>(); results.put("Result", "ResultValue"); session.getWorkItemManager().completeWorkItem(workItemId, results); } logger.debug("Checking process instances for process 'com.sample.ruleflow3'"); processInstances = auditLogService.findProcessInstances("com.sample.ruleflow3"); assertEquals(initialProcessInstanceSize + 1, processInstances.size()); ProcessInstanceLog processInstance = processInstances.get(initialProcessInstanceSize); logger.debug("{} -> {} - {}", processInstance.toString(), processInstance.getStart(), processInstance.getEnd()); assertNotNull(processInstance.getStart()); assertNotNull("ProcessInstanceLog does not contain end date.", processInstance.getEnd()); assertEquals(processInstanceId, processInstance.getProcessInstanceId().longValue()); assertEquals("com.sample.ruleflow3", processInstance.getProcessId()); List<VariableInstanceLog> variableInstances = auditLogService.findVariableInstances(processInstanceId); assertEquals(13, variableInstances.size()); for (VariableInstanceLog variableInstance: variableInstances) { logger.debug(variableInstance.toString()); assertEquals(processInstanceId, processInstance.getProcessInstanceId().longValue()); assertEquals("com.sample.ruleflow3", processInstance.getProcessId()); assertNotNull(variableInstance.getDate()); } List<VariableInstanceLog> listVariables = new ArrayList<VariableInstanceLog>(); // collect only those that are related to list process variable for (VariableInstanceLog v : variableInstances) { if (v.getVariableInstanceId().equals("list")) { listVariables.add(v); } } assertEquals(3, listVariables.size()); VariableInstanceLog var = listVariables.get(0); assertEquals("One", var.getValue()); // Various DBs return various empty values. (E.g. Oracle returns null.) assertThat(var.getOldValue(), AnyOf.anyOf(Is.is(""), Is.is((String) null), Is.is(" "))); assertEquals(processInstance.getId(), var.getProcessInstanceId().longValue()); assertEquals(processInstance.getProcessId(), var.getProcessId()); assertEquals("list[0]", var.getVariableId()); assertEquals("list", var.getVariableInstanceId()); var = listVariables.get(1); assertEquals("Two", var.getValue()); assertThat(var.getOldValue(), AnyOf.anyOf(Is.is(""), Is.is((String) null), Is.is(" "))); assertEquals(processInstance.getId(), var.getProcessInstanceId().longValue()); assertEquals(processInstance.getProcessId(), var.getProcessId()); assertEquals("list[1]", var.getVariableId()); assertEquals("list", var.getVariableInstanceId()); var = listVariables.get(2); assertEquals("Three", var.getValue()); assertThat(var.getOldValue(), AnyOf.anyOf(Is.is(""), Is.is((String) null), Is.is(" "))); assertEquals(processInstance.getId(), var.getProcessInstanceId().longValue()); assertEquals(processInstance.getProcessId(), var.getProcessId()); assertEquals("list[2]", var.getVariableId()); assertEquals("list", var.getVariableInstanceId()); // Test findVariableInstancesByName* methods List<VariableInstanceLog> emptyVarLogs = auditLogService.findVariableInstancesByName("s", true) ; assertTrue( emptyVarLogs.isEmpty()); for( VariableInstanceLog origVarLog : variableInstances ) { varLogs = auditLogService.findVariableInstancesByName(origVarLog.getVariableId(), false) ; for( VariableInstanceLog varLog : varLogs ) { assertEquals( origVarLog.getVariableId(), varLog.getVariableId()); } } emptyVarLogs = auditLogService.findVariableInstancesByNameAndValue("s", "InitialValue", true); assertTrue( emptyVarLogs.isEmpty() ); String varId = "s"; String varValue = "ResultValue"; variableInstances = auditLogService.findVariableInstancesByNameAndValue(varId, varValue, false); assertEquals( 3, variableInstances.size() ); VariableInstanceLog varLog = variableInstances.get(0); assertEquals( varId, varLog.getVariableId() ); assertEquals( varValue, varLog.getValue() ); auditLogService.clear(); processInstances = auditLogService.findProcessInstances("com.sample.ruleflow3"); assertTrue(processInstances.isEmpty()); } }