adding app-catalog tests back
Project: http://git-wip-us.apache.org/repos/asf/airavata/repo Commit: http://git-wip-us.apache.org/repos/asf/airavata/commit/cd29e740 Tree: http://git-wip-us.apache.org/repos/asf/airavata/tree/cd29e740 Diff: http://git-wip-us.apache.org/repos/asf/airavata/diff/cd29e740 Branch: refs/heads/workflow-support Commit: cd29e740b051b40b7bd179e4218019850430d12d Parents: 8edd711 Author: Chathuri Wimalasena <[email protected]> Authored: Mon Jul 21 11:32:51 2014 -0400 Committer: Chathuri Wimalasena <[email protected]> Committed: Mon Jul 21 11:32:51 2014 -0400 ---------------------------------------------------------------------- .../app/catalog/test/AppDeploymentTest.java | 147 +++++++++ .../app/catalog/test/AppInterfaceTest.java | 173 ++++++++++ .../app/catalog/test/ComputeResourceTest.java | 278 ++++++++++++++++ .../app/catalog/test/GatewayProfileTest.java | 127 ++++++++ .../app/catalog/test/util/Initialize.java | 321 +++++++++++++++++++ 5 files changed, 1046 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/airavata/blob/cd29e740/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/AppDeploymentTest.java ---------------------------------------------------------------------- diff --git a/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/AppDeploymentTest.java b/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/AppDeploymentTest.java new file mode 100644 index 0000000..11e87f9 --- /dev/null +++ b/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/AppDeploymentTest.java @@ -0,0 +1,147 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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.apache.airavata.app.catalog.test; + +import org.airavata.appcatalog.cpi.*; +import org.airavata.appcatalog.cpi.ApplicationDeployment; +import org.airavata.appcatalog.cpi.ApplicationInterface; +import org.airavata.appcatalog.cpi.ComputeResource; +import org.apache.aiaravata.application.catalog.data.impl.AppCatalogFactory; +import org.apache.aiaravata.application.catalog.data.model.*; +import org.apache.aiaravata.application.catalog.data.resources.AbstractResource; +import org.apache.airavata.app.catalog.test.util.Initialize; +import org.apache.airavata.common.utils.AiravataUtils; +import org.apache.airavata.model.appcatalog.appdeployment.ApplicationDeploymentDescription; +import org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule; +import org.apache.airavata.model.appcatalog.appdeployment.SetEnvPaths; +import org.apache.airavata.model.appcatalog.computeresource.ComputeResourceDescription; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertTrue; + +public class AppDeploymentTest { + private static Initialize initialize; + private static AppCatalog appcatalog; + + @Before + public void setUp() { + try { + AiravataUtils.setExecutionAsServer(); + initialize = new Initialize("appcatalog-derby.sql"); + initialize.initializeDB(); + appcatalog = AppCatalogFactory.getAppCatalog(); + } catch (AppCatalogException e) { + e.printStackTrace(); + } + } + + @After + public void tearDown() throws Exception { + System.out.println("********** TEAR DOWN ************"); + initialize.stopDerbyServer(); + } + + @Test + public void testAppDeployment () throws Exception { + ApplicationDeployment appDep = appcatalog.getApplicationDeployment(); + ApplicationInterface appInt = appcatalog.getApplicationInterface(); + ComputeResource computeRs = appcatalog.getComputeResource(); + ComputeResourceDescription cm = new ComputeResourceDescription(); + cm.setHostName("localhost"); + cm.setResourceDescription("test compute host"); + String hostId = computeRs.addComputeResource(cm); + + ApplicationModule module = new ApplicationModule(); + module.setAppModuleName("WRF"); + module.setAppModuleVersion("1.0.0"); + String wrfModuleId = appInt.addApplicationModule(module); + + ApplicationDeploymentDescription description = new ApplicationDeploymentDescription(); + description.setAppModuleId(wrfModuleId); + description.setComputeHostId(hostId); + description.setExecutablePath("/home/a/b/c"); + description.setAppDeploymentDescription("test app deployment"); + description.addToModuleLoadCmds("cmd1"); + description.addToModuleLoadCmds("cmd2"); + + List<SetEnvPaths> libPrepandPaths = new ArrayList<SetEnvPaths>(); + libPrepandPaths.add(createSetEnvPath("name1", "val1")); + libPrepandPaths.add(createSetEnvPath("name2", "val2")); + description.setLibPrependPaths(libPrepandPaths); + List<SetEnvPaths> libApendPaths = new ArrayList<SetEnvPaths>(); + libApendPaths.add(createSetEnvPath("name3", "val3")); + libApendPaths.add(createSetEnvPath("name4", "val4")); + description.setLibAppendPaths(libApendPaths); + List<SetEnvPaths> appEvns = new ArrayList<SetEnvPaths>(); + appEvns.add(createSetEnvPath("name5", "val5")); + appEvns.add(createSetEnvPath("name6", "val6")); + description.setSetEnvironment(appEvns); + + String appDepId = appDep.addApplicationDeployment(description); + ApplicationDeploymentDescription app = null; + if (appDep.isAppDeploymentExists(appDepId)){ + app = appDep.getApplicationDeployement(appDepId); + System.out.println("*********** application deployment desc ********* : " + app.getAppDeploymentDescription()); + } + + description.setAppDeploymentDescription("test app deployment2"); + appDep.updateApplicationDeployment(appDepId, description); + + if (appDep.isAppDeploymentExists(appDepId)){ + app = appDep.getApplicationDeployement(appDepId); + System.out.println("*********** application deployment desc ********* : " + app.getAppDeploymentDescription()); + } + + Map<String, String> moduleIdFilter = new HashMap<String, String>(); + moduleIdFilter.put(AbstractResource.ApplicationDeploymentConstants.APP_MODULE_ID, wrfModuleId); + List<ApplicationDeploymentDescription> applicationDeployements = appDep.getApplicationDeployements(moduleIdFilter); + System.out.println("******** Size of App deployments for module *********** : " + applicationDeployements.size()); + Map<String, String> hostFilter = new HashMap<String, String>(); + hostFilter.put(AbstractResource.ApplicationDeploymentConstants.COMPUTE_HOST_ID, hostId); + List<ApplicationDeploymentDescription> applicationDeployementsForHost = appDep.getApplicationDeployements(hostFilter); + System.out.println("******** Size of App deployments for host *********** : " + applicationDeployementsForHost.size()); + + List<String> allApplicationDeployementIds = appDep.getAllApplicationDeployementIds(); + System.out.println("******** Size of all App deployments ids *********** : " + allApplicationDeployementIds.size()); + + List<ApplicationDeploymentDescription> allApplicationDeployements = appDep.getAllApplicationDeployements(); + System.out.println("******** Size of all App deployments *********** : " + allApplicationDeployements.size()); + + assertTrue("App interface saved successfully", app != null); + } + + public SetEnvPaths createSetEnvPath (String name, String val){ + SetEnvPaths setEnvPaths = new SetEnvPaths(); + setEnvPaths.setName(name); + setEnvPaths.setValue(val); + return setEnvPaths; + + } + +} http://git-wip-us.apache.org/repos/asf/airavata/blob/cd29e740/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/AppInterfaceTest.java ---------------------------------------------------------------------- diff --git a/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/AppInterfaceTest.java b/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/AppInterfaceTest.java new file mode 100644 index 0000000..a2fdb86 --- /dev/null +++ b/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/AppInterfaceTest.java @@ -0,0 +1,173 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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.apache.airavata.app.catalog.test; + +import org.airavata.appcatalog.cpi.AppCatalog; +import org.airavata.appcatalog.cpi.AppCatalogException; +import org.airavata.appcatalog.cpi.ApplicationInterface; +import org.apache.aiaravata.application.catalog.data.impl.AppCatalogFactory; +import org.apache.aiaravata.application.catalog.data.resources.AbstractResource; +import org.apache.airavata.app.catalog.test.util.Initialize; +import org.apache.airavata.common.utils.AiravataUtils; +import org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule; +import org.apache.airavata.model.appcatalog.appinterface.ApplicationInterfaceDescription; +import org.apache.airavata.model.appcatalog.appinterface.DataType; +import org.apache.airavata.model.appcatalog.appinterface.InputDataObjectType; +import org.apache.airavata.model.appcatalog.appinterface.OutputDataObjectType; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertTrue; + +public class AppInterfaceTest { + private static Initialize initialize; + private static AppCatalog appcatalog; + + @Before + public void setUp() { + try { + AiravataUtils.setExecutionAsServer(); + initialize = new Initialize("appcatalog-derby.sql"); + initialize.initializeDB(); + appcatalog = AppCatalogFactory.getAppCatalog(); + } catch (AppCatalogException e) { + e.printStackTrace(); + } + } + + @After + public void tearDown() throws Exception { + System.out.println("********** TEAR DOWN ************"); + initialize.stopDerbyServer(); + + } + + @Test + public void testAppInterface(){ + try { + ApplicationInterface appInterface = appcatalog.getApplicationInterface(); + ApplicationInterfaceDescription description = new ApplicationInterfaceDescription(); + String wrfModuleId = addAppModule("WRF"); + String amberModuleId = addAppModule("AMBER"); + List<String> modules = new ArrayList<String>(); + modules.add(wrfModuleId); + modules.add(amberModuleId); + InputDataObjectType appInput1 = createAppInput("input1", "input1", DataType.STRING); + InputDataObjectType appInput2 = createAppInput("input2", "input2", DataType.INTEGER); + List<InputDataObjectType> inputs = new ArrayList<InputDataObjectType>(); + inputs.add(appInput1); + inputs.add(appInput2); + OutputDataObjectType output1 = createAppOutput("output1", "", DataType.STRING); + OutputDataObjectType output2 = createAppOutput("output2", "", DataType.STRING); + List<OutputDataObjectType> outputs = new ArrayList<OutputDataObjectType>(); + outputs.add(output1); + outputs.add(output2); + description.setApplicationName("testApplication"); + description.setApplicationDesription("my testApplication"); + description.setApplicationModules(modules); + description.setApplicationInputs(inputs); + description.setApplicationOutputs(outputs); + String appID = appInterface.addApplicationInterface(description); + System.out.println("********** application id ************* : " + appID); + ApplicationInterfaceDescription ainterface = null; + if (appInterface.isApplicationInterfaceExists(appID)){ + ainterface = appInterface.getApplicationInterface(appID); + System.out.println("********** application name ************* : " + ainterface.getApplicationName()); + System.out.println("********** application description ************* : " + ainterface.getApplicationDesription()); + } + ApplicationModule wrfModule = appInterface.getApplicationModule(wrfModuleId); + System.out.println("********** WRF module name ************* : " + wrfModule.getAppModuleName()); + ApplicationModule amberModule = appInterface.getApplicationModule(amberModuleId); + System.out.println("********** Amber module name ************* : " + amberModule.getAppModuleName()); + + List<InputDataObjectType> applicationInputs = appInterface.getApplicationInputs(appID); + System.out.println("********** App Input size ************* : " + applicationInputs.size()); + + List<OutputDataObjectType> applicationOutputs = appInterface.getApplicationOutputs(appID); + System.out.println("********** App output size ************* : " + applicationOutputs.size()); + + description.setApplicationName("testApplication2"); + appInterface.updateApplicationInterface(appID, description); + if (appInterface.isApplicationInterfaceExists(appID)){ + ainterface = appInterface.getApplicationInterface(appID); + System.out.println("********** updated application name ************* : " + ainterface.getApplicationName()); + } + + wrfModule.setAppModuleVersion("1.0.1"); + appInterface.updateApplicationModule(wrfModuleId, wrfModule); + wrfModule = appInterface.getApplicationModule(wrfModuleId); + System.out.println("********** Updated WRF module version ************* : " + wrfModule.getAppModuleVersion()); + + Map<String, String> filters = new HashMap<String, String>(); + filters.put(AbstractResource.ApplicationInterfaceConstants.APPLICATION_NAME, "testApplication2"); + List<ApplicationInterfaceDescription> apps = appInterface.getApplicationInterfaces(filters); + System.out.println("********** Size og app interfaces ************* : " + apps.size()); + + List<ApplicationInterfaceDescription> appInts = appInterface.getAllApplicationInterfaces(); + System.out.println("********** Size of all app interfaces ************* : " + appInts.size()); + + List<String> appIntIds = appInterface.getAllApplicationInterfaceIds(); + System.out.println("********** Size of all app interface ids ************* : " + appIntIds.size()); + + assertTrue("App interface saved successfully", ainterface != null); + }catch (AppCatalogException e) { + e.printStackTrace(); + } + + } + + public String addAppModule (String moduleName){ + try { + ApplicationModule module = new ApplicationModule(); + module.setAppModuleName(moduleName); + module.setAppModuleVersion("1.0.0"); + module.setAppModuleDescription("WeatherForcast"); + return appcatalog.getApplicationInterface().addApplicationModule(module); + } catch (AppCatalogException e) { + e.printStackTrace(); + } + return null; + } + + public InputDataObjectType createAppInput (String inputName, String value, DataType type ){ + InputDataObjectType input = new InputDataObjectType(); + input.setName(inputName); + input.setValue(value); + input.setType(type); + input.setApplicationArgument("test arg"); + return input; + } + + public OutputDataObjectType createAppOutput (String inputName, String value, DataType type ){ + OutputDataObjectType outputDataObjectType = new OutputDataObjectType(); + outputDataObjectType.setName(inputName); + outputDataObjectType.setValue(value); + outputDataObjectType.setType(type); + return outputDataObjectType; + } +} http://git-wip-us.apache.org/repos/asf/airavata/blob/cd29e740/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/ComputeResourceTest.java ---------------------------------------------------------------------- diff --git a/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/ComputeResourceTest.java b/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/ComputeResourceTest.java new file mode 100644 index 0000000..e0ee1cf --- /dev/null +++ b/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/ComputeResourceTest.java @@ -0,0 +1,278 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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.apache.airavata.app.catalog.test; + + +import org.airavata.appcatalog.cpi.AppCatalog; +import org.airavata.appcatalog.cpi.AppCatalogException; +import org.airavata.appcatalog.cpi.ComputeResource; +import org.apache.aiaravata.application.catalog.data.impl.AppCatalogFactory; +import org.apache.aiaravata.application.catalog.data.resources.AbstractResource; +import org.apache.airavata.app.catalog.test.util.Initialize; +import org.apache.airavata.common.utils.AiravataUtils; +import org.apache.airavata.model.appcatalog.computeresource.*; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.*; + +import static org.junit.Assert.assertTrue; + +public class ComputeResourceTest { + private static Initialize initialize; + private static AppCatalog appcatalog; + + @Before + public void setUp() { + try { + AiravataUtils.setExecutionAsServer(); + initialize = new Initialize("appcatalog-derby.sql"); + initialize.initializeDB(); + appcatalog = AppCatalogFactory.getAppCatalog(); + } catch (AppCatalogException e) { + e.printStackTrace(); + } + } + + @After + public void tearDown() throws Exception { + System.out.println("********** TEAR DOWN ************"); + initialize.stopDerbyServer(); + + } + + @Test + public void testAddComputeResource (){ + try { + ComputeResource computeResource = appcatalog.getComputeResource(); + ComputeResourceDescription description = new ComputeResourceDescription(); + + description.setHostName("localhost"); + description.setResourceDescription("test compute resource"); + Set<String> ipdaresses = new HashSet<String>(); + ipdaresses.add("222.33.43.444"); + ipdaresses.add("23.344.44.454"); + description.setIpAddresses(ipdaresses); + Set<String> aliases = new HashSet<String>(); + aliases.add("test.alias1"); + aliases.add("test.alias2"); + description.setHostAliases(aliases); + String sshsubmissionId = addSSHJobSubmission(); + System.out.println("**** SSH Submission id ****** :" + sshsubmissionId); +// String gsiSSHsubmissionId = addGSISSHJobSubmission(); +// System.out.println("**** GSISSH Submission id ****** :" + gsiSSHsubmissionId); +// String globusSubmissionId = addGlobusJobSubmission(); +// System.out.println("**** Globus Submission id ****** :" + globusSubmissionId); + JobSubmissionInterface sshSubmissionInt = new JobSubmissionInterface(); + sshSubmissionInt.setJobSubmissionInterfaceId(sshsubmissionId); + sshSubmissionInt.setPriorityOrder(1); + sshSubmissionInt.setJobSubmissionProtocol(JobSubmissionProtocol.SSH); + JobSubmissionInterface globusSubInt = new JobSubmissionInterface(); +// globusSubInt.setJobSubmissionInterfaceId(globusSubmissionId); + globusSubInt.setPriorityOrder(2); + globusSubInt.setJobSubmissionProtocol(JobSubmissionProtocol.GLOBUS); + List<JobSubmissionInterface> interfaceList = new ArrayList<JobSubmissionInterface>(); + interfaceList.add(sshSubmissionInt); + interfaceList.add(globusSubInt); + description.setJobSubmissionInterfaces(interfaceList); + + String scpDataMoveId = addSCPDataMovement(); + System.out.println("**** SCP DataMoveId****** :" + scpDataMoveId); + String gridFTPDataMoveId = addGridFTPDataMovement(); + System.out.println("**** grid FTP DataMoveId****** :" + gridFTPDataMoveId); + + List<DataMovementInterface> dataMovementInterfaces = new ArrayList<DataMovementInterface>(); + DataMovementInterface scpInterface = new DataMovementInterface(); + scpInterface.setDataMovementInterfaceId(scpDataMoveId); + scpInterface.setDataMovementProtocol(DataMovementProtocol.SCP); + scpInterface.setPriorityOrder(1); + + DataMovementInterface gridFTPMv = new DataMovementInterface(); + gridFTPMv.setDataMovementInterfaceId(gridFTPDataMoveId); + gridFTPMv.setDataMovementProtocol(DataMovementProtocol.GridFTP); + gridFTPMv.setPriorityOrder(2); + + description.setDataMovementInterfaces(dataMovementInterfaces); + + BatchQueue batchQueue1 = new BatchQueue(); + batchQueue1.setQueueName("queue1"); + batchQueue1.setQueueDescription("que1Desc1"); + batchQueue1.setMaxRunTime(10); + batchQueue1.setMaxNodes(4); + batchQueue1.setMaxJobsInQueue(1); + + BatchQueue batchQueue2 = new BatchQueue(); + batchQueue2.setQueueName("queue2"); + batchQueue2.setQueueDescription("que1Desc2"); + batchQueue2.setMaxRunTime(10); + batchQueue2.setMaxNodes(4); + batchQueue2.setMaxJobsInQueue(1); + + List<BatchQueue> batchQueueList = new ArrayList<BatchQueue>(); + batchQueueList.add(batchQueue1); + batchQueueList.add(batchQueue2); + description.setBatchQueues(batchQueueList); + + Map<FileSystems, String> fileSysMap = new HashMap<FileSystems, String>(); + fileSysMap.put(FileSystems.HOME, "/home"); + fileSysMap.put(FileSystems.SCRATCH, "/tmp"); + description.setFileSystems(fileSysMap); + + String resourceId = computeResource.addComputeResource(description); + System.out.println("**********Resource id ************* : " + resourceId); + ComputeResourceDescription host = null; + if (computeResource.isComputeResourceExists(resourceId)){ + host = computeResource.getComputeResource(resourceId); + System.out.println("**********Resource name ************* : " + host.getHostName()); + } + + SSHJobSubmission sshJobSubmission = computeResource.getSSHJobSubmission(sshsubmissionId); + System.out.println("**********SSH Submission resource job manager ************* : " + sshJobSubmission.getResourceJobManager().toString()); + +// GlobusJobSubmission globusJobSubmission = computeResource.get(globusSubmissionId); +// System.out.println("**********Globus Submission resource job manager ************* : " + globusJobSubmission.getResourceJobManager().toString()); + + SCPDataMovement scpDataMovement = computeResource.getSCPDataMovement(scpDataMoveId); + System.out.println("**********SCP Data Move Security protocol ************* : " + scpDataMovement.getSecurityProtocol().toString()); + + GridFTPDataMovement gridFTPDataMovement = computeResource.getGridFTPDataMovement(gridFTPDataMoveId); + System.out.println("**********GRID FTP Data Move Security protocol ************* : " + gridFTPDataMovement.getSecurityProtocol().toString()); + + description.setHostName("localhost2"); + computeResource.updateComputeResource(resourceId, description); + if (computeResource.isComputeResourceExists(resourceId)){ + host = computeResource.getComputeResource(resourceId); + System.out.println("**********Updated Resource name ************* : " + host.getHostName()); + } + + Map<String, String> cfilters = new HashMap<String, String>(); + cfilters.put(AbstractResource.ComputeResourceConstants.HOST_NAME, "localhost2"); + List<ComputeResourceDescription> computeResourceList = computeResource.getComputeResourceList(cfilters); + System.out.println("**********Size of compute resources ************* : " + computeResourceList.size()); + + List<ComputeResourceDescription> allComputeResourceList = computeResource.getAllComputeResourceList(); + System.out.println("**********Size of all compute resources ************* : " + allComputeResourceList.size()); + + Map<String, String> allComputeResourceIdList = computeResource.getAllComputeResourceIdList(); + System.out.println("**********Size of all compute resources ids ************* : " + allComputeResourceIdList.size()); + +// Map<String, String> globusfilters = new HashMap<String, String>(); +// globusfilters.put(AbstractResource.GlobusJobSubmissionConstants.RESOURCE_JOB_MANAGER, ResourceJobManager.PBS.toString()); +// List<GlobusJobSubmission> gList = computeResource.getGlobusJobSubmissionList(globusfilters); +// System.out.println("**********Size of globus jobs ************* : " + gList.size()); + +// Map<String, String> sshfilters = new HashMap<String, String>(); +// sshfilters.put(AbstractResource.SSHSubmissionConstants.RESOURCE_JOB_MANAGER, ResourceJobManager.PBS.toString()); +// List<SSHJobSubmission> sshList = computeResource.getSS(sshfilters); +// System.out.println("**********Size of SSH jobs ************* : " + sshList.size()); + +// Map<String, String> gsishfilters = new HashMap<String, String>(); +// gsishfilters.put(AbstractResource.GSISSHSubmissionConstants.RESOURCE_JOB_MANAGER, ResourceJobManager.PBS.toString()); +// List<GSISSHJobSubmission> gsisshList = computeResource.getGSISSHJobSubmissionList(gsishfilters); +// System.out.println("**********Size of GSISSH jobs ************* : " + gsisshList.size()); + +// Map<String, String> scpfilters = new HashMap<String, String>(); +// scpfilters.put(AbstractResource.SCPDataMovementConstants.SECURITY_PROTOCOL, SecurityProtocol.SSH_KEYS.toString()); +// List<SCPDataMovement> scpDataMovementList = computeResource.getSCPDataMovementList(scpfilters); +// System.out.println("**********Size of SCP DM list ************* : " + scpDataMovementList.size()); +// +// Map<String, String> ftpfilters = new HashMap<String, String>(); +// ftpfilters.put(AbstractResource.GridFTPDataMovementConstants.SECURITY_PROTOCOL, SecurityProtocol.SSH_KEYS.toString()); +// List<GridFTPDataMovement> ftpDataMovementList = computeResource.getGridFTPDataMovementList(ftpfilters); +// System.out.println("**********Size of FTP DM list ************* : " + ftpDataMovementList.size()); + + assertTrue("Compute resource save successfully", host != null); + } catch (AppCatalogException e) { + e.printStackTrace(); + } + } + + public String addSSHJobSubmission (){ + try { + SSHJobSubmission jobSubmission = new SSHJobSubmission(); + jobSubmission.setSshPort(22); + jobSubmission.setSecurityProtocol(SecurityProtocol.GSI); + ResourceJobManager jobManager = new ResourceJobManager(); + jobManager.setResourceJobManagerType(ResourceJobManagerType.PBS); + jobManager.setPushMonitoringEndpoint("monitor ep"); + jobManager.setJobManagerBinPath("/bin"); + Map<JobManagerCommand, String> commands = new HashMap<JobManagerCommand, String>(); + commands.put(JobManagerCommand.SUBMISSION, "Sub command"); + commands.put(JobManagerCommand.SHOW_QUEUE, "show q command"); + jobManager.setJobManagerCommands(commands); +// String jobManagerID = appcatalog.getComputeResource().addResourceJobManager(jobManager); +// jobManager.setResourceJobManagerId(jobManagerID); + jobSubmission.setResourceJobManager(jobManager); + return appcatalog.getComputeResource().addSSHJobSubmission(jobSubmission); + } catch (AppCatalogException e) { + e.printStackTrace(); + } + return null; + } + +// public String addGlobusJobSubmission (){ +// try { +// GlobusJobSubmission jobSubmission = new GlobusJobSubmission(); +// jobSubmission.setSecurityProtocol(SecurityProtocol.GSI); +// jobSubmission.setResourceJobManager(ResourceJobManager.PBS); +// List<String> endPoints = new ArrayList<String>(); +// endPoints.add("222.33.43.444"); +// endPoints.add("23.344.44.454"); +// jobSubmission.setGlobusGateKeeperEndPoint(endPoints); +// return appcatalog.getComputeResource().addGlobusJobSubmission(jobSubmission); +// } catch (AppCatalogException e) { +// e.printStackTrace(); +// } +// return null; +// } + + public String addSCPDataMovement (){ + try { + SCPDataMovement dataMovement = new SCPDataMovement(); + dataMovement.setSshPort(22); + dataMovement.setSecurityProtocol(SecurityProtocol.SSH_KEYS); + return appcatalog.getComputeResource().addScpDataMovement(dataMovement); + }catch (AppCatalogException e) { + e.printStackTrace(); + } + return null; + } + + public String addGridFTPDataMovement (){ + try { + GridFTPDataMovement dataMovement = new GridFTPDataMovement(); + dataMovement.setSecurityProtocol(SecurityProtocol.SSH_KEYS); + List<String> endPoints = new ArrayList<String>(); + endPoints.add("222.33.43.444"); + endPoints.add("23.344.44.454"); + dataMovement.setGridFTPEndPoints(endPoints); + return appcatalog.getComputeResource().addGridFTPDataMovement(dataMovement); + }catch (AppCatalogException e) { + e.printStackTrace(); + } + return null; + } + + +} + http://git-wip-us.apache.org/repos/asf/airavata/blob/cd29e740/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/GatewayProfileTest.java ---------------------------------------------------------------------- diff --git a/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/GatewayProfileTest.java b/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/GatewayProfileTest.java new file mode 100644 index 0000000..66eb6bb --- /dev/null +++ b/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/GatewayProfileTest.java @@ -0,0 +1,127 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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.apache.airavata.app.catalog.test; + +import org.airavata.appcatalog.cpi.AppCatalog; +import org.airavata.appcatalog.cpi.AppCatalogException; +import org.airavata.appcatalog.cpi.ComputeResource; +import org.airavata.appcatalog.cpi.GwyResourceProfile; +import org.apache.aiaravata.application.catalog.data.impl.AppCatalogFactory; +import org.apache.airavata.app.catalog.test.util.Initialize; +import org.apache.airavata.common.utils.AiravataUtils; +import org.apache.airavata.model.appcatalog.computeresource.ComputeResourceDescription; +import org.apache.airavata.model.appcatalog.computeresource.DataMovementProtocol; +import org.apache.airavata.model.appcatalog.computeresource.JobSubmissionProtocol; +import org.apache.airavata.model.appcatalog.gatewayprofile.ComputeResourcePreference; +import org.apache.airavata.model.appcatalog.gatewayprofile.GatewayResourceProfile; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertTrue; + +public class GatewayProfileTest { + private static Initialize initialize; + private static AppCatalog appcatalog; + + @Before + public void setUp() { + try { + AiravataUtils.setExecutionAsServer(); + initialize = new Initialize("appcatalog-derby.sql"); + initialize.initializeDB(); + appcatalog = AppCatalogFactory.getAppCatalog(); + } catch (AppCatalogException e) { + e.printStackTrace(); + } + } + + @After + public void tearDown() throws Exception { + System.out.println("********** TEAR DOWN ************"); + initialize.stopDerbyServer(); + } + + @Test + public void gatewayProfileTest() throws Exception { + GwyResourceProfile gatewayProfile = appcatalog.getGatewayProfile(); + GatewayResourceProfile gf = new GatewayResourceProfile(); + gf.setGatewayName("test"); + gf.setGatewayDescription("test gateway"); + ComputeResource computeRs = appcatalog.getComputeResource(); + ComputeResourceDescription cm1 = new ComputeResourceDescription(); + cm1.setHostName("localhost"); + cm1.setResourceDescription("test compute host"); + String hostId1 = computeRs.addComputeResource(cm1); + + ComputeResourceDescription cm2 = new ComputeResourceDescription(); + cm2.setHostName("localhost"); + cm2.setResourceDescription("test compute host"); + String hostId2 = computeRs.addComputeResource(cm2); + + ComputeResourcePreference preference1 = new ComputeResourcePreference(); + preference1.setComputeResourceId(hostId1); + preference1.setOverridebyAiravata(true); + preference1.setPreferredJobSubmissionProtocol(JobSubmissionProtocol.SSH.toString()); + preference1.setPreferredDataMovementProtocol(DataMovementProtocol.SCP.toString()); + preference1.setPreferredBatchQueue("queue1"); + preference1.setScratchLocation("/tmp"); + preference1.setAllocationProjectNumber("project1"); + + ComputeResourcePreference preference2 = new ComputeResourcePreference(); + preference2.setComputeResourceId(hostId2); + preference2.setOverridebyAiravata(true); + preference2.setPreferredJobSubmissionProtocol(JobSubmissionProtocol.LOCAL.toString()); + preference2.setPreferredDataMovementProtocol(DataMovementProtocol.GridFTP.toString()); + preference2.setPreferredBatchQueue("queue2"); + preference2.setScratchLocation("/tmp"); + preference2.setAllocationProjectNumber("project2"); + + List<ComputeResourcePreference> list = new ArrayList<ComputeResourcePreference>(); + list.add(preference1); + list.add(preference2); + gf.setComputeResourcePreferences(list); + + String gwId = gatewayProfile.addGatewayResourceProfile(gf); + GatewayResourceProfile retrievedProfile = null; + if (gatewayProfile.isGatewayResourceProfileExists(gwId)){ + retrievedProfile = gatewayProfile.getGatewayProfile(gwId); + System.out.println("************ gateway name ************** :" + retrievedProfile.getGatewayName()); + } + List<ComputeResourcePreference> preferences = gatewayProfile.getAllComputeResourcePreferences(gwId); + System.out.println("compute preferences size : " + preferences.size()); + if (preferences != null && !preferences.isEmpty()){ + for (ComputeResourcePreference cm : preferences){ + System.out.println("******** host id ********* : " + cm.getComputeResourceId()); + System.out.println(cm.getPreferredBatchQueue()); + System.out.println(cm.getPreferredDataMovementProtocol()); + System.out.println(cm.getPreferredJobSubmissionProtocol()); + } + } + + assertTrue("App interface saved successfully", retrievedProfile != null); + } + +} http://git-wip-us.apache.org/repos/asf/airavata/blob/cd29e740/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/util/Initialize.java ---------------------------------------------------------------------- diff --git a/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/util/Initialize.java b/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/util/Initialize.java new file mode 100644 index 0000000..2f68951 --- /dev/null +++ b/modules/app-catalog/app-catalog-data/src/test/java/org/apache/airavata/app/catalog/test/util/Initialize.java @@ -0,0 +1,321 @@ +/* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF 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.apache.airavata.app.catalog.test.util; + +import org.apache.airavata.common.exception.ApplicationSettingsException; +import org.apache.airavata.common.utils.ServerSettings; +import org.apache.derby.drda.NetworkServerControl; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.InetAddress; +import java.net.URI; +import java.sql.*; +import java.util.StringTokenizer; + +public class Initialize { + private static final Logger logger = LoggerFactory.getLogger(Initialize.class); + public static final String DERBY_SERVER_MODE_SYS_PROPERTY = "derby.drda.startNetworkServer"; + public String scriptName = "appcatalog-derby.sql"; + private NetworkServerControl server; + private static final String delimiter = ";"; + public static final String COMPUTE_RESOURCE_TABLE = "COMPUTE_RESOURCE"; + private String jdbcUrl = null; + private String jdbcDriver = null; + private String jdbcUser = null; + private String jdbcPassword = null; + + public Initialize(String scriptName) { + this.scriptName = scriptName; + } + + public static boolean checkStringBufferEndsWith(StringBuffer buffer, String suffix) { + if (suffix.length() > buffer.length()) { + return false; + } + // this loop is done on purpose to avoid memory allocation performance + // problems on various JDKs + // StringBuffer.lastIndexOf() was introduced in jdk 1.4 and + // implementation is ok though does allocation/copying + // StringBuffer.toString().endsWith() does massive memory + // allocation/copying on JDK 1.5 + // See http://issues.apache.org/bugzilla/show_bug.cgi?id=37169 + int endIndex = suffix.length() - 1; + int bufferIndex = buffer.length() - 1; + while (endIndex >= 0) { + if (buffer.charAt(bufferIndex) != suffix.charAt(endIndex)) { + return false; + } + bufferIndex--; + endIndex--; + } + return true; + } + + private static boolean isServerStarted(NetworkServerControl server, int ntries) + { + for (int i = 1; i <= ntries; i ++) + { + try { + Thread.sleep(500); + server.ping(); + return true; + } + catch (Exception e) { + if (i == ntries) + return false; + } + } + return false; + } + + public void initializeDB() { + + try{ + jdbcDriver = ServerSettings.getSetting("appcatalog.jdbc.driver"); + jdbcUrl = ServerSettings.getSetting("appcatalog.jdbc.url"); + jdbcUser = ServerSettings.getSetting("appcatalog.jdbc.user"); + jdbcPassword = ServerSettings.getSetting("appcatalog.jdbc.password"); + jdbcUrl = jdbcUrl + "?" + "user=" + jdbcUser + "&" + "password=" + jdbcPassword; + } catch (ApplicationSettingsException e) { + logger.error("Unable to read properties", e); + } + + startDerbyInServerMode(); + if(!isServerStarted(server, 20)){ + throw new RuntimeException("Derby server cound not started within five seconds..."); + } +// startDerbyInEmbeddedMode(); + + Connection conn = null; + try { + Class.forName(jdbcDriver).newInstance(); + conn = DriverManager.getConnection(jdbcUrl, jdbcUser, jdbcPassword); + if (!isDatabaseStructureCreated(COMPUTE_RESOURCE_TABLE, conn)) { + executeSQLScript(conn); + logger.info("New Database created for App Catalog !!!"); + } else { + logger.debug("Database already created for App Catalog!"); + } + } catch (Exception e) { + logger.error(e.getMessage(), e); + throw new RuntimeException("Database failure", e); + } finally { + try { + if (conn != null){ + if (!conn.getAutoCommit()) { + conn.commit(); + } + conn.close(); + } + } catch (SQLException e) { + logger.error(e.getMessage(), e); + e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } + } + } + + public static boolean isDatabaseStructureCreated(String tableName, Connection conn) { + try { + System.out.println("Running a query to test the database tables existence."); + // check whether the tables are already created with a query + Statement statement = null; + try { + statement = conn.createStatement(); + ResultSet rs = statement.executeQuery("select * from " + tableName); + if (rs != null) { + rs.close(); + } + } finally { + try { + if (statement != null) { + statement.close(); + } + } catch (SQLException e) { + return false; + } + } + } catch (SQLException e) { + return false; + } + + return true; + } + + private void executeSQLScript(Connection conn) throws Exception { + StringBuffer sql = new StringBuffer(); + BufferedReader reader = null; + try{ + + InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(scriptName); + reader = new BufferedReader(new InputStreamReader(inputStream)); + String line; + while ((line = reader.readLine()) != null) { + line = line.trim(); + if (line.startsWith("//")) { + continue; + } + if (line.startsWith("--")) { + continue; + } + StringTokenizer st = new StringTokenizer(line); + if (st.hasMoreTokens()) { + String token = st.nextToken(); + if ("REM".equalsIgnoreCase(token)) { + continue; + } + } + sql.append(" ").append(line); + + // SQL defines "--" as a comment to EOL + // and in Oracle it may contain a hint + // so we cannot just remove it, instead we must end it + if (line.indexOf("--") >= 0) { + sql.append("\n"); + } + if ((checkStringBufferEndsWith(sql, delimiter))) { + executeSQL(sql.substring(0, sql.length() - delimiter.length()), conn); + sql.replace(0, sql.length(), ""); + } + } + // Catch any statements not followed by ; + if (sql.length() > 0) { + executeSQL(sql.toString(), conn); + } + }catch (IOException e){ + logger.error("Error occurred while executing SQL script for creating Airavata database", e); + throw new Exception("Error occurred while executing SQL script for creating Airavata database", e); + }finally { + if (reader != null) { + reader.close(); + } + + } + + } + + private static void executeSQL(String sql, Connection conn) throws Exception { + // Check and ignore empty statements + if ("".equals(sql.trim())) { + return; + } + + Statement statement = null; + try { + logger.debug("SQL : " + sql); + + boolean ret; + int updateCount = 0, updateCountTotal = 0; + statement = conn.createStatement(); + ret = statement.execute(sql); + updateCount = statement.getUpdateCount(); + do { + if (!ret) { + if (updateCount != -1) { + updateCountTotal += updateCount; + } + } + ret = statement.getMoreResults(); + if (ret) { + updateCount = statement.getUpdateCount(); + } + } while (ret); + + logger.debug(sql + " : " + updateCountTotal + " rows affected"); + + SQLWarning warning = conn.getWarnings(); + while (warning != null) { + logger.warn(warning + " sql warning"); + warning = warning.getNextWarning(); + } + conn.clearWarnings(); + } catch (SQLException e) { + if (e.getSQLState().equals("X0Y32")) { + // eliminating the table already exception for the derby + // database + logger.info("Table Already Exists", e); + } else { + throw new Exception("Error occurred while executing : " + sql, e); + } + } finally { + if (statement != null) { + try { + statement.close(); + } catch (SQLException e) { + logger.error("Error occurred while closing result set.", e); + } + } + } + } + + private void startDerbyInServerMode() { + try { + System.setProperty(DERBY_SERVER_MODE_SYS_PROPERTY, "true"); + server = new NetworkServerControl(InetAddress.getByName("0.0.0.0"), + getPort(jdbcUrl), + jdbcUser, jdbcPassword); + java.io.PrintWriter consoleWriter = new java.io.PrintWriter(System.out, true); + server.start(consoleWriter); + } catch (IOException e) { + logger.error("Unable to start Apache derby in the server mode! Check whether " + + "specified port is available"); + } catch (Exception e) { + logger.error("Unable to start Apache derby in the server mode! Check whether " + + "specified port is available"); + } + + } + + public static int getPort(String jdbcURL){ + try{ + String cleanURI = jdbcURL.substring(5); + URI uri = URI.create(cleanURI); + return uri.getPort(); + } catch (Exception e) { + logger.error(e.getMessage(), e); + return -1; + } + } + + private void startDerbyInEmbeddedMode(){ + try { + Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); + DriverManager.getConnection("jdbc:derby:memory:unit-testing-jpa;create=true").close(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (SQLException e) { + e.printStackTrace(); + } + } + + public void stopDerbyServer() { + try { + server.shutdown(); + } catch (Exception e) { + e.printStackTrace(); + } + } +}
