/** * Licensed to the Austrian Association for Software Tool Integration (AASTI) * under one or more contributor license agreements. See the NOTICE file * distributed with this work for additional information regarding copyright * ownership. The AASTI licenses this file to you 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.openengsb.core.workflow.drools; import static org.mockito.Mockito.mock; import java.util.HashMap; import java.util.UUID; import org.junit.Before; import org.openengsb.core.api.Domain; import org.openengsb.core.api.EventSupport; import org.openengsb.core.api.context.ContextHolder; import org.openengsb.core.persistence.internal.DefaultPersistenceManager; import org.openengsb.core.test.AbstractOsgiMockServiceTest; import org.openengsb.core.util.DefaultOsgiUtilsService; import org.openengsb.core.workflow.api.TaskboxService; import org.openengsb.core.workflow.api.TaskboxServiceInternal; import org.openengsb.core.workflow.api.WorkflowService; import org.openengsb.core.workflow.api.model.RuleBaseElementId; import org.openengsb.core.workflow.api.model.RuleBaseElementType; import org.openengsb.core.workflow.drools.internal.DroolsRuleManager; import org.openengsb.core.workflow.drools.internal.TaskboxServiceImpl; import org.openengsb.core.workflow.drools.internal.TaskboxServiceInternalImpl; import org.openengsb.core.workflow.drools.internal.WorkflowServiceImpl; import org.openengsb.core.workflow.drools.util.RuleUtil; import org.openengsb.domain.auditing.AuditingDomain; public abstract class AbstractWorkflowServiceTest extends AbstractOsgiMockServiceTest { protected WorkflowServiceImpl service; protected DroolsRuleManager manager; protected DummyService myservice; protected HashMap<String, Domain> domains; protected TaskboxService taskbox; protected TaskboxServiceInternal taskboxInternal; protected AuditingDomain auditingMock; @Before public void setUp() throws Exception { OsgiHelper.setUtilsService(new DefaultOsgiUtilsService(bundleContext)); setupRulemanager(); auditingMock = mock(AuditingDomain.class); registerServiceAtLocation(auditingMock, "auditing-root", AuditingDomain.class); service = new WorkflowServiceImpl(); service.setAuditingConnectors(makeServiceList(AuditingDomain.class)); service.setEventReceivers(makeServiceList(EventSupport.class)); setupTaskbox(); service.setRulemanager(manager); service.setTaskbox(taskbox); ContextHolder.get().setCurrentContextId("42"); service.setBundleContext(bundleContext); registerServiceViaId(service, "workflowService", WorkflowService.class); setupDomainsAndOtherServices(); } private void setupTaskbox() { DefaultPersistenceManager persistenceManager = new DefaultPersistenceManager(); persistenceManager.setPersistenceRootDir("target/" + UUID.randomUUID().toString()); TaskboxServiceImpl taskboxServiceImpl = new TaskboxServiceImpl(); taskboxServiceImpl.setPersistenceManager(persistenceManager); taskboxServiceImpl.setBundleContext(bundleContext); taskboxServiceImpl.init(); taskboxServiceImpl.setWorkflowService(service); TaskboxServiceInternalImpl taskboxInternalImpl = new TaskboxServiceInternalImpl(); taskboxInternalImpl.setBundleContext(bundleContext); taskboxInternalImpl.setPersistenceManager(persistenceManager); taskboxInternalImpl.init(); taskbox = taskboxServiceImpl; taskboxInternal = taskboxInternalImpl; } private void setupRulemanager() throws Exception { manager = RuleUtil.getRuleManager(); RuleUtil.addImportsAndGlobals(manager); RuleUtil.addHello1Rule(manager); RuleUtil.addTestFlows(manager); manager.add(new RuleBaseElementId(RuleBaseElementType.Rule, "logtest"), "when\n Event ( name == \"test-context\")\n then \n example.doSomething(\"42\");"); } private void setupDomainsAndOtherServices() throws Exception { createDomainMocks(); myservice = mock(DummyService.class); registerServiceAtLocation(myservice, "myservice", DummyService.class); } private void createDomainMocks() throws Exception { domains = new HashMap<String, Domain>(); registerDummyConnector(DummyExampleDomain.class, "example"); registerDummyConnector(DummyNotificationDomain.class, "notification"); registerDummyConnector(DummyBuild.class, "build"); registerDummyConnector(DummyDeploy.class, "deploy"); registerDummyConnector(DummyReport.class, "report"); registerDummyConnector(DummyTest.class, "test"); } @SuppressWarnings("unchecked") protected <T extends Domain> T registerDummyConnector(Class<T> domainClass, String name) throws Exception { Domain mock2 = mock(domainClass); registerServiceAtLocation(mock2, name, Domain.class, domainClass); domains.put(name, mock2); return (T) mock2; } }