You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@airavata.apache.org by ch...@apache.org on 2014/07/21 17:32:57 UTC
git commit: adding app-catalog tests back
Repository: airavata
Updated Branches:
refs/heads/master 8edd7114f -> cd29e740b
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/master
Commit: cd29e740b051b40b7bd179e4218019850430d12d
Parents: 8edd711
Author: Chathuri Wimalasena <ka...@gmail.com>
Authored: Mon Jul 21 11:32:51 2014 -0400
Committer: Chathuri Wimalasena <ka...@gmail.com>
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();
+ }
+ }
+}