Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add EV side Se/Deserialization for session_setup and unit tests #81

Closed
wants to merge 4 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions src/iso15118/message/session_setup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@ template <> void convert(const struct iso20_SessionSetupReqType& in, SessionSetu
out.evccid = CB2CPP_STRING(in.EVCCID);
}

template <> void convert(const struct iso20_SessionSetupResType& in, SessionSetupResponse& out) {
convert(in.Header, out.header);
out.evseid = CB2CPP_STRING(in.EVSEID);
}

template <> void convert(const SessionSetupResponse& in, iso20_SessionSetupResType& out) {
init_iso20_SessionSetupResType(&out);

Expand All @@ -29,10 +34,22 @@ template <> void convert(const SessionSetupResponse& in, iso20_SessionSetupResTy
convert(in.header, out.Header);
}

template <> void convert(const SessionSetupRequest& in, iso20_SessionSetupReqType& out) {
init_iso20_SessionSetupReqType(&out);

CPP2CB_STRING(in.evccid, out.EVCCID);

convert(in.header, out.Header);
}

template <> void insert_type(VariantAccess& va, const struct iso20_SessionSetupReqType& in) {
va.insert_type<SessionSetupRequest>(in);
};

template <> void insert_type(VariantAccess& va, const struct iso20_SessionSetupResType& in) {
va.insert_type<SessionSetupResponse>(in);
};

template <> int serialize_to_exi(const SessionSetupResponse& in, exi_bitstream_t& out) {
iso20_exiDocument doc;
init_iso20_exiDocument(&doc);
Expand All @@ -43,8 +60,22 @@ template <> int serialize_to_exi(const SessionSetupResponse& in, exi_bitstream_t
return encode_iso20_exiDocument(&out, &doc);
}

template <> int serialize_to_exi(const SessionSetupRequest& in, exi_bitstream_t& out) {
iso20_exiDocument doc;
init_iso20_exiDocument(&doc);
CB_SET_USED(doc.SessionSetupReq);

convert(in, doc.SessionSetupReq);

return encode_iso20_exiDocument(&out, &doc);
}

template <> size_t serialize(const SessionSetupResponse& in, const io::StreamOutputView& out) {
return serialize_helper(in, out);
}

template <> size_t serialize(const SessionSetupRequest& in, const io::StreamOutputView& out) {
return serialize_helper(in, out);
}

} // namespace iso15118::message_20
2 changes: 2 additions & 0 deletions src/iso15118/message/variant.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,8 @@ static void handle_main(VariantAccess& va) {

if (doc.SessionSetupReq_isUsed) {
insert_type(va, doc.SessionSetupReq);
} else if (doc.SessionSetupRes_isUsed) {
insert_type(va, doc.SessionSetupRes);
} else if (doc.AuthorizationSetupReq_isUsed) {
insert_type(va, doc.AuthorizationSetupReq);
} else if (doc.AuthorizationReq_isUsed) {
Expand Down
59 changes: 48 additions & 11 deletions test/exi/cb/iso20/session_setup.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,42 +9,79 @@

using namespace iso15118;


SCENARIO("Se/Deserialize session setup messages") {

GIVEN("Deserialize session_setup_req") {
uint8_t doc_raw[] = {0x80, 0x8c, 0x00, 0x80, 0x0d, 0x6c, 0xac, 0x3a, 0x60, 0x62, 0x0b,
0x2b, 0xa6, 0xa4, 0xab, 0x18, 0x99, 0x19, 0x9a, 0x1a, 0x9b, 0x1b,
0x9c, 0x1c, 0x98, 0x20, 0xa1, 0x21, 0xa2, 0x22, 0xac, 0x00};
uint8_t doc_raw[] = {0x80, 0x8c, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x9f,
0x9c, 0x2b, 0xd0, 0x62, 0xb, 0x2b, 0xa6, 0xa4, 0xab, 0x18, 0x99, 0x19, 0x9a,
0x1a, 0x9b, 0x1b, 0x9c, 0x1c, 0x98, 0x20, 0xa1, 0x21, 0xa2, 0x22, 0xac, 0x0};

const io::StreamInputView stream_view{doc_raw, sizeof(doc_raw)};

message_20::Variant variant(io::v2gtp::PayloadType::Part20Main, stream_view);

THEN("It should be deserialized succussfully") {
THEN("It should be deserialized successfully") {
REQUIRE(variant.get_type() == message_20::Type::SessionSetupReq);

const auto& msg = variant.get<message_20::SessionSetupRequest>();
const auto& header = msg.header;

REQUIRE(header.session_id == std::array<uint8_t, 8>{0});
REQUIRE(header.timestamp == 1691411798);
REQUIRE(header.timestamp == 1739635913);

REQUIRE(msg.evccid == "WMIV1234567890ABCDEX");
}
}

GIVEN("Serialize session_setup_res") {

const auto header = message_20::Header{{0xF2, 0x19, 0x15, 0xB9, 0xDD, 0xDC, 0x12, 0xD1}, 1691411798};
const auto header = message_20::Header{{0x2E, 0xFA, 0x18, 0x94, 0xDC, 0x7B, 0x90, 0x11}, 1739635913};

const auto res = message_20::SessionSetupResponse{
header, message_20::datatypes::ResponseCode::OK_NewSessionEstablished, "UK123E1234"};
header, message_20::datatypes::ResponseCode::OK_NewSessionEstablished, "DE*PNX*E12345*1"};

std::vector<uint8_t> expected = {0x80, 0x90, 0x4, 0x17, 0x7d, 0xc, 0x4a, 0x6e, 0x3d, 0xc8, 0x8, 0x8c,
0x9f, 0x9c, 0x2b, 0xd0, 0x62, 0x4, 0x4, 0x51, 0x11, 0x4a, 0x94, 0x13,
0x96, 0xa, 0x91, 0x4c, 0x4c, 0x8c, 0xcd, 0xd, 0x4a, 0x8c, 0x40};

THEN("It should be serialized successfully") {
REQUIRE(serialize_helper(res) == expected);
}
}

GIVEN("Deserialize session_setup_res") {
uint8_t doc_raw[] = {0x80, 0x90, 0x4, 0x17, 0x7d, 0xc, 0x4a, 0x6e, 0x3d, 0xc8, 0x8, 0x8c,
0x9f, 0x9c, 0x2b, 0xd0, 0x62, 0x4, 0x4, 0x51, 0x11, 0x4a, 0x94, 0x13,
0x96, 0xa, 0x91, 0x4c, 0x4c, 0x8c, 0xcd, 0xd, 0x4a, 0x8c, 0x40};

const io::StreamInputView stream_view{doc_raw, sizeof(doc_raw)};

message_20::Variant variant(io::v2gtp::PayloadType::Part20Main, stream_view);

THEN("It should be deserialized successfully") {
REQUIRE(variant.get_type() == message_20::Type::SessionSetupRes);

const auto& msg = variant.get<message_20::SessionSetupResponse>();
const auto& header = msg.header;

REQUIRE(header.session_id == std::array<uint8_t, 8>{0x2E, 0xFA, 0x18, 0x94, 0xDC, 0x7B, 0x90, 0x11});
REQUIRE(header.timestamp == 1739635913);

REQUIRE(msg.evseid == "DE*PNX*E12345*1");
}
}

GIVEN("Serialize session_setup_req") {

const auto header = message_20::Header{{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, 1739635913};

std::vector<uint8_t> expected = {0x80, 0x90, 0x04, 0x79, 0x0c, 0x8a, 0xdc, 0xee, 0xee, 0x09,
0x68, 0x8d, 0x6c, 0xac, 0x3a, 0x60, 0x62, 0x04, 0x03, 0x15,
0x52, 0xcc, 0x4c, 0x8c, 0xd1, 0x4c, 0x4c, 0x8c, 0xcd, 0x00};
const auto res = message_20::SessionSetupRequest{header, "WMIV1234567890ABCDEX"};

THEN("It should be serialized succussfully") {
std::vector<uint8_t> expected = {0x80, 0x8c, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x9f,
0x9c, 0x2b, 0xd0, 0x62, 0xb, 0x2b, 0xa6, 0xa4, 0xab, 0x18, 0x99, 0x19, 0x9a,
0x1a, 0x9b, 0x1b, 0x9c, 0x1c, 0x98, 0x20, 0xa1, 0x21, 0xa2, 0x22, 0xac, 0x0};
THEN("It should be serialized successfully") {
REQUIRE(serialize_helper(res) == expected);
}
}
Expand Down