OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "mojo/system/shared_buffer_dispatcher.h" | 5 #include "mojo/system/shared_buffer_dispatcher.h" |
6 | 6 |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/macros.h" | 9 #include "base/macros.h" |
10 #include "base/memory/ref_counted.h" | 10 #include "base/memory/ref_counted.h" |
| 11 #include "mojo/embedder/platform_shared_buffer.h" |
11 #include "mojo/system/dispatcher.h" | 12 #include "mojo/system/dispatcher.h" |
12 #include "mojo/system/raw_shared_buffer.h" | |
13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
14 | 14 |
15 namespace mojo { | 15 namespace mojo { |
16 namespace system { | 16 namespace system { |
17 namespace { | 17 namespace { |
18 | 18 |
19 // NOTE(vtl): There's currently not much to test for in | 19 // NOTE(vtl): There's currently not much to test for in |
20 // |SharedBufferDispatcher::ValidateCreateOptions()|, but the tests should be | 20 // |SharedBufferDispatcher::ValidateCreateOptions()|, but the tests should be |
21 // expanded if/when options are added, so I've kept the general form of the | 21 // expanded if/when options are added, so I've kept the general form of the |
22 // tests from data_pipe_unittest.cc. | 22 // tests from data_pipe_unittest.cc. |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 TEST(SharedBufferDispatcherTest, CreateAndMapBuffer) { | 102 TEST(SharedBufferDispatcherTest, CreateAndMapBuffer) { |
103 scoped_refptr<SharedBufferDispatcher> dispatcher; | 103 scoped_refptr<SharedBufferDispatcher> dispatcher; |
104 EXPECT_EQ( | 104 EXPECT_EQ( |
105 MOJO_RESULT_OK, | 105 MOJO_RESULT_OK, |
106 SharedBufferDispatcher::Create( | 106 SharedBufferDispatcher::Create( |
107 SharedBufferDispatcher::kDefaultCreateOptions, 100, &dispatcher)); | 107 SharedBufferDispatcher::kDefaultCreateOptions, 100, &dispatcher)); |
108 ASSERT_TRUE(dispatcher); | 108 ASSERT_TRUE(dispatcher); |
109 EXPECT_EQ(Dispatcher::kTypeSharedBuffer, dispatcher->GetType()); | 109 EXPECT_EQ(Dispatcher::kTypeSharedBuffer, dispatcher->GetType()); |
110 | 110 |
111 // Make a couple of mappings. | 111 // Make a couple of mappings. |
112 scoped_ptr<RawSharedBufferMapping> mapping1; | 112 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping1; |
113 EXPECT_EQ( | 113 EXPECT_EQ( |
114 MOJO_RESULT_OK, | 114 MOJO_RESULT_OK, |
115 dispatcher->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping1)); | 115 dispatcher->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping1)); |
116 ASSERT_TRUE(mapping1); | 116 ASSERT_TRUE(mapping1); |
117 ASSERT_TRUE(mapping1->base()); | 117 ASSERT_TRUE(mapping1->GetBase()); |
118 EXPECT_EQ(100u, mapping1->length()); | 118 EXPECT_EQ(100u, mapping1->GetLength()); |
119 // Write something. | 119 // Write something. |
120 static_cast<char*>(mapping1->base())[50] = 'x'; | 120 static_cast<char*>(mapping1->GetBase())[50] = 'x'; |
121 | 121 |
122 scoped_ptr<RawSharedBufferMapping> mapping2; | 122 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping2; |
123 EXPECT_EQ( | 123 EXPECT_EQ( |
124 MOJO_RESULT_OK, | 124 MOJO_RESULT_OK, |
125 dispatcher->MapBuffer(50, 50, MOJO_MAP_BUFFER_FLAG_NONE, &mapping2)); | 125 dispatcher->MapBuffer(50, 50, MOJO_MAP_BUFFER_FLAG_NONE, &mapping2)); |
126 ASSERT_TRUE(mapping2); | 126 ASSERT_TRUE(mapping2); |
127 ASSERT_TRUE(mapping2->base()); | 127 ASSERT_TRUE(mapping2->GetBase()); |
128 EXPECT_EQ(50u, mapping2->length()); | 128 EXPECT_EQ(50u, mapping2->GetLength()); |
129 EXPECT_EQ('x', static_cast<char*>(mapping2->base())[0]); | 129 EXPECT_EQ('x', static_cast<char*>(mapping2->GetBase())[0]); |
130 | 130 |
131 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); | 131 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); |
132 | 132 |
133 // Check that we can still read/write to mappings after the dispatcher has | 133 // Check that we can still read/write to mappings after the dispatcher has |
134 // gone away. | 134 // gone away. |
135 static_cast<char*>(mapping2->base())[1] = 'y'; | 135 static_cast<char*>(mapping2->GetBase())[1] = 'y'; |
136 EXPECT_EQ('y', static_cast<char*>(mapping1->base())[51]); | 136 EXPECT_EQ('y', static_cast<char*>(mapping1->GetBase())[51]); |
137 } | 137 } |
138 | 138 |
139 TEST(SharedBufferDispatcher, DuplicateBufferHandle) { | 139 TEST(SharedBufferDispatcher, DuplicateBufferHandle) { |
140 scoped_refptr<SharedBufferDispatcher> dispatcher1; | 140 scoped_refptr<SharedBufferDispatcher> dispatcher1; |
141 EXPECT_EQ( | 141 EXPECT_EQ( |
142 MOJO_RESULT_OK, | 142 MOJO_RESULT_OK, |
143 SharedBufferDispatcher::Create( | 143 SharedBufferDispatcher::Create( |
144 SharedBufferDispatcher::kDefaultCreateOptions, 100, &dispatcher1)); | 144 SharedBufferDispatcher::kDefaultCreateOptions, 100, &dispatcher1)); |
145 | 145 |
146 // Map and write something. | 146 // Map and write something. |
147 scoped_ptr<RawSharedBufferMapping> mapping; | 147 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping; |
148 EXPECT_EQ( | 148 EXPECT_EQ( |
149 MOJO_RESULT_OK, | 149 MOJO_RESULT_OK, |
150 dispatcher1->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); | 150 dispatcher1->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); |
151 static_cast<char*>(mapping->base())[0] = 'x'; | 151 static_cast<char*>(mapping->GetBase())[0] = 'x'; |
152 mapping.reset(); | 152 mapping.reset(); |
153 | 153 |
154 // Duplicate |dispatcher1| and then close it. | 154 // Duplicate |dispatcher1| and then close it. |
155 scoped_refptr<Dispatcher> dispatcher2; | 155 scoped_refptr<Dispatcher> dispatcher2; |
156 EXPECT_EQ( | 156 EXPECT_EQ( |
157 MOJO_RESULT_OK, | 157 MOJO_RESULT_OK, |
158 dispatcher1->DuplicateBufferHandle(NullUserPointer(), &dispatcher2)); | 158 dispatcher1->DuplicateBufferHandle(NullUserPointer(), &dispatcher2)); |
159 ASSERT_TRUE(dispatcher2); | 159 ASSERT_TRUE(dispatcher2); |
160 EXPECT_EQ(Dispatcher::kTypeSharedBuffer, dispatcher2->GetType()); | 160 EXPECT_EQ(Dispatcher::kTypeSharedBuffer, dispatcher2->GetType()); |
161 | 161 |
162 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close()); | 162 EXPECT_EQ(MOJO_RESULT_OK, dispatcher1->Close()); |
163 | 163 |
164 // Map |dispatcher2| and read something. | 164 // Map |dispatcher2| and read something. |
165 EXPECT_EQ( | 165 EXPECT_EQ( |
166 MOJO_RESULT_OK, | 166 MOJO_RESULT_OK, |
167 dispatcher2->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); | 167 dispatcher2->MapBuffer(0, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); |
168 EXPECT_EQ('x', static_cast<char*>(mapping->base())[0]); | 168 EXPECT_EQ('x', static_cast<char*>(mapping->GetBase())[0]); |
169 | 169 |
170 EXPECT_EQ(MOJO_RESULT_OK, dispatcher2->Close()); | 170 EXPECT_EQ(MOJO_RESULT_OK, dispatcher2->Close()); |
171 } | 171 } |
172 | 172 |
173 TEST(SharedBufferDispatcherTest, DuplicateBufferHandleOptionsValid) { | 173 TEST(SharedBufferDispatcherTest, DuplicateBufferHandleOptionsValid) { |
174 scoped_refptr<SharedBufferDispatcher> dispatcher1; | 174 scoped_refptr<SharedBufferDispatcher> dispatcher1; |
175 EXPECT_EQ( | 175 EXPECT_EQ( |
176 MOJO_RESULT_OK, | 176 MOJO_RESULT_OK, |
177 SharedBufferDispatcher::Create( | 177 SharedBufferDispatcher::Create( |
178 SharedBufferDispatcher::kDefaultCreateOptions, 100, &dispatcher1)); | 178 SharedBufferDispatcher::kDefaultCreateOptions, 100, &dispatcher1)); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
243 EXPECT_FALSE(dispatcher); | 243 EXPECT_FALSE(dispatcher); |
244 } | 244 } |
245 | 245 |
246 TEST(SharedBufferDispatcherTest, MapBufferInvalidArguments) { | 246 TEST(SharedBufferDispatcherTest, MapBufferInvalidArguments) { |
247 scoped_refptr<SharedBufferDispatcher> dispatcher; | 247 scoped_refptr<SharedBufferDispatcher> dispatcher; |
248 EXPECT_EQ( | 248 EXPECT_EQ( |
249 MOJO_RESULT_OK, | 249 MOJO_RESULT_OK, |
250 SharedBufferDispatcher::Create( | 250 SharedBufferDispatcher::Create( |
251 SharedBufferDispatcher::kDefaultCreateOptions, 100, &dispatcher)); | 251 SharedBufferDispatcher::kDefaultCreateOptions, 100, &dispatcher)); |
252 | 252 |
253 scoped_ptr<RawSharedBufferMapping> mapping; | 253 scoped_ptr<embedder::PlatformSharedBufferMapping> mapping; |
254 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 254 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
255 dispatcher->MapBuffer(0, 101, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); | 255 dispatcher->MapBuffer(0, 101, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); |
256 EXPECT_FALSE(mapping); | 256 EXPECT_FALSE(mapping); |
257 | 257 |
258 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 258 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
259 dispatcher->MapBuffer(1, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); | 259 dispatcher->MapBuffer(1, 100, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); |
260 EXPECT_FALSE(mapping); | 260 EXPECT_FALSE(mapping); |
261 | 261 |
262 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, | 262 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, |
263 dispatcher->MapBuffer(0, 0, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); | 263 dispatcher->MapBuffer(0, 0, MOJO_MAP_BUFFER_FLAG_NONE, &mapping)); |
264 EXPECT_FALSE(mapping); | 264 EXPECT_FALSE(mapping); |
265 | 265 |
266 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); | 266 EXPECT_EQ(MOJO_RESULT_OK, dispatcher->Close()); |
267 } | 267 } |
268 | 268 |
269 } // namespace | 269 } // namespace |
270 } // namespace system | 270 } // namespace system |
271 } // namespace mojo | 271 } // namespace mojo |
OLD | NEW |