xref: /aosp_15_r20/external/cronet/base/memory/shared_memory_hooks_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2019 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "base/memory/shared_memory_hooks.h"
6 
7 #include <optional>
8 
9 #include "testing/gtest/include/gtest/gtest.h"
10 
11 namespace base {
12 
13 class SharedMemoryHooksTest : public ::testing::Test {
14  protected:
TearDown()15   void TearDown() override { SetCreateHooks(nullptr, nullptr, nullptr); }
16 
SetCreateHooks(ReadOnlySharedMemoryRegion::CreateFunction * read_only_hook,UnsafeSharedMemoryRegion::CreateFunction * unsafe_hook,WritableSharedMemoryRegion::CreateFunction * writable_hook)17   void SetCreateHooks(
18       ReadOnlySharedMemoryRegion::CreateFunction* read_only_hook,
19       UnsafeSharedMemoryRegion::CreateFunction* unsafe_hook,
20       WritableSharedMemoryRegion::CreateFunction* writable_hook) {
21     SharedMemoryHooks::SetCreateHooks(read_only_hook, unsafe_hook,
22                                       writable_hook);
23   }
24 };
25 
26 std::optional<size_t> requested_read_only_shmem_size;
27 std::optional<size_t> requested_unsafe_shmem_size;
28 std::optional<size_t> requested_writable_shmem_size;
29 
ReadOnlyShmemCreateHook(size_t size,SharedMemoryMapper * mapper)30 MappedReadOnlyRegion ReadOnlyShmemCreateHook(size_t size, SharedMemoryMapper* mapper) {
31   requested_read_only_shmem_size = size;
32   return {};
33 }
34 
UnsafeShmemCreateHook(size_t size)35 UnsafeSharedMemoryRegion UnsafeShmemCreateHook(size_t size) {
36   requested_unsafe_shmem_size = size;
37   return {};
38 }
39 
WritableShmemCreateHook(size_t size)40 WritableSharedMemoryRegion WritableShmemCreateHook(size_t size) {
41   requested_writable_shmem_size = size;
42   return {};
43 }
44 
TEST_F(SharedMemoryHooksTest,Basic)45 TEST_F(SharedMemoryHooksTest, Basic) {
46   {
47     auto region = ReadOnlySharedMemoryRegion::Create(3);
48     EXPECT_TRUE(region.IsValid());
49     EXPECT_FALSE(requested_read_only_shmem_size.has_value());
50   }
51 
52   {
53     auto region = UnsafeSharedMemoryRegion::Create(25);
54     EXPECT_TRUE(region.IsValid());
55     EXPECT_FALSE(requested_unsafe_shmem_size.has_value());
56   }
57 
58   {
59     auto region = WritableSharedMemoryRegion::Create(777);
60     EXPECT_TRUE(region.IsValid());
61     EXPECT_FALSE(requested_writable_shmem_size.has_value());
62   }
63 
64   SetCreateHooks(&ReadOnlyShmemCreateHook, &UnsafeShmemCreateHook,
65                  &WritableShmemCreateHook);
66 
67   {
68     auto region = ReadOnlySharedMemoryRegion::Create(3);
69     EXPECT_FALSE(region.IsValid());
70     EXPECT_EQ(3u, *requested_read_only_shmem_size);
71   }
72 
73   {
74     auto region = UnsafeSharedMemoryRegion::Create(25);
75     EXPECT_FALSE(region.IsValid());
76     EXPECT_EQ(25u, *requested_unsafe_shmem_size);
77   }
78 
79   {
80     auto region = WritableSharedMemoryRegion::Create(777);
81     EXPECT_FALSE(region.IsValid());
82     EXPECT_EQ(777u, *requested_writable_shmem_size);
83   }
84 }
85 
86 }  // namespace base
87