Skip to content

Commit 59c6177

Browse files
committed
Implemented Server Heartbeat feature.
1 parent 934075e commit 59c6177

File tree

5 files changed

+45
-8
lines changed

5 files changed

+45
-8
lines changed

ocpp-v1_6-test/src/main/java/eu/chargetime/ocpp/test/FakeCentralSystem.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,14 @@ public DataTransferConfirmation handleDataTransferRequest(int sessionIndex, Data
8989
confirmation.setStatus(DataTransferStatus.Accepted);
9090
return confirmation;
9191
}
92+
93+
@Override
94+
public HeartbeatConfirmation handleHeartbeatRequest(int sessionIndex, HeartbeatRequest request) {
95+
receivedRequest = request;
96+
HeartbeatConfirmation confirmation = new HeartbeatConfirmation();
97+
confirmation.setCurrentTime(Calendar.getInstance());
98+
return confirmation;
99+
}
92100
}));
93101
server.open("localhost", 8887, new ServerEvents() {
94102
@Override
@@ -181,4 +189,8 @@ public void sendGetConfigurationRequest(String... key) throws Exception {
181189
public boolean hasReceivedGetConfigurationConfirmation() {
182190
return receivedConfirmation instanceof GetConfigurationConfirmation;
183191
}
192+
193+
public boolean hasHandledHeartbeat() {
194+
return receivedRequest instanceof HeartbeatRequest;
195+
}
184196
}

ocpp-v1_6-test/src/test/groovy/eu/chargetime/ocpp/test/core/Heartbeat.groovy renamed to ocpp-v1_6-test/src/test/groovy/eu/chargetime/ocpp/test/core/HeartbeatSpec.groovy

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package eu.chargetime.ocpp.test.core
22

3+
import eu.chargetime.ocpp.test.FakeCentralSystem
34
import eu.chargetime.ocpp.test.FakeChargePoint
4-
import eu.chargetime.ocpp.test.OldFakeCentralSystem
55
import spock.lang.Shared
66
import spock.lang.Specification
77
import spock.util.concurrent.PollingConditions
88

9-
class Heartbeat extends Specification
9+
class HeartbeatSpec extends Specification
1010
{
1111
@Shared
12-
OldFakeCentralSystem centralSystem = OldFakeCentralSystem.getInstance();
12+
FakeCentralSystem centralSystem = FakeCentralSystem.getInstance();
1313
@Shared FakeChargePoint chargePoint = new FakeChargePoint();
1414

1515
def setupSpec() {
@@ -33,12 +33,9 @@ class Heartbeat extends Specification
3333

3434
then:
3535
conditions.eventually {
36-
assert centralSystem.hasReceivedHeartbeat();
36+
assert centralSystem.hasHandledHeartbeat();
3737
}
3838

39-
when:
40-
centralSystem.sendHeartbeatConfirmation();
41-
4239
then:
4340
conditions.eventually {
4441
assert chargePoint.hasReceivedHeartbeatConfirmation();

ocpp-v1_6/src/main/java/eu/chargetime/ocpp/feature/profile/ServerCoreEventHandler.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ of this software and associated documentation files (the "Software"), to deal
2929
public interface ServerCoreEventHandler {
3030
AuthorizeConfirmation handleAuthorizeRequest(int sessionIndex, AuthorizeRequest request);
3131
BootNotificationConfirmation handleBootNotificationRequest(int sessionIndex, BootNotificationRequest request);
32-
3332
DataTransferConfirmation handleDataTransferRequest(int sessionIndex, DataTransferRequest request);
33+
34+
HeartbeatConfirmation handleHeartbeatRequest(int sessionIndex, HeartbeatRequest request);
3435
}

ocpp-v1_6/src/main/java/eu/chargetime/ocpp/feature/profile/ServerCoreProfile.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ of this software and associated documentation files (the "Software"), to deal
3030
import eu.chargetime.ocpp.model.core.AuthorizeRequest;
3131
import eu.chargetime.ocpp.model.core.BootNotificationRequest;
3232
import eu.chargetime.ocpp.model.core.DataTransferRequest;
33+
import eu.chargetime.ocpp.model.core.HeartbeatRequest;
3334

3435
import java.util.HashSet;
3536

@@ -49,6 +50,7 @@ public ServerCoreProfile(ServerCoreEventHandler handler) {
4950
features.add(new ClearCacheFeature(this));
5051
features.add(new DataTransferFeature(this));
5152
features.add(new GetConfigurationFeature(this));
53+
features.add(new HeartbeatFeature(this));
5254
}
5355

5456
@Override
@@ -66,6 +68,8 @@ public Confirmation handleRequest(int sessionIndex, Request request) {
6668
result = handler.handleBootNotificationRequest(sessionIndex, (BootNotificationRequest) request);
6769
} else if (request instanceof DataTransferRequest) {
6870
result = handler.handleDataTransferRequest(sessionIndex, (DataTransferRequest) request);
71+
} else if (request instanceof HeartbeatRequest) {
72+
result = handler.handleHeartbeatRequest(sessionIndex, (HeartbeatRequest) request);
6973
}
7074

7175
return result;

ocpp-v1_6/src/test/java/eu/chargetime/ocpp/feature/profile/test/ServerCoreProfileTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import eu.chargetime.ocpp.model.core.AuthorizeRequest;
77
import eu.chargetime.ocpp.model.core.BootNotificationRequest;
88
import eu.chargetime.ocpp.model.core.DataTransferRequest;
9+
import eu.chargetime.ocpp.model.core.HeartbeatRequest;
910
import org.junit.Before;
1011
import org.junit.Test;
1112
import org.mockito.Mock;
@@ -155,6 +156,28 @@ public void getFeatureList_containsGetConfigurationFeature() {
155156
assertThat(findFeature(features, "GetConfiguration"), is(instanceOf(GetConfigurationFeature.class)));
156157
}
157158

159+
@Test
160+
public void getFeatureList_containsHeartbeatFeature() {
161+
// When
162+
Feature[] features = core.getFeatureList();
163+
164+
// Then
165+
assertThat(findFeature(features, "Heartbeat"), is(instanceOf(HeartbeatFeature.class)));
166+
}
167+
168+
@Test
169+
public void handleRequest_aHeartbeatRequest_callsHandleHeartbeatRequest() {
170+
// Given
171+
HeartbeatRequest request = new HeartbeatRequest();
172+
int sessionId = 42;
173+
174+
// When
175+
core.handleRequest(sessionId, request);
176+
177+
// Then
178+
verify(handler, times(1)).handleHeartbeatRequest(eq(sessionId), eq(request));
179+
}
180+
158181
private Feature findFeature(Feature[] features, String action) {
159182
Feature output = null;
160183
for (Feature feature : features) {

0 commit comments

Comments
 (0)