From 128e35d68752074c5b5b5bf5ea63d228dc7fb091 Mon Sep 17 00:00:00 2001 From: Razvan Grigore Date: Mon, 1 Dec 2025 00:11:23 +0200 Subject: [PATCH] TC_008_1/2_CS Fix no Authorize.req when Id in Local List --- .../Model/ConnectorBase/Connector.cpp | 6 +++ tests/LocalAuthList.cpp | 38 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/src/MicroOcpp/Model/ConnectorBase/Connector.cpp b/src/MicroOcpp/Model/ConnectorBase/Connector.cpp index 11142dc9..3752c891 100644 --- a/src/MicroOcpp/Model/ConnectorBase/Connector.cpp +++ b/src/MicroOcpp/Model/ConnectorBase/Connector.cpp @@ -782,6 +782,12 @@ std::shared_ptr Connector::beginTransaction(const char *idTag) { transaction->setAuthorized(); updateTxNotification(TxNotification_Authorized); + + //TC_008_1_CS & TC_008_2_CS / The Charge Point does NOT send a Authorize.req + if (localAuthorizeOfflineBool && localAuthorizeOfflineBool->getBool()) { + transaction->commit(); + return transaction; + } } transaction->commit(); diff --git a/tests/LocalAuthList.cpp b/tests/LocalAuthList.cpp index 855a980b..83e01700 100644 --- a/tests/LocalAuthList.cpp +++ b/tests/LocalAuthList.cpp @@ -923,6 +923,44 @@ TEST_CASE( "LocalAuth" ) { REQUIRE( checkListVerion == localListVersion ); } + SECTION("Id in Local Authorization List should not send Authorize.req (TC_008_1_CS & TC_008_2_CS)") { + + localAuthorizeOffline->setBool(true); + localPreAuthorize->setBool(true); + + //set local list + StaticJsonDocument<256> localAuthList; + localAuthList[0]["idTag"] = "mIdTag"; + localAuthList[0]["idTagInfo"]["status"] = "Accepted"; + authService->updateLocalList(localAuthList.as(), 1, false); + + //patch Authorize so we can check if it is called + bool checkAuthorize = false; + getOcppContext()->getOperationRegistry().registerOperation("Authorize", [&checkAuthorize] () { + return new Ocpp16::CustomOperation("Authorize", + [&checkAuthorize] (JsonObject) { + checkAuthorize = true; + }, + [] () { + return createEmptyDocument(); + });}); + + //begin transaction + //Authorize should be skipped because of LocalPreAuthorize & LocalAuthorizeOffline + loopback.setOnline(true); + + REQUIRE( connector->getStatus() == ChargePointStatus_Available ); + + beginTransaction("mIdTag"); + loop(); + + REQUIRE( !checkAuthorize ); // Ensure Authorize.req was NOT sent + REQUIRE( connector->getStatus() == ChargePointStatus_Charging ); + + endTransaction(); + loop(); + } + mocpp_deinitialize(); }