Chromium Code Reviews| OLD | NEW |
|---|---|
| (Empty) | |
| 1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include <string> | |
| 6 #include <vector> | |
| 7 | |
| 8 #include <gtest/gtest.h> | |
| 9 | |
| 10 #include "update_engine/chrome_proxy_resolver.h" | |
| 11 #include "update_engine/mock_dbus_interface.h" | |
| 12 | |
| 13 using std::string; | |
| 14 using std::vector; | |
| 15 using ::testing::_; | |
| 16 using ::testing::Return; | |
| 17 using ::testing::SetArgumentPointee; | |
| 18 using ::testing::StrEq; | |
| 19 | |
| 20 namespace chromeos_update_engine { | |
| 21 | |
| 22 class ChromeProxyResolverTest : public ::testing::Test { }; | |
| 23 | |
| 24 TEST(ChromeProxyResolverTest, ProxyForUrlWithSettingsTest) { | |
| 25 const string kSingle = | |
| 26 "{\"mode\":3,\"single\":{\"server\":\"192.168.42.86:80\",\"src\":0}}"; | |
| 27 const string kSocks = | |
| 28 "{\"mode\":4,\"socks\":{\"server\":\"socks5://192.168.42.83:5555\"," | |
| 29 "\"src\":0}}"; | |
| 30 const string kAll = | |
| 31 "{\"http\":{\"server\":\"http_proxy:11\",\"src\":0}," | |
| 32 "\"https\":{\"server\":\"https://https_proxy:22\",\"src\":0}," | |
| 33 "\"mode\":4," | |
| 34 "\"socks\":{\"server\":\"socks5://socks:55\",\"src\":0}}"; | |
| 35 const string kHttpHttps = | |
| 36 "{\"http\":{\"server\":\"http_proxy:11\",\"src\":0}," | |
| 37 "\"https\":{\"server\":\"https://https_proxy:22\",\"src\":0}," | |
| 38 "\"mode\":4}"; | |
| 39 | |
| 40 ChromeProxyResolver resolver(NULL); | |
| 41 vector<string> out; | |
| 42 string urls[] = {"http://foo.com/update", "https://bar.com/foo.gz"}; | |
| 43 string multi_settings[] = {kAll, kHttpHttps}; | |
| 44 for (size_t i = 0; i < arraysize(urls); i++) { | |
| 45 const string& url = urls[i]; | |
| 46 LOG(INFO) << "url: " << url; | |
| 47 EXPECT_TRUE(resolver.ProxyForUrlWithSettings(url, kSingle, &out)); | |
| 48 EXPECT_EQ(2, out.size()); | |
| 49 EXPECT_EQ("http://192.168.42.86:80", out[0]); | |
| 50 EXPECT_EQ(kNoProxy, out[1]); | |
| 51 | |
| 52 EXPECT_TRUE(resolver.ProxyForUrlWithSettings(url, kSocks, &out)); | |
| 53 EXPECT_EQ(2, out.size()); | |
| 54 EXPECT_EQ("socks5://192.168.42.83:5555", out[0]); | |
| 55 EXPECT_EQ(kNoProxy, out[1]); | |
| 56 | |
| 57 for (size_t j = 0; j < arraysize(multi_settings); j++) { | |
| 58 const string& settings = multi_settings[j]; | |
| 59 EXPECT_TRUE(resolver.ProxyForUrlWithSettings(url, settings, &out)); | |
| 60 EXPECT_EQ(j == 0 ? 3 : 2, out.size()); | |
| 61 if (i == 0) | |
| 62 EXPECT_EQ("http://http_proxy:11", out[0]); | |
| 63 else | |
| 64 EXPECT_EQ("https://https_proxy:22", out[0]); | |
| 65 if (j == 0) | |
| 66 EXPECT_EQ("socks5://socks:55", out[1]); | |
| 67 EXPECT_EQ(kNoProxy, out.back()); | |
| 68 } | |
| 69 } | |
| 70 | |
| 71 // Bad JSON | |
| 72 EXPECT_FALSE(resolver.ProxyForUrlWithSettings("http://foo.com", "}", &out)); | |
| 73 | |
| 74 // Bad proxy scheme | |
| 75 EXPECT_TRUE(resolver.ProxyForUrlWithSettings("http://foo.com", | |
| 76 "{\"mode\":1}", | |
| 77 &out)); | |
| 78 EXPECT_EQ(1, out.size()); | |
| 79 EXPECT_EQ(kNoProxy, out[0]); | |
| 80 } | |
| 81 | |
| 82 TEST(ChromeProxyResolverTest, DbusInterfaceTest) { | |
| 83 long number = 1; | |
| 84 DBusGConnection* kMockSystemBus = | |
| 85 reinterpret_cast<DBusGConnection*>(number++); | |
| 86 DBusGProxy* kMockSessionManagerProxy = | |
| 87 reinterpret_cast<DBusGProxy*>(number++); | |
| 88 | |
| 89 const char settings[] = | |
| 90 "{\"mode\":4,\"socks\":{\"server\":\"socks5://192.168.52.83:5555\"," | |
| 91 "\"src\":0}}"; | |
| 92 | |
| 93 MockDbusGlib dbus_iface; | |
| 94 ChromeProxyResolver resolver(&dbus_iface); | |
| 95 | |
| 96 GArray* ret_array = g_array_new(FALSE, FALSE, 1); | |
| 97 | |
| 98 EXPECT_CALL(dbus_iface, BusGet(DBUS_BUS_SYSTEM, _)) | |
| 99 .Times(1) | |
| 100 .WillRepeatedly(Return(kMockSystemBus)); | |
| 101 EXPECT_CALL(dbus_iface, | |
| 102 ProxyNewForNameOwner(kMockSystemBus, | |
| 103 StrEq(kSessionManagerService), | |
| 104 StrEq(kSessionManagerPath), | |
| 105 StrEq(kSessionManagerInterface), | |
| 106 _)) | |
| 107 .WillOnce(Return(kMockSessionManagerProxy)); | |
| 108 EXPECT_CALL(dbus_iface, ProxyCall( | |
| 109 kMockSessionManagerProxy, | |
| 110 StrEq(kSessionManagerRetreivePropertyMethod), | |
| 111 _, | |
| 112 G_TYPE_STRING, StrEq(kSessionManagerProxySettingsKey), | |
| 113 G_TYPE_INVALID, | |
| 114 G_TYPE_STRING, _, | |
| 115 DBUS_TYPE_G_UCHAR_ARRAY, _)) | |
| 116 .WillOnce(DoAll(SetArgumentPointee<7>(strdup(settings)), | |
| 117 SetArgumentPointee<9>(ret_array), | |
| 118 Return(TRUE))); | |
| 119 | |
| 120 vector<string> proxies; | |
| 121 EXPECT_TRUE(resolver.ProxyForUrl("http://user:pass@foo.com:22", &proxies)); | |
| 122 EXPECT_EQ(2, proxies.size()); | |
| 123 EXPECT_EQ("socks5://192.168.52.83:5555", proxies[0]); | |
| 124 EXPECT_EQ(kNoProxy, proxies[1]); | |
| 125 } | |
| 126 | |
| 127 TEST(ChromeProxyResolverTest, ProxyTypeForProxyTest) { | |
| 128 // static bool ProxyTypeForProxy(const std::string& proxy, | |
|
petkov
2010/11/18 23:26:46
remove
adlr
2010/11/19 00:41:06
Done.
| |
| 129 // curl_proxytype* out_type); | |
| 130 curl_proxytype type; | |
| 131 EXPECT_TRUE(ChromeProxyResolver::ProxyTypeForProxy("socks://f.ru", &type)); | |
| 132 EXPECT_EQ(CURLPROXY_SOCKS5_HOSTNAME, type); | |
| 133 EXPECT_TRUE(ChromeProxyResolver::ProxyTypeForProxy("socks5://f.ru:9", &type)); | |
| 134 EXPECT_EQ(CURLPROXY_SOCKS5_HOSTNAME, type); | |
| 135 EXPECT_TRUE(ChromeProxyResolver::ProxyTypeForProxy("socks4://f.ru:9", &type)); | |
| 136 EXPECT_EQ(CURLPROXY_SOCKS4A, type); | |
| 137 EXPECT_TRUE(ChromeProxyResolver::ProxyTypeForProxy("http://f.no:88", &type)); | |
| 138 EXPECT_EQ(CURLPROXY_HTTP, type); | |
| 139 EXPECT_TRUE(ChromeProxyResolver::ProxyTypeForProxy("https://f.no:88", &type)); | |
| 140 EXPECT_EQ(CURLPROXY_HTTP, type); | |
| 141 EXPECT_FALSE(ChromeProxyResolver::ProxyTypeForProxy(kNoProxy, &type)); | |
| 142 EXPECT_FALSE(ChromeProxyResolver::ProxyTypeForProxy("foo://", &type)); | |
| 143 EXPECT_FALSE(ChromeProxyResolver::ProxyTypeForProxy("missing.com:8", &type)); | |
| 144 } | |
| 145 | |
| 146 } // namespace chromeos_update_engine | |
| OLD | NEW |