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

Unified Diff: net/base/test_completion_callback_unittest.cc

Issue 992733002: Remove //net (except for Android test stuff) and sdch (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 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 | « net/base/test_completion_callback.cc ('k') | net/base/test_data_directory.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/test_completion_callback_unittest.cc
diff --git a/net/base/test_completion_callback_unittest.cc b/net/base/test_completion_callback_unittest.cc
deleted file mode 100644
index b0c8565b112b7c4cd096f0c750f485f31aca276f..0000000000000000000000000000000000000000
--- a/net/base/test_completion_callback_unittest.cc
+++ /dev/null
@@ -1,150 +0,0 @@
-// Copyright (c) 2011 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.
-
-// Illustrates how to use worker threads that issue completion callbacks
-
-#include "base/bind.h"
-#include "base/logging.h"
-#include "base/message_loop/message_loop.h"
-#include "base/threading/worker_pool.h"
-#include "net/base/completion_callback.h"
-#include "net/base/test_completion_callback.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "testing/platform_test.h"
-
-namespace {
-
-const int kMagicResult = 8888;
-
-void CallClosureAfterCheckingResult(const base::Closure& closure,
- bool* did_check_result,
- int result) {
- DCHECK_EQ(result, kMagicResult);
- *did_check_result = true;
- closure.Run();
-}
-
-// ExampleEmployer is a toy version of HostResolver
-// TODO: restore damage done in extracting example from real code
-// (e.g. bring back real destructor, bring back comments)
-class ExampleEmployer {
- public:
- ExampleEmployer();
- ~ExampleEmployer();
-
- // Do some imaginary work on a worker thread;
- // when done, worker posts callback on the original thread.
- // Returns true on success
- bool DoSomething(const net::CompletionCallback& callback);
-
- private:
- class ExampleWorker;
- friend class ExampleWorker;
- scoped_refptr<ExampleWorker> request_;
- DISALLOW_COPY_AND_ASSIGN(ExampleEmployer);
-};
-
-// Helper class; this is how ExampleEmployer puts work on a different thread
-class ExampleEmployer::ExampleWorker
- : public base::RefCountedThreadSafe<ExampleWorker> {
- public:
- ExampleWorker(ExampleEmployer* employer,
- const net::CompletionCallback& callback)
- : employer_(employer),
- callback_(callback),
- origin_loop_(base::MessageLoop::current()) {}
- void DoWork();
- void DoCallback();
- private:
- friend class base::RefCountedThreadSafe<ExampleWorker>;
-
- ~ExampleWorker() {}
-
- // Only used on the origin thread (where DoSomething was called).
- ExampleEmployer* employer_;
- net::CompletionCallback callback_;
- // Used to post ourselves onto the origin thread.
- base::Lock origin_loop_lock_;
- base::MessageLoop* origin_loop_;
-};
-
-void ExampleEmployer::ExampleWorker::DoWork() {
- // Running on the worker thread
- // In a real worker thread, some work would be done here.
- // Pretend it is, and send the completion callback.
-
- // The origin loop could go away while we are trying to post to it, so we
- // need to call its PostTask method inside a lock. See ~ExampleEmployer.
- {
- base::AutoLock locked(origin_loop_lock_);
- if (origin_loop_)
- origin_loop_->PostTask(FROM_HERE,
- base::Bind(&ExampleWorker::DoCallback, this));
- }
-}
-
-void ExampleEmployer::ExampleWorker::DoCallback() {
- // Running on the origin thread.
-
- // Drop the employer_'s reference to us. Do this before running the
- // callback since the callback might result in the employer being
- // destroyed.
- employer_->request_ = NULL;
-
- callback_.Run(kMagicResult);
-}
-
-ExampleEmployer::ExampleEmployer() {
-}
-
-ExampleEmployer::~ExampleEmployer() {
-}
-
-bool ExampleEmployer::DoSomething(const net::CompletionCallback& callback) {
- DCHECK(!request_.get()) << "already in use";
-
- request_ = new ExampleWorker(this, callback);
-
- // Dispatch to worker thread...
- if (!base::WorkerPool::PostTask(
- FROM_HERE,
- base::Bind(&ExampleWorker::DoWork, request_.get()),
- true)) {
- NOTREACHED();
- request_ = NULL;
- return false;
- }
-
- return true;
-}
-
-} // namespace
-
-typedef PlatformTest TestCompletionCallbackTest;
-
-TEST_F(TestCompletionCallbackTest, Simple) {
- ExampleEmployer boss;
- net::TestCompletionCallback callback;
- bool queued = boss.DoSomething(callback.callback());
- EXPECT_TRUE(queued);
- int result = callback.WaitForResult();
- EXPECT_EQ(result, kMagicResult);
-}
-
-TEST_F(TestCompletionCallbackTest, Closure) {
- ExampleEmployer boss;
- net::TestClosure closure;
- bool did_check_result = false;
- net::CompletionCallback completion_callback =
- base::Bind(&CallClosureAfterCheckingResult,
- closure.closure(), base::Unretained(&did_check_result));
- bool queued = boss.DoSomething(completion_callback);
- EXPECT_TRUE(queued);
-
- EXPECT_FALSE(did_check_result);
- closure.WaitForResult();
- EXPECT_TRUE(did_check_result);
-}
-
-// TODO: test deleting ExampleEmployer while work outstanding
« no previous file with comments | « net/base/test_completion_callback.cc ('k') | net/base/test_data_directory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698