Only grant permissions to new extensions from sync if they have the expected version
[chromium-blink-merge.git] / tools / telemetry / third_party / gsutilz / gslib / tests / test_util.py
blob0561dd9d47357c77cdbe129f0c389e36392078ba
1 # -*- coding: utf-8 -*-
2 # Copyright 2013 Google Inc. All Rights Reserved.
4 # Permission is hereby granted, free of charge, to any person obtaining a
5 # copy of this software and associated documentation files (the
6 # "Software"), to deal in the Software without restriction, including
7 # without limitation the rights to use, copy, modify, merge, publish, dis-
8 # tribute, sublicense, and/or sell copies of the Software, and to permit
9 # persons to whom the Software is furnished to do so, subject to the fol-
10 # lowing conditions:
12 # The above copyright notice and this permission notice shall be included
13 # in all copies or substantial portions of the Software.
15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
17 # ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
18 # SHALL THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
19 # WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
21 # IN THE SOFTWARE.
22 """Tests for gsutil utility functions."""
24 from __future__ import absolute_import
26 import httplib2
27 from gslib import util
28 import gslib.tests.testcase as testcase
29 from gslib.tests.util import SetEnvironmentForTest
30 from gslib.util import CompareVersions
33 class TestUtil(testcase.GsUtilUnitTestCase):
34 """Tests for utility functions."""
36 def test_MakeHumanReadable(self):
37 """Tests converting byte counts to human-readable strings."""
38 self.assertEqual(util.MakeHumanReadable(0), '0 B')
39 self.assertEqual(util.MakeHumanReadable(1023), '1023 B')
40 self.assertEqual(util.MakeHumanReadable(1024), '1 KiB')
41 self.assertEqual(util.MakeHumanReadable(1024 ** 2), '1 MiB')
42 self.assertEqual(util.MakeHumanReadable(1024 ** 3), '1 GiB')
43 self.assertEqual(util.MakeHumanReadable(1024 ** 3 * 5.3), '5.3 GiB')
44 self.assertEqual(util.MakeHumanReadable(1024 ** 4 * 2.7), '2.7 TiB')
45 self.assertEqual(util.MakeHumanReadable(1024 ** 5), '1 PiB')
46 self.assertEqual(util.MakeHumanReadable(1024 ** 6), '1 EiB')
48 def test_MakeBitsHumanReadable(self):
49 """Tests converting bit counts to human-readable strings."""
50 self.assertEqual(util.MakeBitsHumanReadable(0), '0 bit')
51 self.assertEqual(util.MakeBitsHumanReadable(1023), '1023 bit')
52 self.assertEqual(util.MakeBitsHumanReadable(1024), '1 Kibit')
53 self.assertEqual(util.MakeBitsHumanReadable(1024 ** 2), '1 Mibit')
54 self.assertEqual(util.MakeBitsHumanReadable(1024 ** 3), '1 Gibit')
55 self.assertEqual(util.MakeBitsHumanReadable(1024 ** 3 * 5.3), '5.3 Gibit')
56 self.assertEqual(util.MakeBitsHumanReadable(1024 ** 4 * 2.7), '2.7 Tibit')
57 self.assertEqual(util.MakeBitsHumanReadable(1024 ** 5), '1 Pibit')
58 self.assertEqual(util.MakeBitsHumanReadable(1024 ** 6), '1 Eibit')
60 def test_HumanReadableToBytes(self):
61 """Tests converting human-readable strings to byte counts."""
62 self.assertEqual(util.HumanReadableToBytes('1'), 1)
63 self.assertEqual(util.HumanReadableToBytes('15'), 15)
64 self.assertEqual(util.HumanReadableToBytes('15.3'), 15)
65 self.assertEqual(util.HumanReadableToBytes('15.7'), 16)
66 self.assertEqual(util.HumanReadableToBytes('1023'), 1023)
67 self.assertEqual(util.HumanReadableToBytes('1k'), 1024)
68 self.assertEqual(util.HumanReadableToBytes('2048'), 2048)
69 self.assertEqual(util.HumanReadableToBytes('1 k'), 1024)
70 self.assertEqual(util.HumanReadableToBytes('1 K'), 1024)
71 self.assertEqual(util.HumanReadableToBytes('1 KB'), 1024)
72 self.assertEqual(util.HumanReadableToBytes('1 KiB'), 1024)
73 self.assertEqual(util.HumanReadableToBytes('1 m'), 1024 ** 2)
74 self.assertEqual(util.HumanReadableToBytes('1 M'), 1024 ** 2)
75 self.assertEqual(util.HumanReadableToBytes('1 MB'), 1024 ** 2)
76 self.assertEqual(util.HumanReadableToBytes('1 MiB'), 1024 ** 2)
77 self.assertEqual(util.HumanReadableToBytes('1 g'), 1024 ** 3)
78 self.assertEqual(util.HumanReadableToBytes('1 G'), 1024 ** 3)
79 self.assertEqual(util.HumanReadableToBytes('1 GB'), 1024 ** 3)
80 self.assertEqual(util.HumanReadableToBytes('1 GiB'), 1024 ** 3)
81 self.assertEqual(util.HumanReadableToBytes('1t'), 1024 ** 4)
82 self.assertEqual(util.HumanReadableToBytes('1T'), 1024 ** 4)
83 self.assertEqual(util.HumanReadableToBytes('1TB'), 1024 ** 4)
84 self.assertEqual(util.HumanReadableToBytes('1TiB'), 1024 ** 4)
85 self.assertEqual(util.HumanReadableToBytes('1\t p'), 1024 ** 5)
86 self.assertEqual(util.HumanReadableToBytes('1\t P'), 1024 ** 5)
87 self.assertEqual(util.HumanReadableToBytes('1\t PB'), 1024 ** 5)
88 self.assertEqual(util.HumanReadableToBytes('1\t PiB'), 1024 ** 5)
89 self.assertEqual(util.HumanReadableToBytes('1e'), 1024 ** 6)
90 self.assertEqual(util.HumanReadableToBytes('1E'), 1024 ** 6)
91 self.assertEqual(util.HumanReadableToBytes('1EB'), 1024 ** 6)
92 self.assertEqual(util.HumanReadableToBytes('1EiB'), 1024 ** 6)
94 def test_CompareVersions(self):
95 """Tests CompareVersions for various use cases."""
96 # CompareVersions(first, second) returns (g, m), where
97 # g is True if first known to be greater than second, else False.
98 # m is True if first known to be greater by at least 1 major version,
99 (g, m) = CompareVersions('3.37', '3.2')
100 self.assertTrue(g)
101 self.assertFalse(m)
102 (g, m) = CompareVersions('7', '2')
103 self.assertTrue(g)
104 self.assertTrue(m)
105 (g, m) = CompareVersions('3.32', '3.32pre')
106 self.assertTrue(g)
107 self.assertFalse(m)
108 (g, m) = CompareVersions('3.32pre', '3.31')
109 self.assertTrue(g)
110 self.assertFalse(m)
111 (g, m) = CompareVersions('3.4pre', '3.3pree')
112 self.assertTrue(g)
113 self.assertFalse(m)
115 (g, m) = CompareVersions('3.2', '3.37')
116 self.assertFalse(g)
117 self.assertFalse(m)
118 (g, m) = CompareVersions('2', '7')
119 self.assertFalse(g)
120 self.assertFalse(m)
121 (g, m) = CompareVersions('3.32pre', '3.32')
122 self.assertFalse(g)
123 self.assertFalse(m)
124 (g, m) = CompareVersions('3.31', '3.32pre')
125 self.assertFalse(g)
126 self.assertFalse(m)
127 (g, m) = CompareVersions('3.3pre', '3.3pre')
128 self.assertFalse(g)
129 self.assertFalse(m)
131 (g, m) = CompareVersions('foobar', 'baz')
132 self.assertFalse(g)
133 self.assertFalse(m)
134 (g, m) = CompareVersions('3.32', 'baz')
135 self.assertFalse(g)
136 self.assertFalse(m)
138 (g, m) = CompareVersions('3.4', '3.3')
139 self.assertTrue(g)
140 self.assertFalse(m)
141 (g, m) = CompareVersions('3.3', '3.4')
142 self.assertFalse(g)
143 self.assertFalse(m)
144 (g, m) = CompareVersions('4.1', '3.33')
145 self.assertTrue(g)
146 self.assertTrue(m)
147 (g, m) = CompareVersions('3.10', '3.1')
148 self.assertTrue(g)
149 self.assertFalse(m)
151 def _AssertProxyInfosEqual(self, pi1, pi2):
152 self.assertEqual(pi1.proxy_type, pi2.proxy_type)
153 self.assertEqual(pi1.proxy_host, pi2.proxy_host)
154 self.assertEqual(pi1.proxy_port, pi2.proxy_port)
155 self.assertEqual(pi1.proxy_rdns, pi2.proxy_rdns)
156 self.assertEqual(pi1.proxy_user, pi2.proxy_user)
157 self.assertEqual(pi1.proxy_pass, pi2.proxy_pass)
159 def test_ProxyInfoFromEnvironmentVar(self):
160 """Tests ProxyInfoFromEnvironmentVar for various cases."""
161 valid_variables = ['http_proxy', 'https_proxy']
162 if not util.IS_WINDOWS:
163 # Dynamically set Windows environment variables are case-insensitive.
164 valid_variables.append('HTTPS_PROXY')
165 # Clear any existing environment variables for the duration of the test.
166 clear_dict = {}
167 for key in valid_variables:
168 clear_dict[key] = None
169 with SetEnvironmentForTest(clear_dict):
170 for env_var in valid_variables:
171 for url_string in ['hostname', 'http://hostname', 'https://hostname']:
172 with SetEnvironmentForTest({env_var: url_string}):
173 self._AssertProxyInfosEqual(
174 util.ProxyInfoFromEnvironmentVar(env_var),
175 httplib2.ProxyInfo(
176 httplib2.socks.PROXY_TYPE_HTTP, 'hostname',
177 443 if env_var.lower().startswith('https') else 80))
178 # Shouldn't populate info for other variables
179 for other_env_var in valid_variables:
180 if other_env_var == env_var: continue
181 self._AssertProxyInfosEqual(
182 util.ProxyInfoFromEnvironmentVar(other_env_var),
183 httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, None, 0))
184 for url_string in ['1.2.3.4:50', 'http://1.2.3.4:50',
185 'https://1.2.3.4:50']:
186 with SetEnvironmentForTest({env_var: url_string}):
187 self._AssertProxyInfosEqual(
188 util.ProxyInfoFromEnvironmentVar(env_var),
189 httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, '1.2.3.4',
190 50))
191 for url_string in ['foo:bar@1.2.3.4:50', 'http://foo:bar@1.2.3.4:50',
192 'https://foo:bar@1.2.3.4:50']:
193 with SetEnvironmentForTest({env_var: url_string}):
194 self._AssertProxyInfosEqual(
195 util.ProxyInfoFromEnvironmentVar(env_var),
196 httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP,
197 '1.2.3.4', 50, proxy_user='foo',
198 proxy_pass='bar'))
199 for url_string in ['bar@1.2.3.4:50', 'http://bar@1.2.3.4:50',
200 'https://bar@1.2.3.4:50']:
201 with SetEnvironmentForTest({env_var: url_string}):
202 self._AssertProxyInfosEqual(
203 util.ProxyInfoFromEnvironmentVar(env_var),
204 httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, '1.2.3.4',
205 50, proxy_pass='bar'))
206 for env_var in ['proxy', 'noproxy', 'garbage']:
207 for url_string in ['1.2.3.4:50', 'http://1.2.3.4:50']:
208 with SetEnvironmentForTest({env_var: url_string}):
209 self._AssertProxyInfosEqual(
210 util.ProxyInfoFromEnvironmentVar(env_var),
211 httplib2.ProxyInfo(httplib2.socks.PROXY_TYPE_HTTP, None, 0))