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

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

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

Powered by Google App Engine
This is Rietveld 408576698