Skip to content

Commit 407cb5d

Browse files
keinproblemabacus3
authored andcommitted
- parametrized service configuration
- added integration test skeleton
1 parent d2f67e1 commit 407cb5d

File tree

9 files changed

+145
-44
lines changed

9 files changed

+145
-44
lines changed

pom.xml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,39 @@
7070
</execution>
7171
</executions>
7272
</plugin>
73+
<plugin>
74+
<groupId>org.codehaus.mojo</groupId>
75+
<artifactId>build-helper-maven-plugin</artifactId>
76+
<version>1.9.1</version>
77+
<executions>
78+
<execution>
79+
<id>add-integration-test-source-as-test-sources</id>
80+
<phase>generate-test-sources</phase>
81+
<goals>
82+
<goal>add-test-source</goal>
83+
</goals>
84+
<configuration>
85+
<sources>
86+
<source>src/it/java</source>
87+
</sources>
88+
</configuration>
89+
</execution>
90+
</executions>
91+
</plugin>
92+
<plugin>
93+
<groupId>org.apache.maven.plugins</groupId>
94+
<artifactId>maven-failsafe-plugin</artifactId>
95+
<version>2.20</version>
96+
<executions>
97+
<execution>
98+
<id>integration-test</id>
99+
<goals>
100+
<goal>integration-test</goal>
101+
<goal>verify</goal>
102+
</goals>
103+
</execution>
104+
</executions>
105+
</plugin>
73106
</plugins>
74107
</build>
75108

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package de.dhbw.ravensburg.verteiltesysteme.samplingmessageserver;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.testng.annotations.BeforeMethod;
5+
import org.testng.annotations.Test;
6+
7+
@Slf4j
8+
public class SamplingMessageServerIT {
9+
10+
@BeforeMethod
11+
public void beforeMethod() {
12+
13+
}
14+
15+
@Test
16+
public void createMessage() {
17+
18+
}
19+
20+
21+
}

src/main/java/de/dhbw/ravensburg/verteiltesysteme/Main.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package de.dhbw.ravensburg.verteiltesysteme;
22

3+
import de.dhbw.ravensburg.verteiltesysteme.service.ServiceConfig;
34
import lombok.extern.slf4j.Slf4j;
45

56
@Slf4j
67
public class Main {
78

89
//TODO; implement Apache CLI https://stackoverflow.com/a/367714/876724
910
public static void main(String[] args) {
10-
ServiceEndpoint serviceEndpoint = new ServiceEndpoint();
11+
final ServiceConfig serviceConfig = new ServiceConfig(255, 32, 32, 8080);
12+
final ServiceEndpoint serviceEndpoint = new ServiceEndpoint(serviceConfig);
1113

1214
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
1315
log.info("Shutting Hook received.");

src/main/java/de/dhbw/ravensburg/verteiltesysteme/ServiceEndpoint.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import de.dhbw.ravensburg.verteiltesysteme.persistence.DatabaseAccessObjectImpl;
44
import de.dhbw.ravensburg.verteiltesysteme.persistence.FakePersistence;
55
import de.dhbw.ravensburg.verteiltesysteme.rpc.RpcService;
6+
import de.dhbw.ravensburg.verteiltesysteme.service.ContractValidator;
67
import de.dhbw.ravensburg.verteiltesysteme.service.SamplingMessageServiceImpl;
8+
import de.dhbw.ravensburg.verteiltesysteme.service.ServiceConfig;
79
import io.grpc.*;
810
import lombok.extern.slf4j.Slf4j;
911

@@ -13,20 +15,16 @@
1315
@Slf4j
1416
public class ServiceEndpoint {
1517
private final Server server;
18+
private final ServiceConfig serviceConfig;
1619

17-
//TODO; replace with ServerConfig
18-
private final Integer port;
19-
20-
//TODO; supply the constructor with a ServerConfig object
21-
ServiceEndpoint() {
20+
ServiceEndpoint(final ServiceConfig serviceConfig) {
2221
log.info("Preparing Service Endpoint");
23-
//TODO; remove env var parameterization
24-
this.port = Integer.parseInt(System.getenv().getOrDefault("port", "8080"));
22+
this.serviceConfig = serviceConfig;
2523

26-
final RpcService rpcService = new RpcService(new SamplingMessageServiceImpl(new DatabaseAccessObjectImpl(new FakePersistence<>())));
24+
final RpcService rpcService = new RpcService(new SamplingMessageServiceImpl(new DatabaseAccessObjectImpl(new FakePersistence<>()), new ContractValidator(this.serviceConfig)));
2725

2826
this.server = ServerBuilder
29-
.forPort(this.port)
27+
.forPort(this.serviceConfig.getServiceEndpointListeningPort())
3028
.addService(rpcService)
3129
.intercept(socketAddressLoggingServerInterceptor())
3230
.build();
@@ -47,7 +45,7 @@ public void init() {
4745
try {
4846
log.info("Starting Service Endpoint");
4947
this.server.start();
50-
log.info(String.format("Server listening on TCP port: %s", this.port));
48+
log.info(String.format("Server listening on TCP port: %s", this.serviceConfig.getServiceEndpointListeningPort()));
5149
this.server.awaitTermination();
5250
} catch (IOException e) {
5351
log.error(e.getMessage());
Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,35 @@
11
package de.dhbw.ravensburg.verteiltesysteme.service;
22

3+
import lombok.NonNull;
4+
5+
import java.time.Duration;
6+
import java.time.Instant;
7+
38
/**
49
* Used by implementations of SamplingService
510
* Utilizes ServiceConfig
611
* Provides validation patterns for incoming transit data
712
*/
813
public class ContractValidator {
9-
//TODO; aggregate ServiceConfig in here
10-
//TODO; move validation methods from SamplingService here
14+
private ServiceConfig serviceConfig;
15+
16+
public ContractValidator(ServiceConfig serviceConfig) {
17+
this.serviceConfig = serviceConfig;
18+
}
19+
20+
public boolean isInvalidMessageName(@NonNull final String messageName) {
21+
return (messageName == null || messageName.length() > this.serviceConfig.getMaximumSamplingMessageNameSize()); // messageName.isEmpty());
22+
}
23+
24+
public boolean isInvalidMessageContent(@NonNull final String messageContent) {
25+
return (messageContent == null || messageContent.length() > this.serviceConfig.getMaximumSamplingMessageContentSize()); // messageContent.isEmpty();
26+
}
27+
28+
public boolean isMessageCountExceeded(final Long totalMessageCount) {
29+
return totalMessageCount >= ServiceConfig.DEFAULT_MAXIMUM_SAMPLING_MESSAGE_COUNT;
30+
}
31+
32+
public boolean isValid(@NonNull final Instant creationTime, @NonNull final Duration lifetime) {
33+
return Instant.now().isBefore(creationTime.plus(lifetime));
34+
}
1135
}

src/main/java/de/dhbw/ravensburg/verteiltesysteme/service/SamplingMessageServiceImpl.java

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -20,31 +20,23 @@
2020
public class SamplingMessageServiceImpl implements SamplingMessageService {
2121

2222
private final DatabaseAccessObject databaseAccessObject;
23+
private final ContractValidator contractValidator;
2324

24-
public SamplingMessageServiceImpl(DatabaseAccessObject databaseAccessObject) {
25+
public SamplingMessageServiceImpl(final DatabaseAccessObject databaseAccessObject, final ContractValidator contractValidator) {
2526
this.databaseAccessObject = databaseAccessObject;
27+
this.contractValidator = contractValidator;
2628
}
2729

28-
private static boolean isInvalidMessageName(@NonNull final String messageName) {
29-
return (messageName == null || messageName.length() > ServiceConfig.MAXIMUM_SAMPLING_MESSAGE_NAME_SIZE); // messageName.isEmpty());
30-
}
31-
32-
private static boolean isInvalidMessageContent(@NonNull final String messageContent) {
33-
return (messageContent == null || messageContent.length() > ServiceConfig.MAXIMUM_SAMPLING_MESSAGE_CONTENT_SIZE); // messageContent.isEmpty();
34-
}
3530

36-
private static boolean isValid(@NonNull final Instant creationTime, @NonNull final Duration lifetime) {
37-
return Instant.now().isBefore(creationTime.plus(lifetime));
38-
}
3931

4032
@Override
4133
public void createSamplingMessage(@NonNull final String messageName, @NonNull final Long lifetimeInSec) throws SamplingMessageCountExceededException, SamplingMessageAlreadyExistsException, IllegalParameterException {
42-
if (isInvalidMessageName(messageName))
34+
if (contractValidator.isInvalidMessageName(messageName))
4335
throw new IllegalParameterException(String.format("Invalid messageName provided: %s", messageName));
4436

4537
final long totalMessageCount = databaseAccessObject.getTotalMessageCount();
46-
if (totalMessageCount >= ServiceConfig.MAXIMUM_SAMPLING_MESSAGE_COUNT)
47-
throw new SamplingMessageCountExceededException(String.format("Exceeded Number of Sampling Messages currently holding %s maximum is %s", totalMessageCount, ServiceConfig.MAXIMUM_SAMPLING_MESSAGE_COUNT));
38+
if (contractValidator.isMessageCountExceeded(totalMessageCount))
39+
throw new SamplingMessageCountExceededException(String.format("Exceeded Number of Sampling Messages currently holding %s maximum is %s", totalMessageCount, ServiceConfig.DEFAULT_MAXIMUM_SAMPLING_MESSAGE_COUNT));
4840

4941
final DatabaseSamplingMessage databaseSamplingMessage = DatabaseSamplingMessage
5042
.builder()
@@ -64,10 +56,10 @@ public void createSamplingMessage(@NonNull final String messageName, @NonNull fi
6456

6557
@Override
6658
public void writeSamplingMessage(@NonNull final String messageName, @NonNull final String messageContent) throws SamplingMessageNotFoundException, IllegalParameterException {
67-
if (isInvalidMessageName(messageName))
59+
if (contractValidator.isInvalidMessageName(messageName))
6860
throw new IllegalParameterException(String.format("Invalid messageName provided: %s", messageName));
6961

70-
if (isInvalidMessageContent(messageContent))
62+
if (contractValidator.isInvalidMessageContent(messageContent))
7163
throw new IllegalParameterException(String.format("Invalid messageContent provided: %s", messageContent));
7264

7365
try {
@@ -79,7 +71,7 @@ public void writeSamplingMessage(@NonNull final String messageName, @NonNull fin
7971

8072
@Override
8173
public void clearSamplingMessage(@NonNull final String messageName) throws SamplingMessageNotFoundException, IllegalParameterException {
82-
if (isInvalidMessageName(messageName))
74+
if (contractValidator.isInvalidMessageName(messageName))
8375
throw new IllegalParameterException(String.format("Invalid messageName provided: %s", messageName));
8476

8577
final DatabaseSamplingMessage databaseSamplingMessage;
@@ -96,7 +88,7 @@ public void clearSamplingMessage(@NonNull final String messageName) throws Sampl
9688

9789
@Override
9890
public SamplingMessage readSamplingMessage(@NonNull final String messageName) throws SamplingMessageNotFoundException, IllegalParameterException {
99-
if (isInvalidMessageName(messageName))
91+
if (contractValidator.isInvalidMessageName(messageName))
10092
throw new IllegalParameterException(String.format("Invalid messageName provided: %s", messageName));
10193

10294
final DatabaseSamplingMessage databaseSamplingMessage;
@@ -106,12 +98,17 @@ public SamplingMessage readSamplingMessage(@NonNull final String messageName) th
10698
throw new SamplingMessageNotFoundException(e);
10799
}
108100

109-
return SamplingMessage.builder().messageContent(databaseSamplingMessage.getMessageContent()).messageName(databaseSamplingMessage.getMessageName()).isValid(isValid(databaseSamplingMessage.getMessageUpdateTimestamp(), databaseSamplingMessage.getMessageLifetimeInSec())).build();
101+
return SamplingMessage
102+
.builder()
103+
.messageContent(databaseSamplingMessage.getMessageContent())
104+
.messageName(databaseSamplingMessage.getMessageName())
105+
.isValid(contractValidator.isValid(databaseSamplingMessage.getMessageUpdateTimestamp(), databaseSamplingMessage.getMessageLifetimeInSec()))
106+
.build();
110107
}
111108

112109
@Override
113110
public SamplingMessageStatus getSamplingMessageStatus(@NonNull final String messageName) throws SamplingMessageNotFoundException, IllegalParameterException {
114-
if (isInvalidMessageName(messageName))
111+
if (contractValidator.isInvalidMessageName(messageName))
115112
throw new IllegalParameterException(String.format("Invalid messageName provided: %s", messageName));
116113

117114

@@ -125,14 +122,14 @@ public SamplingMessageStatus getSamplingMessageStatus(@NonNull final String mess
125122
return SamplingMessageStatus
126123
.builder()
127124
.isEmpty(databaseSamplingMessage.getMessageContent().isEmpty())
128-
.isValid(isValid(databaseSamplingMessage.getMessageUpdateTimestamp(), databaseSamplingMessage.getMessageLifetimeInSec()))
125+
.isValid(contractValidator.isValid(databaseSamplingMessage.getMessageUpdateTimestamp(), databaseSamplingMessage.getMessageLifetimeInSec()))
129126
.build();
130127

131128
}
132129

133130
@Override
134131
public void deleteSamplingMessage(@NonNull final String messageName) throws SamplingMessageNotFoundException, IllegalParameterException {
135-
if (isInvalidMessageName(messageName))
132+
if (contractValidator.isInvalidMessageName(messageName))
136133
throw new IllegalParameterException(String.format("Invalid messageName provided: %s", messageName));
137134

138135
try {
Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,33 @@
11
package de.dhbw.ravensburg.verteiltesysteme.service;
22

33
//TODO; set as parameter for de.dhbw.ravensburg.verteiltesysteme.ServiceEndpoint
4+
5+
6+
import lombok.AllArgsConstructor;
7+
import lombok.Data;
8+
import lombok.EqualsAndHashCode;
9+
import lombok.ToString;
10+
11+
@Data
12+
@ToString
13+
@EqualsAndHashCode
14+
@AllArgsConstructor
415
public class ServiceConfig {
5-
//TODO; build from cli arguments
6-
public static final Integer MAXIMUM_SAMPLING_MESSAGE_NAME_SIZE = 32;
7-
public static final Integer MAXIMUM_SAMPLING_MESSAGE_CONTENT_SIZE = 256;
8-
public static final Integer MAXIMUM_SAMPLING_MESSAGE_COUNT = 32;
916

10-
//TODO; add server port as part of ServiceConfig
17+
public static final Integer DEFAULT_MAXIMUM_SAMPLING_MESSAGE_NAME_SIZE = 32;
18+
public static final Integer DEFAULT_MAXIMUM_SAMPLING_MESSAGE_CONTENT_SIZE = 256;
19+
public static final Integer DEFAULT_MAXIMUM_SAMPLING_MESSAGE_COUNT = 32;
20+
public static final Integer DEFAULT_SERVICE_ENDPOINT_PORT = 8088;
21+
private final Integer maximumSamplingMessageNameSize;
22+
private final Integer maximumSamplingMessageContentSize;
23+
private final Integer maximumSamplingMessageCount;
24+
private final Integer serviceEndpointListeningPort;
25+
26+
public ServiceConfig() {
27+
this.maximumSamplingMessageNameSize = DEFAULT_MAXIMUM_SAMPLING_MESSAGE_NAME_SIZE;
28+
this.maximumSamplingMessageContentSize = DEFAULT_MAXIMUM_SAMPLING_MESSAGE_CONTENT_SIZE;
29+
this.maximumSamplingMessageCount = DEFAULT_MAXIMUM_SAMPLING_MESSAGE_COUNT;
30+
31+
this.serviceEndpointListeningPort = DEFAULT_SERVICE_ENDPOINT_PORT;
32+
}
1133
}

src/main/java/de/dhbw/ravensburg/verteiltesysteme/service/model/SamplingMessage.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,12 @@ public class SamplingMessage {
1111
private String messageName;
1212
private String messageContent;
1313
private Boolean isValid;
14+
15+
public static SamplingMessageStatus samplingMessageStatusFromSamplingMessage(final SamplingMessage samplingMessage) {
16+
return SamplingMessageStatus
17+
.builder()
18+
.isEmpty(samplingMessage.getMessageContent().isEmpty())
19+
.isValid(samplingMessage.getIsValid())
20+
.build();
21+
}
1422
}

src/main/java/de/dhbw/ravensburg/verteiltesysteme/service/model/SamplingMessageStatus.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,4 @@
1010
public class SamplingMessageStatus {
1111
private Boolean isValid;
1212
private Boolean isEmpty;
13-
14-
public static SamplingMessageStatus fromSamplingMessage(final SamplingMessage samplingMessage) {
15-
return SamplingMessageStatus.builder().isEmpty(samplingMessage.getMessageContent().isEmpty()).isValid(samplingMessage.getIsValid()).build();
16-
}
1713
}

0 commit comments

Comments
 (0)