Skip to content

Commit

Permalink
Add tests and fix NPE
Browse files Browse the repository at this point in the history
Signed-off-by: Guido Grune <g.grune@datainmotion.com>
  • Loading branch information
gg-dim committed May 2, 2024
1 parent a4543ad commit 35548ac
Show file tree
Hide file tree
Showing 5 changed files with 290 additions and 157 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -128,25 +128,7 @@ public static class BasicDtoFieldNames extends ProviderAndServiceFields {
public String bar;
}

@Provider(PROVIDER)
public static class EMFTestDto {

@Model
public EClass providerEClass = TestdataPackage.Literals.TEST_SENSOR;

@Service
public EClass serviceEClass = TestdataPackage.Literals.TEST_TEMPERATUR;

@Service
public EReference service = TestdataPackage.Literals.TEST_SENSOR__TEMP;

@Service
public String serviceName = "temp";

@Data
public String v1;

}


/**
* Tests for class level annotations for provider/service/resource
Expand Down Expand Up @@ -463,11 +445,29 @@ void basicDtoWithBothValuesAndMetadataValues() {
*/
@Nested
public class EMFAnnotated {
@Provider(PROVIDER)
public class EMFTestDto {

@Model
public EClass providerEClass = TestdataPackage.Literals.TEST_SENSOR;

@Service
public EClass serviceEClass = TestdataPackage.Literals.TEST_TEMPERATUR;

@Service
public EReference service = TestdataPackage.Literals.TEST_SENSOR__TEMP;

@Service
public String serviceName = "temp";

@Data
public String v1;

}

@Test
void basicDtoWithBothValuesAndMetadataValues() {

Instant time = Instant.now().minus(Duration.ofDays(3)).truncatedTo(ChronoUnit.MILLIS);

EMFTestDto dto = new EMFTestDto();

dto.v1 = VALUE_2;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,14 @@
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertSame;

import java.lang.reflect.InvocationTargetException;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Optional;

import org.eclipse.emf.common.util.EMap;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.sensinact.core.annotation.dto.Data;
import org.eclipse.sensinact.core.annotation.dto.Model;
import org.eclipse.sensinact.core.annotation.dto.ModelPackageUri;
import org.eclipse.sensinact.core.annotation.dto.Provider;
import org.eclipse.sensinact.core.annotation.dto.Resource;
import org.eclipse.sensinact.core.annotation.dto.Service;
Expand All @@ -45,12 +38,6 @@
import org.eclipse.sensinact.core.twin.SensinactDigitalTwin;
import org.eclipse.sensinact.core.twin.SensinactProvider;
import org.eclipse.sensinact.core.twin.SensinactResource;
import org.eclipse.sensinact.model.core.testdata.DynamicTestSensor;
import org.eclipse.sensinact.model.core.testdata.TestAdmin;
import org.eclipse.sensinact.model.core.testdata.TestSensor;
import org.eclipse.sensinact.model.core.testdata.TestTemperatur;
import org.eclipse.sensinact.model.core.testdata.TestdataFactory;
import org.eclipse.sensinact.model.core.testdata.TestdataPackage;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Nested;
import org.junit.jupiter.api.Test;
Expand Down Expand Up @@ -461,125 +448,4 @@ void testMiddleFails() throws Exception {
}
}

@Nested
public class EMFBasedDTO {

private static final String RESOURCE = "v1";
private static final String SERVICE = "temp";
private static final String DYNAMIC_PROVIDER = "DynamicProvider";

@ModelPackageUri(TestdataPackage.eNS_URI)
@Model("DynamicTestSensor")
@Provider(DYNAMIC_PROVIDER)
@Service(SERVICE)
public class TestModelDTO {
@Resource(RESOURCE)
@Data
public String data;

@Timestamp(ChronoUnit.MILLIS)
public long timestamp;
}

@Provider(DYNAMIC_PROVIDER)
@Service("blub")
public class TestModelDTO2 {

@Model
EClass providerEClass = TestdataPackage.Literals.TEST_SENSOR;

// @Service
// EClass service = TestdataPackage.Literals.TEST_TEMPERATUR;

@Service
EReference serviceRef = TestdataPackage.Literals.TEST_SENSOR__TEMP;

@Resource(RESOURCE)
@Data
public String data;

@Timestamp(ChronoUnit.MILLIS)
public long timestamp;
}

@Test
void basic() throws Exception {
TestSensor sensor = TestdataFactory.eINSTANCE.createTestSensor();
TestAdmin admin = TestdataFactory.eINSTANCE.createTestAdmin();
admin.setTestAdmin("meta1");
TestTemperatur temp = TestdataFactory.eINSTANCE.createTestTemperatur();
temp.setV1("12 °C");
sensor.setTemp(temp);
sensor.setId(PROVIDER);
sensor.setAdmin(admin);

Promise<?> update = push.pushUpdate(sensor);
assertNull(update.getFailure());
assertEquals("12 °C", getResourceValue("TestSensor", PROVIDER, SERVICE, RESOURCE));

temp.setV1("13 °C");
update = push.pushUpdate(sensor);
assertNull(update.getFailure());
assertEquals("13 °C", getResourceValue("TestSensor", PROVIDER, SERVICE, RESOURCE));
}

@Test
void serviceOnly() throws Exception {
TestSensor sensor = TestdataFactory.eINSTANCE.createTestSensor();
TestAdmin admin = TestdataFactory.eINSTANCE.createTestAdmin();
admin.setTestAdmin("meta1");
TestTemperatur temp = TestdataFactory.eINSTANCE.createTestTemperatur();
temp.setV1("12 °C");
sensor.setTemp(temp);
sensor.setId(PROVIDER);
sensor.setAdmin(admin);

Promise<?> update = push.pushUpdate(sensor);
assertNull(update.getFailure());
assertEquals("12 °C", getResourceValue("TestSensor", PROVIDER, SERVICE, RESOURCE));

TestTemperatur temp2 = TestdataFactory.eINSTANCE.createTestTemperatur();
temp2.setV1("13 °C");

update = push.pushUpdate(temp2);
assertNull(update.getFailure());
assertEquals("13 °C", getResourceValue("TestSensor", PROVIDER, SERVICE, RESOURCE));
}

@Test
void dynamicUpdateDTO() throws Exception {
DynamicTestSensor sensor = TestdataFactory.eINSTANCE.createDynamicTestSensor();
sensor.setId(DYNAMIC_PROVIDER);
TestTemperatur temp = TestdataFactory.eINSTANCE.createTestTemperatur();
temp.setV1("12 °C");

EMap<String, org.eclipse.sensinact.model.core.provider.Service> services = sensor.getServices();
services.put(SERVICE, temp);
Promise<?> update = push.pushUpdate(sensor);
assertNull(update.getFailure());
assertEquals("12 °C", getResourceValue("DynamicTestSensor", DYNAMIC_PROVIDER, SERVICE, RESOURCE));

TestModelDTO dto = new TestModelDTO();
dto.data = "13 °C";
dto.timestamp = Instant.now().toEpochMilli();

update = push.pushUpdate(dto);
Throwable t = update.getFailure();
assertNull(t);
assertEquals("13 °C", getResourceValue("DynamicTestSensor", DYNAMIC_PROVIDER, SERVICE, RESOURCE));
}

private Object getResourceValue(String model, String provider, String service, String resource)
throws InvocationTargetException, InterruptedException {
Object value = gt
.execute(new ResourceCommand<Object>(TestdataPackage.eNS_URI, model, provider, service, resource) {

@Override
protected Promise<Object> call(SensinactResource resource, PromiseFactory pf) {
return resource.getValue().map(t -> t.getValue());
}
}).getValue();
return value;
}
}
}

0 comments on commit 35548ac

Please sign in to comment.