Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(282)

Unified Diff: mojo/public/c/bindings/tests/validation_unittest.cc

Issue 2234063002: Move the C bindings tests to the new location. (Closed) Base URL: https://github.com/domokit/mojo.git@work791_mojo_bindings
Patch Set: Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « mojo/public/c/bindings/tests/union_unittest.cc ('k') | mojo/public/c/tests/bindings/array_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/public/c/bindings/tests/validation_unittest.cc
diff --git a/mojo/public/c/bindings/tests/validation_unittest.cc b/mojo/public/c/bindings/tests/validation_unittest.cc
deleted file mode 100644
index 1d1ee431ebc5e8a7ef4cb799aa95206da3912ae3..0000000000000000000000000000000000000000
--- a/mojo/public/c/bindings/tests/validation_unittest.cc
+++ /dev/null
@@ -1,270 +0,0 @@
-// Copyright 2016 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// TODO(vardhan): There is some duplicate code here borrowed from
-// mojo/public/cpp/bindings/tests/validation_unittest.cc; extract it into a
-// library, and share?
-
-#include <mojo/bindings/internal/util.h>
-#include <mojo/bindings/message.h>
-#include <mojo/bindings/struct.h>
-#include <stdio.h>
-
-#include <functional>
-#include <string>
-
-#include "mojo/public/cpp/bindings/tests/validation_util.h"
-#include "mojo/public/cpp/system/macros.h"
-#include "mojo/public/cpp/test_support/test_support.h"
-#include "mojo/public/interfaces/bindings/tests/validation_test_interfaces.mojom-c.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using mojo::test::EnumerateSourceRootRelativeDirectory;
-
-namespace mojo {
-namespace test {
-namespace {
-
-const char* MojomValidationResultToString(MojomValidationResult error) {
- switch (error) {
- case MOJOM_VALIDATION_ERROR_NONE:
- return "PASS";
- case MOJOM_VALIDATION_MISALIGNED_OBJECT:
- return "VALIDATION_ERROR_MISALIGNED_OBJECT";
- case MOJOM_VALIDATION_ILLEGAL_MEMORY_RANGE:
- return "VALIDATION_ERROR_ILLEGAL_MEMORY_RANGE";
- case MOJOM_VALIDATION_UNEXPECTED_STRUCT_HEADER:
- return "VALIDATION_ERROR_UNEXPECTED_STRUCT_HEADER";
- case MOJOM_VALIDATION_UNEXPECTED_ARRAY_HEADER:
- return "VALIDATION_ERROR_UNEXPECTED_ARRAY_HEADER";
- case MOJOM_VALIDATION_ILLEGAL_HANDLE:
- return "VALIDATION_ERROR_ILLEGAL_HANDLE";
- case MOJOM_VALIDATION_UNEXPECTED_INVALID_HANDLE:
- return "VALIDATION_ERROR_UNEXPECTED_INVALID_HANDLE";
- case MOJOM_VALIDATION_ILLEGAL_POINTER:
- return "VALIDATION_ERROR_ILLEGAL_POINTER";
- case MOJOM_VALIDATION_UNEXPECTED_NULL_POINTER:
- return "VALIDATION_ERROR_UNEXPECTED_NULL_POINTER";
- case MOJOM_VALIDATION_MESSAGE_HEADER_INVALID_FLAGS:
- return "VALIDATION_ERROR_MESSAGE_HEADER_INVALID_FLAGS";
- case MOJOM_VALIDATION_MESSAGE_HEADER_MISSING_REQUEST_ID:
- return "VALIDATION_ERROR_MESSAGE_HEADER_MISSING_REQUEST_ID";
- case MOJOM_VALIDATION_MESSAGE_HEADER_UNKNOWN_METHOD:
- return "VALIDATION_ERROR_MESSAGE_HEADER_UNKNOWN_METHOD";
- case MOJOM_VALIDATION_DIFFERENT_SIZED_ARRAYS_IN_MAP:
- return "VALIDATION_ERROR_DIFFERENT_SIZED_ARRAYS_IN_MAP";
- case MOJOM_VALIDATION_UNEXPECTED_NULL_UNION:
- return "VALIDATION_ERROR_UNEXPECTED_NULL_UNION";
- }
-
- return "Unknown error";
-}
-
-void RunValidationTests(
- const std::string& prefix,
- std::function<MojomValidationResult(const std::vector<uint8_t>&, size_t)>
- validate_fn) {
- std::vector<std::string> tests = validation_util::GetMatchingTests(prefix);
- for (size_t i = 0; i < tests.size(); ++i) {
- std::vector<uint8_t> message_data;
- size_t num_handles;
- std::string expected;
- ASSERT_TRUE(validation_util::ReadTestCase(tests[i], &message_data,
- &num_handles, &expected));
- // Validate this message. Should be PASS or ValidationErrorToString()
- MojomValidationResult result = validate_fn(message_data, num_handles);
- EXPECT_EQ(expected, MojomValidationResultToString(result)) << tests[i];
- }
-}
-
-// Emits a case (as part of a switch{} block) for validating a request for the
-// given method, and sets the |result|.
-// TODO(vardhan): Should this be code generated? Seems like everyone will have
-// to do this.
-#define CASE_INTERFACE_METHOD_REQUEST(method_struct, data, data_size, \
- num_handles, result, expects_response) \
- case method_struct##__Ordinal: { \
- (result) = expects_response \
- ? MojomMessage_ValidateRequestExpectingResponse(data) \
- : MojomMessage_ValidateRequestWithoutResponse(data); \
- if ((result) == MOJOM_VALIDATION_ERROR_NONE) { \
- const struct MojomMessage* msg = (const struct MojomMessage*)(data); \
- (result) = method_struct##_Request_Validate( \
- (const struct method_struct##_Request*)((char*)data + \
- msg->header.num_bytes), \
- data_size - msg->header.num_bytes, (num_handles)); \
- } \
- break; \
- }
-
-#define CASE_INTERFACE_METHOD_RESPONSE(method_struct, data, data_size, \
- num_handles, result) \
- case method_struct##__Ordinal: { \
- (result) = MojomMessage_ValidateResponse(data); \
- if ((result) == MOJOM_VALIDATION_ERROR_NONE) { \
- const struct MojomMessage* msg = (const struct MojomMessage*)(data); \
- (result) = method_struct##_Response_Validate( \
- (const struct method_struct##_Response*)((char*)data + \
- msg->header.num_bytes), \
- data_size - msg->header.num_bytes, (num_handles)); \
- } \
- break; \
- }
-MojomValidationResult DispatchConformanceTestInterface_Request_Validate(
- const std::vector<uint8_t>& data,
- size_t num_handles) {
- const struct MojomMessage* msg = (const struct MojomMessage*)data.data();
- const char* msg_data = (const char*)data.data();
- uint32_t msg_size = data.size();
-
- MojomValidationResult result =
- MojomMessage_ValidateHeader(msg_data, msg_size);
- if (result != MOJOM_VALIDATION_ERROR_NONE)
- return result;
- switch (msg->ordinal) {
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method0,
- msg_data, msg_size, num_handles, result,
- false)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method1,
- msg_data, msg_size, num_handles, result,
- false)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method2,
- msg_data, msg_size, num_handles, result,
- false)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method3,
- msg_data, msg_size, num_handles, result,
- false)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method4,
- msg_data, msg_size, num_handles, result,
- false)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method5,
- msg_data, msg_size, num_handles, result,
- false)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method6,
- msg_data, msg_size, num_handles, result,
- false)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method7,
- msg_data, msg_size, num_handles, result,
- false)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method8,
- msg_data, msg_size, num_handles, result,
- false)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method9,
- msg_data, msg_size, num_handles, result,
- false)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method10,
- msg_data, msg_size, num_handles, result,
- false)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method11,
- msg_data, msg_size, num_handles, result,
- false)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method12,
- msg_data, msg_size, num_handles, result, true)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method13,
- msg_data, msg_size, num_handles, result,
- false)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method14,
- msg_data, msg_size, num_handles, result,
- false)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_ConformanceTestInterface_Method15,
- msg_data, msg_size, num_handles, result,
- false)
- default:
- result = MOJOM_VALIDATION_MESSAGE_HEADER_UNKNOWN_METHOD;
- break;
- }
- return result;
-}
-
-MojomValidationResult DispatchConformanceTestInterface_Response_Validate(
- const std::vector<uint8_t>& data,
- size_t num_handles) {
- const struct MojomMessage* msg = (const struct MojomMessage*)data.data();
- const char* msg_data = (const char*)data.data();
- uint32_t msg_size = data.size();
-
- MojomValidationResult result =
- MojomMessage_ValidateHeader(msg_data, msg_size);
- if (result != MOJOM_VALIDATION_ERROR_NONE)
- return result;
- switch (msg->ordinal) {
- CASE_INTERFACE_METHOD_RESPONSE(mojo_test_ConformanceTestInterface_Method12,
- msg_data, msg_size, num_handles, result)
- default:
- result = MOJOM_VALIDATION_MESSAGE_HEADER_UNKNOWN_METHOD;
- break;
- }
- return result;
-}
-
-MojomValidationResult DispatchBoundsCheckTestInterface_Request_Validate(
- const std::vector<uint8_t>& data,
- size_t num_handles) {
- const struct MojomMessage* msg = (const struct MojomMessage*)data.data();
- const char* msg_data = (const char*)data.data();
- uint32_t msg_size = data.size();
-
- MojomValidationResult result =
- MojomMessage_ValidateHeader(msg_data, msg_size);
- if (result != MOJOM_VALIDATION_ERROR_NONE)
- return result;
- switch (msg->ordinal) {
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_BoundsCheckTestInterface_Method0,
- msg_data, msg_size, num_handles, result, true)
- CASE_INTERFACE_METHOD_REQUEST(mojo_test_BoundsCheckTestInterface_Method1,
- msg_data, msg_size, num_handles, result,
- false)
- default:
- result = MOJOM_VALIDATION_MESSAGE_HEADER_UNKNOWN_METHOD;
- break;
- }
- return result;
-}
-
-MojomValidationResult DispatchBoundsCheckTestInterface_Response_Validate(
- const std::vector<uint8_t>& data,
- size_t num_handles) {
- const struct MojomMessage* msg = (const struct MojomMessage*)data.data();
- const char* msg_data = (const char*)data.data();
- uint32_t msg_size = data.size();
-
- MojomValidationResult result =
- MojomMessage_ValidateHeader(msg_data, msg_size);
- if (result != MOJOM_VALIDATION_ERROR_NONE)
- return result;
- switch (msg->ordinal) {
- CASE_INTERFACE_METHOD_RESPONSE(mojo_test_BoundsCheckTestInterface_Method0,
- msg_data, msg_size, num_handles, result)
- default:
- result = MOJOM_VALIDATION_MESSAGE_HEADER_UNKNOWN_METHOD;
- break;
- }
- return result;
-}
-
-TEST(ValidationTest, Conformance) {
- RunValidationTests("conformance_",
- DispatchConformanceTestInterface_Request_Validate);
-}
-
-TEST(ValidationTest, ResponseConformance) {
- RunValidationTests("resp_conformance_",
- DispatchConformanceTestInterface_Response_Validate);
-}
-
-TEST(ValidationTest, BoundsCheck) {
- RunValidationTests("boundscheck_",
- DispatchBoundsCheckTestInterface_Request_Validate);
-}
-
-TEST(ValidationTest, ResponseBoundsCheck) {
- RunValidationTests("resp_boundscheck_",
- DispatchBoundsCheckTestInterface_Response_Validate);
-}
-
-// TODO(vardhan): Tests for "integration_" files.
-
-} // namespace
-} // namespace test
-} // namespace mojo
« no previous file with comments | « mojo/public/c/bindings/tests/union_unittest.cc ('k') | mojo/public/c/tests/bindings/array_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698