2
0
mirror of https://github.com/boostorg/mysql.git synced 2026-02-16 01:22:20 +00:00

Added tests for deserialize_row

This commit is contained in:
ruben
2019-11-10 21:56:10 +00:00
parent ac50193b4e
commit b3ec379ee6

View File

@@ -107,8 +107,6 @@ INSTANTIATE_TEST_SUITE_P(StringTypes, DeserializeTextValueTest, Values(
TextValueParam("GEOMTRY", "\1", "\1", field_type::geometry, column_flags::binary | column_flags::blob)
));
// Types BIT,
INSTANTIATE_TEST_SUITE_P(TINYINT, DeserializeTextValueTest, Values(
TextValueParam("signed", "20", std::int32_t(20), field_type::tiny),
TextValueParam("signed max", "127", std::int32_t(127), field_type::tiny),
@@ -334,6 +332,124 @@ INSTANTIATE_TEST_SUITE_P(YEAR, DeserializeTextValueTest, Values(
TextValueParam("zero", "0000", year(0), field_type::year)
));
struct DeserializeTextRowTest : public Test
{
std::vector<field_metadata> meta {
msgs::column_definition {
{"def"},
{"awesome"},
{"test_table"},
{"test_table"},
{"f0"},
{"f0"},
collation::utf8_general_ci,
{300},
field_type::var_string,
{0},
{0}
},
msgs::column_definition {
{"def"},
{"awesome"},
{"test_table"},
{"test_table"},
{"f1"},
{"f1"},
collation::binary,
{11},
field_type::long_,
{0},
{0}
},
msgs::column_definition {
{"def"},
{"awesome"},
{"test_table"},
{"test_table"},
{"f2"},
{"f2"},
collation::binary,
{22},
field_type::datetime,
{column_flags::binary},
{2}
}
};
std::vector<value> values;
error_code deserialize(const std::vector<std::uint8_t>& buffer)
{
DeserializationContext ctx (buffer.data(), buffer.data() + buffer.size(), capabilities());
return deserialize_text_row(ctx, meta, values);
}
};
TEST_F(DeserializeTextRowTest, SameNumberOfValuesAsFieldsNonNulls_DeserializesReturnsOk)
{
std::vector<value> expected_values {value("val"), value(std::int32_t(21)), value(makedt(2010, 10, 1))};
std::vector<std::uint8_t> buffer {
0x03, 0x76, 0x61, 0x6c, 0x02, 0x32, 0x31, 0x16,
0x32, 0x30, 0x31, 0x30, 0x2d, 0x31, 0x30, 0x2d,
0x30, 0x31, 0x20, 0x30, 0x30, 0x3a, 0x30, 0x30,
0x3a, 0x30, 0x30, 0x2e, 0x30, 0x30
};
auto err = deserialize(buffer);
EXPECT_EQ(err, error_code());
EXPECT_EQ(values, expected_values);
}
TEST_F(DeserializeTextRowTest, SameNumberOfValuesAsFieldsOneNull_DeserializesReturnsOk)
{
std::vector<value> expected_values {value("val"), value(nullptr), value(makedt(2010, 10, 1))};
std::vector<std::uint8_t> buffer {
0x03, 0x76, 0x61, 0x6c, 0xfb, 0x16, 0x32, 0x30,
0x31, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x31,
0x20, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30,
0x30, 0x2e, 0x30, 0x30
};
auto err = deserialize(buffer);
EXPECT_EQ(err, error_code());
EXPECT_EQ(values, expected_values);
}
TEST_F(DeserializeTextRowTest, SameNumberOfValuesAsFieldsAllNull_DeserializesReturnsOk)
{
std::vector<value> expected_values {value(nullptr), value(nullptr), value(nullptr)};
auto err = deserialize({0xfb, 0xfb, 0xfb});
EXPECT_EQ(err, error_code());
EXPECT_EQ(values, expected_values);
}
TEST_F(DeserializeTextRowTest, TooFewValues_ReturnsError)
{
auto err = deserialize({0xfb, 0xfb});
EXPECT_EQ(err, make_error_code(Error::incomplete_message));
}
TEST_F(DeserializeTextRowTest, TooManyValues_ReturnsError)
{
auto err = deserialize({0xfb, 0xfb, 0xfb, 0xfb});
EXPECT_EQ(err, make_error_code(Error::extra_bytes));
}
TEST_F(DeserializeTextRowTest, ErrorDeserializingContainerStringValue_ReturnsError)
{
auto err = deserialize({0x03, 0xaa, 0xab, 0xfb, 0xfb});
EXPECT_EQ(err, make_error_code(Error::incomplete_message));
}
TEST_F(DeserializeTextRowTest, ErrorDeserializingContainerValue_ReturnsError)
{
std::vector<std::uint8_t> buffer {
0x03, 0x76, 0x61, 0x6c, 0xfb, 0x16, 0x32, 0x30,
0x31, 0x30, 0x2d, 0x31, 0x30, 0x2d, 0x30, 0x31,
0x20, 0x30, 0x30, 0x3a, 0x30, 0x30, 0x3a, 0x30,
0x30, 0x2f, 0x30, 0x30
};
auto err = deserialize(buffer);
EXPECT_EQ(err, make_error_code(Error::protocol_value_error));
}
}