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

Side by Side Diff: bin/ctest_unittest.py

Issue 6717011: Remove au_test_harness code and change symlinks to point to new location (Closed) Base URL: http://git.chromium.org/git/crosutils.git@master
Patch Set: Created 9 years, 9 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « bin/ctest.py ('k') | lib/cros_build_lib.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 #!/usr/bin/python
2 #
3 # Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
4 # Use of this source code is governed by a BSD-style license that can be
5 # found in the LICENSE file.
6
7 """Unit tests for ctest."""
8
9 import mox
10 import os
11 import unittest
12 import urllib
13
14 import ctest
15
16 _TEST_BOOT_DESC = """
17 --arch="x86"
18 --output_dir="/home/chrome-bot/0.8.70.5-a1"
19 --espfs_mountpoint="/home/chrome-bot/0.8.70.5-a1/esp"
20 --enable_rootfs_verification
21 """
22
23 class CrosTestTest(mox.MoxTestBase):
24 """Test class for CTest."""
25
26 def setUp(self):
27 mox.MoxTestBase.setUp(self)
28 self.board = 'test-board'
29 self.channel = 'test-channel'
30 self.version = '1.2.3.4.5'
31 self.revision = '7ghfa9999-12345'
32 self.image_name = 'TestOS-%s-%s' % (self.version, self.revision)
33 self.download_folder = 'test_folder'
34 self.latestbase = 'http://test-latest/TestOS'
35 self.zipbase = 'http://test-zips/archive/TestOS'
36 self.image_url = '%s/%s/%s/%s/%s.zip' % (self.zipbase, self.channel,
37 self.board, self.version,
38 self.image_name)
39 self.test_regex = 'ChromeOS-\d+\.\d+\.\d+\.\d+-.*\.zip'
40
41 def testModifyBootDesc(self):
42 """Tests to make sure we correctly modify a boot desc."""
43 in_chroot_path = ctest.ReinterpretPathForChroot(os.path.abspath(
44 self.download_folder))
45 self.mox.StubOutWithMock(__builtins__, 'open')
46 self.mox.StubOutWithMock(ctest.fileinput, 'input')
47 m_file = self.mox.CreateMock(file)
48
49 mock_file = _TEST_BOOT_DESC.splitlines(True)
50 ctest.fileinput.input('%s/%s' % (os.path.abspath(self.download_folder),
51 'boot.desc'),
52 inplace=1).AndReturn(mock_file)
53
54 m_file.write('\n')
55 m_file.write(' --arch="x86"\n')
56 m_file.write(' --output_dir="%s"\n' % in_chroot_path)
57 m_file.write(' --espfs_mountpoint="%s/%s"\n' % (in_chroot_path, 'esp'))
58 m_file.write(' --enable_rootfs_verification\n')
59
60 self.mox.ReplayAll()
61 ctest.ModifyBootDesc(os.path.abspath(self.download_folder), m_file)
62 self.mox.VerifyAll()
63
64
65 def testGetLatestZipUrl(self):
66 """Test case that tests GetLatestZipUrl with test urls."""
67 self.mox.StubOutWithMock(urllib, 'urlopen')
68 m_file = self.mox.CreateMock(file)
69
70 urllib.urlopen('%s/%s/LATEST-%s' % (self.latestbase, self.channel,
71 self.board)).AndReturn(m_file)
72 m_file.read().AndReturn('%s.bin.gz' % self.image_name)
73 m_file.close()
74
75 self.mox.ReplayAll()
76 self.assertEquals(ctest.GetLatestZipUrl(self.board, self.channel,
77 self.latestbase, self.zipbase),
78 self.image_url)
79 self.mox.VerifyAll()
80
81 def testGetLatestZipFromBadUrl(self):
82 """Tests whether GetLatestZipUrl returns correct url given bad link."""
83 self.mox.StubOutWithMock(urllib, 'urlopen')
84 self.mox.StubOutWithMock(ctest, 'GetNewestLinkFromZipBase')
85 m_file = self.mox.CreateMock(file)
86
87 urllib.urlopen('%s/%s/LATEST-%s' % (self.latestbase, self.channel,
88 self.board)).AndRaise(IOError('Cannot open url.'))
89 ctest.GetNewestLinkFromZipBase(self.board, self.channel,
90 self.zipbase).AndReturn(self.image_url)
91
92 self.mox.ReplayAll()
93 self.assertEquals(ctest.GetLatestZipUrl(self.board, self.channel,
94 self.latestbase, self.zipbase),
95 self.image_url)
96 self.mox.VerifyAll()
97
98 def testGrabZipAndExtractImageUseCached(self):
99 """Test case where cache holds our image."""
100 self.mox.StubOutWithMock(os.path, 'exists')
101 self.mox.StubOutWithMock(__builtins__, 'open')
102 m_file = self.mox.CreateMock(file)
103
104 os.path.exists('%s/%s' % (
105 self.download_folder, 'download_url')).AndReturn(True)
106
107 open('%s/%s' % (self.download_folder, 'download_url')).AndReturn(m_file)
108 m_file.read().AndReturn(self.image_url)
109 m_file.close()
110
111 os.path.exists('%s/%s' % (
112 self.download_folder, ctest._IMAGE_TO_EXTRACT)).AndReturn(True)
113
114 self.mox.ReplayAll()
115 ctest.GrabZipAndExtractImage(self.image_url, self.download_folder,
116 ctest._IMAGE_TO_EXTRACT)
117 self.mox.VerifyAll()
118
119 def CommonDownloadAndExtractImage(self):
120 """Common code to mock downloading image, unzipping it and setting url."""
121 zip_path = os.path.join(self.download_folder, 'image.zip')
122 m_file = self.mox.CreateMock(file)
123
124 ctest.RunCommand(['rm', '-rf', self.download_folder], print_cmd=False)
125 os.mkdir(self.download_folder)
126 urllib.urlretrieve(self.image_url, zip_path)
127 ctest.RunCommand(['unzip', '-d', self.download_folder, zip_path],
128 print_cmd=False, error_message=mox.IgnoreArg())
129
130 ctest.ModifyBootDesc(self.download_folder)
131
132 open('%s/%s' % (self.download_folder, 'download_url'),
133 'w+').AndReturn(m_file)
134 m_file.write(self.image_url)
135 m_file.close()
136
137 self.mox.ReplayAll()
138 ctest.GrabZipAndExtractImage(self.image_url, self.download_folder,
139 ctest._IMAGE_TO_EXTRACT)
140 self.mox.VerifyAll()
141
142 def testGrabZipAndExtractImageNoCache(self):
143 """Test case where download_url doesn't exist."""
144 self.mox.StubOutWithMock(os.path, 'exists')
145 self.mox.StubOutWithMock(os, 'mkdir')
146 self.mox.StubOutWithMock(__builtins__, 'open')
147 self.mox.StubOutWithMock(ctest, 'RunCommand')
148 self.mox.StubOutWithMock(urllib, 'urlretrieve')
149 self.mox.StubOutWithMock(ctest, 'ModifyBootDesc')
150
151 m_file = self.mox.CreateMock(file)
152
153 os.path.exists('%s/%s' % (
154 self.download_folder, 'download_url')).AndReturn(False)
155
156 self.CommonDownloadAndExtractImage()
157
158
159 def testGrabZipAndExtractImageWrongCache(self):
160 """Test case where download_url exists but doesn't match our url."""
161 self.mox.StubOutWithMock(os.path, 'exists')
162 self.mox.StubOutWithMock(os, 'mkdir')
163 self.mox.StubOutWithMock(__builtins__, 'open')
164 self.mox.StubOutWithMock(ctest, 'RunCommand')
165 self.mox.StubOutWithMock(urllib, 'urlretrieve')
166 self.mox.StubOutWithMock(ctest, 'ModifyBootDesc')
167
168 m_file = self.mox.CreateMock(file)
169
170 os.path.exists('%s/%s' % (
171 self.download_folder, 'download_url')).AndReturn(True)
172
173 open('%s/%s' % (self.download_folder, 'download_url')).AndReturn(m_file)
174 m_file.read().AndReturn(self.image_url)
175 m_file.close()
176
177 os.path.exists('%s/%s' % (
178 self.download_folder, ctest._IMAGE_TO_EXTRACT)).AndReturn(False)
179
180 self.CommonDownloadAndExtractImage()
181
182 def testGetLatestLinkFromPage(self):
183 """Tests whether we get the latest link from a url given a regex."""
184 test_url = 'test_url'
185 test_html = """
186 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
187 <html>
188 <body>
189 <h1>Test Index</h1>
190 <a href="ZsomeCruft">Cruft</a>
191 <a href="YotherCruft">Cruft</a>
192 <a href="ChromeOS-0.9.12.4-blahblah.zip">testlink1/</a>
193 <a href="ChromeOS-0.9.12.4-blahblah.zip.other/">testlink2/</a>
194 <a href="ChromeOS-Factory-0.9.12.4-blahblah.zip/">testlink3/</a>
195 </body></html>
196 """
197 self.mox.StubOutWithMock(urllib, 'urlopen')
198 m_file = self.mox.CreateMock(file)
199
200 urllib.urlopen(test_url).AndReturn(m_file)
201 m_file.read().AndReturn(test_html)
202 m_file.close()
203
204 self.mox.ReplayAll()
205 latest_link = ctest.GetLatestLinkFromPage(test_url, regex=self.test_regex)
206 self.assertTrue(latest_link == 'ChromeOS-0.9.12.4-blahblah.zip')
207 self.mox.VerifyAll()
208
209
210 class HTMLDirectoryParserTest(unittest.TestCase):
211 """Test class for HTMLDirectoryParser."""
212
213 def setUp(self):
214 self.test_regex = '\d+\.\d+\.\d+\.\d+/'
215
216 def testHandleStarttagGood(self):
217 parser = ctest.HTMLDirectoryParser(regex=self.test_regex)
218 parser.handle_starttag('a', [('href', '0.9.74.1/')])
219 self.assertTrue('0.9.74.1' in parser.link_list)
220
221 def testHandleStarttagBad(self):
222 parser = ctest.HTMLDirectoryParser(regex=self.test_regex)
223 parser.handle_starttag('a', [('href', 'ZsomeCruft/')])
224 self.assertTrue('ZsomeCruft' not in parser.link_list)
225
226
227 if __name__ == '__main__':
228 unittest.main()
OLDNEW
« no previous file with comments | « bin/ctest.py ('k') | lib/cros_build_lib.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698