/** * * 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; import org.apache.airavata.app.catalog.util.Initialize; import org.apache.airavata.common.exception.ApplicationSettingsException; import org.apache.airavata.common.utils.ServerSettings; import org.apache.airavata.model.appcatalog.appdeployment.ApplicationModule; import org.apache.airavata.model.appcatalog.appinterface.ApplicationInterfaceDescription; import org.apache.airavata.model.application.io.DataType; import org.apache.airavata.model.application.io.InputDataObjectType; import org.apache.airavata.model.application.io.OutputDataObjectType; import org.apache.airavata.registry.core.app.catalog.resources.AppCatAbstractResource; import org.apache.airavata.registry.core.experiment.catalog.impl.RegistryFactory; import org.apache.airavata.registry.cpi.AppCatalog; import org.apache.airavata.registry.cpi.AppCatalogException; import org.apache.airavata.registry.cpi.ApplicationInterface; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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; private static int order = 1; private static final Logger logger = LoggerFactory.getLogger(AppInterfaceTest.class); @Before public void setUp() { try { initialize = new Initialize("appcatalog-derby.sql"); initialize.initializeDB(); appcatalog = RegistryFactory.getAppCatalog(); } catch (AppCatalogException e) { logger.error(e.getMessage(), e); } } @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.setApplicationDescription("my testApplication"); description.setApplicationModules(modules); description.setApplicationInputs(inputs); description.setApplicationOutputs(outputs); String appID = appInterface.addApplicationInterface(description, ServerSettings.getDefaultUserGateway()); System.out.println("********** application id ************* : " + appID); ApplicationInterfaceDescription ainterface = null; if (appInterface.isApplicationInterfaceExists(appID)){ ainterface = appInterface.getApplicationInterface(appID); OutputDataObjectType output3 = createAppOutput("output3", "", DataType.STRING); OutputDataObjectType output4 = createAppOutput("output4", "", DataType.STRING); outputs.add(output3); outputs.add(output4); ainterface.setApplicationOutputs(outputs); appInterface.updateApplicationInterface(appID, ainterface); ApplicationInterfaceDescription updateApp = appInterface.getApplicationInterface(appID); List<OutputDataObjectType> appOutputs = updateApp.getApplicationOutputs(); System.out.println("********** application name ************* : " + updateApp.getApplicationName()); System.out.println("********** application description ************* : " + updateApp.getApplicationDescription()); System.out.println("********** output size ************* : " + appOutputs.size()); } 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(AppCatAbstractResource.ApplicationInterfaceConstants.APPLICATION_NAME, "testApplication2"); List<ApplicationInterfaceDescription> apps = appInterface.getApplicationInterfaces(filters); System.out.println("********** Size og app interfaces ************* : " + apps.size()); List<ApplicationInterfaceDescription> appInts = appInterface.getAllApplicationInterfaces(ServerSettings.getDefaultUserGateway()); 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(); } catch (ApplicationSettingsException 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, ServerSettings.getDefaultUserGateway()); } catch (AppCatalogException e) { logger.error(e.getMessage(), e); } catch (ApplicationSettingsException 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"); input.setInputOrder(order++); 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; } }