| /******************************************************************************* |
| * Copyright (C) 2021 the Eclipse BaSyx Authors |
| * |
| * This program and the accompanying materials are made |
| * available under the terms of the Eclipse Public License 2.0 |
| * which is available at https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| ******************************************************************************/ |
| package org.eclipse.basyx.regression.processengineconnector; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertTrue; |
| |
| import java.util.ArrayList; |
| import java.util.Arrays; |
| |
| import org.eclipse.basyx.aas.manager.ConnectedAssetAdministrationShellManager; |
| import org.eclipse.basyx.aas.metamodel.map.AssetAdministrationShell; |
| import org.eclipse.basyx.aas.metamodel.map.descriptor.AASDescriptor; |
| import org.eclipse.basyx.aas.metamodel.map.descriptor.SubmodelDescriptor; |
| import org.eclipse.basyx.aas.registration.api.IAASRegistryService; |
| import org.eclipse.basyx.aas.registration.memory.InMemoryRegistry; |
| import org.eclipse.basyx.aas.restapi.AASModelProvider; |
| import org.eclipse.basyx.aas.restapi.VABMultiSubmodelProvider; |
| import org.eclipse.basyx.components.processengine.connector.DeviceServiceExecutor; |
| import org.eclipse.basyx.regression.support.processengine.aas.DeviceAdministrationShellFactory; |
| import org.eclipse.basyx.regression.support.processengine.stubs.CoilcarStub; |
| import org.eclipse.basyx.regression.support.processengine.submodel.DeviceSubmodelFactory; |
| import org.eclipse.basyx.submodel.metamodel.api.identifier.IIdentifier; |
| import org.eclipse.basyx.submodel.metamodel.api.identifier.IdentifierType; |
| import org.eclipse.basyx.submodel.metamodel.map.SubModel; |
| import org.eclipse.basyx.submodel.metamodel.map.identifier.Identifier; |
| import org.eclipse.basyx.submodel.restapi.SubModelProvider; |
| import org.eclipse.basyx.testsuite.regression.vab.gateway.ConnectorProviderStub; |
| import org.junit.Before; |
| import org.junit.Test; |
| |
| /** |
| * Test the service invocation using the service executor |
| * |
| * @author zhangzai |
| * |
| */ |
| public class TestAASServicecall { |
| /** |
| * Service Executor to be tested, used by the process engine |
| */ |
| private DeviceServiceExecutor serviceExecutor; |
| |
| /** |
| * A stub for the service sub-model |
| */ |
| private CoilcarStub coilcar; |
| |
| /** |
| * Id of the device (coilcar) aas |
| */ |
| private static final String AAS_ID = "coilcar"; |
| |
| /** |
| * Id of the service submodel |
| */ |
| private static final String SUBMODEL_ID = "submodel1"; |
| |
| /** |
| * Name of the service "liftTo" |
| */ |
| private static final String SERVICE_LIFTTO = "liftTo"; |
| |
| /** |
| * Name of the service "moveTo" |
| */ |
| private static final String SERVICE_MOVETO = "moveTo"; |
| |
| /** |
| * Setup the test environment, create aas and submodels, setup VAB connection |
| */ |
| @Before |
| public void setupDeviceServiceExecutor() { |
| // Create a device-aas for coilcar device with id "coilcar" and submodelid "submodel1" |
| AssetAdministrationShell aas = new DeviceAdministrationShellFactory().create( AAS_ID, SUBMODEL_ID); |
| |
| // Create service stub instead of real coilcar services |
| coilcar = new CoilcarStub(); |
| |
| // Create the submodel of services provided by the coilcar with id "submodel1" |
| SubModel sm = new DeviceSubmodelFactory().create(SUBMODEL_ID, coilcar); |
| |
| // Create VAB multi-submodel provider for holding the sub-models |
| VABMultiSubmodelProvider provider = new VABMultiSubmodelProvider(); |
| |
| // Add sub-model to the provider |
| provider.addSubmodel(new SubModelProvider(sm)); |
| |
| // Add aas to the provider |
| provider.setAssetAdministrationShell(new AASModelProvider(aas)); |
| |
| // Create registry for aas |
| IAASRegistryService registry = new InMemoryRegistry(); |
| |
| // Create aas descriptor |
| IIdentifier id = new Identifier(IdentifierType.CUSTOM, AAS_ID); |
| AASDescriptor aasDescriptor = new AASDescriptor(id, "/aas"); |
| |
| // create submodel descriptor |
| IIdentifier smId = new Identifier(IdentifierType.CUSTOM, SUBMODEL_ID); |
| SubmodelDescriptor smDescriptor = new SubmodelDescriptor("submodel1Name", smId, "/aas/submodels/" + SUBMODEL_ID + "/submodel"); |
| |
| // Add submodel descriptor to aas descriptor |
| aasDescriptor.addSubmodelDescriptor(smDescriptor); |
| |
| // register this aas |
| registry.register(aasDescriptor); |
| |
| // setup the connection-manager with the model-provider |
| ConnectorProviderStub connectorProvider = new ConnectorProviderStub(); |
| connectorProvider.addMapping("", provider); |
| |
| // create the service executor that calls the services using aas |
| ConnectedAssetAdministrationShellManager manager = new ConnectedAssetAdministrationShellManager(registry, |
| connectorProvider); |
| serviceExecutor = new DeviceServiceExecutor(manager); |
| |
| } |
| |
| |
| /** |
| * Test the service invocation of the service-executor |
| */ |
| @Test |
| public void testServicecall() { |
| /* Execute the service "moveTo" on the device "coilcar", |
| * the service is located in sub-model "submodel1" |
| * and has a parameter 123*/ |
| serviceExecutor.executeService(SERVICE_MOVETO, AAS_ID, SUBMODEL_ID, new ArrayList<>(Arrays.asList( new Object[] {123}))); |
| |
| // Validate the parameter and service name is delivered successfully to the device stub |
| assertEquals(123, coilcar.getParameter()); |
| assertTrue(coilcar.getServiceCalled().equals(SERVICE_MOVETO)); |
| |
| /* Execute the service "liftTo" on the device "coilcar", |
| * the service is located in sub-model "submodel1" |
| * and has a parameter 456*/ |
| serviceExecutor.executeService(SERVICE_LIFTTO, AAS_ID, SUBMODEL_ID, new ArrayList<>(Arrays.asList( new Object[] {456}))); |
| |
| // Validate the parameter and service name is delivered successfully to the device stub |
| assertEquals(456, coilcar.getParameter()); |
| assertTrue(coilcar.getServiceCalled().equals(SERVICE_LIFTTO)); |
| |
| /* Execute the service "moveTo" on the device "coilcar", |
| * the service is located in sub-model "submodel1" |
| * and has a parameter 789*/ |
| serviceExecutor.executeService(SERVICE_MOVETO, AAS_ID, SUBMODEL_ID, new ArrayList<>(Arrays.asList( new Object[] {789}))); |
| |
| // Validate the parameter and service name is delivered successfully to the device stub |
| assertEquals(789, coilcar.getParameter()); |
| assertTrue(coilcar.getServiceCalled().equals(SERVICE_MOVETO)); |
| } |
| } |