|
| 1 | +package org.eclipse.basyx.testsuite.regression.submodel.restapi; |
| 2 | + |
| 3 | +import static org.junit.Assert.assertEquals; |
| 4 | + |
| 5 | +import java.io.ByteArrayOutputStream; |
| 6 | +import java.time.Duration; |
| 7 | +import java.util.Map; |
| 8 | + |
| 9 | +import org.eclipse.basyx.submodel.metamodel.map.Submodel; |
| 10 | +import org.eclipse.basyx.submodel.metamodel.map.submodelelement.SubmodelElement; |
| 11 | +import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.Property; |
| 12 | +import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.property.valuetype.ValueType; |
| 13 | +import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.range.Range; |
| 14 | +import org.eclipse.basyx.submodel.metamodel.map.submodelelement.dataelement.range.RangeValue; |
| 15 | +import org.eclipse.basyx.submodel.restapi.SubmodelProvider; |
| 16 | +import org.eclipse.basyx.vab.coder.json.provider.JSONProvider; |
| 17 | +import org.eclipse.basyx.vab.coder.json.serialization.DefaultTypeFactory; |
| 18 | +import org.eclipse.basyx.vab.coder.json.serialization.GSONTools; |
| 19 | +import org.eclipse.basyx.vab.modelprovider.VABPathTools; |
| 20 | +import org.eclipse.basyx.vab.modelprovider.api.IModelProvider; |
| 21 | +import org.eclipse.basyx.vab.modelprovider.map.VABMapProvider; |
| 22 | +import org.junit.Test; |
| 23 | + |
| 24 | +public class SubmodelProviderIntegrationTest { |
| 25 | + protected final String RANGE_IDSHORT = "rangeProperty"; |
| 26 | + protected final RangeValue RANGE_VALUE = new RangeValue(1, 2); |
| 27 | + protected final String DURATION_IDSHORT = "durationProperty"; |
| 28 | + protected final Duration DURATION_VALUE = Duration.ofSeconds(10); |
| 29 | + |
| 30 | + private final String VALUES_PATH = VABPathTools.concatenatePaths(SubmodelProvider.SUBMODEL, SubmodelProvider.VALUES); |
| 31 | + |
| 32 | + private GSONTools serializer = new GSONTools(new DefaultTypeFactory()); |
| 33 | + |
| 34 | + @Test |
| 35 | + public void serializePropertyValue() { |
| 36 | + Property durationProp = new Property(DURATION_IDSHORT, DURATION_VALUE); |
| 37 | + |
| 38 | + JSONProvider<IModelProvider> jsonProvider = wrapInJSONSubmodelProvider(durationProp); |
| 39 | + Object value = deserializeThroughProvider(jsonProvider, getValuePath(DURATION_IDSHORT)); |
| 40 | + |
| 41 | + assertEquals(DURATION_VALUE.toString(), value); |
| 42 | + } |
| 43 | + |
| 44 | + @Test |
| 45 | + @SuppressWarnings("unchecked") |
| 46 | + public void serializeSubmodelPropertyValues() { |
| 47 | + Property durationProp = new Property(DURATION_IDSHORT, DURATION_VALUE); |
| 48 | + |
| 49 | + JSONProvider<IModelProvider> jsonProvider = wrapInJSONSubmodelProvider(durationProp); |
| 50 | + Object values = deserializeThroughProvider(jsonProvider, VALUES_PATH); |
| 51 | + |
| 52 | + Map<String, Object> valuesMap = (Map<String, Object>) values; |
| 53 | + assertEquals(1, valuesMap.size()); |
| 54 | + assertEquals(DURATION_VALUE.toString(), valuesMap.get(DURATION_IDSHORT)); |
| 55 | + } |
| 56 | + |
| 57 | + @Test |
| 58 | + public void serializeNonPropertyValue() { |
| 59 | + Range rangeProp = new Range(RANGE_IDSHORT, ValueType.Integer); |
| 60 | + rangeProp.setValue(RANGE_VALUE); |
| 61 | + |
| 62 | + JSONProvider<IModelProvider> jsonProvider = wrapInJSONSubmodelProvider(rangeProp); |
| 63 | + Object valueMap = deserializeThroughProvider(jsonProvider, getValuePath(RANGE_IDSHORT)); |
| 64 | + |
| 65 | + assertEquals(RANGE_VALUE, valueMap); |
| 66 | + } |
| 67 | + |
| 68 | + @Test |
| 69 | + @SuppressWarnings("unchecked") |
| 70 | + public void serializeSubmodelNonPropertyValues() { |
| 71 | + Range rangeProp = new Range(RANGE_IDSHORT, ValueType.Integer); |
| 72 | + rangeProp.setValue(RANGE_VALUE); |
| 73 | + |
| 74 | + JSONProvider<IModelProvider> jsonProvider = wrapInJSONSubmodelProvider(rangeProp); |
| 75 | + Map<String, Object> values = (Map<String, Object>) deserializeThroughProvider(jsonProvider, VALUES_PATH); |
| 76 | + |
| 77 | + assertEquals(1, values.size()); |
| 78 | + assertEquals(RANGE_VALUE, values.get(RANGE_IDSHORT)); |
| 79 | + } |
| 80 | + |
| 81 | + private String getValuePath(String propertyIdShort) { |
| 82 | + return VABPathTools.concatenatePaths(SubmodelProvider.SUBMODEL, Submodel.SUBMODELELEMENT, propertyIdShort, Property.VALUE); |
| 83 | + } |
| 84 | + |
| 85 | + private Object deserializeThroughProvider(JSONProvider<IModelProvider> provider, String path) { |
| 86 | + ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); |
| 87 | + provider.processBaSysGet(path, outputStream); |
| 88 | + return serializer.deserialize(outputStream.toString()); |
| 89 | + } |
| 90 | + |
| 91 | + private JSONProvider<IModelProvider> wrapInJSONSubmodelProvider(SubmodelElement submodelElement) { |
| 92 | + Submodel durationSubmodel = new Submodel(); |
| 93 | + durationSubmodel.addSubmodelElement(submodelElement); |
| 94 | + IModelProvider durationMapProvider = new VABMapProvider(durationSubmodel); |
| 95 | + IModelProvider durationSMProvider = new SubmodelProvider(durationMapProvider); |
| 96 | + return new JSONProvider<>(durationSMProvider); |
| 97 | + } |
| 98 | +} |
0 commit comments