blob: 39a3d772d816a0d3eeda577ba6f70a42cbed2866 [file] [log] [blame]
[email protected]45d8db02011-03-31 20:43:561#!/usr/bin/env python
[email protected]99ac1c52012-01-16 14:52:122# Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]d5800f12009-11-12 20:03:433# Use of this source code is governed by a BSD-style license that can be
4# found in the LICENSE file.
5
[email protected]fae707b2011-09-15 18:57:586import os
[email protected]d5800f12009-11-12 20:03:437import StringIO
[email protected]428342a2011-11-10 15:46:338import sys
[email protected]d5800f12009-11-12 20:03:439
[email protected]428342a2011-11-10 15:46:3310sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
11
[email protected]0927b7e2011-11-11 16:06:2212from testing_support.super_mox import SuperMoxTestBase
13from testing_support import trial_dir
[email protected]fae707b2011-09-15 18:57:5814
[email protected]ba551772010-02-03 18:21:4215import gclient_utils
[email protected]fae707b2011-09-15 18:57:5816import subprocess2
[email protected]ba551772010-02-03 18:21:4217
[email protected]9a2f37e2009-12-19 16:03:2818
[email protected]399318e2010-08-17 15:30:0119class GclientUtilBase(SuperMoxTestBase):
20 def setUp(self):
21 super(GclientUtilBase, self).setUp()
22 gclient_utils.sys.stdout.flush = lambda: None
[email protected]fae707b2011-09-15 18:57:5823 self.mox.StubOutWithMock(subprocess2, 'Popen')
24 self.mox.StubOutWithMock(subprocess2, 'communicate')
[email protected]399318e2010-08-17 15:30:0125
26
[email protected]17d01792010-09-01 18:07:1027class CheckCallAndFilterTestCase(GclientUtilBase):
[email protected]dd218e52010-08-23 13:02:4128 class ProcessIdMock(object):
29 def __init__(self, test_string):
30 self.stdout = StringIO.StringIO(test_string)
[email protected]2fd6c3f2013-05-03 21:57:5531 self.pid = 9284
[email protected]f2d7d6b2013-10-17 20:41:4332 # pylint: disable=R0201
[email protected]dd218e52010-08-23 13:02:4133 def wait(self):
[email protected]f2d7d6b2013-10-17 20:41:4334 return 0
[email protected]dd218e52010-08-23 13:02:4135
[email protected]2b9aa8e2010-08-25 20:01:4236 def _inner(self, args, test_string):
37 cwd = 'bleh'
[email protected]559c3f82010-08-23 19:26:0838 gclient_utils.sys.stdout.write(
39 '\n________ running \'boo foo bar\' in \'bleh\'\n')
[email protected]d5800f12009-11-12 20:03:4340 for i in test_string:
41 gclient_utils.sys.stdout.write(i)
[email protected]428342a2011-11-10 15:46:3342 # pylint: disable=E1101
[email protected]fae707b2011-09-15 18:57:5843 subprocess2.Popen(
[email protected]2b9aa8e2010-08-25 20:01:4244 args,
45 cwd=cwd,
[email protected]fae707b2011-09-15 18:57:5846 stdout=subprocess2.PIPE,
47 stderr=subprocess2.STDOUT,
[email protected]dd218e52010-08-23 13:02:4148 bufsize=0).AndReturn(self.ProcessIdMock(test_string))
49
[email protected]f2d7d6b2013-10-17 20:41:4350 os.getcwd()
[email protected]d5800f12009-11-12 20:03:4351 self.mox.ReplayAll()
[email protected]dd218e52010-08-23 13:02:4152 compiled_pattern = gclient_utils.re.compile(r'a(.*)b')
[email protected]d5800f12009-11-12 20:03:4353 line_list = []
54 capture_list = []
55 def FilterLines(line):
56 line_list.append(line)
[email protected]17d01792010-09-01 18:07:1057 assert isinstance(line, str), type(line)
[email protected]d5800f12009-11-12 20:03:4358 match = compiled_pattern.search(line)
59 if match:
60 capture_list.append(match.group(1))
[email protected]17d01792010-09-01 18:07:1061 gclient_utils.CheckCallAndFilterAndHeader(
62 args, cwd=cwd, always=True, filter_fn=FilterLines)
[email protected]d5800f12009-11-12 20:03:4363 self.assertEquals(line_list, ['ahah', 'accb', 'allo', 'addb'])
64 self.assertEquals(capture_list, ['cc', 'dd'])
65
[email protected]17d01792010-09-01 18:07:1066 def testCheckCallAndFilter(self):
[email protected]2b9aa8e2010-08-25 20:01:4267 args = ['boo', 'foo', 'bar']
[email protected]dd218e52010-08-23 13:02:4168 test_string = 'ahah\naccb\nallo\naddb\n'
[email protected]2b9aa8e2010-08-25 20:01:4269 self._inner(args, test_string)
[email protected]dd057f32010-09-20 19:33:3170 self.checkstdout('\n________ running \'boo foo bar\' in \'bleh\'\n'
71 'ahah\naccb\nallo\naddb\n\n'
[email protected]bf38a7e2010-12-14 18:15:5472 '________ running \'boo foo bar\' in \'bleh\'\nahah\naccb\nallo\naddb'
73 '\n')
[email protected]dd218e52010-08-23 13:02:4174
75 def testNoLF(self):
[email protected]17d01792010-09-01 18:07:1076 # Exactly as testCheckCallAndFilterAndHeader without trailing \n
[email protected]2b9aa8e2010-08-25 20:01:4277 args = ['boo', 'foo', 'bar']
[email protected]dd218e52010-08-23 13:02:4178 test_string = 'ahah\naccb\nallo\naddb'
[email protected]2b9aa8e2010-08-25 20:01:4279 self._inner(args, test_string)
[email protected]dd057f32010-09-20 19:33:3180 self.checkstdout('\n________ running \'boo foo bar\' in \'bleh\'\n'
81 'ahah\naccb\nallo\naddb\n'
82 '________ running \'boo foo bar\' in \'bleh\'\nahah\naccb\nallo\naddb')
[email protected]dd218e52010-08-23 13:02:4183
[email protected]d5800f12009-11-12 20:03:4384
[email protected]399318e2010-08-17 15:30:0185class SplitUrlRevisionTestCase(GclientUtilBase):
[email protected]ac915bb2009-11-13 17:03:0186 def testSSHUrl(self):
87 url = "ssh://[email protected]/test.git"
88 rev = "ac345e52dc"
89 out_url, out_rev = gclient_utils.SplitUrlRevision(url)
90 self.assertEquals(out_rev, None)
91 self.assertEquals(out_url, url)
92 out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev))
93 self.assertEquals(out_rev, rev)
94 self.assertEquals(out_url, url)
95 url = "ssh://example.com/test.git"
96 out_url, out_rev = gclient_utils.SplitUrlRevision(url)
97 self.assertEquals(out_rev, None)
98 self.assertEquals(out_url, url)
99 out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev))
100 self.assertEquals(out_rev, rev)
101 self.assertEquals(out_url, url)
[email protected]a4d60f92009-11-18 19:34:08102 url = "ssh://example.com/git/test.git"
103 out_url, out_rev = gclient_utils.SplitUrlRevision(url)
104 self.assertEquals(out_rev, None)
105 self.assertEquals(out_url, url)
106 out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev))
107 self.assertEquals(out_rev, rev)
108 self.assertEquals(out_url, url)
[email protected]b9f2f622009-11-19 23:45:35109 rev = "test-stable"
110 out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev))
111 self.assertEquals(out_rev, rev)
112 self.assertEquals(out_url, url)
[email protected]78b8cd12010-10-26 12:47:07113 url = "ssh://[email protected]/~/test.git"
114 out_url, out_rev = gclient_utils.SplitUrlRevision(url)
115 self.assertEquals(out_rev, None)
116 self.assertEquals(out_url, url)
117 out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev))
118 self.assertEquals(out_rev, rev)
119 self.assertEquals(out_url, url)
120 url = "ssh://[email protected]/~username/test.git"
121 out_url, out_rev = gclient_utils.SplitUrlRevision(url)
122 self.assertEquals(out_rev, None)
123 self.assertEquals(out_url, url)
124 out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev))
125 self.assertEquals(out_rev, rev)
126 self.assertEquals(out_url, url)
[email protected]f1eccaf2014-04-11 15:51:33127 url = "[email protected]:dart-lang/spark.git"
128 out_url, out_rev = gclient_utils.SplitUrlRevision(url)
129 self.assertEquals(out_rev, None)
130 self.assertEquals(out_url, url)
131 out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev))
132 self.assertEquals(out_rev, rev)
133 self.assertEquals(out_url, url)
[email protected]ac915bb2009-11-13 17:03:01134
135 def testSVNUrl(self):
136 url = "svn://example.com/test"
137 rev = "ac345e52dc"
138 out_url, out_rev = gclient_utils.SplitUrlRevision(url)
139 self.assertEquals(out_rev, None)
140 self.assertEquals(out_url, url)
141 out_url, out_rev = gclient_utils.SplitUrlRevision("%s@%s" % (url, rev))
142 self.assertEquals(out_rev, rev)
143 self.assertEquals(out_url, url)
144
145
[email protected]f9040722011-03-09 14:47:51146class GClientUtilsTest(trial_dir.TestCase):
147 def testHardToDelete(self):
148 # Use the fact that tearDown will delete the directory to make it hard to do
149 # so.
150 l1 = os.path.join(self.root_dir, 'l1')
151 l2 = os.path.join(l1, 'l2')
152 l3 = os.path.join(l2, 'l3')
153 f3 = os.path.join(l3, 'f3')
154 os.mkdir(l1)
155 os.mkdir(l2)
156 os.mkdir(l3)
157 gclient_utils.FileWrite(f3, 'foo')
158 os.chmod(f3, 0)
159 os.chmod(l3, 0)
160 os.chmod(l2, 0)
161 os.chmod(l1, 0)
162
[email protected]eb5edbc2012-01-16 17:03:28163 def testUpgradeToHttps(self):
164 values = [
165 ['', ''],
166 [None, None],
167 ['foo', 'https://foo'],
168 ['http://foo', 'https://foo'],
169 ['foo/', 'https://foo/'],
170 ['ssh-svn://foo', 'ssh-svn://foo'],
171 ['ssh-svn://foo/bar/', 'ssh-svn://foo/bar/'],
[email protected]07d44392012-09-12 16:59:22172 ['codereview.chromium.org', 'https://codereview.chromium.org'],
173 ['codereview.chromium.org/', 'https://codereview.chromium.org/'],
[email protected]626e77d2014-03-13 01:05:58174 ['http://foo:10000', 'http://foo:10000'],
175 ['http://foo:10000/bar', 'http://foo:10000/bar'],
176 ['foo:10000', 'http://foo:10000'],
[email protected]eb5edbc2012-01-16 17:03:28177 ['foo:', 'https://foo:'],
178 ]
179 for content, expected in values:
180 self.assertEquals(
181 expected, gclient_utils.UpgradeToHttps(content))
182
[email protected]99ac1c52012-01-16 14:52:12183 def testParseCodereviewSettingsContent(self):
[email protected]eb5edbc2012-01-16 17:03:28184 values = [
185 ['# bleh\n', {}],
186 ['\t# foo : bar\n', {}],
187 ['Foo:bar', {'Foo': 'bar'}],
188 ['Foo:bar:baz\n', {'Foo': 'bar:baz'}],
189 [' Foo : bar ', {'Foo': 'bar'}],
190 [' Foo : bar \n', {'Foo': 'bar'}],
191 ['a:b\n\rc:d\re:f', {'a': 'b', 'c': 'd', 'e': 'f'}],
192 ['an_url:http://value/', {'an_url': 'http://value/'}],
193 [
194 'CODE_REVIEW_SERVER : http://r/s',
195 {'CODE_REVIEW_SERVER': 'https://r/s'}
196 ],
197 ['VIEW_VC:http://r/s', {'VIEW_VC': 'https://r/s'}],
198 ]
199 for content, expected in values:
200 self.assertEquals(
201 expected, gclient_utils.ParseCodereviewSettingsContent(content))
[email protected]99ac1c52012-01-16 14:52:12202
[email protected]f9040722011-03-09 14:47:51203
[email protected]d5800f12009-11-12 20:03:43204if __name__ == '__main__':
205 import unittest
206 unittest.main()
207
208# vim: ts=2:sw=2:tw=80:et: