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

Unified Diff: mojo/edk/system/channel_manager_unittest.cc

Issue 814543006: Move //mojo/{public, edk} underneath //third_party (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 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 | « mojo/edk/system/channel_manager.cc ('k') | mojo/edk/system/channel_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: mojo/edk/system/channel_manager_unittest.cc
diff --git a/mojo/edk/system/channel_manager_unittest.cc b/mojo/edk/system/channel_manager_unittest.cc
deleted file mode 100644
index 52f3f0ebfb03ab6d23ca670bfa6f85c851798975..0000000000000000000000000000000000000000
--- a/mojo/edk/system/channel_manager_unittest.cc
+++ /dev/null
@@ -1,183 +0,0 @@
-// Copyright 2014 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "mojo/edk/system/channel_manager.h"
-
-#include "base/callback.h"
-#include "base/macros.h"
-#include "base/message_loop/message_loop.h"
-#include "base/message_loop/message_loop_proxy.h"
-#include "base/run_loop.h"
-#include "base/task_runner.h"
-#include "base/test/test_timeouts.h"
-#include "base/threading/platform_thread.h"
-#include "base/threading/simple_thread.h"
-#include "base/time/time.h"
-#include "mojo/edk/embedder/platform_channel_pair.h"
-#include "mojo/edk/embedder/simple_platform_support.h"
-#include "mojo/edk/system/channel.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace mojo {
-namespace system {
-namespace {
-
-class ChannelManagerTest : public testing::Test {
- public:
- ChannelManagerTest() : message_loop_(base::MessageLoop::TYPE_IO) {}
- ~ChannelManagerTest() override {}
-
- protected:
- embedder::SimplePlatformSupport* platform_support() {
- return &platform_support_;
- }
- base::MessageLoop* message_loop() { return &message_loop_; }
-
- private:
- embedder::SimplePlatformSupport platform_support_;
- base::MessageLoop message_loop_;
-
- DISALLOW_COPY_AND_ASSIGN(ChannelManagerTest);
-};
-
-TEST_F(ChannelManagerTest, Basic) {
- ChannelManager cm;
-
- // Hang on to a ref to the |Channel|, so that we can check that the
- // |ChannelManager| takes/releases refs to it.
- scoped_refptr<Channel> ch(new Channel(platform_support()));
- ASSERT_TRUE(ch->HasOneRef());
-
- embedder::PlatformChannelPair channel_pair;
- ch->Init(RawChannel::Create(channel_pair.PassServerHandle()));
-
- ChannelId id = cm.AddChannel(ch, base::MessageLoopProxy::current());
- EXPECT_NE(id, 0u);
- // |ChannelManager| should take a ref.
- EXPECT_FALSE(ch->HasOneRef());
-
- cm.WillShutdownChannel(id);
- // |ChannelManager| should still have a ref.
- EXPECT_FALSE(ch->HasOneRef());
-
- cm.ShutdownChannel(id);
- // On the "I/O" thread, so shutdown should happen synchronously.
- // |ChannelManager| should have given up its ref.
- EXPECT_TRUE(ch->HasOneRef());
-}
-
-TEST_F(ChannelManagerTest, TwoChannels) {
- ChannelManager cm;
-
- // Hang on to a ref to each |Channel|, so that we can check that the
- // |ChannelManager| takes/releases refs to them.
- scoped_refptr<Channel> ch1(new Channel(platform_support()));
- ASSERT_TRUE(ch1->HasOneRef());
- scoped_refptr<Channel> ch2(new Channel(platform_support()));
- ASSERT_TRUE(ch2->HasOneRef());
-
- embedder::PlatformChannelPair channel_pair;
- ch1->Init(RawChannel::Create(channel_pair.PassServerHandle()));
- ch2->Init(RawChannel::Create(channel_pair.PassClientHandle()));
-
- ChannelId id1 = cm.AddChannel(ch1, base::MessageLoopProxy::current());
- EXPECT_NE(id1, 0u);
- EXPECT_FALSE(ch1->HasOneRef());
-
- ChannelId id2 = cm.AddChannel(ch2, base::MessageLoopProxy::current());
- EXPECT_NE(id2, 0u);
- EXPECT_NE(id2, id1);
- EXPECT_FALSE(ch2->HasOneRef());
-
- // Calling |WillShutdownChannel()| multiple times (on |id1|) is okay.
- cm.WillShutdownChannel(id1);
- cm.WillShutdownChannel(id1);
- EXPECT_FALSE(ch1->HasOneRef());
- // Not calling |WillShutdownChannel()| (on |id2|) is okay too.
-
- cm.ShutdownChannel(id1);
- EXPECT_TRUE(ch1->HasOneRef());
- cm.ShutdownChannel(id2);
- EXPECT_TRUE(ch2->HasOneRef());
-}
-
-class OtherThread : public base::SimpleThread {
- public:
- // Note: We rely on the main thread keeping *exactly one* reference to
- // |channel|.
- OtherThread(scoped_refptr<base::TaskRunner> task_runner,
- ChannelManager* channel_manager,
- Channel* channel,
- base::Closure quit_closure)
- : base::SimpleThread("other_thread"),
- task_runner_(task_runner),
- channel_manager_(channel_manager),
- channel_(channel),
- quit_closure_(quit_closure) {}
- ~OtherThread() override {}
-
- private:
- void Run() override {
- // See comment above constructor.
- ASSERT_TRUE(channel_->HasOneRef());
-
- ChannelId id = channel_manager_->AddChannel(make_scoped_refptr(channel_),
- task_runner_);
- EXPECT_NE(id, 0u);
- // |ChannelManager| should take a ref.
- EXPECT_FALSE(channel_->HasOneRef());
-
- channel_manager_->WillShutdownChannel(id);
- // |ChannelManager| should still have a ref.
- EXPECT_FALSE(channel_->HasOneRef());
-
- channel_manager_->ShutdownChannel(id);
- // This doesn't happen synchronously, so we "wait" until it does.
- // TODO(vtl): Possibly |Channel| should provide some notification of being
- // shut down.
- base::TimeTicks start_time(base::TimeTicks::Now());
- for (;;) {
- if (channel_->HasOneRef())
- break;
-
- // Check, instead of assert, since if things go wrong, dying is more
- // reliable than tearing down.
- CHECK_LT(base::TimeTicks::Now() - start_time,
- TestTimeouts::action_timeout());
- base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(20));
- }
-
- CHECK(task_runner_->PostTask(FROM_HERE, quit_closure_));
- }
-
- scoped_refptr<base::TaskRunner> task_runner_;
- ChannelManager* channel_manager_;
- Channel* channel_;
- base::Closure quit_closure_;
-
- DISALLOW_COPY_AND_ASSIGN(OtherThread);
-};
-
-TEST_F(ChannelManagerTest, CallsFromOtherThread) {
- ChannelManager cm;
-
- // Hang on to a ref to the |Channel|, so that we can check that the
- // |ChannelManager| takes/releases refs to it.
- scoped_refptr<Channel> ch(new Channel(platform_support()));
- ASSERT_TRUE(ch->HasOneRef());
-
- embedder::PlatformChannelPair channel_pair;
- ch->Init(RawChannel::Create(channel_pair.PassServerHandle()));
-
- base::RunLoop run_loop;
- OtherThread thread(base::MessageLoopProxy::current(), &cm, ch.get(),
- run_loop.QuitClosure());
- thread.Start();
- run_loop.Run();
- thread.Join();
-}
-
-} // namespace
-} // namespace system
-} // namespace mojo
« no previous file with comments | « mojo/edk/system/channel_manager.cc ('k') | mojo/edk/system/channel_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698