Skip to content

Commit 3d9f881

Browse files
committed
Added Heartbeat feature to core profile
1 parent 1a58f09 commit 3d9f881

File tree

18 files changed

+397
-12
lines changed

18 files changed

+397
-12
lines changed

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

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -108,15 +108,20 @@ public void hasReceivedBootNotification(String chargePointVendor, String chargeP
108108
assertThat(payload.getString("chargePointModel"), equalTo(chargePointModel));
109109
}
110110

111+
public void hasReceivedHeartbeat() {
112+
assertThat(receivedMessage, is(not(nullValue())));
113+
assertThat(getAction(), equalTo("Heartbeat"));
114+
}
115+
111116
public void hasReceivedDataTransferRequest() {
112117
assertThat(receivedMessage, is(not(nullValue())));
113118
assertThat(getAction(), equalTo("DataTransfer"));
114119
}
115-
116120
public boolean hasReceivedAuthorizeRequest()
117121
{
118122
return receivedMessage != null && "Authorize".equals(getAction());
119123
}
124+
120125
private JSONObject getCallPayload()
121126
{
122127
return (JSONObject)receivedMessage[3];
@@ -205,22 +210,24 @@ public void sendDataTransferRequest(String vendorId, String messageId, String da
205210
sendRequest("DataTransfer", String.format(payload, vendorId, messageId, data));
206211
}
207212

208-
209-
210213
public enum AvailabilityType {
211-
Inoperative, Operative;
214+
Inoperative, Operative
212215
}
216+
213217
public void sendChangeAvailability(int connectorId, AvailabilityType type)
214218
{
215219
String payload = "\"connectorId\":%d,\"type\":\"%s\"";
216220
sendRequest("ChangeAvailability", String.format(payload, connectorId, type));
217221
}
218-
219-
220-
221222
public enum RegistrationStatus {
222-
Accepted, Pending, Rejected;
223+
Accepted, Pending, Rejected
223224
}
225+
226+
public void sendHeartbeatConfirmation() {
227+
String payload = "\"currentTime\": \"%s\"";
228+
sendConfirmation(String.format(payload, now()));
229+
}
230+
224231
public void sendBootConfirmation(RegistrationStatus status) {
225232
String payload = "\"currentTime\": \"%s\", \"interval\": %d, \"status\": \"%s\"";
226233
sendConfirmation(String.format(payload, now(), 300, status));

ocpp-test/src/main/java/eu/chargetime/ocpp/test/FakeChargePoint.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,11 @@ public void sendAuthorizeRequest(String idToken) {
101101
}
102102
}
103103

104+
public void sendHeartbeatRequest() {
105+
Request request = core.createHeartbeatRequest();
106+
send(request);
107+
}
108+
104109
public void sendDataTransferRequest(String vendorId, String messageId, String data) {
105110
try {
106111
DataTransferRequest request = core.createDataTransferRequest(vendorId);
@@ -132,6 +137,10 @@ public void hasReceivedDataTransferConfirmation(String status) {
132137
assertThat(((DataTransferConfirmation)receivedConfirmation).getStatus(), equalTo(status));
133138
}
134139

140+
public void hasReceivedHeartbeatConfirmation() {
141+
assertThat(receivedConfirmation, instanceOf(HeartbeatConfirmation.class));
142+
}
143+
135144
public void disconnect() {
136145
client.disconnect();
137146
}

ocpp-v1_6/src/it/groovy/Authorize.groovy renamed to ocpp-v1_6/src/it/groovy/core_features/Authorize.groovy

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package core_features
2+
13
import eu.chargetime.ocpp.test.FakeCentralSystem
24
import eu.chargetime.ocpp.test.FakeChargePoint
35
import spock.lang.Shared
@@ -27,7 +29,7 @@ class Authorize extends Specification
2729
! centralSystem.hasReceivedAuthorizeRequest();
2830
}
2931

30-
def "Central system sends boot confirmation which charge point receives"() {
32+
def "Charge point sends Authorize request and receives a response"() {
3133
def conditions = new PollingConditions(timeout: 1);
3234
when:
3335
chargePoint.sendAuthorizeRequest("test123");
@@ -46,7 +48,7 @@ class Authorize extends Specification
4648
}
4749
}
4850

49-
def "A authorize request isn't seen as a boot notification"() {
51+
def "A Authorize request isn't seen as a Boot Notification"() {
5052
when:
5153
chargePoint.sendAuthorizeRequest("token");
5254

ocpp-v1_6/src/it/groovy/BootNotification.groovy renamed to ocpp-v1_6/src/it/groovy/core_features/BootNotification.groovy

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package core_features
2+
13
import eu.chargetime.ocpp.test.FakeCentralSystem
24
import eu.chargetime.ocpp.test.FakeChargePoint
35
import spock.lang.*
@@ -21,7 +23,7 @@ class BootNotification extends Specification
2123
chargePoint.disconnect();
2224
}
2325

24-
def "Charge point sends boot notification and receives a response"() {
26+
def "Charge point sends Boot Notification and receives a response"() {
2527
def conditions = new PollingConditions(timeout: 1)
2628
when:
2729
chargePoint.sendBootNotification("VendorX", "SingleSocketCharger");

ocpp-v1_6/src/it/groovy/ChangeAvailability.groovy renamed to ocpp-v1_6/src/it/groovy/core_features/ChangeAvailability.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package core_features
2+
13
import eu.chargetime.ocpp.test.FakeCentralSystem
24
import eu.chargetime.ocpp.test.FakeChargePoint
35
import spock.lang.*

ocpp-v1_6/src/it/groovy/ChangeConfiguration.groovy renamed to ocpp-v1_6/src/it/groovy/core_features/ChangeConfiguration.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package core_features
2+
13
import eu.chargetime.ocpp.test.FakeCentralSystem
24
import eu.chargetime.ocpp.test.FakeChargePoint
35
import spock.lang.Shared

ocpp-v1_6/src/it/groovy/ClearCache.groovy renamed to ocpp-v1_6/src/it/groovy/core_features/ClearCache.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package core_features
2+
13
import eu.chargetime.ocpp.test.FakeCentralSystem
24
import eu.chargetime.ocpp.test.FakeChargePoint
35
import spock.lang.Shared

ocpp-v1_6/src/it/groovy/DataTransfer.groovy renamed to ocpp-v1_6/src/it/groovy/core_features/DataTransfer.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package core_features
2+
13
import eu.chargetime.ocpp.test.FakeCentralSystem
24
import eu.chargetime.ocpp.test.FakeChargePoint
35
import spock.lang.Shared

ocpp-v1_6/src/it/groovy/GetConfiguration.groovy renamed to ocpp-v1_6/src/it/groovy/core_features/GetConfiguration.groovy

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package core_features
2+
13
import eu.chargetime.ocpp.test.FakeCentralSystem
24
import eu.chargetime.ocpp.test.FakeChargePoint
35
import spock.lang.Shared
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package core_features
2+
3+
import eu.chargetime.ocpp.test.FakeCentralSystem
4+
import eu.chargetime.ocpp.test.FakeChargePoint
5+
import spock.lang.Shared
6+
import spock.lang.Specification
7+
import spock.util.concurrent.PollingConditions;
8+
9+
class Heartbeat extends Specification
10+
{
11+
@Shared FakeCentralSystem centralSystem = FakeCentralSystem.getInstance();
12+
@Shared FakeChargePoint chargePoint = new FakeChargePoint();
13+
14+
def setupSpec() {
15+
// When a Central System is running
16+
centralSystem.started();
17+
}
18+
19+
def setup() {
20+
chargePoint.connect();
21+
}
22+
23+
def cleanup() {
24+
chargePoint.disconnect();
25+
}
26+
27+
def "Charge point sends Heartbeat and receives a response"() {
28+
def conditions = new PollingConditions(timeout: 1);
29+
when:
30+
chargePoint.sendHeartbeatRequest();
31+
32+
33+
then:
34+
conditions.eventually {
35+
centralSystem.hasReceivedHeartbeat();
36+
}
37+
38+
when:
39+
centralSystem.sendHeartbeatConfirmation();
40+
41+
then:
42+
conditions.eventually {
43+
chargePoint.hasReceivedHeartbeatConfirmation();
44+
}
45+
46+
}
47+
48+
}

0 commit comments

Comments
 (0)