mirror of
https://github.com/boostorg/mysql.git
synced 2026-02-16 01:22:20 +00:00
Reduced code duplication in binary serialize test
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
|
||||
#include <gtest/gtest.h>
|
||||
#include "test_common.hpp"
|
||||
#include "serialization_test_common.hpp"
|
||||
#include "boost/mysql/detail/protocol/binary_serialization.hpp"
|
||||
|
||||
using namespace boost::mysql::detail;
|
||||
@@ -42,7 +43,6 @@ struct SerializeBinaryValueTest : TestWithParam<serialize_binary_value_testcase>
|
||||
{
|
||||
};
|
||||
|
||||
// TODO: these are copied from serialization tests
|
||||
TEST_P(SerializeBinaryValueTest, GetBinaryValueSize_Trivial_ReturnsExpectedSize)
|
||||
{
|
||||
serialization_context ctx (capabilities{});
|
||||
@@ -52,23 +52,9 @@ TEST_P(SerializeBinaryValueTest, GetBinaryValueSize_Trivial_ReturnsExpectedSize)
|
||||
|
||||
TEST_P(SerializeBinaryValueTest, SerializeBinaryValue_Trivial_WritesToBuffer)
|
||||
{
|
||||
auto expected_size = GetParam().buffer.size();
|
||||
std::vector<uint8_t> buffer (expected_size + 8, 0x7a); // buffer overrun detector
|
||||
serialization_context ctx (capabilities(), buffer.data());
|
||||
serialize_binary_value(GetParam().from, ctx);
|
||||
|
||||
// Iterator
|
||||
EXPECT_EQ(ctx.first(), buffer.data() + expected_size) << "Iterator not updated correctly";
|
||||
|
||||
// Buffer
|
||||
std::string_view expected_populated = makesv(GetParam().buffer.data(), expected_size);
|
||||
std::string_view actual_populated = makesv(buffer.data(), expected_size);
|
||||
compare_buffers(expected_populated, actual_populated, "Buffer contents incorrect");
|
||||
|
||||
// Check for buffer overruns
|
||||
std::string expected_clean (8, 0x7a);
|
||||
std::string_view actual_clean = makesv(buffer.data() + expected_size, 8);
|
||||
compare_buffers(expected_clean, actual_clean, "Buffer overrun");
|
||||
do_serialize_test(GetParam().buffer, [](serialization_context& ctx) {
|
||||
serialize_binary_value(GetParam().from, ctx);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -11,6 +11,32 @@ using namespace boost::mysql::detail;
|
||||
using namespace boost::mysql::test;
|
||||
using boost::mysql::errc;
|
||||
|
||||
void boost::mysql::test::do_serialize_test(
|
||||
const std::vector<std::uint8_t>& expected_buffer,
|
||||
const std::function<void(serialization_context&)>& serializator,
|
||||
capabilities caps
|
||||
)
|
||||
{
|
||||
auto expected_size = expected_buffer.size();
|
||||
std::vector<uint8_t> buffer (expected_size + 8, 0x7a); // buffer overrun detector
|
||||
serialization_context ctx (caps, buffer.data());
|
||||
serializator(ctx);
|
||||
|
||||
// Iterator
|
||||
EXPECT_EQ(ctx.first(), buffer.data() + expected_size) << "Iterator not updated correctly";
|
||||
|
||||
// Buffer
|
||||
std::string_view expected_populated = makesv(expected_buffer.data(), expected_size);
|
||||
std::string_view actual_populated = makesv(buffer.data(), expected_size);
|
||||
compare_buffers(expected_populated, actual_populated, "Buffer contents incorrect");
|
||||
|
||||
// Check for buffer overruns
|
||||
std::string expected_clean (8, 0x7a);
|
||||
std::string_view actual_clean = makesv(buffer.data() + expected_size, 8);
|
||||
compare_buffers(expected_clean, actual_clean, "Buffer overrun");
|
||||
}
|
||||
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
@@ -25,23 +51,9 @@ void get_size_test(const serialization_testcase& p)
|
||||
// serialize
|
||||
void serialize_test(const serialization_testcase& p)
|
||||
{
|
||||
auto expected_size = p.expected_buffer.size();
|
||||
std::vector<uint8_t> buffer (expected_size + 8, 0x7a); // buffer overrun detector
|
||||
serialization_context ctx (p.caps, buffer.data());
|
||||
p.value->serialize(ctx);
|
||||
|
||||
// Iterator
|
||||
EXPECT_EQ(ctx.first(), buffer.data() + expected_size) << "Iterator not updated correctly";
|
||||
|
||||
// Buffer
|
||||
std::string_view expected_populated = makesv(p.expected_buffer.data(), expected_size);
|
||||
std::string_view actual_populated = makesv(buffer.data(), expected_size);
|
||||
compare_buffers(expected_populated, actual_populated, "Buffer contents incorrect");
|
||||
|
||||
// Check for buffer overruns
|
||||
std::string expected_clean (8, 0x7a);
|
||||
std::string_view actual_clean = makesv(buffer.data() + expected_size, 8);
|
||||
compare_buffers(expected_clean, actual_clean, "Buffer overrun");
|
||||
do_serialize_test(p.expected_buffer, [&](serialization_context& ctx) {
|
||||
p.value->serialize(ctx);
|
||||
}, p.caps);
|
||||
}
|
||||
|
||||
// deserialize
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
#include <gtest/gtest.h>
|
||||
#include <string>
|
||||
#include <any>
|
||||
#include <functional>
|
||||
#include <boost/type_index.hpp>
|
||||
#include "test_common.hpp"
|
||||
|
||||
@@ -166,7 +167,13 @@ struct serialization_testcase : test::named_param
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// We expose this function so binary serialization, which does not employ
|
||||
// the regular serialize() overloads, can use it
|
||||
void do_serialize_test(
|
||||
const std::vector<std::uint8_t>& expected_buffer,
|
||||
const std::function<void(detail::serialization_context&)>& serializator,
|
||||
detail::capabilities caps = detail::capabilities()
|
||||
);
|
||||
|
||||
// Test fixtures
|
||||
struct SerializationFixture : public testing::TestWithParam<serialization_testcase> {}; // base
|
||||
|
||||
Reference in New Issue
Block a user