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

Side by Side Diff: mojo/common/test/multiprocess_test_base_unittest.cc

Issue 137273003: Mojo: Rename PlatformChannelHandle to PlatformHandle, etc. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 6 years, 11 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 | Annotate | Revision Log
« no previous file with comments | « mojo/common/test/multiprocess_test_base.cc ('k') | mojo/mojo.gyp » ('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/common/test/multiprocess_test_base.h" 5 #include "mojo/common/test/multiprocess_test_base.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "build/build_config.h" 8 #include "build/build_config.h"
9 #include "mojo/system/platform_channel.h" 9 #include "mojo/system/scoped_platform_handle.h"
10 #include "mojo/system/platform_channel_handle.h"
11 10
12 #if defined(OS_POSIX) 11 #if defined(OS_POSIX)
13 #include <fcntl.h> 12 #include <fcntl.h>
14 #include <unistd.h> 13 #include <unistd.h>
15 14
16 #include "base/posix/eintr_wrapper.h" 15 #include "base/posix/eintr_wrapper.h"
17 #endif 16 #endif
18 17
19 namespace mojo { 18 namespace mojo {
20 namespace { 19 namespace {
21 20
22 class MultiprocessTestBaseTest : public test::MultiprocessTestBase { 21 class MultiprocessTestBaseTest : public test::MultiprocessTestBase {
23 }; 22 };
24 23
25 TEST_F(MultiprocessTestBaseTest, RunChild) { 24 TEST_F(MultiprocessTestBaseTest, RunChild) {
26 // TODO(vtl): Not implemented on Windows yet. 25 // TODO(vtl): Not implemented on Windows yet.
27 #if defined(OS_POSIX) 26 #if defined(OS_POSIX)
28 EXPECT_TRUE(server_platform_channel.get()); 27 EXPECT_TRUE(server_platform_handle.is_valid());
29 EXPECT_TRUE(server_platform_channel->is_valid());
30 #endif 28 #endif
31 StartChild("RunChild"); 29 StartChild("RunChild");
32 EXPECT_EQ(123, WaitForChildShutdown()); 30 EXPECT_EQ(123, WaitForChildShutdown());
33 } 31 }
34 32
35 MOJO_MULTIPROCESS_TEST_CHILD_MAIN(RunChild) { 33 MOJO_MULTIPROCESS_TEST_CHILD_MAIN(RunChild) {
36 // TODO(vtl): Not implemented on Windows yet. 34 // TODO(vtl): Not implemented on Windows yet.
37 #if defined(OS_POSIX) 35 #if defined(OS_POSIX)
38 CHECK(MultiprocessTestBaseTest::client_platform_channel.get()); 36 CHECK(MultiprocessTestBaseTest::client_platform_handle.is_valid());
39 CHECK(MultiprocessTestBaseTest::client_platform_channel->is_valid());
40 #endif 37 #endif
41 return 123; 38 return 123;
42 } 39 }
43 40
44 TEST_F(MultiprocessTestBaseTest, TestChildMainNotFound) { 41 TEST_F(MultiprocessTestBaseTest, TestChildMainNotFound) {
45 StartChild("NoSuchTestChildMain"); 42 StartChild("NoSuchTestChildMain");
46 int result = WaitForChildShutdown(); 43 int result = WaitForChildShutdown();
47 EXPECT_FALSE(result >= 0 && result <= 127); 44 EXPECT_FALSE(result >= 0 && result <= 127);
48 } 45 }
49 46
50 // POSIX-specific test of passed channel --------------------------------------- 47 // POSIX-specific test of passed handle ----------------------------------------
51 48
52 #if defined(OS_POSIX) 49 #if defined(OS_POSIX)
53 TEST_F(MultiprocessTestBaseTest, PassedChannelPosix) { 50 TEST_F(MultiprocessTestBaseTest, PassedChannelPosix) {
54 EXPECT_TRUE(server_platform_channel.get()); 51 EXPECT_TRUE(server_platform_handle.is_valid());
55 EXPECT_TRUE(server_platform_channel->is_valid());
56 StartChild("PassedChannelPosix"); 52 StartChild("PassedChannelPosix");
57 53
58 // Take ownership of the FD. 54 // Take ownership of the FD.
59 mojo::system::PlatformChannelHandle channel = 55 system::ScopedPlatformHandle handle = server_platform_handle.Pass();
60 server_platform_channel->PassHandle(); 56 int fd = handle.get().fd;
61 server_platform_channel.reset();
62 int fd = channel.fd;
63 57
64 // The FD should be non-blocking. Check this. 58 // The FD should be non-blocking. Check this.
65 CHECK((fcntl(fd, F_GETFL) & O_NONBLOCK)); 59 CHECK((fcntl(fd, F_GETFL) & O_NONBLOCK));
66 // We're lazy. Set it to block. 60 // We're lazy. Set it to block.
67 PCHECK(fcntl(fd, F_SETFL, 0) == 0); 61 PCHECK(fcntl(fd, F_SETFL, 0) == 0);
68 62
69 // Write a byte. 63 // Write a byte.
70 const char c = 'X'; 64 const char c = 'X';
71 ssize_t write_size = HANDLE_EINTR(write(fd, &c, 1)); 65 ssize_t write_size = HANDLE_EINTR(write(fd, &c, 1));
72 EXPECT_EQ(1, write_size); 66 EXPECT_EQ(1, write_size);
73 67
74 // It'll echo it back to us, incremented. 68 // It'll echo it back to us, incremented.
75 char d = 0; 69 char d = 0;
76 ssize_t read_size = HANDLE_EINTR(read(fd, &d, 1)); 70 ssize_t read_size = HANDLE_EINTR(read(fd, &d, 1));
77 EXPECT_EQ(1, read_size); 71 EXPECT_EQ(1, read_size);
78 EXPECT_EQ(c + 1, d); 72 EXPECT_EQ(c + 1, d);
79 73
80 // And return it, incremented again. 74 // And return it, incremented again.
81 EXPECT_EQ(c + 2, WaitForChildShutdown()); 75 EXPECT_EQ(c + 2, WaitForChildShutdown());
82 } 76 }
83 77
84 MOJO_MULTIPROCESS_TEST_CHILD_MAIN(PassedChannelPosix) { 78 MOJO_MULTIPROCESS_TEST_CHILD_MAIN(PassedChannelPosix) {
85 CHECK(MultiprocessTestBaseTest::client_platform_channel.get()); 79 CHECK(MultiprocessTestBaseTest::client_platform_handle.is_valid());
86 CHECK(MultiprocessTestBaseTest::client_platform_channel->is_valid());
87 80
88 // Take ownership of the FD. 81 // Take ownership of the FD.
89 mojo::system::PlatformChannelHandle channel = 82 system::ScopedPlatformHandle handle =
90 MultiprocessTestBaseTest::client_platform_channel->PassHandle(); 83 MultiprocessTestBaseTest::client_platform_handle.Pass();
91 MultiprocessTestBaseTest::client_platform_channel.reset(); 84 int fd = handle.get().fd;
92 int fd = channel.fd;
93 85
94 // The FD should still be non-blocking. Check this. 86 // The FD should still be non-blocking. Check this.
95 CHECK((fcntl(fd, F_GETFL) & O_NONBLOCK)); 87 CHECK((fcntl(fd, F_GETFL) & O_NONBLOCK));
96 // We're lazy. Set it to block. 88 // We're lazy. Set it to block.
97 PCHECK(fcntl(fd, F_SETFL, 0) == 0); 89 PCHECK(fcntl(fd, F_SETFL, 0) == 0);
98 90
99 // Read a byte. 91 // Read a byte.
100 char c = 0; 92 char c = 0;
101 ssize_t read_size = HANDLE_EINTR(read(fd, &c, 1)); 93 ssize_t read_size = HANDLE_EINTR(read(fd, &c, 1));
102 CHECK_EQ(read_size, 1); 94 CHECK_EQ(read_size, 1);
103 95
104 // Write it back, incremented. 96 // Write it back, incremented.
105 c++; 97 c++;
106 ssize_t write_size = HANDLE_EINTR(write(fd, &c, 1)); 98 ssize_t write_size = HANDLE_EINTR(write(fd, &c, 1));
107 CHECK_EQ(write_size, 1); 99 CHECK_EQ(write_size, 1);
108 100
109 PCHECK(close(fd) == 0);
110
111 // And return it, incremented again. 101 // And return it, incremented again.
112 c++; 102 c++;
113 return static_cast<int>(c); 103 return static_cast<int>(c);
114 } 104 }
115 #endif // defined(OS_POSIX) 105 #endif // defined(OS_POSIX)
116 106
117 } // namespace 107 } // namespace
118 } // namespace mojo 108 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/common/test/multiprocess_test_base.cc ('k') | mojo/mojo.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698