Skip to content

Commit

Permalink
Fix/serviceDiscoveryreq is not allowed after receiving first one (#143)
Browse files Browse the repository at this point in the history
* fix/ServiceDiscoveryReq is not accepted after first one received
  • Loading branch information
ikaratass authored Oct 6, 2022
1 parent 84683c9 commit f401444
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 0 deletions.
7 changes: 7 additions & 0 deletions iso15118/secc/states/iso15118_2_states.py
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,13 @@ async def process_message(
)
return

if msg.body.service_discovery_req and not self.expecting_service_discovery_req:
self.stop_state_machine(
f"{str(message)}' not accepted in state " f"{str(self)}",
message,
ResponseCode.FAILED_SEQUENCE_ERROR,
)
return
service_discovery_req: ServiceDiscoveryReq = msg.body.service_discovery_req
service_discovery_res = await self.get_services(
service_discovery_req.service_category
Expand Down
23 changes: 23 additions & 0 deletions tests/secc/states/test_iso15118_2_states.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,14 @@

import pytest

from iso15118.secc import Config
from iso15118.secc.states.iso15118_2_states import (
Authorization,
ChargeParameterDiscovery,
CurrentDemand,
PaymentDetails,
PowerDelivery,
ServiceDiscovery,
Terminate,
WeldingDetection,
)
Expand All @@ -29,6 +31,7 @@
get_dummy_v2g_message_payment_details_req,
get_dummy_v2g_message_power_delivery_req_charge_start,
get_dummy_v2g_message_power_delivery_req_charge_stop,
get_dummy_v2g_message_service_discovery_req,
get_dummy_v2g_message_welding_detection_req,
get_v2g_message_power_delivery_req,
)
Expand All @@ -40,6 +43,8 @@ class TestEvScenarios:
@pytest.fixture(autouse=True)
def _comm_session(self, comm_secc_session_mock):
self.comm_session = comm_secc_session_mock
self.comm_session.config = Config()
self.comm_session.is_tls = False

async def test_current_demand_to_power_delivery_when_power_delivery_received(
self,
Expand Down Expand Up @@ -360,3 +365,21 @@ async def test_power_delivery_state_c(
message=get_dummy_v2g_message_power_delivery_req_charge_start()
)
assert power_delivery.next_state is expected_next_state

async def test_service_discovery_req_unexpected_state(self):
self.comm_session.selected_auth_option = AuthEnum.PNC_V2
self.comm_session.config.free_charging_service = False
self.comm_session.writer = Mock()
self.comm_session.writer.get_extra_info = Mock()
service_discovery = ServiceDiscovery(self.comm_session)
await service_discovery.process_message(
message=get_dummy_v2g_message_service_discovery_req()
)
await service_discovery.process_message(
message=get_dummy_v2g_message_service_discovery_req()
)
assert service_discovery.next_state is Terminate
assert (
service_discovery.message.body.service_discovery_res.response_code
is ResponseCode.FAILED_SEQUENCE_ERROR
)
9 changes: 9 additions & 0 deletions tests/secc/states/test_messages.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
ChargeParameterDiscoveryReq,
PaymentDetailsReq,
PowerDeliveryReq,
ServiceDiscoveryReq,
SessionStopReq,
WeldingDetectionReq,
)
Expand Down Expand Up @@ -209,3 +210,11 @@ def get_dummy_v2g_message_power_delivery_req_charge_stop():
header=MessageHeader(session_id=MOCK_SESSION_ID),
body=Body(power_delivery_req=power_delivery_req),
)


def get_dummy_v2g_message_service_discovery_req() -> V2GMessage:
service_discovery_req = ServiceDiscoveryReq()
return V2GMessage(
header=MessageHeader(session_id=MOCK_SESSION_ID),
body=Body(service_discovery_req=service_discovery_req),
)

0 comments on commit f401444

Please sign in to comment.