// 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_v8_tracing_bindings.h" #include #include #include #include "base/strings/utf_string_conversions.h" #include "base/threading/thread.h" #include "net/test/event_waiter.h" #include "testing/gtest/include/gtest/gtest.h" namespace net { class MojoProxyResolverV8TracingBindingsTest : public testing::Test { public: enum Event { EVENT_ALERT, EVENT_ERROR, }; MojoProxyResolverV8TracingBindingsTest() : weak_factory_(this) {} void SetUp() override { bindings_.reset(new MojoProxyResolverV8TracingBindings< MojoProxyResolverV8TracingBindingsTest>(weak_factory_.GetWeakPtr())); } void Alert(const mojo::String& message) { alerts_.push_back(message.To()); waiter_.NotifyEvent(EVENT_ALERT); } void OnError(int32_t line_number, const mojo::String& message) { errors_.push_back(std::make_pair(line_number, message.To())); waiter_.NotifyEvent(EVENT_ERROR); } void ResolveDns(interfaces::HostResolverRequestInfoPtr request_info, interfaces::HostResolverRequestClientPtr client) {} void SendAlertAndError() { bindings_->Alert(base::ASCIIToUTF16("alert")); bindings_->OnError(-1, base::ASCIIToUTF16("error")); } protected: scoped_ptr> bindings_; EventWaiter waiter_; std::vector alerts_; std::vector> errors_; base::WeakPtrFactory weak_factory_; }; TEST_F(MojoProxyResolverV8TracingBindingsTest, Basic) { SendAlertAndError(); EXPECT_TRUE(bindings_->GetHostResolver()); EXPECT_FALSE(bindings_->GetBoundNetLog().net_log()); ASSERT_EQ(1u, alerts_.size()); EXPECT_EQ("alert", alerts_[0]); ASSERT_EQ(1u, errors_.size()); EXPECT_EQ(-1, errors_[0].first); EXPECT_EQ("error", errors_[0].second); } TEST_F(MojoProxyResolverV8TracingBindingsTest, CalledFromOtherThread) { base::Thread thread("alert and error thread"); thread.Start(); thread.message_loop()->PostTask( FROM_HERE, base::Bind(&MojoProxyResolverV8TracingBindingsTest::SendAlertAndError, base::Unretained(this))); waiter_.WaitForEvent(EVENT_ERROR); ASSERT_EQ(1u, alerts_.size()); EXPECT_EQ("alert", alerts_[0]); ASSERT_EQ(1u, errors_.size()); EXPECT_EQ(-1, errors_[0].first); EXPECT_EQ("error", errors_[0].second); } } // namespace net