mirror of
https://github.com/mhx/dwarfs.git
synced 2025-08-04 02:06:22 -04:00
test: even more metadata requirements tests
This commit is contained in:
parent
db6316af2b
commit
e6dbb1aaa4
@ -37,7 +37,8 @@ using namespace dwarfs;
|
|||||||
TEST(metadata_requirements, dynamic_test) {
|
TEST(metadata_requirements, dynamic_test) {
|
||||||
std::string requirements = R"({
|
std::string requirements = R"({
|
||||||
"compression": ["set", ["lz4", "zstd"]],
|
"compression": ["set", ["lz4", "zstd"]],
|
||||||
"block_size": ["range", 16, 1024]
|
"block_size": ["range", 16, 1024],
|
||||||
|
"channels": ["set", [1, 2, 4]]
|
||||||
})";
|
})";
|
||||||
|
|
||||||
std::unique_ptr<compression_metadata_requirements<folly::dynamic>> req;
|
std::unique_ptr<compression_metadata_requirements<folly::dynamic>> req;
|
||||||
@ -48,7 +49,8 @@ TEST(metadata_requirements, dynamic_test) {
|
|||||||
{
|
{
|
||||||
std::string metadata = R"({
|
std::string metadata = R"({
|
||||||
"compression": "lz4",
|
"compression": "lz4",
|
||||||
"block_size": 256
|
"block_size": 256,
|
||||||
|
"channels": 2
|
||||||
})";
|
})";
|
||||||
|
|
||||||
EXPECT_NO_THROW(req->check(metadata));
|
EXPECT_NO_THROW(req->check(metadata));
|
||||||
@ -58,7 +60,8 @@ TEST(metadata_requirements, dynamic_test) {
|
|||||||
std::string metadata = R"({
|
std::string metadata = R"({
|
||||||
"compression": "lz4",
|
"compression": "lz4",
|
||||||
"foo": "bar",
|
"foo": "bar",
|
||||||
"block_size": 256
|
"block_size": 256,
|
||||||
|
"channels": 2
|
||||||
})";
|
})";
|
||||||
|
|
||||||
EXPECT_NO_THROW(req->check(metadata));
|
EXPECT_NO_THROW(req->check(metadata));
|
||||||
@ -67,21 +70,23 @@ TEST(metadata_requirements, dynamic_test) {
|
|||||||
{
|
{
|
||||||
std::string metadata = R"({
|
std::string metadata = R"({
|
||||||
"compression": "lzma",
|
"compression": "lzma",
|
||||||
"block_size": 256
|
"block_size": 256,
|
||||||
|
"channels": 2
|
||||||
})";
|
})";
|
||||||
|
|
||||||
EXPECT_THAT(
|
EXPECT_THAT(
|
||||||
[&]() { req->check(metadata); },
|
[&] { req->check(metadata); },
|
||||||
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
"compression 'lzma' does not meet requirements [lz4, zstd]")));
|
"compression 'lzma' does not meet requirements [lz4, zstd]")));
|
||||||
}
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
std::string metadata = R"({
|
std::string metadata = R"({
|
||||||
"block_size": 256
|
"block_size": 256,
|
||||||
|
"channels": 2
|
||||||
})";
|
})";
|
||||||
|
|
||||||
EXPECT_THAT([&]() { req->check(metadata); },
|
EXPECT_THAT([&] { req->check(metadata); },
|
||||||
ThrowsMessage<std::runtime_error>(
|
ThrowsMessage<std::runtime_error>(
|
||||||
testing::HasSubstr("missing requirement 'compression'")));
|
testing::HasSubstr("missing requirement 'compression'")));
|
||||||
}
|
}
|
||||||
@ -89,13 +94,171 @@ TEST(metadata_requirements, dynamic_test) {
|
|||||||
{
|
{
|
||||||
std::string metadata = R"({
|
std::string metadata = R"({
|
||||||
"compression": "zstd",
|
"compression": "zstd",
|
||||||
"block_size": 8
|
"block_size": 8,
|
||||||
|
"channels": 2
|
||||||
})";
|
})";
|
||||||
|
|
||||||
EXPECT_THAT([&]() { req->check(metadata); },
|
EXPECT_THAT([&] { req->check(metadata); },
|
||||||
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
"block_size '8' does not meet requirements [16, 1024]")));
|
"block_size '8' does not meet requirements [16, 1024]")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
std::string metadata = R"({
|
||||||
|
"compression": "zstd",
|
||||||
|
"block_size": "foo",
|
||||||
|
"channels": 2
|
||||||
|
})";
|
||||||
|
|
||||||
|
EXPECT_THAT([&] { req->check(metadata); },
|
||||||
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
|
"non-integral type for requirement 'block_size', "
|
||||||
|
"got type 'string'")));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
std::string metadata = R"({
|
||||||
|
"compression": 13,
|
||||||
|
"block_size": 256,
|
||||||
|
"channels": 2
|
||||||
|
})";
|
||||||
|
|
||||||
|
EXPECT_THAT([&] { req->check(metadata); },
|
||||||
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
|
"non-string type for requirement 'compression', "
|
||||||
|
"got type 'int64'")));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
std::string metadata = R"({
|
||||||
|
"compression": 13,
|
||||||
|
"block_size": 256,
|
||||||
|
"channels": "foo"
|
||||||
|
})";
|
||||||
|
|
||||||
|
EXPECT_THAT([&] { req->check(metadata); },
|
||||||
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
|
"non-integral type for requirement 'channels', "
|
||||||
|
"got type 'string'")));
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
std::string metadata = R"({
|
||||||
|
"compression": 13,
|
||||||
|
"block_size": 256,
|
||||||
|
"channels": 3
|
||||||
|
})";
|
||||||
|
|
||||||
|
EXPECT_THAT([&] { req->check(metadata); },
|
||||||
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
|
"channels '3' does not meet requirements [1, 2, 4]")));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(metadata_requirements, dynamic_test_error) {
|
||||||
|
using namespace std::literals::string_literals;
|
||||||
|
using req_type = compression_metadata_requirements<folly::dynamic>;
|
||||||
|
|
||||||
|
EXPECT_THAT(
|
||||||
|
[&] { req_type tmp(R"([])"s); },
|
||||||
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
|
"metadata requirements must be an object, got type 'array'")));
|
||||||
|
|
||||||
|
EXPECT_THAT(
|
||||||
|
[&] {
|
||||||
|
req_type tmp(R"({
|
||||||
|
"compression": 42
|
||||||
|
})"s);
|
||||||
|
},
|
||||||
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
|
"requirement 'compression' must be an array, got type 'int64'")));
|
||||||
|
|
||||||
|
EXPECT_THAT(
|
||||||
|
[&] {
|
||||||
|
req_type tmp(R"({
|
||||||
|
"compression": [1]
|
||||||
|
})"s);
|
||||||
|
},
|
||||||
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
|
"requirement 'compression' must be an array of at least 2 elements, "
|
||||||
|
"got only 1")));
|
||||||
|
|
||||||
|
EXPECT_THAT(
|
||||||
|
[&] {
|
||||||
|
req_type tmp(R"({
|
||||||
|
"compression": [1, 2]
|
||||||
|
})"s);
|
||||||
|
},
|
||||||
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
|
"type for requirement 'compression' must be a string, got type "
|
||||||
|
"'int64'")));
|
||||||
|
|
||||||
|
EXPECT_THAT(
|
||||||
|
[&] {
|
||||||
|
req_type tmp(R"({
|
||||||
|
"compression": ["foo", 2]
|
||||||
|
})"s);
|
||||||
|
},
|
||||||
|
ThrowsMessage<std::runtime_error>(
|
||||||
|
testing::HasSubstr("unsupported requirement type 'foo'")));
|
||||||
|
|
||||||
|
EXPECT_THAT(
|
||||||
|
[&] {
|
||||||
|
req_type tmp(R"({
|
||||||
|
"compression": ["range", 2]
|
||||||
|
})"s);
|
||||||
|
},
|
||||||
|
ThrowsMessage<std::runtime_error>(
|
||||||
|
testing::HasSubstr("unexpected array size 2 for requirement "
|
||||||
|
"'compression', expected 3")));
|
||||||
|
|
||||||
|
EXPECT_THAT(
|
||||||
|
[&] {
|
||||||
|
req_type tmp(R"({
|
||||||
|
"compression": ["range", "foo", 42]
|
||||||
|
})"s);
|
||||||
|
},
|
||||||
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
|
"could not parse minimum value 'foo' for requirement 'compression': "
|
||||||
|
"Invalid leading character: \"foo\"")));
|
||||||
|
|
||||||
|
EXPECT_THAT(
|
||||||
|
[&] {
|
||||||
|
req_type tmp(R"({
|
||||||
|
"compression": ["range", 43, 42]
|
||||||
|
})"s);
|
||||||
|
},
|
||||||
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
|
"expected minimum '43' to be less than or equal to maximum '42' for "
|
||||||
|
"requirement 'compression'")));
|
||||||
|
|
||||||
|
EXPECT_THAT(
|
||||||
|
[&] {
|
||||||
|
req_type tmp(R"({
|
||||||
|
"compression": ["set", 2]
|
||||||
|
})"s);
|
||||||
|
},
|
||||||
|
ThrowsMessage<std::runtime_error>(
|
||||||
|
testing::HasSubstr("set for requirement 'compression' must be an "
|
||||||
|
"array, got type 'int64'")));
|
||||||
|
|
||||||
|
EXPECT_THAT(
|
||||||
|
[&] {
|
||||||
|
req_type tmp(R"({
|
||||||
|
"compression": ["set", []]
|
||||||
|
})"s);
|
||||||
|
},
|
||||||
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
|
"set for requirement 'compression' must not be empty")));
|
||||||
|
|
||||||
|
EXPECT_THAT(
|
||||||
|
[&] {
|
||||||
|
req_type tmp(R"({
|
||||||
|
"compression": ["set", ["foo", "bar", "foo"]]
|
||||||
|
})"s);
|
||||||
|
},
|
||||||
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
|
"duplicate value 'foo' for requirement 'compression'")));
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
@ -366,6 +529,16 @@ TEST_F(metadata_requirements_test, static_test_req_set_with_invalid_value) {
|
|||||||
EXPECT_NO_THROW(req->parse(dyn));
|
EXPECT_NO_THROW(req->parse(dyn));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_F(metadata_requirements_test, static_test_req_error_invalid_set5) {
|
||||||
|
auto dyn = folly::parseJson(R"({
|
||||||
|
"enum": ["set", ["grmpf", "foo", "foo"]]
|
||||||
|
})");
|
||||||
|
|
||||||
|
EXPECT_THAT([&]() { req->parse(dyn); },
|
||||||
|
ThrowsMessage<std::runtime_error>(testing::HasSubstr(
|
||||||
|
"duplicate value 'foo' for requirement 'enum'")));
|
||||||
|
}
|
||||||
|
|
||||||
TEST_F(metadata_requirements_test, static_test_req_error_range_invalid1) {
|
TEST_F(metadata_requirements_test, static_test_req_error_range_invalid1) {
|
||||||
auto dyn = folly::parseJson(R"({
|
auto dyn = folly::parseJson(R"({
|
||||||
"int16": ["range"]
|
"int16": ["range"]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user