diff options
Diffstat (limited to 'mojo/public/cpp/bindings/tests/validation_context_unittest.cc')
-rw-r--r-- | mojo/public/cpp/bindings/tests/validation_context_unittest.cc | 109 |
1 files changed, 96 insertions, 13 deletions
diff --git a/mojo/public/cpp/bindings/tests/validation_context_unittest.cc b/mojo/public/cpp/bindings/tests/validation_context_unittest.cc index aceaf1c..9ce9d60 100644 --- a/mojo/public/cpp/bindings/tests/validation_context_unittest.cc +++ b/mojo/public/cpp/bindings/tests/validation_context_unittest.cc @@ -17,6 +17,8 @@ namespace test { namespace { using Handle_Data = mojo::internal::Handle_Data; +using AssociatedEndpointHandle_Data = + mojo::internal::AssociatedEndpointHandle_Data; const void* ToPtr(uintptr_t ptr) { return reinterpret_cast<const void*>(ptr); @@ -27,7 +29,7 @@ TEST(ValidationContextTest, ConstructorRangeOverflow) { { // Test memory range overflow. internal::ValidationContext context( - ToPtr(std::numeric_limits<uintptr_t>::max() - 3000), 5000, 0); + ToPtr(std::numeric_limits<uintptr_t>::max() - 3000), 5000, 0, 0); EXPECT_FALSE(context.IsValidRange( ToPtr(std::numeric_limits<uintptr_t>::max() - 3000), 1)); @@ -35,11 +37,14 @@ TEST(ValidationContextTest, ConstructorRangeOverflow) { ToPtr(std::numeric_limits<uintptr_t>::max() - 3000), 1)); } - if (sizeof(size_t) > sizeof(uint32_t)) { + if (sizeof(size_t) <= sizeof(uint32_t)) + return; + + { // Test handle index range overflow. size_t num_handles = static_cast<size_t>(std::numeric_limits<uint32_t>::max()) + 5; - internal::ValidationContext context(ToPtr(0), 0, num_handles); + internal::ValidationContext context(ToPtr(0), 0, num_handles, 0); EXPECT_FALSE(context.ClaimHandle(Handle_Data(0))); EXPECT_FALSE(context.ClaimHandle( @@ -48,12 +53,28 @@ TEST(ValidationContextTest, ConstructorRangeOverflow) { EXPECT_TRUE(context.ClaimHandle( Handle_Data(internal::kEncodedInvalidHandleValue))); } + + { + size_t num_associated_endpoint_handles = + static_cast<size_t>(std::numeric_limits<uint32_t>::max()) + 5; + internal::ValidationContext context(ToPtr(0), 0, 0, + num_associated_endpoint_handles); + + EXPECT_FALSE(context.ClaimAssociatedEndpointHandle( + AssociatedEndpointHandle_Data(0))); + EXPECT_FALSE( + context.ClaimAssociatedEndpointHandle(AssociatedEndpointHandle_Data( + std::numeric_limits<uint32_t>::max() - 1))); + + EXPECT_TRUE(context.ClaimAssociatedEndpointHandle( + AssociatedEndpointHandle_Data(internal::kEncodedInvalidHandleValue))); + } } #endif TEST(ValidationContextTest, IsValidRange) { { - internal::ValidationContext context(ToPtr(1234), 100, 0); + internal::ValidationContext context(ToPtr(1234), 100, 0, 0); // Basics. EXPECT_FALSE(context.IsValidRange(ToPtr(100), 5)); @@ -79,7 +100,7 @@ TEST(ValidationContextTest, IsValidRange) { } { - internal::ValidationContext context(ToPtr(1234), 100, 0); + internal::ValidationContext context(ToPtr(1234), 100, 0, 0); // Should return false for empty ranges. EXPECT_FALSE(context.IsValidRange(ToPtr(0), 0)); EXPECT_FALSE(context.IsValidRange(ToPtr(1200), 0)); @@ -90,7 +111,7 @@ TEST(ValidationContextTest, IsValidRange) { { // The valid memory range is empty. - internal::ValidationContext context(ToPtr(1234), 0, 0); + internal::ValidationContext context(ToPtr(1234), 0, 0, 0); EXPECT_FALSE(context.IsValidRange(ToPtr(1234), 1)); EXPECT_FALSE(context.IsValidRange(ToPtr(1234), 0)); @@ -98,7 +119,7 @@ TEST(ValidationContextTest, IsValidRange) { { internal::ValidationContext context( - ToPtr(std::numeric_limits<uintptr_t>::max() - 2000), 1000, 0); + ToPtr(std::numeric_limits<uintptr_t>::max() - 2000), 1000, 0, 0); // Test overflow. EXPECT_FALSE(context.IsValidRange( @@ -115,7 +136,7 @@ TEST(ValidationContextTest, IsValidRange) { TEST(ValidationContextTest, ClaimHandle) { { - internal::ValidationContext context(ToPtr(0), 0, 10); + internal::ValidationContext context(ToPtr(0), 0, 10, 0); // Basics. EXPECT_TRUE(context.ClaimHandle(Handle_Data(0))); @@ -137,7 +158,7 @@ TEST(ValidationContextTest, ClaimHandle) { { // No handle to claim. - internal::ValidationContext context(ToPtr(0), 0, 0); + internal::ValidationContext context(ToPtr(0), 0, 0, 0); EXPECT_FALSE(context.ClaimHandle(Handle_Data(0))); @@ -152,7 +173,7 @@ TEST(ValidationContextTest, ClaimHandle) { EXPECT_EQ(internal::kEncodedInvalidHandleValue, std::numeric_limits<uint32_t>::max()); internal::ValidationContext context( - ToPtr(0), 0, std::numeric_limits<uint32_t>::max()); + ToPtr(0), 0, std::numeric_limits<uint32_t>::max(), 0); EXPECT_TRUE(context.ClaimHandle( Handle_Data(std::numeric_limits<uint32_t>::max() - 1))); @@ -166,9 +187,71 @@ TEST(ValidationContextTest, ClaimHandle) { } } +TEST(ValidationContextTest, ClaimAssociatedEndpointHandle) { + { + internal::ValidationContext context(ToPtr(0), 0, 0, 10); + + // Basics. + EXPECT_TRUE(context.ClaimAssociatedEndpointHandle( + AssociatedEndpointHandle_Data(0))); + EXPECT_FALSE(context.ClaimAssociatedEndpointHandle( + AssociatedEndpointHandle_Data(0))); + + EXPECT_TRUE(context.ClaimAssociatedEndpointHandle( + AssociatedEndpointHandle_Data(9))); + EXPECT_FALSE(context.ClaimAssociatedEndpointHandle( + AssociatedEndpointHandle_Data(10))); + + // Should fail because it is smaller than the max index that has been + // claimed. + EXPECT_FALSE(context.ClaimAssociatedEndpointHandle( + AssociatedEndpointHandle_Data(8))); + + // Should return true for invalid handle. + EXPECT_TRUE(context.ClaimAssociatedEndpointHandle( + AssociatedEndpointHandle_Data(internal::kEncodedInvalidHandleValue))); + EXPECT_TRUE(context.ClaimAssociatedEndpointHandle( + AssociatedEndpointHandle_Data(internal::kEncodedInvalidHandleValue))); + } + + { + // No handle to claim. + internal::ValidationContext context(ToPtr(0), 0, 0, 0); + + EXPECT_FALSE(context.ClaimAssociatedEndpointHandle( + AssociatedEndpointHandle_Data(0))); + + // Should still return true for invalid handle. + EXPECT_TRUE(context.ClaimAssociatedEndpointHandle( + AssociatedEndpointHandle_Data(internal::kEncodedInvalidHandleValue))); + } + + { + // Test the case that |num_associated_endpoint_handles| is the same value as + // |internal::kEncodedInvalidHandleValue|. + EXPECT_EQ(internal::kEncodedInvalidHandleValue, + std::numeric_limits<uint32_t>::max()); + internal::ValidationContext context(ToPtr(0), 0, 0, + std::numeric_limits<uint32_t>::max()); + + EXPECT_TRUE( + context.ClaimAssociatedEndpointHandle(AssociatedEndpointHandle_Data( + std::numeric_limits<uint32_t>::max() - 1))); + EXPECT_FALSE( + context.ClaimAssociatedEndpointHandle(AssociatedEndpointHandle_Data( + std::numeric_limits<uint32_t>::max() - 1))); + EXPECT_FALSE(context.ClaimAssociatedEndpointHandle( + AssociatedEndpointHandle_Data(0))); + + // Should still return true for invalid handle. + EXPECT_TRUE(context.ClaimAssociatedEndpointHandle( + AssociatedEndpointHandle_Data(internal::kEncodedInvalidHandleValue))); + } +} + TEST(ValidationContextTest, ClaimMemory) { { - internal::ValidationContext context(ToPtr(1000), 2000, 0); + internal::ValidationContext context(ToPtr(1000), 2000, 0, 0); // Basics. EXPECT_FALSE(context.ClaimMemory(ToPtr(500), 100)); @@ -186,7 +269,7 @@ TEST(ValidationContextTest, ClaimMemory) { { // No memory to claim. - internal::ValidationContext context(ToPtr(10000), 0, 0); + internal::ValidationContext context(ToPtr(10000), 0, 0, 0); EXPECT_FALSE(context.ClaimMemory(ToPtr(10000), 1)); EXPECT_FALSE(context.ClaimMemory(ToPtr(10000), 0)); @@ -194,7 +277,7 @@ TEST(ValidationContextTest, ClaimMemory) { { internal::ValidationContext context( - ToPtr(std::numeric_limits<uintptr_t>::max() - 1000), 500, 0); + ToPtr(std::numeric_limits<uintptr_t>::max() - 1000), 500, 0, 0); // Test overflow. EXPECT_FALSE(context.ClaimMemory( |