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

Unified Diff: ipc/ipc_channel_unittest.cc

Issue 11819041: Make ipc_tests file structure a little saner and add an ipc_perftests target. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ugh Created 7 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ipc/ipc.gyp ('k') | ipc/ipc_fuzzing_tests.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ipc/ipc_channel_unittest.cc
diff --git a/ipc/ipc_tests.cc b/ipc/ipc_channel_unittest.cc
similarity index 50%
rename from ipc/ipc_tests.cc
rename to ipc/ipc_channel_unittest.cc
index 81d67165fd50da974fd3080227de956bfd22ac81..6b63ae0328c410cfd531b86761a7786c53f81fef 100644
--- a/ipc/ipc_tests.cc
+++ b/ipc/ipc_channel_unittest.cc
@@ -15,8 +15,6 @@
#include <string>
#include <utility>
-#include "ipc/ipc_tests.h"
-
#include "base/base_switches.h"
#include "base/command_line.h"
#include "base/debug/debug_on_start_win.h"
@@ -33,106 +31,14 @@
#include "ipc/ipc_multiprocess_test.h"
#include "ipc/ipc_sender.h"
#include "ipc/ipc_switches.h"
+#include "ipc/ipc_test_base.h"
#include "testing/multiprocess_func_list.h"
-// Define to enable IPC performance testing instead of the regular unit tests
-// #define PERFORMANCE_TEST
-
-const char kTestClientChannel[] = "T1";
-const char kReflectorChannel[] = "T2";
-const char kFuzzerChannel[] = "F3";
-const char kSyncSocketChannel[] = "S4";
-
const size_t kLongMessageStringNumBytes = 50000;
-void IPCChannelTest::SetUp() {
- MultiProcessTest::SetUp();
-
- // Construct a fresh IO Message loop for the duration of each test.
- message_loop_ = new MessageLoopForIO();
-}
-
-void IPCChannelTest::TearDown() {
- delete message_loop_;
- message_loop_ = NULL;
-
- MultiProcessTest::TearDown();
-}
-
-#if defined(OS_WIN)
-base::ProcessHandle IPCChannelTest::SpawnChild(ChildType child_type,
- IPC::Channel *channel) {
- // kDebugChildren support.
- bool debug_on_start =
- CommandLine::ForCurrentProcess()->HasSwitch(switches::kDebugChildren);
-
- switch (child_type) {
- case TEST_CLIENT:
- return MultiProcessTest::SpawnChild("RunTestClient", debug_on_start);
- case TEST_REFLECTOR:
- return MultiProcessTest::SpawnChild("RunReflector", debug_on_start);
- case FUZZER_SERVER:
- return MultiProcessTest::SpawnChild("RunFuzzServer", debug_on_start);
- case SYNC_SOCKET_SERVER:
- return MultiProcessTest::SpawnChild("RunSyncSocketServer", debug_on_start);
- default:
- return NULL;
- }
-}
-#elif defined(OS_POSIX)
-base::ProcessHandle IPCChannelTest::SpawnChild(ChildType child_type,
- IPC::Channel *channel) {
- // kDebugChildren support.
- bool debug_on_start =
- CommandLine::ForCurrentProcess()->HasSwitch(switches::kDebugChildren);
-
- base::FileHandleMappingVector fds_to_map;
- const int ipcfd = channel->GetClientFileDescriptor();
- if (ipcfd > -1) {
- fds_to_map.push_back(std::pair<int, int>(ipcfd, kPrimaryIPCChannel + 3));
- }
-
- base::ProcessHandle ret = base::kNullProcessHandle;
- switch (child_type) {
- case TEST_CLIENT:
- ret = MultiProcessTest::SpawnChild("RunTestClient",
- fds_to_map,
- debug_on_start);
- break;
- case TEST_DESCRIPTOR_CLIENT:
- ret = MultiProcessTest::SpawnChild("RunTestDescriptorClient",
- fds_to_map,
- debug_on_start);
- break;
- case TEST_DESCRIPTOR_CLIENT_SANDBOXED:
- ret = MultiProcessTest::SpawnChild("RunTestDescriptorClientSandboxed",
- fds_to_map,
- debug_on_start);
- break;
- case TEST_REFLECTOR:
- ret = MultiProcessTest::SpawnChild("RunReflector",
- fds_to_map,
- debug_on_start);
- break;
- case FUZZER_SERVER:
- ret = MultiProcessTest::SpawnChild("RunFuzzServer",
- fds_to_map,
- debug_on_start);
- break;
- case SYNC_SOCKET_SERVER:
- ret = MultiProcessTest::SpawnChild("RunSyncSocketServer",
- fds_to_map,
- debug_on_start);
- break;
- default:
- return base::kNullProcessHandle;
- break;
- }
- return ret;
-}
-#endif // defined(OS_POSIX)
+class IPCChannelTest : public IPCTestBase {
+};
-#ifndef PERFORMANCE_TEST
TEST_F(IPCChannelTest, BasicMessageTest) {
int v1 = 10;
std::string v2("foobar");
@@ -428,188 +334,3 @@ MULTIPROCESS_IPC_TEST_MAIN(RunTestClient) {
MessageLoop::current()->Run();
return 0;
}
-
-#endif // !PERFORMANCE_TEST
-
-#ifdef PERFORMANCE_TEST
-
-//-----------------------------------------------------------------------------
-// Manually performance test
-//
-// This test times the roundtrip IPC message cycle. It is enabled with a
-// special preprocessor define to enable it instead of the standard IPC
-// unit tests. This works around some funny termination conditions in the
-// regular unit tests.
-//
-// This test is not automated. To test, you will want to vary the message
-// count and message size in TEST to get the numbers you want.
-//
-// FIXME(brettw): Automate this test and have it run by default.
-
-// This channel listener just replies to all messages with the exact same
-// message. It assumes each message has one string parameter. When the string
-// "quit" is sent, it will exit.
-class ChannelReflectorListener : public IPC::Listener {
- public:
- explicit ChannelReflectorListener(IPC::Channel *channel) :
- channel_(channel),
- count_messages_(0) {
- std::cout << "Reflector up" << std::endl;
- }
-
- ~ChannelReflectorListener() {
- std::cout << "Client Messages: " << count_messages_ << std::endl;
- std::cout << "Client Latency: " << latency_messages_.InMilliseconds()
- << std::endl;
- }
-
- virtual bool OnMessageReceived(const IPC::Message& message) {
- count_messages_++;
- PickleIterator iter(message);
- int64 time_internal;
- EXPECT_TRUE(iter.ReadInt64(&time_internal));
- int msgid;
- EXPECT_TRUE(iter.ReadInt(&msgid));
- std::string payload;
- EXPECT_TRUE(iter.ReadString(&payload));
- // TODO(vtl): Should we use |HighResNow()| instead of |Now()|?
- latency_messages_ += base::TimeTicks::Now() -
- base::TimeTicks::FromInternalValue(time_internal);
-
- // cout << "reflector msg received: " << msgid << endl;
- if (payload == "quit")
- MessageLoop::current()->Quit();
-
- IPC::Message* msg = new IPC::Message(0,
- 2,
- IPC::Message::PRIORITY_NORMAL);
- msg->WriteInt64(base::TimeTicks::Now().ToInternalValue());
- msg->WriteInt(msgid);
- msg->WriteString(payload);
- channel_->Send(msg);
- return true;
- }
-
- private:
- IPC::Channel *channel_;
- int count_messages_;
- base::TimeDelta latency_messages_;
-};
-
-class ChannelPerfListener : public IPC::Listener {
- public:
- ChannelPerfListener(IPC::Channel* channel, int msg_count, int msg_size) :
- count_down_(msg_count),
- channel_(channel),
- count_messages_(0) {
- payload_.resize(msg_size);
- for (int i = 0; i < static_cast<int>(payload_.size()); i++)
- payload_[i] = 'a';
- std::cout << "perflistener up" << std::endl;
- }
-
- ~ChannelPerfListener() {
- std::cout << "Server Messages: " << count_messages_ << std::endl;
- std::cout << "Server Latency: " << latency_messages_.InMilliseconds()
- << std::endl;
- }
-
- virtual bool OnMessageReceived(const IPC::Message& message) {
- count_messages_++;
- // Decode the string so this gets counted in the total time.
- PickleIterator iter(message);
- int64 time_internal;
- EXPECT_TRUE(iter.ReadInt64(&time_internal));
- int msgid;
- EXPECT_TRUE(iter.ReadInt(&msgid));
- std::string cur;
- EXPECT_TRUE(iter.ReadString(&cur));
- latency_messages_ += base::TimeTicks::Now() -
- base::TimeTicks::FromInternalValue(time_internal);
-
- count_down_--;
- if (count_down_ == 0) {
- IPC::Message* msg = new IPC::Message(0,
- 2,
- IPC::Message::PRIORITY_NORMAL);
- msg->WriteInt64(base::TimeTicks::Now().ToInternalValue());
- msg->WriteInt(count_down_);
- msg->WriteString("quit");
- channel_->Send(msg);
-
- MessageLoop::current()->QuitWhenIdle();
- return true;
- }
-
- IPC::Message* msg = new IPC::Message(0,
- 2,
- IPC::Message::PRIORITY_NORMAL);
- msg->WriteInt64(base::TimeTicks::Now().ToInternalValue());
- msg->WriteInt(count_down_);
- msg->WriteString(payload_);
- channel_->Send(msg);
- return true;
- }
-
- private:
- int count_down_;
- std::string payload_;
- IPC::Channel *channel_;
- int count_messages_;
- base::TimeDelta latency_messages_;
-};
-
-TEST_F(IPCChannelTest, Performance) {
- // setup IPC channel
- IPC::Channel chan(kReflectorChannel, IPC::Channel::MODE_SERVER, NULL);
- ChannelPerfListener perf_listener(&chan, 10000, 100000);
- chan.set_listener(&perf_listener);
- ASSERT_TRUE(chan.Connect());
-
- base::ProcessHandle process_handle = SpawnChild(TEST_REFLECTOR, &chan);
- ASSERT_TRUE(process_handle);
-
- base::PlatformThread::Sleep(base::TimeDelta::FromSeconds(1));
-
- PerfTimeLogger logger("IPC_Perf");
-
- // this initial message will kick-start the ping-pong of messages
- IPC::Message* message = new IPC::Message(0,
- 2,
- IPC::Message::PRIORITY_NORMAL);
- message->WriteInt64(base::TimeTicks::Now().ToInternalValue());
- message->WriteInt(-1);
- message->WriteString("Hello");
- chan.Send(message);
-
- // run message loop
- MessageLoop::current()->Run();
-
- // Clean up child process.
- EXPECT_TRUE(base::WaitForSingleProcess(
- process_handle, base::TimeDelta::FromSeconds(5)));
- base::CloseProcessHandle(process_handle);
-}
-
-// This message loop bounces all messages back to the sender
-MULTIPROCESS_IPC_TEST_MAIN(RunReflector) {
- MessageLoopForIO main_message_loop;
- IPC::Channel chan(kReflectorChannel, IPC::Channel::MODE_CLIENT, NULL);
- ChannelReflectorListener channel_reflector_listener(&chan);
- chan.set_listener(&channel_reflector_listener);
- CHECK(chan.Connect());
-
- MessageLoop::current()->Run();
- return 0;
-}
-
-#endif // PERFORMANCE_TEST
-
-int main(int argc, char** argv) {
-#ifdef PERFORMANCE_TEST
- int retval = base::PerfTestSuite(argc, argv).Run();
-#else
- int retval = base::TestSuite(argc, argv).Run();
-#endif
- return retval;
-}
« no previous file with comments | « ipc/ipc.gyp ('k') | ipc/ipc_fuzzing_tests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698