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, GetProxiesForUrlWithSettingsTest) { | |
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.GetProxiesForUrlWithSettings(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.GetProxiesForUrlWithSettings(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.GetProxiesForUrlWithSettings(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.GetProxiesForUrlWithSettings("http://foo.com", "}", &out )); | |
petkov
2010/11/19 01:09:19
80 chars
adlr
2010/11/19 02:00:52
Done.
| |
73 | |
74 // Bad proxy scheme | |
75 EXPECT_TRUE(resolver.GetProxiesForUrlWithSettings("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(kSessionManagerRetrievePropertyMethod), | |
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.GetProxiesForUrl("http://user:pass@foo.com:22", &proxies) ); | |
petkov
2010/11/19 01:09:19
80 chars
adlr
2010/11/19 02:00:52
Done.
| |
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, GetTypeForProxyTest) { | |
128 curl_proxytype type; | |
129 EXPECT_TRUE(ChromeProxyResolver::GetTypeForProxy("socks://f.ru", &type)); | |
130 EXPECT_EQ(CURLPROXY_SOCKS5_HOSTNAME, type); | |
131 EXPECT_TRUE(ChromeProxyResolver::GetTypeForProxy("socks5://f.ru:9", &type)); | |
132 EXPECT_EQ(CURLPROXY_SOCKS5_HOSTNAME, type); | |
133 EXPECT_TRUE(ChromeProxyResolver::GetTypeForProxy("socks4://f.ru:9", &type)); | |
134 EXPECT_EQ(CURLPROXY_SOCKS4A, type); | |
135 EXPECT_TRUE(ChromeProxyResolver::GetTypeForProxy("http://f.no:88", &type)); | |
136 EXPECT_EQ(CURLPROXY_HTTP, type); | |
137 EXPECT_TRUE(ChromeProxyResolver::GetTypeForProxy("https://f.no:88", &type)); | |
138 EXPECT_EQ(CURLPROXY_HTTP, type); | |
139 EXPECT_FALSE(ChromeProxyResolver::GetTypeForProxy(kNoProxy, &type)); | |
140 EXPECT_FALSE(ChromeProxyResolver::GetTypeForProxy("foo://", &type)); | |
141 EXPECT_FALSE(ChromeProxyResolver::GetTypeForProxy("missing.com:8", &type)); | |
142 } | |
143 | |
144 } // namespace chromeos_update_engine | |
OLD | NEW |