Selaa lähdekoodia

Created platform for testing database

Lukas Cerny 1 vuosi sitten
vanhempi
commit
54d59bc446

+ 0 - 1
src/main/java/cz/senslog/telemetry/app/Application.java

@@ -2,7 +2,6 @@ package cz.senslog.telemetry.app;
 
 import cz.senslog.telemetry.database.repository.CachedMapLogRepository;
 import cz.senslog.telemetry.database.repository.MapLogRepository;
-import cz.senslog.telemetry.database.repository.SensLogRepository;
 import cz.senslog.telemetry.server.HttpVertxServer;
 import cz.senslog.telemetry.server.TCPVertxServer;
 import io.vertx.core.DeploymentOptions;

+ 44 - 13
src/main/java/cz/senslog/telemetry/app/PropertyConfig.java

@@ -3,6 +3,8 @@ package cz.senslog.telemetry.app;
 import io.vertx.core.json.JsonObject;
 
 import java.util.Objects;
+import java.util.Properties;
+import java.util.function.Function;
 
 public final class PropertyConfig {
     private static PropertyConfig INSTANCE = null;
@@ -14,9 +16,14 @@ public final class PropertyConfig {
     private final Auth authConfig;
 
     public static PropertyConfig getInstance() {
+        return getInstance(System::getenv);
+    }
+
+    private static PropertyConfig getInstance(Function<String, String> getEnv) {
         if (INSTANCE == null) {
             INSTANCE = new PropertyConfig(
-                    new HttpServer(), new TCPServer(), new Database(), new Auth()
+                    new HttpServer(getEnv), new TCPServer(getEnv),
+                    new Database(getEnv), new Auth(getEnv)
             );
         }
         return INSTANCE;
@@ -31,70 +38,94 @@ public final class PropertyConfig {
 
     public static class HttpServer {
 
+        private HttpServer(Function<String, String> getEnv) {
+            this.getEnv = getEnv;
+        }
+
+        private final Function<String, String> getEnv;
+
         public int getPort() {
-            String portStr = System.getenv("SERVER_HTTP_PORT");
+            String portStr = getEnv.apply("SERVER_HTTP_PORT");
             return portStr != null ? Integer.parseInt(portStr) : 8080;
         }
     }
 
     public static class Database {
 
+        private Database(Function<String, String> getEnv) {
+            this.getEnv = getEnv;
+        }
+
+        private final Function<String, String> getEnv;
+
         public int getPort() {
-            String portStr = System.getenv("DATABASE_PORT");
+            String portStr = getEnv.apply("DATABASE_PORT");
             return portStr != null ? Integer.parseInt(portStr) : 5432;
         }
 
         public String getHost() {
-            String host = System.getenv("DATABASE_HOST");
+            String host = getEnv.apply("DATABASE_HOST");
             return host != null ? host : "127.0.0.1";
         }
 
         public String getDatabase() {
-            String name = System.getenv("DATABASE_NAME");
+            String name = getEnv.apply("DATABASE_NAME");
             return Objects.requireNonNull(name, "System environmental variable 'DATABASE_NAME' is not set.");
         }
 
         public String getUser() {
-            String user = System.getenv("DATABASE_USER");
+            String user = getEnv.apply("DATABASE_USER");
             return Objects.requireNonNull(user, "System environmental variable 'DATABASE_USER' is not set.");
         }
 
         public String getPassword() {
-            String passwd = System.getenv("DATABASE_PASSWORD");
+            String passwd = getEnv.apply("DATABASE_PASSWORD");
             return Objects.requireNonNull(passwd, "System environmental variable 'DATABASE_PASSWORD' is not set.");
         }
 
         public int getPoolSize() {
-            String poolSizeStr = System.getenv("DATABASE_POOL_SIZE");
+            String poolSizeStr = getEnv.apply("DATABASE_POOL_SIZE");
             return poolSizeStr != null ? Integer.parseInt(poolSizeStr) : 5;
         }
     }
 
     public static class TCPServer  {
 
+        private TCPServer(Function<String, String> getEnv) {
+            this.getEnv = getEnv;
+        }
+
+        private final Function<String, String> getEnv;
+
         public int getPort() {
-            String portStr = System.getenv("SERVER_TCP_PORT");
+            String portStr = getEnv.apply("SERVER_TCP_PORT");
             return portStr != null ? Integer.parseInt(portStr) : 9999;
         }
     }
 
     public static class Auth {
 
+        private Auth(Function<String, String> getEnv) {
+            this.getEnv = getEnv;
+        }
+
+        private final Function<String, String> getEnv;
+
         public boolean getDisabled() {
-            return Boolean.parseBoolean(System.getenv("AUTH_DISABLED"));
+            return Boolean.parseBoolean(getEnv.apply("AUTH_DISABLED"));
         }
         public String getKeyStorePath() {
-            String user = System.getenv("AUTH_KEYSTORE_PATH");
+            String user = getEnv.apply("AUTH_KEYSTORE_PATH");
             return Objects.requireNonNull(user, "System environmental variable 'AUTH_KEYSTORE_PATH' is not set.");
         }
 
         public String getKeyStoreType() {
-            String user = System.getenv("AUTH_KEYSTORE_TYPE");
+            String user = getEnv.apply("AUTH_KEYSTORE_TYPE");
             return Objects.requireNonNull(user, "System environmental variable 'AUTH_KEYSTORE_TYPE' is not set.");
         }
 
         public String getKeyStorePassword() {
-            String user = System.getenv("AUTH_KEYSTORE_PASSWORD");
+            String user = getEnv.apply("AUTH_KEYSTORE_PASSWORD");
             return Objects.requireNonNull(user, "System environmental variable 'AUTH_KEYSTORE_PASSWORD' is not set.");
         }
     }

+ 9 - 3
src/main/java/cz/senslog/telemetry/database/domain/Campaign.java

@@ -6,15 +6,17 @@ public class Campaign {
 
     private final long id;
     private final String description;
+    private final String name;
     private final OffsetDateTime fromTime;
     private final OffsetDateTime toTime;
 
-    public static Campaign of(long id, String description, OffsetDateTime fromTime, OffsetDateTime toTime) {
-        return new Campaign(id, description, fromTime, toTime);
+    public static Campaign of(long id, String name, String description, OffsetDateTime fromTime, OffsetDateTime toTime) {
+        return new Campaign(id, name, description, fromTime, toTime);
     }
 
-    private Campaign(long id, String description, OffsetDateTime fromTime, OffsetDateTime toTime) {
+    private Campaign(long id, String name, String description, OffsetDateTime fromTime, OffsetDateTime toTime) {
         this.id = id;
+        this.name = name;
         this.description = description;
         this.fromTime = fromTime;
         this.toTime = toTime;
@@ -24,6 +26,10 @@ public class Campaign {
         return id;
     }
 
+    public String getName() {
+        return name;
+    }
+
     public String getDescription() {
         return description;
     }

+ 11 - 6
src/main/java/cz/senslog/telemetry/database/repository/MapLogRepository.java

@@ -519,7 +519,7 @@ public class MapLogRepository implements SensLogRepository {
 
     @Override
     public Future<List<Campaign>> findCampaignsByUnitId(long unitId) {
-        return client.preparedQuery("SELECT c.id, c.description, utc.from_time, utc.to_time " +
+        return client.preparedQuery("SELECT c.id, c.name, c.description, utc.from_time, utc.to_time " +
                         "FROM maplog.unit_to_campaign AS utc " +
                         "JOIN maplog.campaign AS c on c.id = utc.campaign_id " +
                         "WHERE utc.unit_id = $1 ORDER BY c.id")
@@ -527,6 +527,7 @@ public class MapLogRepository implements SensLogRepository {
                 .map(rs -> StreamSupport.stream(rs.spliterator(), false)
                         .map((row) -> Campaign.of(
                                 row.getLong("id"),
+                                row.getString("name"),
                                 row.getString("description"),
                                 row.getOffsetDateTime("from_time"),
                                 row.getOffsetDateTime("to_time")
@@ -536,7 +537,7 @@ public class MapLogRepository implements SensLogRepository {
 
     @Override
     public Future<List<Campaign>> findCampaignsByIdentityAndUnitId(String userIdentity, long unitId) {
-        return client.preparedQuery("SELECT c.id, c.description, utc.from_time, utc.to_time FROM maplog.campaign AS c " +
+        return client.preparedQuery("SELECT c.id, c.name, c.description, utc.from_time, utc.to_time FROM maplog.campaign AS c " +
                         "JOIN maplog.unit_to_campaign AS utc ON c.id = utc.campaign_id " +
                         "JOIN maplog.user_to_campaign_config AS uc ON c.id = uc.campaign_id " +
                         "JOIN maplog.system_user AS su ON su.id = uc.user_id " +
@@ -545,6 +546,7 @@ public class MapLogRepository implements SensLogRepository {
                 .map(rs -> StreamSupport.stream(rs.spliterator(), false)
                         .map((row) -> Campaign.of(
                                 row.getLong("id"),
+                                row.getString("name"),
                                 row.getString("description"),
                                 row.getOffsetDateTime("from_time"),
                                 row.getOffsetDateTime("to_time")
@@ -1139,11 +1141,12 @@ public class MapLogRepository implements SensLogRepository {
 
     @Override
     public Future<List<Campaign>> allCampaigns() {
-        return client.query("SELECT id, description, from_time, to_time FROM maplog.campaign ORDER BY id")
+        return client.query("SELECT id, name, description, from_time, to_time FROM maplog.campaign ORDER BY id")
                 .execute()
                 .map(rs -> StreamSupport.stream(rs.spliterator(), false)
                         .map((row) -> Campaign.of(
                                 row.getLong("id"),
+                                row.getString("name"),
                                 row.getString("description"),
                                 row.getOffsetDateTime("from_time"),
                                 row.getOffsetDateTime("to_time")
@@ -1154,7 +1157,7 @@ public class MapLogRepository implements SensLogRepository {
 
     @Override
     public Future<List<Campaign>> allCampaignsByIdentity(String userIdentity) {
-        return client.preparedQuery("SELECT c.id, c.description, c.from_time, c.to_time FROM maplog.campaign AS c " +
+        return client.preparedQuery("SELECT c.id, c.name, c.description, c.from_time, c.to_time FROM maplog.campaign AS c " +
                 "JOIN maplog.user_to_campaign_config AS utc ON c.id = utc.campaign_id " +
                 "JOIN maplog.system_user AS su ON su.id = utc.user_id " +
                 "WHERE su.identity = $1 GROUP BY c.id ORDER BY c.id")
@@ -1162,6 +1165,7 @@ public class MapLogRepository implements SensLogRepository {
                 .map(rs -> StreamSupport.stream(rs.spliterator(), false)
                         .map((row) -> Campaign.of(
                                 row.getLong("id"),
+                                row.getString("name"),
                                 row.getString("description"),
                                 row.getOffsetDateTime("from_time"),
                                 row.getOffsetDateTime("to_time")
@@ -1172,6 +1176,7 @@ public class MapLogRepository implements SensLogRepository {
 
     private static final Function<Row, Campaign> ROW_TO_CAMPAIGN = (row) -> Campaign.of(
             row.getLong("id"),
+            row.getString("name"),
             row.getString("description"),
             row.getOffsetDateTime("from_time"),
             row.getOffsetDateTime("to_time")
@@ -1179,7 +1184,7 @@ public class MapLogRepository implements SensLogRepository {
 
     @Override
     public Future<Campaign> findCampaignById(long campaignId) {
-        return client.preparedQuery("SELECT id, description, from_time, to_time FROM maplog.campaign WHERE id = $1")
+        return client.preparedQuery("SELECT id, name, description, from_time, to_time FROM maplog.campaign WHERE id = $1")
                 .execute(Tuple.of(campaignId))
                 .map(RowSet::iterator)
                 .map(it -> it.hasNext() ? ROW_TO_CAMPAIGN.apply(it.next()) : null)
@@ -1189,7 +1194,7 @@ public class MapLogRepository implements SensLogRepository {
 
     @Override
     public Future<Campaign> findCampaignByIdentityAndId(String userIdentity, long campaignId) {
-        return client.preparedQuery("SELECT c.id, c.description, c.from_time, c.to_time FROM maplog.campaign AS c " +
+        return client.preparedQuery("SELECT c.id, c.name, c.description, c.from_time, c.to_time FROM maplog.campaign AS c " +
                         "JOIN maplog.user_to_campaign_config AS utc ON c.id = utc.campaign_id " +
                         "JOIN maplog.system_user AS su ON su.id = utc.user_id " +
                         "WHERE c.id = $2 AND su.identity = $1 GROUP BY c.id")

+ 0 - 84
src/main/java/cz/senslog/telemetry/database/repository/PostRepository.java

@@ -1,84 +0,0 @@
-package cz.senslog.telemetry.database.repository;
-
-import cz.senslog.telemetry.database.DataNotFoundException;
-import cz.senslog.telemetry.database.domain.Post;
-import io.vertx.core.Future;
-import io.vertx.pgclient.PgPool;
-import io.vertx.sqlclient.Row;
-import io.vertx.sqlclient.RowSet;
-import io.vertx.sqlclient.SqlResult;
-import io.vertx.sqlclient.Tuple;
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-
-import java.util.List;
-import java.util.Optional;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-import java.util.stream.StreamSupport;
-
-public class PostRepository {
-
-    private static final Logger logger = LogManager.getLogger(PostRepository.class);
-
-    private static Function<Row, Post> MAPPER = (row) ->
-            Post.of(
-                    row.getInteger("id"),
-                    row.getString("text"),
-                    row.getLocalDateTime("created_on")
-            );
-
-    private final PgPool client;
-    private PostRepository(PgPool client) {
-        this.client = client;
-    }
-
-    public static PostRepository create(PgPool client) {
-        return new PostRepository(client);
-    }
-
-    public Future<List<Post>> findAll() {
-        return client.query("SELECT id, text, created_on FROM post ORDER BY id")
-                .execute()
-                .map(rs -> StreamSupport.stream(rs.spliterator(), false)
-                        .map(MAPPER)
-                        .collect(Collectors.toList())
-                );
-    }
-    public Future<Post> findById(Integer id) {
-        return client.preparedQuery("SELECT * FROM post WHERE id=$1")
-                .execute(Tuple.of(id))
-                .map(RowSet::iterator)
-                .map(iterator -> iterator.hasNext() ? MAPPER.apply(iterator.next()) : null)
-                .map(Optional::ofNullable)
-                .map(p -> p.orElseThrow(() -> new DataNotFoundException(id.toString())));
-    }
-    public Future<Integer> save(Post data) {
-        return client.preparedQuery("INSERT INTO post(text) VALUES ($1) RETURNING (id)")
-                .execute(Tuple.of(data.getText()))
-                .map(rs -> rs.iterator().next().getInteger("id"));
-    }
-    public Future<Integer> saveAll(List<Post> data) {
-        List<Tuple> tuples = data.stream()
-                .map(d -> Tuple.of(d.getText()))
-                .collect(Collectors.toList());
-        return client.preparedQuery("INSERT INTO post (text) VALUES ($1)")
-                .executeBatch(tuples)
-                .map(SqlResult::rowCount);
-    }
-    public Future<Integer> update(Post data) {
-        return client.preparedQuery("UPDATE post SET text=$1 WHERE id=$3")
-                .execute(Tuple.of(data.getText(), data.getId()))
-                .map(SqlResult::rowCount);
-    }
-    public Future<Integer> deleteAll() {
-        return client.query("DELETE FROM post")
-                .execute()
-                .map(SqlResult::rowCount);
-    }
-    public Future<Integer> deleteById(Integer id) {
-        return client.preparedQuery("DELETE FROM post WHERE id=$1")
-                .execute(Tuple.of(id))
-                .map(SqlResult::rowCount);
-    }
-}

+ 0 - 61
src/main/java/cz/senslog/telemetry/server/TestHandler.java

@@ -1,61 +0,0 @@
-package cz.senslog.telemetry.server;
-
-import cz.senslog.telemetry.database.repository.PostRepository;
-import cz.senslog.telemetry.database.domain.Post;
-import io.vertx.core.json.Json;
-import io.vertx.ext.web.RoutingContext;
-
-
-public class TestHandler {
-    PostRepository posts;
-    private TestHandler(PostRepository posts) {
-        this.posts = posts;
-    }
-
-    public static TestHandler create(PostRepository posts) {
-        return new TestHandler(posts);
-    }
-
-
-    public void all(RoutingContext rc) {
-        this.posts.findAll()
-                .onSuccess(data -> rc.response().end(Json.encode(data)));
-    }
-
-    public void get(RoutingContext rc) {
-        String id =  rc.pathParams().get("id");
-        this.posts.findById(Integer.parseInt(id))
-                .onSuccess(post -> rc.response().end(Json.encode(post)))
-                .onFailure(throwable -> rc.fail(404, throwable));
-    }
-
-    public void save(RoutingContext rc) {
-        this.posts.save(Post.newPost("new_text"))
-                .onSuccess(savedId -> rc.response()
-                        .putHeader("Location", "/posts/" + savedId)
-                        .setStatusCode(201)
-                        .end()
-                )
-                .onFailure(throwable -> rc.fail(404, throwable));
-    }
-
-    public void update(RoutingContext rc) {
-        String id = rc.pathParams().get("id");
-        String formText = "new_text";
-        this.posts.findById(Integer.parseInt(id))
-                .compose(post -> {
-                    post.setText(formText);
-                    return this.posts.update(post);
-                })
-                .onSuccess(data -> rc.response().setStatusCode(204).end())
-                .onFailure(throwable -> rc.fail(404, throwable));
-    }
-
-    public void delete(RoutingContext rc) {
-        Integer id  = Integer.parseInt(rc.pathParams().get("id"));
-        this.posts.findById(id)
-                .compose(post -> this.posts.deleteById(id))
-                .onSuccess(data -> rc.response().setStatusCode(204).end())
-                .onFailure(throwable -> rc.fail(404, throwable));
-    }
-}

+ 3 - 2
src/main/java/cz/senslog/telemetry/server/ws/OpenAPIHandler.java

@@ -93,7 +93,7 @@ public class OpenAPIHandler {
                                     "Campaign@NavigationLink", String.format("%s/campaigns/%d", host, c.getId())
                             ) : JsonObject.of()).mergeIn(JsonObject.of(
                                     "id", c.getId(),
-                                    "description", c.getDescription(),
+                                    "name", c.getName(),
                                     "fromTime", DATE_TIME_FORMATTER.apply(c.getFromTime(), zone),
                                     "toTime", DATE_TIME_FORMATTER.apply(c.getToTime(), zone)
                             ))).collect(toList())).encode()))
@@ -120,6 +120,7 @@ public class OpenAPIHandler {
                                 "Units@NavigationLink", String.format("%s/campaigns/%d/units", host, c.getId())
                         ) : JsonObject.of()).mergeIn(JsonObject.of(
                                 "id", c.getId(),
+                                "name", c.getName(),
                                 "description", c.getDescription(),
                                 "fromTime", DATE_TIME_FORMATTER.apply(c.getFromTime(), zone),
                                 "toTime", DATE_TIME_FORMATTER.apply(c.getToTime(), zone)
@@ -562,7 +563,7 @@ public class OpenAPIHandler {
                                         "Campaign@NavigationLink", String.format("%s/campaigns/%d", host, c.getId())
                                 ) : JsonObject.of()).mergeIn(JsonObject.of(
                                         "id", c.getId(),
-                                        "description", c.getDescription(),
+                                        "name", c.getName(),
                                         "fromTime", DATE_TIME_FORMATTER.apply(c.getFromTime(), zone),
                                         "toTime", DATE_TIME_FORMATTER.apply(c.getToTime(), zone)
                                 ))).collect(toList())).encode()))

+ 11 - 5
src/main/resources/openAPISpec.yaml

@@ -1632,6 +1632,7 @@ components:
       type: object
       required:
         - id
+        - name
         - fromTime
         - toTime
       x-NavigationLinks:
@@ -1647,7 +1648,7 @@ components:
         id:
           type: integer
           format: int64
-        description:
+        name:
           type: string
         fromTime:
           type: string
@@ -1658,7 +1659,7 @@ components:
       example:
         Campaign@NavigationLink: "<domain>/campaigns/1"
         id: 1
-        description: "Campaign 1"
+        name: "Campaign 1"
         fromTime: "2011-12-03T10:15:30+01:00"
         toTime: "2011-12-03T10:15:30+01:00"
 
@@ -1666,6 +1667,7 @@ components:
       type: object
       required:
         - id
+        - name
         - fromTime
         - toTime
       x-NavigationLinks:
@@ -1702,6 +1704,8 @@ components:
           description: Identifier of the campaign
           type: integer
           format: int64
+        name:
+          type: string
         description:
           description: Text description of the campaign
           type: string
@@ -1719,7 +1723,8 @@ components:
         Locations@NavigationLink: "<domain>/campaigns/1/units/observations/locations"
         Units@NavigationLink: "<domain>/campaigns/1/units"
         id: 1
-        description: "Campaign example"
+        name: "Campaign 1"
+        description: "Campaign description"
         fromTime: "2011-12-03T10:15:30+01:00"
         toTime: "2011-12-03T10:15:30+01:00"
 
@@ -2691,6 +2696,7 @@ components:
       type: object
       required:
         - id
+        - name
         - fromTime
         - toTime
       x-NavigationLinks:
@@ -2706,7 +2712,7 @@ components:
           type: integer
           format: int64
           description: Identifier of the campaign
-        description:
+        name:
           type: string
           description: Description of the campaign
         fromTime:
@@ -2720,7 +2726,7 @@ components:
       example:
         Campaign@NavigationLink: "<domain>/campaigns/1"
         id: 1
-        description: "Campaign 1"
+        name: "Campaign 1"
         fromTime: "2011-12-03T10:15:30+01:00"
         toTime: "2011-12-03T10:15:30+01:00"
 

+ 1 - 17
src/test/java/cz/senslog/telemetry/DataSet.java

@@ -7,16 +7,8 @@ import cz.senslog.telemetry.protocol.domain.IOProperty;
 import cz.senslog.telemetry.protocol.domain.AVLTelemetryObservation;
 import io.vertx.core.buffer.Buffer;
 
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.time.Instant;
-import java.util.Arrays;
 import java.util.List;
-import java.util.Objects;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
@@ -30,15 +22,7 @@ public class DataSet {
     }
 
     private static Buffer readResourceFile(String filePath) {
-        try {
-            URL url = DataSet.class.getClassLoader().getResource(filePath);
-            Path path = Paths.get(Objects.requireNonNull(url).toURI());
-            byte[] fileBytes = Files.readAllBytes(path);
-            return Buffer.buffer(fileBytes);
-        } catch (URISyntaxException | IOException e) {
-            System.err.println(Arrays.toString(e.getStackTrace()));
-            return Buffer.buffer();
-        }
+        return TestResourceUtils.loadResourceFile(filePath);
     }
 
     public static void evaluate(AVLTelemetryObservation expected, UnitTelemetry actual) {

+ 6 - 6
src/test/java/cz/senslog/telemetry/MockSensLogRepository.java

@@ -299,8 +299,8 @@ public class MockSensLogRepository implements SensLogRepository {
     public Future<List<Campaign>> allCampaigns() {
         OffsetDateTime baseTimestamp = OffsetDateTime.ofInstant(BASE_INSTANT_TIMESTAMP, ZoneOffset.UTC);
         return Future.succeededFuture(List.of(
-                Campaign.of(1, "mock(description)", baseTimestamp, baseTimestamp.plusYears(1)),
-                Campaign.of(2, "mock(description)", baseTimestamp, baseTimestamp.plusYears(2))));
+                Campaign.of(1, "mock(name)", "mock(description)", baseTimestamp, baseTimestamp.plusYears(1)),
+                Campaign.of(2, "mock(name)", "mock(description)", baseTimestamp, baseTimestamp.plusYears(2))));
     }
 
     @Override
@@ -311,7 +311,7 @@ public class MockSensLogRepository implements SensLogRepository {
     @Override
     public Future<Campaign> findCampaignById(long campaignId) {
         OffsetDateTime baseTimestamp = OffsetDateTime.ofInstant(BASE_INSTANT_TIMESTAMP, ZoneOffset.UTC);
-        return Future.succeededFuture(Campaign.of(1, "mock(description)", baseTimestamp, baseTimestamp.plusYears(1)));
+        return Future.succeededFuture(Campaign.of(1, "mock(name)","mock(description)", baseTimestamp, baseTimestamp.plusYears(1)));
     }
 
     @Override
@@ -323,9 +323,9 @@ public class MockSensLogRepository implements SensLogRepository {
     public Future<List<Campaign>> findCampaignsByUnitId(long unitId) {
         OffsetDateTime baseTimestamp = OffsetDateTime.ofInstant(BASE_INSTANT_TIMESTAMP, ZoneOffset.UTC);
         return Future.succeededFuture(List.of(
-                Campaign.of(1, "mock(description)", baseTimestamp, baseTimestamp.plusMonths(1)),
-                Campaign.of(2, "mock(description)", baseTimestamp.plusMonths(1), baseTimestamp.plusMonths(2)),
-                Campaign.of(3, "mock(description)", baseTimestamp.plusMonths(2), baseTimestamp.plusMonths(3)))
+                Campaign.of(1, "mock(name)","mock(description)", baseTimestamp, baseTimestamp.plusMonths(1)),
+                Campaign.of(2, "mock(name)","mock(description)", baseTimestamp.plusMonths(1), baseTimestamp.plusMonths(2)),
+                Campaign.of(3, "mock(name)","mock(description)", baseTimestamp.plusMonths(2), baseTimestamp.plusMonths(3)))
         );
     }
 

+ 0 - 25
src/test/java/cz/senslog/telemetry/TestPropertiesUtils.java

@@ -1,25 +0,0 @@
-package cz.senslog.telemetry;
-
-import java.io.IOException;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.Objects;
-import java.util.Properties;
-
-public final class TestPropertiesUtils {
-
-    public static Properties loadFromResources(String filename) {
-        Properties props = new Properties();
-        try {
-            URL url = TestPropertiesUtils.class.getClassLoader().getResource(filename);
-            Path path = Paths.get(Objects.requireNonNull(url).toURI());
-            props.load(Files.newInputStream(path));
-        } catch (URISyntaxException | IOException e) {
-            System.err.println(e.getMessage());
-        }
-        return props;
-    }
-}

+ 40 - 0
src/test/java/cz/senslog/telemetry/TestResourceUtils.java

@@ -0,0 +1,40 @@
+package cz.senslog.telemetry;
+
+import io.vertx.core.buffer.Buffer;
+
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Objects;
+import java.util.Properties;
+
+public final class TestResourceUtils {
+
+    public static Path getResourcePath(String filePath) throws URISyntaxException {
+        URL url = TestResourceUtils.class.getClassLoader().getResource(filePath);
+        return Paths.get(Objects.requireNonNull(url).toURI());
+    }
+
+    public static Buffer loadResourceFile(String filePath) {
+        try {
+            return Buffer.buffer(Files.readAllBytes(getResourcePath(filePath)));
+        } catch (URISyntaxException | IOException e) {
+            System.err.println(Arrays.toString(e.getStackTrace()));
+            return Buffer.buffer();
+        }
+    }
+
+    public static Properties loadProperties(String filename) {
+        Properties props = new Properties();
+        try {
+            props.load(Files.newInputStream(getResourcePath((filename))));
+        } catch (URISyntaxException | IOException e) {
+            System.err.println(e.getMessage());
+        }
+        return props;
+    }
+}

+ 36 - 66
src/test/java/cz/senslog/telemetry/database/repository/MapLogRepositoryTest.java

@@ -1,13 +1,9 @@
 package cz.senslog.telemetry.database.repository;
 
-import cz.senslog.telemetry.BinaryDataSet;
-import cz.senslog.telemetry.DataSet;
-import cz.senslog.telemetry.TestPropertiesUtils;
+import cz.senslog.telemetry.TestResourceUtils;
 import cz.senslog.telemetry.app.PropertyConfig;
-import cz.senslog.telemetry.database.domain.EntityAction;
-import cz.senslog.telemetry.database.domain.Unit;
+import cz.senslog.telemetry.database.domain.Campaign;
 import io.vertx.core.Vertx;
-import io.vertx.core.json.JsonObject;
 import io.vertx.junit5.VertxExtension;
 import io.vertx.junit5.VertxTestContext;
 import io.vertx.sqlclient.Pool;
@@ -19,6 +15,9 @@ import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
 import uk.org.webcompere.systemstubs.jupiter.SystemStub;
 import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension;
 
+import java.io.IOException;
+import java.net.URISyntaxException;
+import java.nio.file.Files;
 import java.time.LocalDateTime;
 import java.time.OffsetDateTime;
 import java.time.ZoneOffset;
@@ -28,11 +27,12 @@ import java.util.Properties;
 import static org.assertj.core.api.Assertions.assertThat;
 
 @ExtendWith({VertxExtension.class, SystemStubsExtension.class})
+@TestInstance(TestInstance.Lifecycle.PER_CLASS)
 class MapLogRepositoryTest {
 
-    private static final long TEST_UNIT_ID = 100001;
-    private static final BinaryDataSet<String> IMEI_DATASET = DataSet.IMEI_1();
-    private static final Unit TEST_UNIT = Unit.of(TEST_UNIT_ID, IMEI_DATASET.getObject());
+    private static final String JUNIT_ENV_FILE = "tests.junit.env";
+    private static final String JUNIT_DB_SETUP = "db/junit_setup.sql";
+    private static final String JUNIT_DB_TEARDOWN = "db/junit_teardown.sql";
 
     @SystemStub
     private EnvironmentVariables envVariable;
@@ -41,80 +41,50 @@ class MapLogRepositoryTest {
 
     private MapLogRepository repo;
 
-    @BeforeEach
-    void create_repository(Vertx vertx, VertxTestContext testContext) {
-        Properties props = TestPropertiesUtils.loadFromResources("tests.junit.env");
+
+    @BeforeAll
+    public void setUp(Vertx vertx, VertxTestContext testContext) throws IOException, URISyntaxException {
+        Properties props = TestResourceUtils.loadProperties(JUNIT_ENV_FILE);
         for (Map.Entry<Object, Object> propEntry : props.entrySet()) {
             envVariable.set(propEntry.getKey(), propEntry.getValue());
         }
 
-        JsonObject dbConfig = PropertyConfig.getInstance().db();
+        PropertyConfig.Database dbConfig = PropertyConfig.getInstance().dbConfig();
         dbPool = Pool.pool(new SqlConnectOptions()
-                .setPort(dbConfig.getInteger("port"))
-                .setHost(dbConfig.getString("host"))
-                .setDatabase(dbConfig.getString("database"))
-                .setUser(dbConfig.getString("user"))
-                .setPassword(dbConfig.getString("password")), new PoolOptions()
-                .setMaxSize(dbConfig.getInteger("pool.size")));
+                .setPort(dbConfig.getPort())
+                .setHost(dbConfig.getHost())
+                .setDatabase(dbConfig.getDatabase())
+                .setUser(dbConfig.getUser())
+                .setPassword(dbConfig.getPassword()), new PoolOptions()
+                .setMaxSize(dbConfig.getPoolSize()));
 
         repo = MapLogRepository.create(dbPool);
 
-        testContext.completeNow();
-
-        // create sensor network
-//        pgPool.preparedQuery("INSERT INTO maplog.unit_type(unit_type_id, type_name) VALUES($1, $2) RETURNING (unit_type_id)")
-//                .execute(Tuple.of("T", "test"))
-//                .map(rs -> rs.iterator().next().getString("unit_type_id"))
-//                .onComplete(unit_type_id -> pgPool.preparedQuery("INSERT INTO  maplog.unit(unit_id, imei, unit_type_id) VALUES($1, $2, $3) RETURNING (unit_id)")
-//                        .execute(Tuple.of(TEST_UNIT.getUnitId(), TEST_UNIT.getImei(), unit_type_id.result()))
-//                        .map(rs -> rs.iterator().next().getLong("unit_id"))
-//                        .onComplete(testContext.succeeding(unit_id -> testContext.verify(() -> {
-//                            assertThat(unit_id).isEqualTo(TEST_UNIT.getUnitId());
-//                            testContext.completeNow();
-//                        })))
-//                );
+        dbPool.query(Files.readString(TestResourceUtils.getResourcePath(JUNIT_DB_SETUP))).execute()
+                .onComplete(testContext.succeeding(res -> testContext.completeNow()));
+    }
 
+    @AfterAll
+    public void tearDown(Vertx vertx, VertxTestContext testContext) throws IOException, URISyntaxException {
+        dbPool.query(Files.readString(TestResourceUtils.getResourcePath(JUNIT_DB_TEARDOWN))).execute()
+                .onComplete(testContext.succeeding(res -> testContext.completeNow()));
     }
 
     @Test
-    void saveDriverActivity(Vertx vertx, VertxTestContext testContext) {
-
-        final int driverId = 1;
-        final int actionId = 8;
-        final OffsetDateTime timestamp = OffsetDateTime.of(LocalDateTime.of(2023, 1, 10, 5, 33), ZoneOffset.UTC);
+    void allCampaigns(Vertx vertx, VertxTestContext testContext) {
+        repo.allCampaigns().onComplete(testContext.succeeding(data -> testContext.verify(() -> {
+            assertThat(data.size()).isEqualTo(1);
 
-        EntityAction dr = new EntityAction(1000, driverId, actionId, timestamp);
+            Campaign c = data.get(0);
+            assertThat(c.getId()).isEqualTo(1);
+            assertThat(c.getName()).isEqualTo("mock(name)");
+            assertThat(c.getDescription()).isEqualTo("mock(description)");
+            assertThat(c.getFromTime()).isEqualTo(OffsetDateTime.of(LocalDateTime.of(2023, 12, 24, 18, 30, 0), ZoneOffset.UTC));
+            assertThat(c.getToTime()).isEqualTo(OffsetDateTime.of(LocalDateTime.of(2024, 12, 24, 18, 30, 0), ZoneOffset.UTC));
 
-        repo.updateEvent(dr).onComplete(testContext.succeeding(res -> testContext.verify(() -> {
-            assertThat(res).isGreaterThan(0);
             testContext.completeNow();
         })));
     }
 
-//    @Test
-//    void save(Vertx vertx, VertxTestContext testContext) {
-//
-//        Location location = Location.of(49.7384f, 13.3736f, 0, 0);
-//        UnitTelemetry obs = UnitTelemetry.of(TEST_UNIT_ID, OffsetDateTime.now(), location, 0, JsonObject.of());
-//
-//        List<UnitTelemetry> data = List.of(obs);
-//
-//        repo.saveAllTelemetry(data).onComplete(testContext.succeeding(res -> testContext.verify(() -> {
-//            assertThat(res).isEqualTo(data.size());
-//            testContext.completeNow();
-//        })));
-//    }
-
-//    @AfterEach
-//    void clean(Vertx vertx, VertxTestContext testContext) {
-//        pgPool.preparedQuery("DELETE FROM maplog.unit WHERE unit_id = $1 RETURNING (unit_type_id)")
-//                .execute(Tuple.of(TEST_UNIT_ID))
-//                .map(rs -> rs.iterator().next().getString("unit_type_id"))
-//                .onComplete(delUnit ->
-//                        pgPool.preparedQuery("DELETE FROM maplog.unit_type WHERE unit_type_id = $1")
-//                                .execute(Tuple.of(delUnit.result()))
-//                                .onComplete(testContext.succeedingThenComplete())
-//                );
-//    }
 
 }

+ 2 - 2
src/test/java/cz/senslog/telemetry/database/validation/UnitTelemetryValidationTest.java

@@ -21,7 +21,7 @@ class UnitTelemetryValidationTest {
         Location location = Location.of(0f, 0f);
         JsonObject observedValues = JsonObject.of();
 
-        Campaign campaign = Campaign.of(1, null, baseTime, baseTime.plusMonths(1));
+        Campaign campaign = Campaign.of(1, "mock(name)", "mock(description)", baseTime, baseTime.plusMonths(1));
         UnitTelemetry t1 = UnitTelemetry.of(1000L, baseTime, location, 0, observedValues);
         UnitTelemetry t2 = UnitTelemetry.of(2000L, baseTime.plusMonths(1).minusSeconds(1), location, 0, observedValues);
         UnitTelemetry t3 = UnitTelemetry.of(3000L, baseTime.plusMonths(1), location, 0, observedValues);
@@ -39,7 +39,7 @@ class UnitTelemetryValidationTest {
         Location location = Location.of(0f, 0f);
         JsonObject observedValues = JsonObject.of();
 
-        Campaign campaign = Campaign.of(1, null, baseTime, baseTime.plusMonths(1));
+        Campaign campaign = Campaign.of(1, "mock(name)", "mock(description)", baseTime, baseTime.plusMonths(1));
 
         List<UnitTelemetry> telemetries = List.of(
                 UnitTelemetry.of(1000L, baseTime, location, 0, observedValues),

+ 2 - 2
src/test/java/cz/senslog/telemetry/server/ws/OpenAPIHandlerAutoTest.java

@@ -3,7 +3,7 @@ package cz.senslog.telemetry.server.ws;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import cz.senslog.telemetry.MockSensLogRepository;
-import cz.senslog.telemetry.TestPropertiesUtils;
+import cz.senslog.telemetry.TestResourceUtils;
 import cz.senslog.telemetry.app.PropertyConfig;
 import cz.senslog.telemetry.server.HttpVertxServer;
 import cz.senslog.telemetry.utils.HttpParamsBuilder;
@@ -224,7 +224,7 @@ class OpenAPIHandlerAutoTest {
     @BeforeEach
     @DisplayName("Deploy the HTTP Server verticle")
     void deployVerticle(Vertx vertx, VertxTestContext testContext) {
-        Properties props = TestPropertiesUtils.loadFromResources("tests.junit.env");
+        Properties props = TestResourceUtils.loadProperties("tests.junit.env");
         for (Map.Entry<Object, Object> propEntry : props.entrySet()) {
             envVariable.set(propEntry.getKey(), propEntry.getValue());
         }

+ 85 - 82
src/test/java/cz/senslog/telemetry/server/ws/OpenAPIHandlerTest.java

@@ -3,7 +3,7 @@ package cz.senslog.telemetry.server.ws;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
-import cz.senslog.telemetry.TestPropertiesUtils;
+import cz.senslog.telemetry.TestResourceUtils;
 import cz.senslog.telemetry.app.PropertyConfig;
 import cz.senslog.telemetry.database.PagingRetrieve;
 import cz.senslog.telemetry.database.domain.*;
@@ -56,7 +56,6 @@ import static org.mockito.ArgumentMatchers.*;
 @ExtendWith({VertxExtension.class, SystemStubsExtension.class})
 class OpenAPIHandlerTest {
 
-    private static final int PORT = 8080;
     private static final String HOST = "localhost";
 
     private static final Instant BASE_INSTANT_TIMESTAMP = LocalDateTime.of(2023, 1, 1, 0, 0).toInstant(ZoneOffset.UTC);
@@ -77,6 +76,8 @@ class OpenAPIHandlerTest {
         }
     }
 
+    private int serverPort;
+
     @SystemStub
     private EnvironmentVariables envVariable;
 
@@ -106,7 +107,7 @@ class OpenAPIHandlerTest {
     @BeforeEach
     @DisplayName("Deploy the HTTP Server verticle")
     void deploy_verticle(Vertx vertx, VertxTestContext testContext) {
-        Properties props = TestPropertiesUtils.loadFromResources("tests.junit.env");
+        Properties props = TestResourceUtils.loadProperties("tests.junit.env");
         for (Map.Entry<Object, Object> propEntry : props.entrySet()) {
             envVariable.set(propEntry.getKey(), propEntry.getValue());
         }
@@ -114,6 +115,8 @@ class OpenAPIHandlerTest {
         repo = Mockito.mock(SensLogRepository.class);
 
         PropertyConfig config = PropertyConfig.getInstance();
+        serverPort = config.httpServerConfig().getPort();
+
         vertx.deployVerticle(new HttpVertxServer(repo), new DeploymentOptions().setConfig(JsonObject.of(
                 "server", config.server(),
                 "auth", config.auth()
@@ -143,7 +146,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/info")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/info")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap().add(HttpHeaders.ACCEPT, JSON.contentType()));
 
         vertx.createHttpClient().request(reqOpt)
@@ -159,8 +162,8 @@ class OpenAPIHandlerTest {
         return Stream.of(
                 Arguments.of(
                         Future.succeededFuture(List.of(
-                            Campaign.of(1, "mock(description)", baseTimestamp, baseTimestamp.plusYears(1)),
-                            Campaign.of(2, "mock(description)", baseTimestamp, baseTimestamp.plusYears(2)))),
+                            Campaign.of(1, "mock(name)", "mock(description)", baseTimestamp, baseTimestamp.plusYears(1)),
+                            Campaign.of(2, "mock(name)","mock(description)", baseTimestamp, baseTimestamp.plusYears(2)))),
                         SUCCESS, JSON
                 ),
                 Arguments.of(
@@ -185,7 +188,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/campaigns")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/campaigns")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -201,7 +204,7 @@ class OpenAPIHandlerTest {
         OffsetDateTime baseTimestamp = OffsetDateTime.ofInstant(BASE_INSTANT_TIMESTAMP, ZoneOffset.UTC);
         return Stream.of(
                 Arguments.of(
-                        Future.succeededFuture(Campaign.of(1, "mock(description)", baseTimestamp, baseTimestamp.plusYears(1))),
+                        Future.succeededFuture(Campaign.of(1, "mock(name)","mock(description)", baseTimestamp, baseTimestamp.plusYears(1))),
                         SUCCESS, JSON
                 ),
                 Arguments.of(
@@ -222,7 +225,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/campaigns/1")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/campaigns/1")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -238,7 +241,7 @@ class OpenAPIHandlerTest {
         OffsetDateTime baseTimestamp = OffsetDateTime.ofInstant(BASE_INSTANT_TIMESTAMP, ZoneOffset.UTC);
         return Stream.of(
                 Arguments.of(
-                        Future.succeededFuture(Campaign.of(1, "mock(description)", baseTimestamp, baseTimestamp.plusYears(1))),
+                        Future.succeededFuture(Campaign.of(1, "mock(name)","mock(description)", baseTimestamp, baseTimestamp.plusYears(1))),
                         "UTC",
                         Tuple.of(
                                 OffsetDateTime.ofInstant(BASE_INSTANT_TIMESTAMP, ZoneOffset.UTC).format(ISO_OFFSET_DATE_TIME),
@@ -248,7 +251,7 @@ class OpenAPIHandlerTest {
 
                 ),
                 Arguments.of(
-                        Future.succeededFuture(Campaign.of(1, "mock(description)", baseTimestamp, baseTimestamp.plusYears(1))),
+                        Future.succeededFuture(Campaign.of(1, "mock(name)","mock(description)", baseTimestamp, baseTimestamp.plusYears(1))),
                         "%2b2",
                         Tuple.of(
                                 OffsetDateTime.ofInstant(BASE_INSTANT_TIMESTAMP, ZoneOffset.ofHours(2)).format(ISO_OFFSET_DATE_TIME),
@@ -267,7 +270,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findCampaignById(anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/campaigns/1?zone=%s&navigationLinks=%s", zoneParam, navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -319,7 +322,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/campaigns/1/units")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/campaigns/1/units")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -366,7 +369,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findUnitsByCampaignId(anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/campaigns/1/units?zone=%s&navigationLinks=%s", zoneParam, navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -413,7 +416,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/campaigns/1/units/1000")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/campaigns/1/units/1000")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -458,7 +461,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findUnitByIdAndCampaignId(anyLong(), anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/campaigns/1/units/1000?zone=%s&navigationLinks=%s", zoneParam, navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -512,7 +515,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/campaigns/1/units/1000/sensors")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/campaigns/1/units/1000/sensors")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -540,7 +543,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findSensorsByCampaignIdAndUnitId(anyLong(), anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/campaigns/1/units/1000/sensors?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -580,7 +583,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/campaigns/1/units/1000/sensors/105")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/campaigns/1/units/1000/sensors/105")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -608,7 +611,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findSensorByCampaignIdAndUnitId(anyLong(), anyLong(), anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/campaigns/1/units/1000/sensors/105?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -656,7 +659,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/units")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/units")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -690,7 +693,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/units/1000")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/units/1000")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -718,7 +721,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findUnitById(anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/units/1000?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -765,7 +768,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/units/1000/sensors")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/units/1000/sensors")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -793,7 +796,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findSensorsByUnitId(anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/units/1000/sensors?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -814,9 +817,9 @@ class OpenAPIHandlerTest {
         OffsetDateTime baseTimestamp = OffsetDateTime.ofInstant(BASE_INSTANT_TIMESTAMP, ZoneOffset.UTC);
         return Stream.of(
                 Arguments.of(Future.succeededFuture(List.of(
-                                Campaign.of(1, "mock(description)", baseTimestamp, baseTimestamp.plusMonths(1)),
-                                Campaign.of(2, "mock(description)", baseTimestamp.plusMonths(1), baseTimestamp.plusMonths(2)),
-                                Campaign.of(3, "mock(description)", baseTimestamp.plusMonths(2), baseTimestamp.plusMonths(3)))
+                                Campaign.of(1, "mock(name)","mock(description)", baseTimestamp, baseTimestamp.plusMonths(1)),
+                                Campaign.of(2, "mock(name)","mock(description)", baseTimestamp.plusMonths(1), baseTimestamp.plusMonths(2)),
+                                Campaign.of(3, "mock(name)","mock(description)", baseTimestamp.plusMonths(2), baseTimestamp.plusMonths(3)))
                         ),
                         SUCCESS, JSON
                 ),
@@ -840,7 +843,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/units/1000/campaigns")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/units/1000/campaigns")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -854,7 +857,7 @@ class OpenAPIHandlerTest {
 
     private static Stream<Arguments> unitIdCampaignsGET_Params_dataSource() {
         OffsetDateTime baseTimestamp = OffsetDateTime.ofInstant(BASE_INSTANT_TIMESTAMP, ZoneOffset.UTC);
-        Future<List<Campaign>> future = Future.succeededFuture(List.of(Campaign.of(1, "mock(description)", baseTimestamp, baseTimestamp.plusMonths(1))));
+        Future<List<Campaign>> future = Future.succeededFuture(List.of(Campaign.of(1, "mock(name)","mock(description)", baseTimestamp, baseTimestamp.plusMonths(1))));
         return Stream.of(
                 Arguments.of(future,
                         "UTC",
@@ -884,7 +887,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findCampaignsByUnitId(anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/units/1000/campaigns?zone=%s&navigationLinks=%s", zoneParam, navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -932,7 +935,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/units/1000/entities")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/units/1000/entities")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -960,7 +963,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findEntitiesByUnitId(anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/units/1000/entities?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -1006,7 +1009,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/sensors")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/sensors")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -1034,7 +1037,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.allSensors()).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/sensors?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -1075,7 +1078,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/sensors/105")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/sensors/105")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -1103,7 +1106,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findSensorById(anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/sensors/105?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -1149,7 +1152,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/sensors/105/units")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/sensors/105/units")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -1177,7 +1180,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findUnitsBySensorId(anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/sensors/105/units?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -1223,7 +1226,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/phenomenons")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/phenomenons")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -1251,7 +1254,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.allPhenomenons()).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/phenomenons?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -1291,7 +1294,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/phenomenons/1")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/phenomenons/1")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -1319,7 +1322,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findPhenomenonById(anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/phenomenons/1?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -1365,7 +1368,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/phenomenons/1/sensors")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/phenomenons/1/sensors")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -1393,7 +1396,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findSensorsByPhenomenonId(anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/phenomenons/1/sensors?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -1440,7 +1443,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/entities")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/entities")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -1468,7 +1471,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.allEntities()).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/entities?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -1508,7 +1511,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/entities/1")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/entities/1")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -1536,7 +1539,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findEntityById(anyInt())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/entities/1?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -1583,7 +1586,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/entities/1/units")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/entities/1/units")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -1619,7 +1622,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findUnitsByEntityId(anyInt(), any(), any())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/entities/1/units?from=%s&to=%s&navigationLinks=%s", from, to, navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -1659,7 +1662,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/entities/1/units/1000")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/entities/1/units/1000")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -1687,7 +1690,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findUnitByIdAndEntityId(anyLong(), anyInt())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/entities/1/units/1000?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -1734,7 +1737,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/entities/1/units/1000/actions")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/entities/1/units/1000/actions")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -1762,7 +1765,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findActionsByEntityIdAndUnitId(anyInt(), anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/entities/1/units/1000/actions?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -1809,7 +1812,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/entities/1/actions")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/entities/1/actions")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -1845,7 +1848,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findActionsByEntityId(anyInt(), any(), any())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/entities/1/actions?from=%s&to=%s&navigationLinks=%s", from, to, navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -1885,7 +1888,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/entities/1/actions/1")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/entities/1/actions/1")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -1913,7 +1916,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findActionByIdAndEntityId(anyInt(), anyInt())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/entities/1/actions/1?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -1960,7 +1963,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/entities/1/actions/1/units")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/entities/1/actions/1/units")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -1988,7 +1991,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findUnitsByEntityIdAndActionId(anyInt(), anyInt())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/entities/1/actions/1/units?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -2028,7 +2031,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/entities/1/actions/1/units/1000")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/entities/1/actions/1/units/1000")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2056,7 +2059,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findUnitByIdAndEntityIdAndActionId(anyLong(), anyInt(), anyInt())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/entities/1/actions/1/units/1000?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -2097,7 +2100,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/entities/1/units/1000/actions/1")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/entities/1/units/1000/actions/1")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2125,7 +2128,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findActionByIdAndEntityIdAndUnitId(anyInt(), anyInt(), anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/entities/1/units/1000/actions/1?navigationLinks=%s", navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -2175,7 +2178,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/entities/1/units/1000/actions/1/events")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/entities/1/units/1000/actions/1/events")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2222,7 +2225,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findEventsByEntityIdAndUnitIdAndActionId(anyInt(), anyLong(), anyInt())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/entities/1/units/1000/actions/1/events?zone=%s&navigationLinks=%s", zoneParam, navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -2268,7 +2271,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/events/1")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/events/1")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2315,7 +2318,7 @@ class OpenAPIHandlerTest {
         Mockito.when(repo.findEventById(anyLong())).thenReturn(dbFuture);
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI(
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI(
                         String.format("/events/1?zone=%s&navigationLinks=%s", zoneParam, navigationLinks))
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
@@ -2368,7 +2371,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/campaigns/1/units/alerts")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/campaigns/1/units/alerts")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2405,7 +2408,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/alerts/1")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/alerts/1")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2447,7 +2450,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/campaigns/1/units/10/observations")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/campaigns/1/units/10/observations")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2489,7 +2492,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/campaigns/1/units/10/sensors/100/observations")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/campaigns/1/units/10/sensors/100/observations")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2531,7 +2534,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/campaigns/1/units/observations/locations?limitPerUnit=1")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/campaigns/1/units/observations/locations?limitPerUnit=1")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2573,7 +2576,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/events/1/observations")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/events/1/observations")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2615,7 +2618,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/campaigns/1/units/observations")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/campaigns/1/units/observations")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2656,7 +2659,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/events/1/alerts")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/events/1/alerts")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2698,7 +2701,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/events/1/observations/locations")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/events/1/observations/locations")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2735,7 +2738,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/events/1/alerts/1")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/events/1/alerts/1")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2776,7 +2779,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/campaigns/1/units/10/alerts")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/campaigns/1/units/10/alerts")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2817,7 +2820,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/entities/1/actions/1/units/10/alerts")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/entities/1/actions/1/units/10/alerts")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 
@@ -2859,7 +2862,7 @@ class OpenAPIHandlerTest {
         VISITED_TEST_NODES.add(operation.getOperationId());
 
         RequestOptions reqOpt = new RequestOptions()
-                .setMethod(HttpMethod.GET).setPort(PORT).setHost(HOST).setURI("/campaigns/1/units/10/observations/locations")
+                .setMethod(HttpMethod.GET).setPort(serverPort).setHost(HOST).setURI("/campaigns/1/units/10/observations/locations")
                 .setHeaders(MultiMap.caseInsensitiveMultiMap()
                         .add(HttpHeaders.ACCEPT, JSON.contentType()));
 

+ 2 - 8
src/test/java/cz/senslog/telemetry/server/ws/OpenAPIHandlerVertxAutoTest.java

@@ -4,7 +4,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import cz.senslog.telemetry.MockSensLogRepository;
-import cz.senslog.telemetry.TestPropertiesUtils;
+import cz.senslog.telemetry.TestResourceUtils;
 import cz.senslog.telemetry.app.PropertyConfig;
 import cz.senslog.telemetry.server.HttpVertxServer;
 import cz.senslog.telemetry.utils.Tuple;
@@ -16,8 +16,6 @@ import io.vertx.core.json.JsonObject;
 import io.vertx.ext.unit.Async;
 import io.vertx.ext.unit.TestContext;
 import io.vertx.ext.unit.TestSuite;
-import io.vertx.junit5.VertxExtension;
-import io.vertx.junit5.VertxTestContext;
 import org.junit.jupiter.api.*;
 import org.junit.jupiter.api.extension.ExtendWith;
 import org.openapi4j.core.exception.EncodeException;
@@ -38,13 +36,9 @@ import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
-import java.time.Instant;
-import java.time.LocalDateTime;
-import java.time.ZoneOffset;
 import java.util.*;
 
 import static cz.senslog.telemetry.server.ws.ContentType.JSON;
-import static java.util.stream.Collectors.toSet;
 import static org.assertj.core.api.Assertions.assertThat;
 
 @ExtendWith(SystemStubsExtension.class)
@@ -197,7 +191,7 @@ class OpenAPIHandlerVertxAutoTest {
         TestSuite testSuite = TestSuite.create("rootEntry");
 
         testSuite.before(context -> {
-            Properties props = TestPropertiesUtils.loadFromResources("tests.junit.env");
+            Properties props = TestResourceUtils.loadProperties("tests.junit.env");
             for (Map.Entry<Object, Object> propEntry : props.entrySet()) {
                 envVariable.set(propEntry.getKey(), propEntry.getValue());
             }

+ 3 - 3
src/test/resources/tests.junit.env

@@ -5,9 +5,9 @@ SERVER_TCP_PORT=9999
 # Database properties
 DATABASE_HOST=localhost
 DATABASE_PORT=5432
-DATABASE_NAME=maplog
-DATABASE_USER=maplog_app
-DATABASE_PASSWORD=MAPlog
+DATABASE_NAME=junit
+DATABASE_USER=junit_test
+DATABASE_PASSWORD=JUnit
 DATABASE_POOL_SIZE=5
 
 # Auth

+ 0 - 36
testing/update.sql

@@ -1,36 +0,0 @@
-ALTER TABLE maplog.driver RENAME TO entity;
-
-ALTER TABLE maplog.entity RENAME COLUMN driver_id TO id;
-
-ALTER TABLE maplog.entity ADD COLUMN identity VARCHAR(30) NOT NULL DEFAULT '';
-
-CREATE SEQUENCE maplog.entity_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
-ALTER TABLE maplog.entity_id_seq OWNER TO senslog;
-ALTER SEQUENCE maplog.entity_id_seq OWNED BY maplog.entity.id;
-ALTER TABLE ONLY maplog.entity ALTER COLUMN id SET DEFAULT nextval('maplog.entity_id_seq'::regclass);
-
-ALTER TABLE maplog.driver_to_action RENAME TO event;
-ALTER TABLE maplog.event RENAME COLUMN driver_id TO entity_id;
-
-ALTER TABLE maplog.user_to_campaign RENAME TO user_to_campaign_config;
-ALTER TABLE maplog.user_to_campaign_config RENAME COLUMN user_id TO entity_id;
-ALTER TABLE maplog.user_to_campaign_config ADD COLUMN config JSONB NOT NULL DEFAULT '{}'::JSONB;
-ALTER TABLE ONLY maplog.user_to_campaign_config ADD CONSTRAINT u2c_entityid_fk FOREIGN KEY (entity_id) REFERENCES maplog.entity(id) ON UPDATE CASCADE ON DELETE CASCADE;
-
-CREATE TYPE alert_status AS ENUM ('CREATED', 'INFORMED', 'IN_PROCESS', 'SOLVED', 'DELETED');
-CREATE TABLE maplog.alert (
-    id BIGINT NOT NULL PRIMARY KEY,
-    time_stamp TIMESTAMP WITH TIME ZONE NOT NULL,
-    unit_id BIGINT NOT NULL,
-    message TEXT NOT NULL,
-    status alert_status NOT NULL,
-    time_received TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL
-);
-ALTER TABLE maplog.alert OWNER TO senslog;
-CREATE SEQUENCE maplog.alert_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
-ALTER TABLE maplog.alert_id_seq OWNER TO senslog;
-ALTER SEQUENCE maplog.alert_id_seq OWNED BY maplog.alert.id;
-ALTER TABLE ONLY maplog.alert ALTER COLUMN id SET DEFAULT nextval('maplog.alert_id_seq'::regclass);
-
-CREATE INDEX fki_alert_unitid_fk ON maplog.alert USING btree (unit_id);
-ALTER TABLE ONLY maplog.alert ADD CONSTRAINT alert_unitid_fk FOREIGN KEY (unit_id) REFERENCES maplog.unit(unit_id) ON UPDATE CASCADE ON DELETE CASCADE;