Files
cariflex/tools/EVerest-main/modules/EVSE/EvseV2G/tests/sdp_test.cpp
Eric F d398a6ced2 Add extracted tools: CitrineOS, OpenOCPP, ShapeShifter
- CitrineOS core extracted (CSMS OCPP 2.0.1)
- OpenOCPP extracted (firmware OCPP 1.6J/2.0.1)
- ShapeShifter library installed (pip install -e)
- ShapeShifter specification extracted
- EVerest extracted

TODO updated with progress
2026-06-08 00:38:27 -04:00

105 lines
2.9 KiB
C++

// SPDX-License-Identifier: Apache-2.0
// Copyright Pionix GmbH and Contributors to EVerest
#include <gtest/gtest.h>
#include <sdp.hpp>
#include <tools.hpp>
namespace {
class SdpTest : public testing::Test {
protected:
SdpTest() {
}
};
TEST_F(SdpTest, sdp_set_dlink_ready_sets_flag) {
v2g_context ctx{};
EXPECT_FALSE(ctx.sdp_dlink_ready);
sdp_set_dlink_ready(&ctx, true);
EXPECT_TRUE(ctx.sdp_dlink_ready);
sdp_set_dlink_ready(&ctx, false);
EXPECT_FALSE(ctx.sdp_dlink_ready);
}
TEST_F(SdpTest, sdp_set_dlink_ready_captures_timestamp) {
v2g_context ctx{};
EXPECT_EQ(ctx.sdp_dlink_ready_time.load(), 0);
sdp_set_dlink_ready(&ctx, true);
EXPECT_GT(ctx.sdp_dlink_ready_time.load(), 0);
sdp_set_dlink_ready(&ctx, false);
EXPECT_EQ(ctx.sdp_dlink_ready_time.load(), 0);
}
TEST_F(SdpTest, sdp_set_dlink_ready_timestamp_is_monotonic) {
v2g_context ctx{};
sdp_set_dlink_ready(&ctx, true);
long long int first = ctx.sdp_dlink_ready_time.load();
sdp_set_dlink_ready(&ctx, false);
sdp_set_dlink_ready(&ctx, true);
long long int second = ctx.sdp_dlink_ready_time.load();
EXPECT_GE(second, first);
}
TEST_F(SdpTest, sdp_write_header) {
uint8_t buffer[20];
uint16_t payload_type = 0x9001;
uint32_t length = 367;
EXPECT_EQ(sdp_write_header(buffer, payload_type, length), 8);
EXPECT_EQ(buffer[0], 0x01);
EXPECT_EQ(buffer[1], 0xFE);
EXPECT_EQ(buffer[2], 0x90);
EXPECT_EQ(buffer[3], 0x01);
EXPECT_EQ(buffer[4], 0x00);
EXPECT_EQ(buffer[5], 0x00);
EXPECT_EQ(buffer[6], 0x01);
EXPECT_EQ(buffer[7], 0x6F);
}
TEST_F(SdpTest, timeout_detected_when_elapsed_exceeds_limit) {
v2g_context ctx{};
// Simulate dlink becoming ready 18001ms ago
long long int now = getmonotonictime();
ctx.sdp_dlink_ready_time = now - (V2G_COMMUNICATION_SETUP_TIMEOUT + 1);
long long int elapsed = now - ctx.sdp_dlink_ready_time.load();
EXPECT_GE(elapsed, V2G_COMMUNICATION_SETUP_TIMEOUT);
}
TEST_F(SdpTest, timeout_not_detected_when_elapsed_below_limit) {
v2g_context ctx{};
// Simulate dlink becoming ready just now
ctx.sdp_dlink_ready_time = getmonotonictime();
long long int elapsed = getmonotonictime() - ctx.sdp_dlink_ready_time.load();
EXPECT_LT(elapsed, V2G_COMMUNICATION_SETUP_TIMEOUT);
}
TEST_F(SdpTest, timeout_cancelled_when_connection_initiated) {
v2g_context ctx{};
sdp_set_dlink_ready(&ctx, true);
EXPECT_NE(ctx.sdp_dlink_ready_time.load(), 0);
// Simulate connection established — timeout should be cancelled
ctx.connection_initiated = true;
long long int dlink_ready_time = ctx.sdp_dlink_ready_time.load();
if (ctx.connection_initiated && dlink_ready_time != 0) {
ctx.sdp_dlink_ready_time = 0;
}
EXPECT_EQ(ctx.sdp_dlink_ready_time.load(), 0);
}
TEST_F(SdpTest, v2g_communication_setup_timeout_is_18000) {
EXPECT_EQ(V2G_COMMUNICATION_SETUP_TIMEOUT, 18000);
}
} // namespace