| Index: net/proxy/mojo_proxy_resolver_factory_impl_unittest.cc
|
| diff --git a/net/proxy/mojo_proxy_resolver_factory_impl_unittest.cc b/net/proxy/mojo_proxy_resolver_factory_impl_unittest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..860476af9a613cf6fb9809e9a2d2ae4f81a2e211
|
| --- /dev/null
|
| +++ b/net/proxy/mojo_proxy_resolver_factory_impl_unittest.cc
|
| @@ -0,0 +1,123 @@
|
| +// Copyright 2015 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 "net/proxy/mojo_proxy_resolver_factory_impl.h"
|
| +
|
| +#include "net/proxy/mock_proxy_resolver.h"
|
| +#include "net/test/event_waiter.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "third_party/mojo/src/mojo/public/cpp/bindings/binding.h"
|
| +#include "third_party/mojo/src/mojo/public/cpp/bindings/error_handler.h"
|
| +
|
| +namespace net {
|
| +namespace {
|
| +
|
| +class FakeProxyResolver : public MockAsyncProxyResolverExpectsBytes {
|
| + public:
|
| + explicit FakeProxyResolver(const base::Closure& on_destruction)
|
| + : on_destruction_(on_destruction) {}
|
| +
|
| + ~FakeProxyResolver() override { on_destruction_.Run(); }
|
| +
|
| + private:
|
| + const base::Closure on_destruction_;
|
| +};
|
| +
|
| +} // namespace
|
| +
|
| +class MojoProxyResolverFactoryImplTest : public testing::Test,
|
| + public mojo::ErrorHandler {
|
| + protected:
|
| + enum Event {
|
| + NONE,
|
| + RESOLVER_CREATED,
|
| + CONNECTION_ERROR,
|
| + RESOLVER_DESTROYED,
|
| + };
|
| +
|
| + void SetUp() override {
|
| + new MojoProxyResolverFactoryImpl(
|
| + base::Bind(&MojoProxyResolverFactoryImplTest::CreateFakeProxyResolver,
|
| + base::Unretained(this)),
|
| + mojo::GetProxy(&factory_));
|
| + }
|
| +
|
| + void OnConnectionError() override { waiter_.NotifyEvent(CONNECTION_ERROR); }
|
| +
|
| + scoped_ptr<ProxyResolver> CreateFakeProxyResolver(
|
| + HostResolver* host_resolver) {
|
| + EXPECT_TRUE(host_resolver);
|
| + instances_created_++;
|
| + waiter_.NotifyEvent(RESOLVER_CREATED);
|
| + return make_scoped_ptr(new FakeProxyResolver(base::Bind(
|
| + &MojoProxyResolverFactoryImplTest::OnFakeProxyInstanceDestroyed,
|
| + base::Unretained(this))));
|
| + }
|
| +
|
| + void OnFakeProxyInstanceDestroyed() {
|
| + instances_destroyed_++;
|
| + waiter_.NotifyEvent(RESOLVER_DESTROYED);
|
| + }
|
| +
|
| + interfaces::ProxyResolverFactoryPtr factory_;
|
| +
|
| + int instances_created_ = 0;
|
| + int instances_destroyed_ = 0;
|
| +
|
| + EventWaiter<Event> waiter_;
|
| +};
|
| +
|
| +TEST_F(MojoProxyResolverFactoryImplTest, DisconnectHostResolver) {
|
| + interfaces::ProxyResolverPtr proxy_resolver;
|
| + interfaces::HostResolverPtr host_resolver;
|
| + mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request =
|
| + mojo::GetProxy(&host_resolver);
|
| + factory_->CreateResolver(mojo::GetProxy(&proxy_resolver),
|
| + host_resolver.Pass());
|
| + proxy_resolver.set_error_handler(this);
|
| + waiter_.WaitForEvent(RESOLVER_CREATED);
|
| + EXPECT_EQ(1, instances_created_);
|
| + EXPECT_EQ(0, instances_destroyed_);
|
| + host_resolver_request = mojo::InterfaceRequest<interfaces::HostResolver>();
|
| + waiter_.WaitForEvent(CONNECTION_ERROR);
|
| + EXPECT_EQ(1, instances_created_);
|
| + EXPECT_EQ(1, instances_destroyed_);
|
| +}
|
| +
|
| +TEST_F(MojoProxyResolverFactoryImplTest, DisconnectProxyResolverClient) {
|
| + interfaces::ProxyResolverPtr proxy_resolver;
|
| + interfaces::HostResolverPtr host_resolver;
|
| + mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request =
|
| + mojo::GetProxy(&host_resolver);
|
| + mojo::Binding<interfaces::HostResolver> binding(nullptr, &host_resolver);
|
| + binding.set_error_handler(this);
|
| + factory_->CreateResolver(mojo::GetProxy(&proxy_resolver),
|
| + host_resolver.Pass());
|
| + waiter_.WaitForEvent(RESOLVER_CREATED);
|
| + EXPECT_EQ(1, instances_created_);
|
| + EXPECT_EQ(0, instances_destroyed_);
|
| + proxy_resolver.reset();
|
| + waiter_.WaitForEvent(CONNECTION_ERROR);
|
| + EXPECT_EQ(1, instances_created_);
|
| + EXPECT_EQ(1, instances_destroyed_);
|
| +}
|
| +
|
| +TEST_F(MojoProxyResolverFactoryImplTest, DisconnectBoth) {
|
| + interfaces::ProxyResolverPtr proxy_resolver;
|
| + interfaces::HostResolverPtr host_resolver;
|
| + mojo::InterfaceRequest<interfaces::HostResolver> host_resolver_request =
|
| + mojo::GetProxy(&host_resolver);
|
| + factory_->CreateResolver(mojo::GetProxy(&proxy_resolver),
|
| + host_resolver.Pass());
|
| + waiter_.WaitForEvent(RESOLVER_CREATED);
|
| + EXPECT_EQ(1, instances_created_);
|
| + EXPECT_EQ(0, instances_destroyed_);
|
| + proxy_resolver.reset();
|
| + host_resolver_request = mojo::InterfaceRequest<interfaces::HostResolver>();
|
| + waiter_.WaitForEvent(RESOLVER_DESTROYED);
|
| + EXPECT_EQ(1, instances_created_);
|
| + EXPECT_EQ(1, instances_destroyed_);
|
| +}
|
| +
|
| +} // namespace net
|
|
|