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

Unified Diff: chrome_proxy_resolver_unittest.cc

Issue 5151005: AU: Proxy Resolver classes (Closed) Base URL: http://git.chromium.org/git/update_engine.git@master
Patch Set: merge master Created 10 years, 1 month 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 | « chrome_proxy_resolver.cc ('k') | dbus_interface.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_proxy_resolver_unittest.cc
diff --git a/chrome_proxy_resolver_unittest.cc b/chrome_proxy_resolver_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..66b2401b0e269e6487e968505085ed9a60f0b102
--- /dev/null
+++ b/chrome_proxy_resolver_unittest.cc
@@ -0,0 +1,147 @@
+// Copyright (c) 2009 The Chromium OS 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 <string>
+#include <vector>
+
+#include <gtest/gtest.h>
+
+#include "update_engine/chrome_proxy_resolver.h"
+#include "update_engine/mock_dbus_interface.h"
+
+using std::string;
+using std::vector;
+using ::testing::_;
+using ::testing::Return;
+using ::testing::SetArgumentPointee;
+using ::testing::StrEq;
+
+namespace chromeos_update_engine {
+
+class ChromeProxyResolverTest : public ::testing::Test { };
+
+TEST(ChromeProxyResolverTest, GetProxiesForUrlWithSettingsTest) {
+ const string kSingle =
+ "{\"mode\":3,\"single\":{\"server\":\"192.168.42.86:80\",\"src\":0}}";
+ const string kSocks =
+ "{\"mode\":4,\"socks\":{\"server\":\"socks5://192.168.42.83:5555\","
+ "\"src\":0}}";
+ const string kAll =
+ "{\"http\":{\"server\":\"http_proxy:11\",\"src\":0},"
+ "\"https\":{\"server\":\"https://https_proxy:22\",\"src\":0},"
+ "\"mode\":4,"
+ "\"socks\":{\"server\":\"socks5://socks:55\",\"src\":0}}";
+ const string kHttpHttps =
+ "{\"http\":{\"server\":\"http_proxy:11\",\"src\":0},"
+ "\"https\":{\"server\":\"https://https_proxy:22\",\"src\":0},"
+ "\"mode\":4}";
+
+ ChromeProxyResolver resolver(NULL);
+ vector<string> out;
+ string urls[] = {"http://foo.com/update", "https://bar.com/foo.gz"};
+ string multi_settings[] = {kAll, kHttpHttps};
+ for (size_t i = 0; i < arraysize(urls); i++) {
+ const string& url = urls[i];
+ LOG(INFO) << "url: " << url;
+ EXPECT_TRUE(resolver.GetProxiesForUrlWithSettings(url, kSingle, &out));
+ EXPECT_EQ(2, out.size());
+ EXPECT_EQ("http://192.168.42.86:80", out[0]);
+ EXPECT_EQ(kNoProxy, out[1]);
+
+ EXPECT_TRUE(resolver.GetProxiesForUrlWithSettings(url, kSocks, &out));
+ EXPECT_EQ(2, out.size());
+ EXPECT_EQ("socks5://192.168.42.83:5555", out[0]);
+ EXPECT_EQ(kNoProxy, out[1]);
+
+ for (size_t j = 0; j < arraysize(multi_settings); j++) {
+ const string& settings = multi_settings[j];
+ EXPECT_TRUE(resolver.GetProxiesForUrlWithSettings(url, settings, &out));
+ EXPECT_EQ(j == 0 ? 3 : 2, out.size());
+ if (i == 0)
+ EXPECT_EQ("http://http_proxy:11", out[0]);
+ else
+ EXPECT_EQ("https://https_proxy:22", out[0]);
+ if (j == 0)
+ EXPECT_EQ("socks5://socks:55", out[1]);
+ EXPECT_EQ(kNoProxy, out.back());
+ }
+ }
+
+ // Bad JSON
+ EXPECT_FALSE(resolver.GetProxiesForUrlWithSettings("http://foo.com",
+ "}",
+ &out));
+
+ // Bad proxy scheme
+ EXPECT_TRUE(resolver.GetProxiesForUrlWithSettings("http://foo.com",
+ "{\"mode\":1}",
+ &out));
+ EXPECT_EQ(1, out.size());
+ EXPECT_EQ(kNoProxy, out[0]);
+}
+
+TEST(ChromeProxyResolverTest, DbusInterfaceTest) {
+ long number = 1;
+ DBusGConnection* kMockSystemBus =
+ reinterpret_cast<DBusGConnection*>(number++);
+ DBusGProxy* kMockSessionManagerProxy =
+ reinterpret_cast<DBusGProxy*>(number++);
+
+ const char settings[] =
+ "{\"mode\":4,\"socks\":{\"server\":\"socks5://192.168.52.83:5555\","
+ "\"src\":0}}";
+
+ MockDbusGlib dbus_iface;
+ ChromeProxyResolver resolver(&dbus_iface);
+
+ GArray* ret_array = g_array_new(FALSE, FALSE, 1);
+
+ EXPECT_CALL(dbus_iface, BusGet(DBUS_BUS_SYSTEM, _))
+ .Times(1)
+ .WillRepeatedly(Return(kMockSystemBus));
+ EXPECT_CALL(dbus_iface,
+ ProxyNewForNameOwner(kMockSystemBus,
+ StrEq(kSessionManagerService),
+ StrEq(kSessionManagerPath),
+ StrEq(kSessionManagerInterface),
+ _))
+ .WillOnce(Return(kMockSessionManagerProxy));
+ EXPECT_CALL(dbus_iface, ProxyCall(
+ kMockSessionManagerProxy,
+ StrEq(kSessionManagerRetrievePropertyMethod),
+ _,
+ G_TYPE_STRING, StrEq(kSessionManagerProxySettingsKey),
+ G_TYPE_INVALID,
+ G_TYPE_STRING, _,
+ DBUS_TYPE_G_UCHAR_ARRAY, _))
+ .WillOnce(DoAll(SetArgumentPointee<7>(strdup(settings)),
+ SetArgumentPointee<9>(ret_array),
+ Return(TRUE)));
+
+ vector<string> proxies;
+ EXPECT_TRUE(resolver.GetProxiesForUrl("http://user:pass@foo.com:22",
+ &proxies));
+ EXPECT_EQ(2, proxies.size());
+ EXPECT_EQ("socks5://192.168.52.83:5555", proxies[0]);
+ EXPECT_EQ(kNoProxy, proxies[1]);
+}
+
+TEST(ChromeProxyResolverTest, GetProxyTypeTest) {
+ curl_proxytype type;
+ EXPECT_TRUE(ChromeProxyResolver::GetProxyType("socks://f.ru", &type));
+ EXPECT_EQ(CURLPROXY_SOCKS5_HOSTNAME, type);
+ EXPECT_TRUE(ChromeProxyResolver::GetProxyType("socks5://f.ru:9", &type));
+ EXPECT_EQ(CURLPROXY_SOCKS5_HOSTNAME, type);
+ EXPECT_TRUE(ChromeProxyResolver::GetProxyType("socks4://f.ru:9", &type));
+ EXPECT_EQ(CURLPROXY_SOCKS4A, type);
+ EXPECT_TRUE(ChromeProxyResolver::GetProxyType("http://f.no:88", &type));
+ EXPECT_EQ(CURLPROXY_HTTP, type);
+ EXPECT_TRUE(ChromeProxyResolver::GetProxyType("https://f.no:88", &type));
+ EXPECT_EQ(CURLPROXY_HTTP, type);
+ EXPECT_FALSE(ChromeProxyResolver::GetProxyType(kNoProxy, &type));
+ EXPECT_FALSE(ChromeProxyResolver::GetProxyType("foo://", &type));
+ EXPECT_FALSE(ChromeProxyResolver::GetProxyType("missing.com:8", &type));
+}
+
+} // namespace chromeos_update_engine
« no previous file with comments | « chrome_proxy_resolver.cc ('k') | dbus_interface.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698