2
0
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:
ruben
2020-05-09 19:43:04 +01:00
parent f5c2f3abf4
commit 7c455009ba
3 changed files with 41 additions and 36 deletions

View File

@@ -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);
});
}

View File

@@ -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

View File

@@ -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