// // Copyright (C) 2017 The Android Open Source Project // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. // #include "update_engine/common/proxy_resolver.h" #include #include #include #include #include using std::deque; using std::string; namespace chromeos_update_engine { class ProxyResolverTest : public ::testing::Test { protected: virtual ~ProxyResolverTest() = default; void SetUp() override { loop_.SetAsCurrent(); } void TearDown() override { EXPECT_FALSE(loop_.PendingTasks()); } brillo::FakeMessageLoop loop_{nullptr}; DirectProxyResolver resolver_; }; TEST_F(ProxyResolverTest, DirectProxyResolverCallbackTest) { bool called = false; deque callback_proxies; auto callback = base::Bind( [](bool* called, deque* callback_proxies, const deque& proxies) { *called = true; *callback_proxies = proxies; }, &called, &callback_proxies); EXPECT_NE(kProxyRequestIdNull, resolver_.GetProxiesForUrl("http://foo", callback)); // Check the callback is not called until the message loop runs. EXPECT_FALSE(called); loop_.Run(); EXPECT_TRUE(called); EXPECT_EQ(kNoProxy, callback_proxies.front()); } TEST_F(ProxyResolverTest, DirectProxyResolverCancelCallbackTest) { bool called = false; auto callback = base::Bind( [](bool* called, const deque& proxies) { *called = true; }, &called); ProxyRequestId request = resolver_.GetProxiesForUrl("http://foo", callback); EXPECT_FALSE(called); EXPECT_TRUE(resolver_.CancelProxyRequest(request)); loop_.Run(); EXPECT_FALSE(called); } TEST_F(ProxyResolverTest, DirectProxyResolverSimultaneousCallbacksTest) { int called = 0; auto callback = base::Bind( [](int* called, const deque& proxies) { (*called)++; }, &called); resolver_.GetProxiesForUrl("http://foo", callback); resolver_.GetProxiesForUrl("http://bar", callback); EXPECT_EQ(0, called); loop_.Run(); EXPECT_EQ(2, called); } } // namespace chromeos_update_engine