diff options
author | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2019-04-18 16:19:25 -0400 |
---|---|---|
committer | Mark Benvenuto <mark.benvenuto@mongodb.com> | 2019-04-18 16:19:25 -0400 |
commit | 063d5ff4589aba211f7c6eaea2b180f29a752cd2 (patch) | |
tree | ad5913198c17ec3347c35c1a348a8d0b6f85e06b /src/mongo/idl | |
parent | 2c8a3592b023cc8910ef86739d0205f4cb2d0db4 (diff) | |
download | mongo-063d5ff4589aba211f7c6eaea2b180f29a752cd2.tar.gz |
SERVER-40426 Extend IDL Validators for more types and structs
Diffstat (limited to 'src/mongo/idl')
-rw-r--r-- | src/mongo/idl/idl_test.cpp | 8 | ||||
-rw-r--r-- | src/mongo/idl/idl_test.h | 32 | ||||
-rw-r--r-- | src/mongo/idl/unittest.idl | 29 |
3 files changed, 69 insertions, 0 deletions
diff --git a/src/mongo/idl/idl_test.cpp b/src/mongo/idl/idl_test.cpp index ab998137bf5..8bfae0cfa3b 100644 --- a/src/mongo/idl/idl_test.cpp +++ b/src/mongo/idl/idl_test.cpp @@ -2829,6 +2829,14 @@ TEST(IDLValidatedField, Callback_validators) { tryFail(43, 123456789.01, "x-ray"); tryFail(42, 123456789.11, "x-ray"); tryFail(42, 123456789.01, "uniform"); + + Unusual_callback_validators obj1; + obj1.setInt_even(42); + ASSERT_THROWS(obj1.setInt_even(7), AssertionException); + obj1.setArray_of_int({42}); + ASSERT_THROWS(obj1.setArray_of_int({7}), AssertionException); + obj1.setOne_int(One_int(42)); + ASSERT_THROWS(obj1.setOne_int(One_int(7)), AssertionException); } // Positive: verify a command a string arg diff --git a/src/mongo/idl/idl_test.h b/src/mongo/idl/idl_test.h index 080c35ea949..40b840a1f39 100644 --- a/src/mongo/idl/idl_test.h +++ b/src/mongo/idl/idl_test.h @@ -27,7 +27,11 @@ * it in the license file. */ +#include <string> +#include <vector> + #include "mongo/base/status.h" +#include "mongo/idl/unittest_import_gen.h" namespace mongo { namespace idl { @@ -43,6 +47,16 @@ inline Status validateEvenNumber(std::int32_t value) { return Status::OK(); } +inline Status validateEvenNumber(const std::vector<std::int32_t>& values) { + for (auto& value : values) { + auto status = validateEvenNumber(value); + if (!status.isOK()) { + return status; + } + } + return Status::OK(); +} + /** * Validates that the number presented is within 0.1 of an integer value */ @@ -66,6 +80,24 @@ Status validateStartsWith(const std::string& value) { return Status::OK(); } + +/** + * Validate a struct + */ +inline Status validateOneInt(const mongo::idl::import::One_int& one) { + return validateEvenNumber(one.getValue()); +} + +inline Status validateOneInt(const std::vector<mongo::idl::import::One_int>& values) { + for (auto& value : values) { + auto status = validateEvenNumber(value.getValue()); + if (!status.isOK()) { + return status; + } + } + return Status::OK(); +} + } // namespace test } // namespace idl } // namespace mongo diff --git a/src/mongo/idl/unittest.idl b/src/mongo/idl/unittest.idl index 2478d10d12d..4f797cc67e0 100644 --- a/src/mongo/idl/unittest.idl +++ b/src/mongo/idl/unittest.idl @@ -588,6 +588,35 @@ structs: optional: true validator: { callback: "validateStartsWith<'x'>" } + unusual_callback_validators: + description: Struct using fields with unusual callback validators + fields: + int_even: + type: int + optional: true + validator: { callback: 'validateEvenNumber' } + string_starts_with_x: + type: string + optional: true + validator: { callback: "validateStartsWith<'x'>" } + array_of_int: + type: array<int> + validator: { callback: "validateEvenNumber" } + array_of_int_optional: + type: array<int> + optional: true + validator: { callback: "validateEvenNumber" } + one_int: + type: one_int + validator: { callback: 'validateOneInt' } + one_int_optional: + type: one_int + optional: true + validator: { callback: 'validateOneInt' } + one_int_array: + type: array<one_int> + validator: { callback: 'validateOneInt' } + ################################################################################################## # |