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

Side by Side Diff: mojo/edk/system/core_unittest.cc

Issue 1885663002: EDK: Add implementation of data pipe producer write threshold stuff. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 4 years, 8 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 unified diff | Download patch
« no previous file with comments | « mojo/edk/system/core.cc ('k') | mojo/edk/system/data_pipe.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/edk/system/core.h" 5 #include "mojo/edk/system/core.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <limits> 9 #include <limits>
10 10
(...skipping 979 matching lines...) Expand 10 before | Expand all | Expand 10 after
990 // Should get two distinct, valid handles. 990 // Should get two distinct, valid handles.
991 EXPECT_NE(ph, MOJO_HANDLE_INVALID); 991 EXPECT_NE(ph, MOJO_HANDLE_INVALID);
992 EXPECT_NE(ch, MOJO_HANDLE_INVALID); 992 EXPECT_NE(ch, MOJO_HANDLE_INVALID);
993 EXPECT_NE(ph, ch); 993 EXPECT_NE(ph, ch);
994 994
995 // Producer should be never-readable, but already writable. 995 // Producer should be never-readable, but already writable.
996 hss = kEmptyMojoHandleSignalsState; 996 hss = kEmptyMojoHandleSignalsState;
997 EXPECT_EQ( 997 EXPECT_EQ(
998 MOJO_RESULT_FAILED_PRECONDITION, 998 MOJO_RESULT_FAILED_PRECONDITION,
999 core()->Wait(ph, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); 999 core()->Wait(ph, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss)));
1000 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 1000 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
1001 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 1001 hss.satisfied_signals);
1002 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
1003 MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
1002 hss.satisfiable_signals); 1004 hss.satisfiable_signals);
1003 hss = kEmptyMojoHandleSignalsState; 1005 hss = kEmptyMojoHandleSignalsState;
1004 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ph, MOJO_HANDLE_SIGNAL_WRITABLE, 0, 1006 EXPECT_EQ(MOJO_RESULT_OK, core()->Wait(ph, MOJO_HANDLE_SIGNAL_WRITABLE, 0,
1005 MakeUserPointer(&hss))); 1007 MakeUserPointer(&hss)));
1006 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE, hss.satisfied_signals); 1008 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
1007 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED, 1009 hss.satisfied_signals);
1010 EXPECT_EQ(MOJO_HANDLE_SIGNAL_WRITABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
1011 MOJO_HANDLE_SIGNAL_WRITE_THRESHOLD,
1008 hss.satisfiable_signals); 1012 hss.satisfiable_signals);
1009 1013
1010 // Consumer should be never-writable, and not yet readable. 1014 // Consumer should be never-writable, and not yet readable.
1011 hss = kFullMojoHandleSignalsState; 1015 hss = kFullMojoHandleSignalsState;
1012 EXPECT_EQ( 1016 EXPECT_EQ(
1013 MOJO_RESULT_FAILED_PRECONDITION, 1017 MOJO_RESULT_FAILED_PRECONDITION,
1014 core()->Wait(ch, MOJO_HANDLE_SIGNAL_WRITABLE, 0, MakeUserPointer(&hss))); 1018 core()->Wait(ch, MOJO_HANDLE_SIGNAL_WRITABLE, 0, MakeUserPointer(&hss)));
1015 EXPECT_EQ(0u, hss.satisfied_signals); 1019 EXPECT_EQ(0u, hss.satisfied_signals);
1016 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED | 1020 EXPECT_EQ(MOJO_HANDLE_SIGNAL_READABLE | MOJO_HANDLE_SIGNAL_PEER_CLOSED |
1017 MOJO_HANDLE_SIGNAL_READ_THRESHOLD, 1021 MOJO_HANDLE_SIGNAL_READ_THRESHOLD,
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
1172 hss = kFullMojoHandleSignalsState; 1176 hss = kFullMojoHandleSignalsState;
1173 EXPECT_EQ( 1177 EXPECT_EQ(
1174 MOJO_RESULT_FAILED_PRECONDITION, 1178 MOJO_RESULT_FAILED_PRECONDITION,
1175 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss))); 1179 core()->Wait(ch, MOJO_HANDLE_SIGNAL_READABLE, 0, MakeUserPointer(&hss)));
1176 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals); 1180 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfied_signals);
1177 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals); 1181 EXPECT_EQ(MOJO_HANDLE_SIGNAL_PEER_CLOSED, hss.satisfiable_signals);
1178 1182
1179 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch)); 1183 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch));
1180 } 1184 }
1181 1185
1186 TEST_F(CoreTest, DataPipeSetGetProducerOptions) {
1187 MojoCreateDataPipeOptions options = {
1188 sizeof(MojoCreateDataPipeOptions), // |struct_size|.
1189 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|.
1190 8, // |element_num_bytes|.
1191 800 // |capacity_num_bytes|.
1192 };
1193 MojoHandle ph, ch; // p is for producer and c is for consumer.
1194
1195 EXPECT_EQ(MOJO_RESULT_OK,
1196 core()->CreateDataPipe(MakeUserPointer(&options),
1197 MakeUserPointer(&ph), MakeUserPointer(&ch)));
1198 // Should get two distinct, valid handles.
1199 EXPECT_NE(ph, MOJO_HANDLE_INVALID);
1200 EXPECT_NE(ch, MOJO_HANDLE_INVALID);
1201 EXPECT_NE(ph, ch);
1202
1203 // Get it.
1204 MojoDataPipeProducerOptions popts = {};
1205 const uint32_t kPoptsSize = static_cast<uint32_t>(sizeof(popts));
1206 EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeProducerOptions(
1207 ph, MakeUserPointer(&popts), kPoptsSize));
1208 EXPECT_EQ(kPoptsSize, popts.struct_size);
1209 EXPECT_EQ(0u, popts.write_threshold_num_bytes);
1210
1211 // Invalid write threshold.
1212 popts.struct_size = kPoptsSize;
1213 popts.write_threshold_num_bytes = 4;
1214 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
1215 core()->SetDataPipeProducerOptions(ph, MakeUserPointer(&popts)));
1216 // The options shouldn't change.
1217 popts = MojoDataPipeProducerOptions();
1218 EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeProducerOptions(
1219 ph, MakeUserPointer(&popts), kPoptsSize));
1220 EXPECT_EQ(kPoptsSize, popts.struct_size);
1221 EXPECT_EQ(0u, popts.write_threshold_num_bytes);
1222
1223 // Valid write threshold.
1224 popts.struct_size = kPoptsSize;
1225 popts.write_threshold_num_bytes = 8;
1226 EXPECT_EQ(MOJO_RESULT_OK,
1227 core()->SetDataPipeProducerOptions(ph, MakeUserPointer(&popts)));
1228 popts = MojoDataPipeProducerOptions();
1229 EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeProducerOptions(
1230 ph, MakeUserPointer(&popts), kPoptsSize));
1231 EXPECT_EQ(kPoptsSize, popts.struct_size);
1232 EXPECT_EQ(8u, popts.write_threshold_num_bytes);
1233
1234 // Invalid write threshold.
1235 popts.struct_size = kPoptsSize;
1236 popts.write_threshold_num_bytes = 9;
1237 EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT,
1238 core()->SetDataPipeProducerOptions(ph, MakeUserPointer(&popts)));
1239 // The options shouldn't change.
1240 popts = MojoDataPipeProducerOptions();
1241 EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeProducerOptions(
1242 ph, MakeUserPointer(&popts), kPoptsSize));
1243 EXPECT_EQ(kPoptsSize, popts.struct_size);
1244 EXPECT_EQ(8u, popts.write_threshold_num_bytes);
1245
1246 // Valid write threshold.
1247 popts.struct_size = kPoptsSize;
1248 popts.write_threshold_num_bytes = 16;
1249 EXPECT_EQ(MOJO_RESULT_OK,
1250 core()->SetDataPipeProducerOptions(ph, MakeUserPointer(&popts)));
1251 popts = MojoDataPipeProducerOptions();
1252 EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeProducerOptions(
1253 ph, MakeUserPointer(&popts), kPoptsSize));
1254 EXPECT_EQ(kPoptsSize, popts.struct_size);
1255 EXPECT_EQ(16u, popts.write_threshold_num_bytes);
1256
1257 // Can also set to default by passing null.
1258 EXPECT_EQ(MOJO_RESULT_OK,
1259 core()->SetDataPipeProducerOptions(ph, NullUserPointer()));
1260 popts = MojoDataPipeProducerOptions();
1261 EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeProducerOptions(
1262 ph, MakeUserPointer(&popts), kPoptsSize));
1263 EXPECT_EQ(kPoptsSize, popts.struct_size);
1264 // Note: Should be reported as 0 ("default"), even if it means the element
1265 // struct_size.
1266 EXPECT_EQ(0u, popts.write_threshold_num_bytes);
1267
1268 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ph));
1269 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(ch));
1270 }
1271
1182 TEST_F(CoreTest, DataPipeSetGetConsumerOptions) { 1272 TEST_F(CoreTest, DataPipeSetGetConsumerOptions) {
1183 MojoCreateDataPipeOptions options = { 1273 MojoCreateDataPipeOptions options = {
1184 sizeof(MojoCreateDataPipeOptions), // |struct_size|. 1274 sizeof(MojoCreateDataPipeOptions), // |struct_size|.
1185 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|. 1275 MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, // |flags|.
1186 8, // |element_num_bytes|. 1276 8, // |element_num_bytes|.
1187 800 // |capacity_num_bytes|. 1277 800 // |capacity_num_bytes|.
1188 }; 1278 };
1189 MojoHandle ph, ch; // p is for producer and c is for consumer. 1279 MojoHandle ph, ch; // p is for producer and c is for consumer.
1190 1280
1191 EXPECT_EQ(MOJO_RESULT_OK, 1281 EXPECT_EQ(MOJO_RESULT_OK,
1192 core()->CreateDataPipe(MakeUserPointer(&options), 1282 core()->CreateDataPipe(MakeUserPointer(&options),
1193 MakeUserPointer(&ph), MakeUserPointer(&ch))); 1283 MakeUserPointer(&ph), MakeUserPointer(&ch)));
1194 // Should get two distinct, valid handles. 1284 // Should get two distinct, valid handles.
1195 EXPECT_NE(ph, MOJO_HANDLE_INVALID); 1285 EXPECT_NE(ph, MOJO_HANDLE_INVALID);
1196 EXPECT_NE(ch, MOJO_HANDLE_INVALID); 1286 EXPECT_NE(ch, MOJO_HANDLE_INVALID);
1197 EXPECT_NE(ph, ch); 1287 EXPECT_NE(ph, ch);
1198 1288
1199 // Read it. 1289 // Get it.
1200 MojoDataPipeConsumerOptions copts = {}; 1290 MojoDataPipeConsumerOptions copts = {};
1201 const uint32_t kCoptsSize = static_cast<uint32_t>(sizeof(copts)); 1291 const uint32_t kCoptsSize = static_cast<uint32_t>(sizeof(copts));
1202 EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeConsumerOptions( 1292 EXPECT_EQ(MOJO_RESULT_OK, core()->GetDataPipeConsumerOptions(
1203 ch, MakeUserPointer(&copts), kCoptsSize)); 1293 ch, MakeUserPointer(&copts), kCoptsSize));
1204 EXPECT_EQ(kCoptsSize, copts.struct_size); 1294 EXPECT_EQ(kCoptsSize, copts.struct_size);
1205 EXPECT_EQ(0u, copts.read_threshold_num_bytes); 1295 EXPECT_EQ(0u, copts.read_threshold_num_bytes);
1206 1296
1207 // Invalid read threshold. 1297 // Invalid read threshold.
1208 copts.struct_size = kCoptsSize; 1298 copts.struct_size = kCoptsSize;
1209 copts.read_threshold_num_bytes = 4; 1299 copts.read_threshold_num_bytes = 4;
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after
1543 EXPECT_EQ(MOJO_RESULT_BUSY, waiter.result); 1633 EXPECT_EQ(MOJO_RESULT_BUSY, waiter.result);
1544 1634
1545 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h)); 1635 EXPECT_EQ(MOJO_RESULT_OK, core()->Close(h));
1546 } 1636 }
1547 1637
1548 // TODO(vtl): Test |DuplicateBufferHandle()| and |MapBuffer()|. 1638 // TODO(vtl): Test |DuplicateBufferHandle()| and |MapBuffer()|.
1549 1639
1550 } // namespace 1640 } // namespace
1551 } // namespace system 1641 } // namespace system
1552 } // namespace mojo 1642 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/system/core.cc ('k') | mojo/edk/system/data_pipe.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698