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

Side by Side Diff: mojo/edk/test/multiprocess_test_helper_unittest.cc

Issue 623883002: Revert "Move mojo edk into mojo/edk" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 2 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/test/multiprocess_test_helper.cc ('k') | mojo/edk/test/test_utils.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // found in the LICENSE file.
4
5 #include "mojo/edk/test/multiprocess_test_helper.h"
6
7 #include "base/logging.h"
8 #include "build/build_config.h"
9 #include "mojo/edk/embedder/scoped_platform_handle.h"
10 #include "mojo/edk/test/test_utils.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 #if defined(OS_POSIX)
14 #include <fcntl.h>
15 #endif
16
17 namespace mojo {
18 namespace test {
19 namespace {
20
21 bool IsNonBlocking(const embedder::PlatformHandle& handle) {
22 #if defined(OS_WIN)
23 // Haven't figured out a way to query whether a HANDLE was created with
24 // FILE_FLAG_OVERLAPPED.
25 return true;
26 #else
27 return fcntl(handle.fd, F_GETFL) & O_NONBLOCK;
28 #endif
29 }
30
31 bool WriteByte(const embedder::PlatformHandle& handle, char c) {
32 size_t bytes_written = 0;
33 BlockingWrite(handle, &c, 1, &bytes_written);
34 return bytes_written == 1;
35 }
36
37 bool ReadByte(const embedder::PlatformHandle& handle, char* c) {
38 size_t bytes_read = 0;
39 BlockingRead(handle, c, 1, &bytes_read);
40 return bytes_read == 1;
41 }
42
43 typedef testing::Test MultiprocessTestHelperTest;
44
45 TEST_F(MultiprocessTestHelperTest, RunChild) {
46 MultiprocessTestHelper helper;
47 EXPECT_TRUE(helper.server_platform_handle.is_valid());
48
49 helper.StartChild("RunChild");
50 EXPECT_EQ(123, helper.WaitForChildShutdown());
51 }
52
53 MOJO_MULTIPROCESS_TEST_CHILD_MAIN(RunChild) {
54 CHECK(MultiprocessTestHelper::client_platform_handle.is_valid());
55 return 123;
56 }
57
58 TEST_F(MultiprocessTestHelperTest, TestChildMainNotFound) {
59 MultiprocessTestHelper helper;
60 helper.StartChild("NoSuchTestChildMain");
61 int result = helper.WaitForChildShutdown();
62 EXPECT_FALSE(result >= 0 && result <= 127);
63 }
64
65 TEST_F(MultiprocessTestHelperTest, PassedChannel) {
66 MultiprocessTestHelper helper;
67 EXPECT_TRUE(helper.server_platform_handle.is_valid());
68 helper.StartChild("PassedChannel");
69
70 // Take ownership of the handle.
71 embedder::ScopedPlatformHandle handle = helper.server_platform_handle.Pass();
72
73 // The handle should be non-blocking.
74 EXPECT_TRUE(IsNonBlocking(handle.get()));
75
76 // Write a byte.
77 const char c = 'X';
78 EXPECT_TRUE(WriteByte(handle.get(), c));
79
80 // It'll echo it back to us, incremented.
81 char d = 0;
82 EXPECT_TRUE(ReadByte(handle.get(), &d));
83 EXPECT_EQ(c + 1, d);
84
85 // And return it, incremented again.
86 EXPECT_EQ(c + 2, helper.WaitForChildShutdown());
87 }
88
89 MOJO_MULTIPROCESS_TEST_CHILD_MAIN(PassedChannel) {
90 CHECK(MultiprocessTestHelper::client_platform_handle.is_valid());
91
92 // Take ownership of the handle.
93 embedder::ScopedPlatformHandle handle =
94 MultiprocessTestHelper::client_platform_handle.Pass();
95
96 // The handle should be non-blocking.
97 EXPECT_TRUE(IsNonBlocking(handle.get()));
98
99 // Read a byte.
100 char c = 0;
101 EXPECT_TRUE(ReadByte(handle.get(), &c));
102
103 // Write it back, incremented.
104 c++;
105 EXPECT_TRUE(WriteByte(handle.get(), c));
106
107 // And return it, incremented again.
108 c++;
109 return static_cast<int>(c);
110 }
111
112 TEST_F(MultiprocessTestHelperTest, ChildTestPasses) {
113 MultiprocessTestHelper helper;
114 EXPECT_TRUE(helper.server_platform_handle.is_valid());
115 helper.StartChild("ChildTestPasses");
116 EXPECT_TRUE(helper.WaitForChildTestShutdown());
117 }
118
119 MOJO_MULTIPROCESS_TEST_CHILD_TEST(ChildTestPasses) {
120 ASSERT_TRUE(MultiprocessTestHelper::client_platform_handle.is_valid());
121 EXPECT_TRUE(IsNonBlocking(
122 MultiprocessTestHelper::client_platform_handle.get()));
123 }
124
125 TEST_F(MultiprocessTestHelperTest, ChildTestFailsAssert) {
126 MultiprocessTestHelper helper;
127 EXPECT_TRUE(helper.server_platform_handle.is_valid());
128 helper.StartChild("ChildTestFailsAssert");
129 EXPECT_FALSE(helper.WaitForChildTestShutdown());
130 }
131
132 MOJO_MULTIPROCESS_TEST_CHILD_TEST(ChildTestFailsAssert) {
133 ASSERT_FALSE(MultiprocessTestHelper::client_platform_handle.is_valid())
134 << "DISREGARD: Expected failure in child process";
135 ASSERT_FALSE(IsNonBlocking(
136 MultiprocessTestHelper::client_platform_handle.get())) << "Not reached";
137 CHECK(false) << "Not reached";
138 }
139
140 TEST_F(MultiprocessTestHelperTest, ChildTestFailsExpect) {
141 MultiprocessTestHelper helper;
142 EXPECT_TRUE(helper.server_platform_handle.is_valid());
143 helper.StartChild("ChildTestFailsExpect");
144 EXPECT_FALSE(helper.WaitForChildTestShutdown());
145 }
146
147 MOJO_MULTIPROCESS_TEST_CHILD_TEST(ChildTestFailsExpect) {
148 EXPECT_FALSE(MultiprocessTestHelper::client_platform_handle.is_valid())
149 << "DISREGARD: Expected failure #1 in child process";
150 EXPECT_FALSE(IsNonBlocking(
151 MultiprocessTestHelper::client_platform_handle.get()))
152 << "DISREGARD: Expected failure #2 in child process";
153 }
154
155 } // namespace
156 } // namespace test
157 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/edk/test/multiprocess_test_helper.cc ('k') | mojo/edk/test/test_utils.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698