/* * Copyright 2015 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.kie.server.integrationtests.shared.basetests; import java.io.File; import java.io.FilenameFilter; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import javax.naming.Context; import org.junit.AfterClass; import org.junit.Assert; import org.junit.Assume; import org.junit.Before; import org.junit.BeforeClass; import org.kie.server.api.KieServerConstants; import org.kie.server.api.marshalling.MarshallingFormat; import org.kie.server.api.model.KieContainerResource; import org.kie.server.api.model.KieContainerResourceList; import org.kie.server.api.model.KieServerConfigItem; import org.kie.server.api.model.ReleaseId; import org.kie.server.api.model.ServiceResponse; import org.kie.server.client.KieServicesClient; import org.kie.server.client.KieServicesConfiguration; import org.kie.server.client.KieServicesFactory; import org.kie.server.controller.api.model.spec.ServerTemplate; import org.kie.server.integrationtests.controller.client.KieServerMgmtControllerClient; import org.kie.server.integrationtests.config.TestConfig; import org.kie.server.integrationtests.shared.KieControllerExecutor; import org.kie.server.integrationtests.shared.KieServerAssert; import org.kie.server.integrationtests.shared.KieServerExecutor; import org.kie.server.integrationtests.shared.KieServerRouterExecutor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public abstract class KieServerBaseIntegrationTest { protected static Logger logger = LoggerFactory.getLogger(KieServerBaseIntegrationTest.class); protected KieServicesClient client; protected static KieControllerExecutor controller; protected static KieServerExecutor server; protected static KieServerRouterExecutor router; protected static final long DEFAULT_TIMEOUT = 60000; @BeforeClass public static void setupClass() throws Exception { router = new KieServerRouterExecutor(); router.startKieRouter(); if (TestConfig.isLocalServer()) { System.setProperty(Context.INITIAL_CONTEXT_FACTORY, "bitronix.tm.jndi.BitronixInitialContextFactory"); controller = new KieControllerExecutor(); controller.startKieController(); server = new KieServerExecutor(); server.startKieServer(); } setupCustomSettingsXml(); disposeAllContainers(); } private static void setupCustomSettingsXml() { if (!TestConfig.isLocalServer()) { String deploymentSettings = TestConfig.getKieClientDeploymentSettings(); if (deploymentSettings == null) { deploymentSettings = ClassLoader.class.getResource("/kie-server-testing-client-deployment-settings.xml").getFile(); } System.setProperty(KieServerConstants.CFG_KIE_MVN_SETTINGS, deploymentSettings); } } @Before public void setup() throws Exception { client = createDefaultClient(); } @AfterClass public static void tearDown() { if (TestConfig.isLocalServer()) { server.stopKieServer(); controller.stopKieController(); System.clearProperty(Context.INITIAL_CONTEXT_FACTORY); } router.stopKieRouter(); } protected static void disposeAllContainers() { KieServicesClient client = createDefaultStaticClient(); ServiceResponse<KieContainerResourceList> response = client.listContainers(); Assert.assertEquals(ServiceResponse.ResponseType.SUCCESS, response.getType()); List<KieContainerResource> containers = response.getResult().getContainers(); if (containers != null) { for (KieContainerResource container : containers) { KieServerAssert.assertSuccess(client.disposeContainer(container.getContainerId())); } } } protected static void createContainer(String containerId, ReleaseId releaseId) { createContainer(containerId, releaseId, null); } protected static void createContainer(String containerId, ReleaseId releaseId, KieServerConfigItem... configItems) { createContainer(containerId, releaseId, null, configItems); } protected static void createContainer(String containerId, ReleaseId releaseId, String alias, KieServerConfigItem... configItems) { KieServicesClient client = createDefaultStaticClient(); KieContainerResource containerResource = new KieContainerResource(containerId, releaseId); containerResource.setContainerAlias(alias); if (configItems != null && configItems.length > 0) { containerResource.setConfigItems(Arrays.asList(configItems)); } ServiceResponse<KieContainerResource> reply = client.createContainer(containerId, containerResource); Assume.assumeTrue(reply.getType().equals(ServiceResponse.ResponseType.SUCCESS)); } protected void disposeAllServerInstances() { // Is done just if we run local server (controller always on) or controller is deployed. if (TestConfig.isLocalServer() || TestConfig.isControllerProvided()) { disposeServerTemplates(); } } private void disposeServerTemplates() { KieServerMgmtControllerClient mgmtControllerClient; if (TestConfig.isLocalServer()) { mgmtControllerClient = new KieServerMgmtControllerClient(TestConfig.getControllerHttpUrl(), null, null); } else { mgmtControllerClient = new KieServerMgmtControllerClient(TestConfig.getControllerHttpUrl(), TestConfig.getUsername(), TestConfig.getPassword()); } mgmtControllerClient.setMarshallingFormat(MarshallingFormat.JAXB); Collection<ServerTemplate> serverTemplates = mgmtControllerClient.listServerTemplates(); for (ServerTemplate serverTemplate : serverTemplates) { mgmtControllerClient.deleteServerTemplate(serverTemplate.getId()); } mgmtControllerClient.close(); } protected abstract KieServicesClient createDefaultClient() throws Exception; public static void cleanupSingletonSessionId() { File tempDir = new File(System.getProperty("java.io.tmpdir")); if (tempDir.exists()) { String[] jbpmSerFiles = tempDir.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { return name.endsWith("-jbpmSessionId.ser"); } }); for (String file : jbpmSerFiles) { new File(tempDir, file).delete(); } } } protected Map<String, Class<?>> extraClasses = new ConcurrentHashMap<String, Class<?>>(); protected KieServicesClient createDefaultClient(KieServicesConfiguration configuration, MarshallingFormat marshallingFormat) throws Exception { KieServicesClient kieServicesClient = null; configuration.setTimeout(DEFAULT_TIMEOUT); configuration.setMarshallingFormat(marshallingFormat); configuration.addExtraClasses(new HashSet<Class<?>>(extraClasses.values())); additionalConfiguration(configuration); if (extraClasses.size() > 0) { // Use classloader of extra classes as client classloader ClassLoader classLoader = extraClasses.values().iterator().next().getClassLoader(); kieServicesClient = KieServicesFactory.newKieServicesClient(configuration, classLoader); } else { kieServicesClient = KieServicesFactory.newKieServicesClient(configuration); } setupClients(kieServicesClient); return kieServicesClient; } /** * Create client with default REST configuration - usable for helper purposes(creating containers...). * @return Kie server client. */ protected static KieServicesClient createDefaultStaticClient() { return createDefaultStaticClient(DEFAULT_TIMEOUT); } /** * Create client with default REST configuration - usable for helper purposes(creating containers...). * @param timeout * @return Kie server client. */ protected static KieServicesClient createDefaultStaticClient(long timeout) { KieServicesConfiguration configuration = KieServicesFactory.newRestConfiguration(TestConfig.getKieServerHttpUrl(),TestConfig.getUsername(), TestConfig.getPassword(), timeout); configuration.setMarshallingFormat(MarshallingFormat.JAXB); KieServicesClient kieServicesClient = KieServicesFactory.newKieServicesClient(configuration); return kieServicesClient; } /** * Add custom classes needed by marshallers. * * @param extraClasses Map with classname keys and respective Class instances. */ protected void addExtraCustomClasses(Map<String, Class<?>> extraClasses) throws Exception {} /** * Additional configuration of KieServicesConfiguration like timeout and such. * * @param configuration Kie server configuration to be configured. */ protected void additionalConfiguration(KieServicesConfiguration configuration) throws Exception {} /** * Initialize Execution server clients. * Override to initialize specific clients. * * @param kieServicesClient Kie services client. */ protected void setupClients(KieServicesClient kieServicesClient){} }