Skip to content

Commit

Permalink
Start adding tests
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 Apr 29, 2024
1 parent 2d22832 commit 25cab9a
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 0 deletions.
5 changes: 5 additions & 0 deletions core/impl/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@
<artifactId>metadata</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>${project.groupId}.models</groupId>
<artifactId>testdata</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,19 @@
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.util.List;
import java.util.Optional;

import org.eclipse.emf.common.util.EMap;
import org.eclipse.sensinact.core.annotation.dto.Data;
import org.eclipse.sensinact.core.annotation.dto.Metadata;
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 @@ -38,6 +43,12 @@
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 @@ -448,4 +459,102 @@ void testMiddleFails() throws Exception {
assertEquals(RESOURCE, due.getResource());
}
}



@Nested
public class EMFBasedDTO {

@ModelPackageUri(TestdataPackage.eNS_URI)
@Model("DynamicTestSensor")
@Provider(PROVIDER)
@Service("temp")
public class TestModelDTO {
@Resource("v1")
@Data
public String data;

@Metadata
public String units;
}

@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());
Object value = getResourceValue("TestSensor", "temp", "v1");

assertEquals("12 °C", value);

// Throwable failure = update.getFailure();
// assertNotNull(failure);
// failure.printStackTrace();
// AbstractUpdateDto abstractUpdateDto = updates.get(0 );
// System.out.println(abstractUpdateDto);


}
@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(temp);
assertNull(update.getFailure());
Object value = getResourceValue(PROVIDER, "temp", "v1");

assertEquals("12 °C", value);
}
@Test
void dynamic() throws Exception {
DynamicTestSensor sensor = TestdataFactory.eINSTANCE.createDynamicTestSensor();
sensor.setId(PROVIDER);
TestTemperatur temp = TestdataFactory.eINSTANCE.createTestTemperatur();
temp.setV1("12 °C");

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

TestModelDTO dto = new TestModelDTO();
dto.data = "13 °C";

update = push.pushUpdate(dto);
Throwable t = update.getFailure();
t.printStackTrace();
assertNull(t);
assertEquals("13 °C", getResourceValue("TestSensor", "temp", "v1"));
}



private Object getResourceValue(String model,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 25cab9a

Please sign in to comment.