package com.nvarghese.beowulf.sfe.services; import java.net.UnknownHostException; import org.apache.commons.configuration.ConfigurationException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.code.morphia.Datastore; import com.nvarghese.beowulf.common.BeowulfCommonConfigManager; import com.nvarghese.beowulf.common.ds.DataStoreUtil; import com.nvarghese.beowulf.common.rpc.BwControllerRpcInterface; import com.nvarghese.beowulf.common.scan.dao.WebScanDAO; import com.nvarghese.beowulf.common.scan.model.TestModuleScanConfigDocument; import com.nvarghese.beowulf.common.scan.model.WebScanDocument; import com.nvarghese.beowulf.common.webtest.JobStatus; import com.nvarghese.beowulf.common.webtest.WebTestType; import com.nvarghese.beowulf.common.webtest.dao.TestModuleMetaDataDAO; import com.nvarghese.beowulf.common.webtest.model.TestModuleMetaDataDocument; import com.nvarghese.beowulf.common.webtest.sfe.jobs.TestJob; import com.nvarghese.beowulf.common.webtest.sfe.jobs.TestJobDAO; import com.nvarghese.beowulf.common.webtest.sfe.jobs.TestJobDocument; import com.nvarghese.beowulf.common.webtest.sfe.jobs.TestParameterDocument; import com.nvarghese.beowulf.sfe.SfeManager; import com.nvarghese.beowulf.sfe.webtest.tm.AbstractTestModule; import com.nvarghese.beowulf.sfe.webtest.types.DirectoryTestType; import com.nvarghese.beowulf.sfe.webtest.types.HostTestType; public class TestExecutorService { static Logger logger = LoggerFactory.getLogger(TestExecutorService.class); public void processTestJob(TestJob testJob) { BwControllerService bwControllerService = new BwControllerService(); WebScanDAO webScanDAO = new WebScanDAO(SfeManager.getInstance().getDataStore()); WebScanDocument webScanDocument = webScanDAO.getWebScanDocument(testJob.getWebScanObjId()); try { //BwControllerRpcInterface bwContollerRpcClient = bwControllerService.getRpcClient(webScanDocument.getBwControllerIPAddress(), // webScanDocument.getBwControllerPort()); Datastore ds = DataStoreUtil.createOrGetDataStore(BeowulfCommonConfigManager.getDbUri(), testJob.getDatabaseName()); TestJobDAO testJobDAO = new TestJobDAO(ds); TestJobDocument testJobDocument = testJobDAO.getTestJobDocument(testJob.getTestJobObjId()); if (testJobDocument != null) { try { testJobDocument.setJobStatus(JobStatus.PROCESSING); testJobDAO.updateTestJobDocument(testJobDocument); routeTestJob(ds, webScanDocument, testJobDocument); testJobDocument.setJobStatus(JobStatus.COMPLETED); testJobDAO.updateTestJobDocument(testJobDocument); } catch (TestJobException e) { logger.error("Failed to execute test job with id: {}. Reason: {}", testJobDocument.getId(), e.getMessage()); e.printStackTrace(); testJobDocument.setJobStatus(JobStatus.ERROR); testJobDAO.updateTestJobDocument(testJobDocument); } } else { } //String reply = bwContollerRpcClient.sayHello("BW-Executor System"); //logger.info("RPC Message was sent to server. Server replied: {}", reply); } catch (ConfigurationException e) { logger.error("Failed to create/get datastore for scan instance. Reason: {}", e.getMessage(), e); } catch (UnknownHostException e) { logger.error("Failed to create RPC client for the bw-controller. Reason: {}", e.getMessage(), e); } } private void routeTestJob(Datastore ds, WebScanDocument webScanDocument, TestJobDocument testJobDocument) throws TestJobException { // load meta testModule TestModuleMetaDataDAO testModuleMetaDAO = new TestModuleMetaDataDAO(SfeManager.getInstance().getDataStore()); TestModuleMetaDataDocument testModuleMetaDocument = testModuleMetaDAO.findByModuleNumber(testJobDocument.getModuleNumber()); // load enabled test module TestModuleScanConfigDocument testModuleScanConfigDocument = webScanDocument.getScanConfig().getTestModules() .get(testJobDocument.getModuleNumber()); if (testModuleMetaDocument != null && testModuleScanConfigDocument != null) { try { if (testJobDocument.getTestType() == WebTestType.DIRECTORY_TEST) { Class targetTestModuleClass = Class.forName(testModuleMetaDocument.getModuleClassName()); Object targetTestModuleObject = targetTestModuleClass.newInstance(); DirectoryTestType directoryTestModule = DirectoryTestType.class.cast(targetTestModuleObject); ((AbstractTestModule) directoryTestModule).initialize(ds, testModuleMetaDocument, testModuleScanConfigDocument); TestParameterDocument testParamDocument = testJobDocument.getTestParameters().get(0); String paramValue = (String) testParamDocument.getParameterValue(); directoryTestModule.testByDirectory(testJobDocument.getTxnObjId(), paramValue); } else if (testJobDocument.getTestType() == WebTestType.HOST_TEST) { Class targetTestModuleClass = Class.forName(testModuleMetaDocument.getModuleClassName()); Object targetTestModuleObject = targetTestModuleClass.newInstance(); HostTestType hostTestModule = HostTestType.class.cast(targetTestModuleObject); ((AbstractTestModule) hostTestModule).initialize(ds, testModuleMetaDocument, testModuleScanConfigDocument); hostTestModule.testByServer(testJobDocument.getTxnObjId()); } } catch (ClassNotFoundException e) { } catch (InstantiationException e) { } catch (IllegalAccessException e) { } } else { } } }