Repository: airavata Updated Branches: refs/heads/master 740bf8cd8 -> 2f1418691
http://git-wip-us.apache.org/repos/asf/airavata/blob/3361df33/modules/gfac/gfac-gsissh/src/main/resources/errors.properties ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-gsissh/src/main/resources/errors.properties b/modules/gfac/gfac-gsissh/src/main/resources/errors.properties new file mode 100644 index 0000000..88c41b8 --- /dev/null +++ b/modules/gfac/gfac-gsissh/src/main/resources/errors.properties @@ -0,0 +1,197 @@ +# +# +# 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. +# + +# Directly copied from jglobus. Not a good way to manager error properties. +1 = Parameter not supported +2 = The RSL length is greater than the maximum allowed +3 = No resources available +4 = Bad directory specified +5 = The executable does not exist +6 = Insufficient funds +7 = Authentication with the remote server failed +8 = Job cancelled by user +9 = Job cancelled by system + +10 = Data transfer to the server failed +11 = The stdin file does not exist +12 = The connection to the server failed (check host and port) +13 = The provided RSL 'maxtime' value is invalid (not an integer or must be greater than 0) +14 = The provided RSL 'count' value is invalid (not an integer or must be greater than 0) +15 = The job manager received an invalid RSL +16 = Could not connect to job manager +17 = The job failed when the job manager attempted to run it +18 = Paradyn error +19 = The provided RSL 'jobtype' value is invalid + +20 = The provided RSL 'myjob' value is invalid +21 = The job manager failed to locate an internal script argument file +22 = The job manager failed to create an internal script argument file +23 = The job manager detected an invalid job state +24 = The job manager detected an invalid script response +25 = The job manager detected an invalid job state +26 = The provided RSL 'jobtype' value is not supported by this job manager +27 = Unimplemented +28 = The job manager failed to create an internal script submission file +29 = The job manager cannot find the user proxy + +30 = The job manager failed to open the user proxy +31 = The job manager failed to cancel the job as requested +32 = System memory allocation failed +33 = The interprocess job communication initialization failed +34 = The interprocess job communication setup failed +35 = The provided RSL 'host count' value is invalid +36 = One of the provided RSL parameters is unsupported +37 = The provided RSL 'queue' parameter is invalid +38 = The provided RSL 'project' parameter is invalid +39 = The provided RSL string includes variables that could not be identified + +40 = The provided RSL 'environment' parameter is invalid +41 = The provided RSL 'dryrun' parameter is invalid +42 = The provided RSL is invalid (an empty string) +43 = The job manager failed to stage the executable +44 = The job manager failed to stage the stdin file +45 = The requested job manager type is invalid +46 = The provided RSL 'arguments' parameter is invalid +47 = The gatekeeper failed to run the job manager +48 = The provided RSL could not be properly parsed +49 = There is a version mismatch between GRAM components + +50 = The provided RSL 'arguments' parameter is invalid +51 = The provided RSL 'count' parameter is invalid +52 = The provided RSL 'directory' parameter is invalid +53 = The provided RSL 'dryrun' parameter is invalid +54 = The provided RSL 'environment' parameter is invalid +55 = The provided RSL 'executable' parameter is invalid +56 = The provided RSL 'host_count' parameter is invalid +57 = The provided RSL 'jobtype' parameter is invalid +58 = The provided RSL 'maxtime' parameter is invalid +59 = The provided RSL 'myjob' parameter is invalid + +60 = The provided RSL 'paradyn' parameter is invalid +61 = The provided RSL 'project' parameter is invalid +62 = The provided RSL 'queue' parameter is invalid +63 = The provided RSL 'stderr' parameter is invalid +64 = The provided RSL 'stdin' parameter is invalid +65 = The provided RSL 'stdout' parameter is invalid +66 = The job manager failed to locate an internal script +67 = The job manager failed on the system call pipe() +68 = The job manager failed on the system call fcntl() +69 = The job manager failed to create the temporary stdout filename + +70 = The job manager failed to create the temporary stderr filename +71 = The job manager failed on the system call fork() +72 = The executable file permissions do not allow execution +73 = The job manager failed to open stdout +74 = The job manager failed to open stderr +75 = The cache file could not be opened in order to relocate the user proxy +76 = Cannot access cache files in ~/.globus/.gass_cache, check permissions, quota, and disk space +77 = The job manager failed to insert the contact in the client contact list +78 = The contact was not found in the job manager's client contact list +79 = Connecting to the job manager failed. Possible reasons: job terminated, invalid job contact, network problems, ... + +80 = The syntax of the job contact is invalid +81 = The executable parameter in the RSL is undefined +82 = The job manager service is misconfigured. condor arch undefined +83 = The job manager service is misconfigured. condor os undefined +84 = The provided RSL 'min_memory' parameter is invalid +85 = The provided RSL 'max_memory' parameter is invalid +86 = The RSL 'min_memory' value is not zero or greater +87 = The RSL 'max_memory' value is not zero or greater +88 = The creation of a HTTP message failed +89 = Parsing incoming HTTP message failed + +90 = The packing of information into a HTTP message failed +91 = An incoming HTTP message did not contain the expected information +92 = The job manager does not support the service that the client requested +93 = The gatekeeper failed to find the requested service +94 = The jobmanager does not accept any new requests (shutting down) +95 = The client failed to close the listener associated with the callback URL +96 = The gatekeeper contact cannot be parsed +97 = The job manager could not find the 'poe' command +98 = The job manager could not find the 'mpirun' command +99 = The provided RSL 'start_time' parameter is invalid" +100 = The provided RSL 'reservation_handle' parameter is invalid + +101 = The provided RSL 'max_wall_time' parameter is invalid +102 = The RSL 'max_wall_time' value is not zero or greater +103 = The provided RSL 'max_cpu_time' parameter is invalid +104 = The RSL 'max_cpu_time' value is not zero or greater +105 = The job manager is misconfigured, a scheduler script is missing +106 = The job manager is misconfigured, a scheduler script has invalid permissions +107 = The job manager failed to signal the job +108 = The job manager did not recognize/support the signal type +109 = The job manager failed to get the job id from the local scheduler + +110 = The job manager is waiting for a commit signal +111 = The job manager timed out while waiting for a commit signal +112 = The provided RSL 'save_state' parameter is invalid +113 = The provided RSL 'restart' parameter is invalid +114 = The provided RSL 'two_phase' parameter is invalid +115 = The RSL 'two_phase' value is not zero or greater +116 = The provided RSL 'stdout_position' parameter is invalid +117 = The RSL 'stdout_position' value is not zero or greater +118 = The provided RSL 'stderr_position' parameter is invalid +119 = The RSL 'stderr_position' value is not zero or greater + +120 = The job manager restart attempt failed +121 = The job state file doesn't exist +122 = Could not read the job state file +123 = Could not write the job state file +124 = The old job manager is still alive +125 = The job manager state file TTL expired +126 = It is unknown if the job was submitted +127 = The provided RSL 'remote_io_url' parameter is invalid +128 = Could not write the remote io url file +129 = The standard output/error size is different + +130 = The job manager was sent a stop signal (job is still running) +131 = The user proxy expired (job is still running) +132 = The job was not submitted by original jobmanager +133 = The job manager is not waiting for that commit signal +134 = The provided RSL scheduler specific parameter is invalid +135 = The job manager could not stage in a file +136 = The scratch directory could not be created +137 = The provided 'gass_cache' parameter is invalid +138 = The RSL contains attributes which are not valid for job submission +139 = The RSL contains attributes which are not valid for stdio update + +140 = The RSL contains attributes which are not valid for job restart +141 = The provided RSL 'file_stage_in' parameter is invalid +142 = The provided RSL 'file_stage_in_shared' parameter is invalid +143 = The provided RSL 'file_stage_out' parameter is invalid +144 = The provided RSL 'gass_cache' parameter is invalid +145 = The provided RSL 'file_cleanup' parameter is invalid +146 = The provided RSL 'scratch_dir' parameter is invalid +147 = The provided scheduler-specific RSL parameter is invalid +148 = A required RSL attribute was not defined in the RSL spec +149 = The gass_cache attribute points to an invalid cache directory + +150 = The provided RSL 'save_state' parameter has an invalid value +151 = The job manager could not open the RSL attribute validation file +152 = The job manager could not read the RSL attribute validation file +153 = The provided RSL 'proxy_timeout' is invalid +154 = The RSL 'proxy_timeout' value is not greater than zero +155 = The job manager could not stage out a file +156 = The job contact string does not match any which the job manager is handling +157 = Proxy delegation failed +158 = The job manager could not lock the state lock file + +1000 = Failed to start up callback handler +1003 = Job contact not set http://git-wip-us.apache.org/repos/asf/airavata/blob/3361df33/modules/gfac/gfac-gsissh/src/main/resources/service.properties ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-gsissh/src/main/resources/service.properties b/modules/gfac/gfac-gsissh/src/main/resources/service.properties new file mode 100644 index 0000000..391bfea --- /dev/null +++ b/modules/gfac/gfac-gsissh/src/main/resources/service.properties @@ -0,0 +1,58 @@ +# +# +# 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. +# +# + + +# +# Class which implemented Scheduler interface. It will be used to determine a Provider +# +scheduler.class= org.apache.airavata.core.gfac.scheduler.impl.SchedulerImpl + +# +# Data Service Plugins classes +# +datachain.classes= org.apache.airavata.core.gfac.extension.data.RegistryDataService + +# +# Pre execution Plugins classes. For example, GridFTP Input Staging +# +prechain.classes= org.apache.airavata.core.gfac.extension.pre.GridFtpInputStaging +prechain.classes= org.apache.airavata.core.gfac.extension.pre.HttpInputStaging + +# +# Post execution Plugins classes. For example, GridFTP Output Staging +# +postchain.classes= org.apache.airavata.core.gfac.extension.post.GridFtpOutputStaging +postchain.classes= org.apache.airavata.core.gfac.extension.post.OutputRegister + +# +# SSH private key location. It will be used by SSHProvider +# +# ssh.key=/home/user/.ssh/id_rsa +# ssh.keypass= +# ssh.username=usernameAtHost + +# +# MyProxy credential. It will be used by GridFTP Plugins and GramProvider. +# +# myproxy.server=myproxy.teragrid.org +# myproxy.user=username +# myproxy.pass=password +# myproxy.life=3600 \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/3361df33/modules/gfac/gfac-gsissh/src/test/java/org/apache/airavata/core/gfac/services/impl/GSISSHProviderTestWithMyProxyAuth.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-gsissh/src/test/java/org/apache/airavata/core/gfac/services/impl/GSISSHProviderTestWithMyProxyAuth.java b/modules/gfac/gfac-gsissh/src/test/java/org/apache/airavata/core/gfac/services/impl/GSISSHProviderTestWithMyProxyAuth.java new file mode 100644 index 0000000..be78570 --- /dev/null +++ b/modules/gfac/gfac-gsissh/src/test/java/org/apache/airavata/core/gfac/services/impl/GSISSHProviderTestWithMyProxyAuth.java @@ -0,0 +1,236 @@ +/* + * + * 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.core.gfac.services.impl; + +import java.io.File; +import java.net.URL; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.UUID; + +import org.apache.airavata.commons.gfac.type.ActualParameter; +import org.apache.airavata.commons.gfac.type.ApplicationDescription; +import org.apache.airavata.commons.gfac.type.HostDescription; +import org.apache.airavata.commons.gfac.type.ServiceDescription; +import org.apache.airavata.gfac.GFacConfiguration; +import org.apache.airavata.gfac.GFacException; +import org.apache.airavata.gfac.SecurityContext; +import org.apache.airavata.gfac.context.ApplicationContext; +import org.apache.airavata.gfac.context.JobExecutionContext; +import org.apache.airavata.gfac.context.MessageContext; +import org.apache.airavata.gfac.context.security.GSISecurityContext; +import org.apache.airavata.gfac.cpi.GFacImpl; +import org.apache.airavata.gsi.ssh.api.Cluster; +import org.apache.airavata.gsi.ssh.api.SSHApiException; +import org.apache.airavata.gsi.ssh.api.ServerInfo; +import org.apache.airavata.gsi.ssh.api.authentication.GSIAuthenticationInfo; +import org.apache.airavata.gsi.ssh.impl.PBSCluster; +import org.apache.airavata.gsi.ssh.impl.authentication.MyProxyAuthenticationInfo; +import org.apache.airavata.gsi.ssh.util.CommonUtils; +import org.apache.airavata.model.workspace.experiment.TaskDetails; +import org.apache.airavata.persistance.registry.jpa.impl.RegistryFactory; +import org.apache.airavata.schemas.gfac.ApplicationDeploymentDescriptionType; +import org.apache.airavata.schemas.gfac.GsisshHostType; +import org.apache.airavata.schemas.gfac.HpcApplicationDeploymentType; +import org.apache.airavata.schemas.gfac.InputParameterType; +import org.apache.airavata.schemas.gfac.JobTypeType; +import org.apache.airavata.schemas.gfac.OutputParameterType; +import org.apache.airavata.schemas.gfac.ProjectAccountType; +import org.apache.airavata.schemas.gfac.QueueType; +import org.apache.airavata.schemas.gfac.StringParameterType; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +public class GSISSHProviderTestWithMyProxyAuth { + private JobExecutionContext jobExecutionContext; + + //FIXME: move job properties to configuration file + private static final String hostAddress = "trestles.sdsc.edu"; + private static final String hostName = "trestles"; + private String myProxyUserName; + private String myProxyPassword; + private String workingDirectory; + private String certificateLocation = "/Users/lahirugunathilake/Downloads/certificates"; + + @BeforeClass + public void setUp() throws Exception { +// System.setProperty("myproxy.user", "ogce"); +// System.setProperty("myproxy.password", ""); +// System.setProperty("basedir", "/Users/lahirugunathilake/Downloads"); +// System.setProperty("gsi.working.directory", "/home/ogce"); +// System.setProperty("gsi.certificate.path", "/Users/lahirugunathilake/Downloads/certificates"); + certificateLocation = System.getProperty("trusted.cert.location"); + myProxyUserName = System.getProperty("myproxy.username"); + myProxyPassword = System.getProperty("myproxy.password"); + workingDirectory = System.getProperty("gsi.working.directory"); + + if (myProxyUserName == null || myProxyPassword == null || certificateLocation == null) { + System.out.println(">>>>>> Please run tests with my proxy user name and password. " + + "E.g :- mvn clean install -Dmyproxy.username=xxx -Dmyproxy.password=xxx -Dgsi.working.directory=/path<<<<<<<"); + throw new Exception("Need my proxy user name password to run tests."); + } + URL resource = GSISSHProviderTestWithMyProxyAuth.class.getClassLoader().getResource(org.apache.airavata.common.utils.Constants.GFAC_CONFIG_XML); + assert resource != null; + System.out.println(resource.getFile()); + GFacConfiguration gFacConfiguration = GFacConfiguration.create(new File(resource.getPath()), null, null); + +// gFacConfiguration.setMyProxyLifeCycle(3600); +// gFacConfiguration.setMyProxyServer("myproxy.teragrid.org"); +// gFacConfiguration.setMyProxyUser("*****"); +// gFacConfiguration.setMyProxyPassphrase("*****"); +// gFacConfiguration.setTrustedCertLocation("./certificates"); +// //have to set InFlwo Handlers and outFlowHandlers +// gFacConfiguration.setInHandlers(Arrays.asList(new String[] {"org.apache.airavata.gfac.handler.GramDirectorySetupHandler","org.apache.airavata.gfac.handler.GridFTPInputHandler"})); +// gFacConfiguration.setOutHandlers(Arrays.asList(new String[] {"org.apache.airavata.gfac.handler.GridFTPOutputHandler"})); + + /* + * Host + */ + HostDescription host = new HostDescription(GsisshHostType.type); + host.getType().setHostAddress(hostAddress); + host.getType().setHostName(hostName); + + /* + * App + */ + ApplicationDescription appDesc = new ApplicationDescription(HpcApplicationDeploymentType.type); + HpcApplicationDeploymentType app = (HpcApplicationDeploymentType) appDesc.getType(); + ApplicationDeploymentDescriptionType.ApplicationName name = ApplicationDeploymentDescriptionType.ApplicationName.Factory.newInstance(); + name.setStringValue("EchoLocal"); + app.setApplicationName(name); + ProjectAccountType projectAccountType = app.addNewProjectAccount(); + projectAccountType.setProjectAccountNumber("sds128"); + + QueueType queueType = app.addNewQueue(); + queueType.setQueueName("normal"); + + app.setCpuCount(1); + app.setJobType(JobTypeType.SERIAL); + app.setNodeCount(1); + app.setProcessorsPerNode(1); + + /* + * Use bat file if it is compiled on Windows + */ + app.setExecutableLocation("/bin/echo"); + + /* + * Default tmp location + */ + String tempDir = "/home/ogce/scratch/"; + String date = (new Date()).toString(); + date = date.replaceAll(" ", "_"); + date = date.replaceAll(":", "_"); + + tempDir = workingDirectory + File.separator + + "SimpleEcho" + "_" + date + "_" + UUID.randomUUID(); + + System.out.println(tempDir); + app.setScratchWorkingDirectory(tempDir); + app.setStaticWorkingDirectory(tempDir); + app.setInputDataDirectory(tempDir + File.separator + "inputData"); + app.setOutputDataDirectory(tempDir + File.separator + "outputData"); + app.setStandardOutput(tempDir + File.separator + app.getApplicationName().getStringValue() + ".stdout"); + app.setStandardError(tempDir + File.separator + app.getApplicationName().getStringValue() + ".stderr"); + app.setMaxWallTime(5); + app.setInstalledParentPath("/opt/torque/bin/"); + + /* + * Service + */ + ServiceDescription serv = new ServiceDescription(); + serv.getType().setName("SimpleEcho"); + + List<InputParameterType> inputList = new ArrayList<InputParameterType>(); + + InputParameterType input = InputParameterType.Factory.newInstance(); + input.setParameterName("echo_input"); + input.setParameterType(StringParameterType.Factory.newInstance()); + inputList.add(input); + + InputParameterType[] inputParamList = inputList.toArray(new InputParameterType[inputList + + .size()]); + List<OutputParameterType> outputList = new ArrayList<OutputParameterType>(); + OutputParameterType output = OutputParameterType.Factory.newInstance(); + output.setParameterName("echo_output"); + output.setParameterType(StringParameterType.Factory.newInstance()); + outputList.add(output); + + OutputParameterType[] outputParamList = outputList + .toArray(new OutputParameterType[outputList.size()]); + + serv.getType().setInputParametersArray(inputParamList); + serv.getType().setOutputParametersArray(outputParamList); + + jobExecutionContext = new JobExecutionContext(gFacConfiguration, serv.getType().getName()); + // Adding security context + jobExecutionContext.addSecurityContext(GSISecurityContext.GSI_SECURITY_CONTEXT, getSecurityContext(app)); + ApplicationContext applicationContext = new ApplicationContext(); + jobExecutionContext.setApplicationContext(applicationContext); + applicationContext.setServiceDescription(serv); + applicationContext.setApplicationDeploymentDescription(appDesc); + applicationContext.setHostDescription(host); + + MessageContext inMessage = new MessageContext(); + ActualParameter echo_input = new ActualParameter(); + ((StringParameterType) echo_input.getType()).setValue("echo_output=hello"); + inMessage.addParameter("echo_input", echo_input); + + + jobExecutionContext.setInMessageContext(inMessage); + + MessageContext outMessage = new MessageContext(); + ActualParameter echo_out = new ActualParameter(); +// ((StringParameterType)echo_input.getType()).setValue("echo_output=hello"); + outMessage.addParameter("echo_output", echo_out); + jobExecutionContext.setRegistry(RegistryFactory.getLoggingRegistry()); + jobExecutionContext.setTaskData(new TaskDetails("11323")); + jobExecutionContext.setOutMessageContext(outMessage); + + } + + private SecurityContext getSecurityContext(HpcApplicationDeploymentType app) { + GSIAuthenticationInfo authenticationInfo + = new MyProxyAuthenticationInfo(myProxyUserName, myProxyPassword, "myproxy.teragrid.org", + 7512, 17280000, certificateLocation); + + // Server info + ServerInfo serverInfo = new ServerInfo("ogce", "trestles.sdsc.edu"); + Cluster pbsCluster = null; + try { + pbsCluster = new PBSCluster(serverInfo, authenticationInfo, CommonUtils.getPBSJobManager(app.getInstalledParentPath())); + } catch (SSHApiException e) { + e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. + } + GSISecurityContext sshSecurityContext = new GSISecurityContext(pbsCluster); + return sshSecurityContext; + } + @Test + public void testGSISSHProvider() throws GFacException { + GFacImpl gFacAPI = new GFacImpl(); + gFacAPI.submitJob(jobExecutionContext); + System.out.println(jobExecutionContext.getJobDetails().getJobDescription()); + System.out.println(jobExecutionContext.getJobDetails().getJobID()); + } + +} http://git-wip-us.apache.org/repos/asf/airavata/blob/3361df33/modules/gfac/gfac-gsissh/src/test/java/org/apache/airavata/core/gfac/services/impl/security/GSISecurityContextTestWithMyProxyAuth.java ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-gsissh/src/test/java/org/apache/airavata/core/gfac/services/impl/security/GSISecurityContextTestWithMyProxyAuth.java b/modules/gfac/gfac-gsissh/src/test/java/org/apache/airavata/core/gfac/services/impl/security/GSISecurityContextTestWithMyProxyAuth.java new file mode 100644 index 0000000..6306e3c --- /dev/null +++ b/modules/gfac/gfac-gsissh/src/test/java/org/apache/airavata/core/gfac/services/impl/security/GSISecurityContextTestWithMyProxyAuth.java @@ -0,0 +1,164 @@ +/* + * + * 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.core.gfac.services.impl.security; + +import junit.framework.Assert; +import org.apache.airavata.common.utils.AiravataUtils; +import org.apache.airavata.common.utils.DatabaseTestCases; +import org.apache.airavata.common.utils.DerbyUtil; +import org.apache.airavata.common.utils.ServerSettings; +import org.apache.airavata.credential.store.store.CredentialReader; +import org.apache.airavata.credential.store.store.CredentialReaderFactory; +import org.apache.airavata.gfac.RequestData; +import org.apache.airavata.gfac.context.security.GSISecurityContext; +import org.apache.log4j.Logger; +import org.ietf.jgss.GSSCredential; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + + +public class GSISecurityContextTestWithMyProxyAuth extends DatabaseTestCases { + + private static String userName; + private static String password; + + private static final Logger log = Logger.getLogger(GSISecurityContextTestWithMyProxyAuth.class); + + @BeforeClass + public static void setUpClass() throws Exception { + AiravataUtils.setExecutionAsServer(); + +// System.setProperty("myproxy.username", "ogce"); +// System.setProperty("myproxy.password", ""); + userName = System.getProperty("myproxy.username"); + password = System.getProperty("myproxy.password"); + System.setProperty("myproxy.server", "myproxy.teragrid.org"); + System.setProperty("myproxy.life", "3600"); + System.setProperty("credential.store.keystore.url", "../configuration/server/src/main/resources/airavata.jks"); + System.setProperty("credential.store.keystore.alias", "airavata"); + System.setProperty("credential.store.keystore.password", "airavata"); + + if (userName == null || password == null || userName.trim().equals("") || password.trim().equals("")) { + log.error("===== Please set myproxy.username and myproxy.password system properties. ======="); + Assert.fail("Please set myproxy.user and myproxy.password system properties."); + } + + log.info("Using my proxy user name - " + userName); + + setUpDatabase(); + + } + + public static void setUpDatabase() throws Exception { + DerbyUtil.startDerbyInServerMode(getHostAddress(), getPort(), getUserName(), getPassword()); + + waitTillServerStarts(); + + + String createTable = "CREATE TABLE CREDENTIALS\n" + "(\n" + + " GATEWAY_ID VARCHAR(256) NOT NULL,\n" + + " TOKEN_ID VARCHAR(256) NOT NULL,\n" + + // Actual token used to identify the credential + " CREDENTIAL BLOB NOT NULL,\n" + " PORTAL_USER_ID VARCHAR(256) NOT NULL,\n" + + " TIME_PERSISTED TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n" + + " PRIMARY KEY (GATEWAY_ID, TOKEN_ID)\n" + ")"; + + String dropTable = "drop table CREDENTIALS"; + + try { + executeSQL(dropTable); + } catch (Exception e) { + } + + executeSQL(createTable); + + } + + @AfterClass + public static void shutDownDatabase() throws Exception { + DerbyUtil.stopDerbyServer(); + } + + private GSSCredential getGSSCredentials() throws Exception { + + GSISecurityContext gsiSecurityContext = getGSISecurityContext(); + + return gsiSecurityContext.getGssCredentials(); + } + + private GSISecurityContext getGSISecurityContext() throws Exception { + + RequestData requestData = new RequestData(); + + requestData.setMyProxyUserName(userName); + requestData.setMyProxyPassword(password); + requestData.setMyProxyServerUrl(ServerSettings.getMyProxyServer()); + requestData.setMyProxyLifeTime(ServerSettings.getMyProxyLifetime()); + CredentialReader credentialReader = CredentialReaderFactory.createCredentialStoreReader(getDbUtil()); + + return new GSISecurityContext(credentialReader, requestData); + } + + @Test + public void testGetGssCredentials() throws Exception { + + Assert.assertNotNull(getGSSCredentials()); + } + /* + @Test + public void testRenewCredentials() throws Exception { + GSISecurityContext gsiSecurityContext = getGSISecurityContext(); + gsiSecurityContext.getGssCredentials(); + Assert.assertNotNull(gsiSecurityContext.renewCredentials()); + + } + + @Test + public void testGetCredentialsFromStore() throws Exception { + GSISecurityContext gsiSecurityContext = getGSISecurityContext(); + Assert.assertNotNull(gsiSecurityContext.getCredentialsFromStore()); + + } */ + + @Test + public void testGetDefaultCredentials() throws Exception { + GSISecurityContext gsiSecurityContext = getGSISecurityContext(); + Assert.assertNotNull(gsiSecurityContext.getDefaultCredentials()); + + } + + @Test + public void testGetProxyCredentials() throws Exception { + GSISecurityContext gsiSecurityContext = getGSISecurityContext(); + Assert.assertNotNull(gsiSecurityContext.getProxyCredentials()); + + } + /* + @Test + public void testRenewCredentialsAsATrustedHost() throws Exception { + GSISecurityContext gsiSecurityContext = getGSISecurityContext(); + gsiSecurityContext.getGssCredentials(); + Assert.assertNotNull(gsiSecurityContext.renewCredentialsAsATrustedHost()); + } */ + +} http://git-wip-us.apache.org/repos/asf/airavata/blob/3361df33/modules/gfac/gfac-gsissh/src/test/resources/PBSTemplate.xslt ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-gsissh/src/test/resources/PBSTemplate.xslt b/modules/gfac/gfac-gsissh/src/test/resources/PBSTemplate.xslt new file mode 100644 index 0000000..e749e9c --- /dev/null +++ b/modules/gfac/gfac-gsissh/src/test/resources/PBSTemplate.xslt @@ -0,0 +1,73 @@ +<!--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. --> +<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:ns="http://airavata.apache.org/gsi/ssh/2012/12"> +<xsl:output method="text" /> +<xsl:template match="/ns:JobDescriptor"> +#! /bin/sh +# PBS batch job script built by Globus job manager +# <xsl:choose> + <xsl:when test="ns:shellName"> +##PBS -S <xsl:value-of select="ns:shellName"/> + </xsl:when></xsl:choose> + <xsl:choose> + <xsl:when test="ns:queueName"> +#PBS -q <xsl:value-of select="ns:queueName"/> + </xsl:when> + </xsl:choose> + <xsl:choose> + <xsl:when test="ns:mailOptions"> +#PBS -m <xsl:value-of select="ns:mailOptions"/> + </xsl:when> + </xsl:choose> + <xsl:choose> +<xsl:when test="ns:acountString"> +#PBS -A <xsl:value-of select="ns:acountString"/> + </xsl:when> + </xsl:choose> + <xsl:choose> + <xsl:when test="ns:maxWallTime"> +#PBS -l walltime=<xsl:value-of select="ns:maxWallTime"/> + </xsl:when> + </xsl:choose> + <xsl:choose> + <xsl:when test="ns:standardOutFile"> +#PBS -o <xsl:value-of select="ns:standardOutFile"/> + </xsl:when> + </xsl:choose> + <xsl:choose> + <xsl:when test="ns:standardOutFile"> +#PBS -e <xsl:value-of select="ns:standardErrorFile"/> + </xsl:when> + </xsl:choose> + <xsl:choose> + <xsl:when test="(ns:nodes) and (ns:processesPerNode)"> +#PBS -l nodes=<xsl:value-of select="ns:nodes"/>:ppn=<xsl:value-of select="ns:processesPerNode"/> +<xsl:text>
</xsl:text> + </xsl:when> + </xsl:choose> +<xsl:for-each select="ns:exports/ns:name"> +<xsl:value-of select="."/>=<xsl:value-of select="./@value"/><xsl:text>
</xsl:text> +export<xsl:text> </xsl:text><xsl:value-of select="."/> +<xsl:text>
</xsl:text> +</xsl:for-each> +<xsl:for-each select="ns:preJobCommands/ns:command"> + <xsl:value-of select="."/><xsl:text> </xsl:text> + </xsl:for-each> +cd <xsl:text> </xsl:text><xsl:value-of select="ns:workingDirectory"/><xsl:text>
</xsl:text> + <xsl:choose><xsl:when test="ns:jobSubmitterCommand"> +<xsl:value-of select="ns:jobSubmitterCommand"/><xsl:text> </xsl:text></xsl:when></xsl:choose><xsl:value-of select="ns:executablePath"/><xsl:text> </xsl:text> +<xsl:for-each select="ns:inputs/ns:input"> + <xsl:value-of select="."/><xsl:text> </xsl:text> + </xsl:for-each> +<xsl:for-each select="ns:postJobCommands/ns:command"> + <xsl:value-of select="."/><xsl:text> </xsl:text> +</xsl:for-each> + +</xsl:template> + +</xsl:stylesheet> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/3361df33/modules/gfac/gfac-gsissh/src/test/resources/gfac-config.xml ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-gsissh/src/test/resources/gfac-config.xml b/modules/gfac/gfac-gsissh/src/test/resources/gfac-config.xml new file mode 100644 index 0000000..00ffbce --- /dev/null +++ b/modules/gfac/gfac-gsissh/src/test/resources/gfac-config.xml @@ -0,0 +1,33 @@ +<!-- ~ 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. --> + +<GFac> + <GlobalHandlers> + <InHandlers> + <Handler class="org.apache.airavata.gfac.handler.AppDescriptorCheckHandler"> + <property name="name" value="value"/> + </Handler> + </InHandlers> + <OutHandlers></OutHandlers> + </GlobalHandlers> + + + <Provider class="org.apache.airavata.gfac.provider.impl.GSISSHProvider" host="org.apache.airavata.schemas.gfac.impl.GsisshHostTypeImpl"> + <InHandlers> + <Handler class="org.apache.airavata.gfac.handler.GSISSHDirectorySetupHandler"/> + <Handler class="org.apache.airavata.gfac.handler.GSISSHInputHandler"/> + </InHandlers> + <OutHandlers> + <Handler class="org.apache.airavata.gfac.handler.GSISSHOutputHandler"/> + </OutHandlers> + </Provider> +</GFac> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/airavata/blob/3361df33/modules/gfac/gfac-gsissh/src/test/resources/logging.properties ---------------------------------------------------------------------- diff --git a/modules/gfac/gfac-gsissh/src/test/resources/logging.properties b/modules/gfac/gfac-gsissh/src/test/resources/logging.properties new file mode 100644 index 0000000..0584d38 --- /dev/null +++ b/modules/gfac/gfac-gsissh/src/test/resources/logging.properties @@ -0,0 +1,42 @@ +# +# 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. +# +# +#default/fallback log4j configuration +# + +# Set root logger level to WARN and its only appender to A1. +log4j.rootLogger=INFO, A1, A2 + +# A1 is set to be a rolling file appender with default params +log4j.appender.A1=org.apache.log4j.RollingFileAppender +log4j.appender.A1.File=target/seclogs.txt + +# A1 uses PatternLayout. +log4j.appender.A1.layout=org.apache.log4j.PatternLayout +log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n + +# A2 is a console appender +log4j.appender.A2=org.apache.log4j.ConsoleAppender + +# A2 uses PatternLayout. +log4j.appender.A2.layout=org.apache.log4j.PatternLayout +log4j.appender.A2.layout.ConversionPattern=%d [%t] %-5p %c{1} %x - %m%n + +log4j.logger.unicore.security=INFO + http://git-wip-us.apache.org/repos/asf/airavata/blob/3361df33/modules/gfac/pom.xml ---------------------------------------------------------------------- diff --git a/modules/gfac/pom.xml b/modules/gfac/pom.xml index 438623f..83c6132 100644 --- a/modules/gfac/pom.xml +++ b/modules/gfac/pom.xml @@ -33,6 +33,7 @@ <module>gfac-core</module> <module>gfac-ec2</module> <module>gfac-ssh</module> + <module>gfac-gsissh</module> </modules> </profile> </profiles>
