use of ocpp.cs._2015._10.MeterValuesRequest in project EVSUPERVISION by EnergyTIC.
the class OperationalTestSoapOCPP16 method testBody.
private void testBody(List<MeterValue> meterValues, List<MeterValue> transactionData) {
final int usedConnectorID = 1;
CentralSystemService client = getForOcpp16(path);
initStationWithBootNotification(client);
initConnectorsWithStatusNotification(client);
// heartbeat
HeartbeatResponse heartbeat = client.heartbeat(new HeartbeatRequest(), REGISTERED_CHARGE_BOX_ID);
Assertions.assertNotNull(heartbeat);
// Auth
AuthorizeResponse auth = client.authorize(new AuthorizeRequest().withIdTag(REGISTERED_OCPP_TAG), REGISTERED_CHARGE_BOX_ID);
// Simple request, not much done here
Assertions.assertNotNull(auth);
Assertions.assertEquals(AuthorizationStatus.ACCEPTED, auth.getIdTagInfo().getStatus());
// startTransaction
DateTime startTimeStamp = DateTime.now();
StartTransactionResponse start = client.startTransaction(new StartTransactionRequest().withConnectorId(usedConnectorID).withIdTag(REGISTERED_OCPP_TAG).withTimestamp(startTimeStamp).withMeterStart(0), REGISTERED_CHARGE_BOX_ID);
Assertions.assertNotNull(start);
int transactionID = start.getTransactionId();
List<TransactionRecord> allTransactions = __DatabasePreparer__.getTransactionRecords();
Assertions.assertEquals(1, allTransactions.size());
{
TransactionRecord t = allTransactions.get(0);
Assertions.assertEquals(startTimeStamp, t.getStartTimestamp());
Assertions.assertEquals(0, Integer.parseInt(t.getStartValue()));
Assertions.assertNull(t.getStopTimestamp());
Assertions.assertNull(t.getStopReason());
Assertions.assertNull(t.getStopValue());
}
// status
StatusNotificationResponse statusStart = client.statusNotification(new StatusNotificationRequest().withStatus(ChargePointStatus.CHARGING).withErrorCode(ChargePointErrorCode.NO_ERROR).withConnectorId(0).withTimestamp(DateTime.now()), REGISTERED_CHARGE_BOX_ID);
Assertions.assertNotNull(statusStart);
// send meterValues
if (meterValues != null) {
MeterValuesResponse meter = client.meterValues(new MeterValuesRequest().withConnectorId(usedConnectorID).withTransactionId(transactionID).withMeterValue(meterValues), REGISTERED_CHARGE_BOX_ID);
Assertions.assertNotNull(meter);
checkMeterValues(meterValues, transactionID);
}
// stopTransaction
DateTime stopTimeStamp = DateTime.now();
int stopValue = 30;
StopTransactionResponse stop = client.stopTransaction(new StopTransactionRequest().withTransactionId(transactionID).withTransactionData(transactionData).withTimestamp(stopTimeStamp).withIdTag(REGISTERED_OCPP_TAG).withMeterStop(stopValue), REGISTERED_CHARGE_BOX_ID);
{
Assertions.assertNotNull(stop);
List<TransactionRecord> transactionsStop = __DatabasePreparer__.getTransactionRecords();
Assertions.assertEquals(1, transactionsStop.size());
TransactionRecord t = transactionsStop.get(0);
Assertions.assertEquals(stopTimeStamp, t.getStopTimestamp());
Assertions.assertEquals(stopValue, Integer.parseInt(t.getStopValue()));
if (transactionData != null) {
checkMeterValues(transactionData, transactionID);
}
}
// status
StatusNotificationResponse statusStop = client.statusNotification(new StatusNotificationRequest().withStatus(ChargePointStatus.AVAILABLE).withErrorCode(ChargePointErrorCode.NO_ERROR).withConnectorId(usedConnectorID).withTimestamp(DateTime.now()), REGISTERED_CHARGE_BOX_ID);
Assertions.assertNotNull(statusStop);
}
use of ocpp.cs._2015._10.MeterValuesRequest in project EVSUPERVISION by EnergyTIC.
the class StressTestSoapOCPP16 method attackInternal.
protected void attackInternal() throws Exception {
final List<String> idTags = getRandomStrings(ID_TAG_COUNT);
final List<String> chargeBoxIds = getRandomStrings(CHARGE_BOX_COUNT);
StressTester.Runnable runnable = new StressTester.Runnable() {
private final ThreadLocal<String> threadLocalChargeBoxId = new ThreadLocal<>();
@Override
public void beforeRepeat() {
CentralSystemService client = getForOcpp16(path);
ThreadLocalRandom localRandom = ThreadLocalRandom.current();
threadLocalChargeBoxId.set(chargeBoxIds.get(localRandom.nextInt(chargeBoxIds.size())));
String chargeBoxId = threadLocalChargeBoxId.get();
// to insert threadLocalChargeBoxId into db
BootNotificationResponse boot = client.bootNotification(new BootNotificationRequest().withChargePointVendor(getRandomString()).withChargePointModel(getRandomString()), chargeBoxId);
Assertions.assertEquals(RegistrationStatus.ACCEPTED, boot.getStatus());
}
@Override
public void toRepeat() {
CentralSystemService client = getForOcpp16(path);
ThreadLocalRandom localRandom = ThreadLocalRandom.current();
String chargeBoxId = threadLocalChargeBoxId.get();
String idTag = idTags.get(localRandom.nextInt(idTags.size()));
int connectorId = localRandom.nextInt(1, CONNECTOR_COUNT_PER_CHARGE_BOX + 1);
int transactionStart = localRandom.nextInt(0, Integer.MAX_VALUE);
int transactionStop = localRandom.nextInt(transactionStart + 1, Integer.MAX_VALUE);
HeartbeatResponse heartbeat = client.heartbeat(new HeartbeatRequest(), chargeBoxId);
Assertions.assertNotNull(heartbeat);
for (int i = 0; i <= CONNECTOR_COUNT_PER_CHARGE_BOX; i++) {
StatusNotificationResponse status = client.statusNotification(new StatusNotificationRequest().withErrorCode(ChargePointErrorCode.NO_ERROR).withStatus(ChargePointStatus.AVAILABLE).withConnectorId(i).withTimestamp(DateTime.now()), chargeBoxId);
Assertions.assertNotNull(status);
}
AuthorizeResponse auth = client.authorize(new AuthorizeRequest().withIdTag(idTag), chargeBoxId);
Assertions.assertNotEquals(AuthorizationStatus.ACCEPTED, auth.getIdTagInfo().getStatus());
StartTransactionResponse start = client.startTransaction(new StartTransactionRequest().withConnectorId(connectorId).withIdTag(idTag).withTimestamp(DateTime.now()).withMeterStart(transactionStart), chargeBoxId);
Assertions.assertNotNull(start);
StatusNotificationResponse statusStart = client.statusNotification(new StatusNotificationRequest().withErrorCode(ChargePointErrorCode.NO_ERROR).withStatus(ChargePointStatus.CHARGING).withConnectorId(connectorId).withTimestamp(DateTime.now()), chargeBoxId);
Assertions.assertNotNull(statusStart);
MeterValuesResponse meter = client.meterValues(new MeterValuesRequest().withConnectorId(connectorId).withTransactionId(start.getTransactionId()).withMeterValue(getMeterValues(transactionStart, transactionStop)), chargeBoxId);
Assertions.assertNotNull(meter);
StopTransactionResponse stop = client.stopTransaction(new StopTransactionRequest().withTransactionId(start.getTransactionId()).withTimestamp(DateTime.now()).withIdTag(idTag).withMeterStop(transactionStop), chargeBoxId);
Assertions.assertNotNull(stop);
StatusNotificationResponse statusStop = client.statusNotification(new StatusNotificationRequest().withErrorCode(ChargePointErrorCode.NO_ERROR).withStatus(ChargePointStatus.AVAILABLE).withConnectorId(connectorId).withTimestamp(DateTime.now()), chargeBoxId);
Assertions.assertNotNull(statusStop);
}
@Override
public void afterRepeat() {
}
};
StressTester tester = new StressTester(THREAD_COUNT, REPEAT_COUNT_PER_THREAD);
tester.test(runnable);
tester.shutDown();
}
use of ocpp.cs._2015._10.MeterValuesRequest in project steve by RWTH-i5-IDSG.
the class Issue72 method attackInternal.
protected void attackInternal() throws Exception {
String idTag = __DatabasePreparer__.getRegisteredOcppTag();
String chargeBoxId = Helpers.getRandomString();
DateTime startDateTime = DateTime.now();
DateTime stopDateTime = startDateTime.plusHours(5);
int connectorId = 2;
int meterStart = 444;
int meterStop = 99999;
BootNotificationResponse boot = getForOcpp16(path).bootNotification(new BootNotificationRequest().withChargePointVendor(getRandomString()).withChargePointModel(getRandomString()), chargeBoxId);
Assertions.assertEquals(RegistrationStatus.ACCEPTED, boot.getStatus());
StartTransactionResponse start = getForOcpp16(path).startTransaction(new StartTransactionRequest().withConnectorId(connectorId).withIdTag(idTag).withTimestamp(startDateTime).withMeterStart(meterStart), chargeBoxId);
Assertions.assertNotNull(start);
int transactionId = start.getTransactionId();
StressTester.Runnable runnable = new StressTester.Runnable() {
private final ThreadLocal<CentralSystemService> threadLocalClient = new ThreadLocal<>();
@Override
public void beforeRepeat() {
threadLocalClient.set(getForOcpp16(path));
}
@Override
public void toRepeat() {
MeterValuesResponse mvr = threadLocalClient.get().meterValues(new MeterValuesRequest().withConnectorId(connectorId).withTransactionId(transactionId).withMeterValue(new MeterValue().withTimestamp(stopDateTime).withSampledValue(new SampledValue().withValue("555").withUnit(UnitOfMeasure.WH))), chargeBoxId);
Assertions.assertNotNull(mvr);
StopTransactionResponse stop = threadLocalClient.get().stopTransaction(new StopTransactionRequest().withTransactionId(transactionId).withTimestamp(stopDateTime).withIdTag(idTag).withMeterStop(meterStop), chargeBoxId);
Assertions.assertNotNull(stop);
}
@Override
public void afterRepeat() {
}
};
StressTester tester = new StressTester(THREAD_COUNT, REPEAT_COUNT_PER_THREAD);
tester.test(runnable);
tester.shutDown();
}
use of ocpp.cs._2015._10.MeterValuesRequest in project steve by RWTH-i5-IDSG.
the class Issue72LowLevelSoap method attackInternal.
protected void attackInternal() throws Exception {
String idTag = __DatabasePreparer__.getRegisteredOcppTag();
String chargeBoxId = Helpers.getRandomString();
DateTime startDateTime = DateTime.parse("2018-06-27T01:10:10Z");
DateTime stopDateTime = DateTime.parse("2018-06-27T04:10:10Z");
int connectorId = 2;
int meterStart = 444;
int meterStop = 99999;
BootNotificationResponse boot = getForOcpp16(path).bootNotification(new BootNotificationRequest().withChargePointVendor(getRandomString()).withChargePointModel(getRandomString()), chargeBoxId);
Assertions.assertEquals(RegistrationStatus.ACCEPTED, boot.getStatus());
StartTransactionResponse start = getForOcpp16(path).startTransaction(new StartTransactionRequest().withConnectorId(connectorId).withIdTag(idTag).withTimestamp(startDateTime).withMeterStart(meterStart), chargeBoxId);
Assertions.assertNotNull(start);
int transactionId = start.getTransactionId();
String body = buildRequest(chargeBoxId, transactionId, idTag, stopDateTime, meterStop);
ContentType contentType = ContentType.create(MediaType.SOAP_XML_UTF_8.type(), MediaType.SOAP_XML_UTF_8.charset().orNull());
HttpUriRequest req = RequestBuilder.post(path).addHeader("SOAPAction", "urn://Ocpp/Cs/2015/10/StopTransaction").setEntity(new StringEntity(body, contentType)).build();
CloseableHttpClient httpClient = HttpClients.createDefault();
StressTester.Runnable runnable = new StressTester.Runnable() {
private final ThreadLocal<CentralSystemService> threadLocalClient = new ThreadLocal<>();
@Override
public void beforeRepeat() {
threadLocalClient.set(getForOcpp16(path));
}
@Override
public void toRepeat() {
MeterValuesResponse mvr = threadLocalClient.get().meterValues(new MeterValuesRequest().withConnectorId(connectorId).withTransactionId(transactionId).withMeterValue(new MeterValue().withTimestamp(stopDateTime).withSampledValue(new SampledValue().withMeasurand(Measurand.ENERGY_ACTIVE_IMPORT_REGISTER).withValue("555").withUnit(UnitOfMeasure.WH))), chargeBoxId);
Assertions.assertNotNull(mvr);
try {
httpClient.execute(req, httpResponse -> {
if (httpResponse.getStatusLine().getStatusCode() != HttpStatus.SC_OK) {
throw new RuntimeException("Not OK");
}
return null;
});
} catch (Exception e) {
e.printStackTrace();
}
}
@Override
public void afterRepeat() {
}
};
try {
StressTester tester = new StressTester(100, 100);
tester.test(runnable);
tester.shutDown();
} finally {
httpClient.close();
}
}
use of ocpp.cs._2015._10.MeterValuesRequest in project steve by RWTH-i5-IDSG.
the class OperationalTestSoapOCPP16 method testBody.
private void testBody(List<MeterValue> meterValues, List<MeterValue> transactionData) {
final int usedConnectorID = 1;
CentralSystemService client = getForOcpp16(path);
initStationWithBootNotification(client);
initConnectorsWithStatusNotification(client);
// heartbeat
HeartbeatResponse heartbeat = client.heartbeat(new HeartbeatRequest(), REGISTERED_CHARGE_BOX_ID);
Assertions.assertNotNull(heartbeat);
// Auth
AuthorizeResponse auth = client.authorize(new AuthorizeRequest().withIdTag(REGISTERED_OCPP_TAG), REGISTERED_CHARGE_BOX_ID);
// Simple request, not much done here
Assertions.assertNotNull(auth);
Assertions.assertEquals(AuthorizationStatus.ACCEPTED, auth.getIdTagInfo().getStatus());
// startTransaction
DateTime startTimeStamp = DateTime.now();
StartTransactionResponse start = client.startTransaction(new StartTransactionRequest().withConnectorId(usedConnectorID).withIdTag(REGISTERED_OCPP_TAG).withTimestamp(startTimeStamp).withMeterStart(0), REGISTERED_CHARGE_BOX_ID);
Assertions.assertNotNull(start);
int transactionID = start.getTransactionId();
List<TransactionRecord> allTransactions = __DatabasePreparer__.getTransactionRecords();
Assertions.assertEquals(1, allTransactions.size());
{
TransactionRecord t = allTransactions.get(0);
Assertions.assertEquals(startTimeStamp, t.getStartTimestamp());
Assertions.assertEquals(0, Integer.parseInt(t.getStartValue()));
Assertions.assertNull(t.getStopTimestamp());
Assertions.assertNull(t.getStopReason());
Assertions.assertNull(t.getStopValue());
}
// status
StatusNotificationResponse statusStart = client.statusNotification(new StatusNotificationRequest().withStatus(ChargePointStatus.CHARGING).withErrorCode(ChargePointErrorCode.NO_ERROR).withConnectorId(0).withTimestamp(DateTime.now()), REGISTERED_CHARGE_BOX_ID);
Assertions.assertNotNull(statusStart);
// send meterValues
if (meterValues != null) {
MeterValuesResponse meter = client.meterValues(new MeterValuesRequest().withConnectorId(usedConnectorID).withTransactionId(transactionID).withMeterValue(meterValues), REGISTERED_CHARGE_BOX_ID);
Assertions.assertNotNull(meter);
checkMeterValues(meterValues, transactionID);
}
// stopTransaction
DateTime stopTimeStamp = DateTime.now();
int stopValue = 30;
StopTransactionResponse stop = client.stopTransaction(new StopTransactionRequest().withTransactionId(transactionID).withTransactionData(transactionData).withTimestamp(stopTimeStamp).withIdTag(REGISTERED_OCPP_TAG).withMeterStop(stopValue), REGISTERED_CHARGE_BOX_ID);
{
Assertions.assertNotNull(stop);
List<TransactionRecord> transactionsStop = __DatabasePreparer__.getTransactionRecords();
Assertions.assertEquals(1, transactionsStop.size());
TransactionRecord t = transactionsStop.get(0);
Assertions.assertEquals(stopTimeStamp, t.getStopTimestamp());
Assertions.assertEquals(stopValue, Integer.parseInt(t.getStopValue()));
if (transactionData != null) {
checkMeterValues(transactionData, transactionID);
}
}
// status
StatusNotificationResponse statusStop = client.statusNotification(new StatusNotificationRequest().withStatus(ChargePointStatus.AVAILABLE).withErrorCode(ChargePointErrorCode.NO_ERROR).withConnectorId(usedConnectorID).withTimestamp(DateTime.now()), REGISTERED_CHARGE_BOX_ID);
Assertions.assertNotNull(statusStop);
}
Aggregations