blob: 688695e9170378461f11f57e3fbcfb150d0924d1 [file] [log] [blame]
Chris Sosa0356d3b2010-09-16 15:46:22 -07001#!/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 autoupdate.py."""
8
9import mox
10import os
11import unittest
12import web
13
14import autoupdate
15
16_TEST_REQUEST = """
17<client_test xmlns:o="http://www.google.com/update2/request" updaterversion="%(client)s" >
18 <o:app version="%(version)s" track="%(track)s" board="%(board)s" />
Chris Sosaa387a872010-09-29 11:51:36 -070019 <o:updatecheck />
Chris Sosa0356d3b2010-09-16 15:46:22 -070020</client_test>"""
21
22
23class AutoupdateTest(mox.MoxTestBase):
24 def setUp(self):
25 mox.MoxTestBase.setUp(self)
26 self.mox.StubOutWithMock(autoupdate.Autoupdate, '_GetSize')
27 self.mox.StubOutWithMock(autoupdate.Autoupdate, '_GetHash')
Chris Sosaa387a872010-09-29 11:51:36 -070028 self.mox.StubOutWithMock(autoupdate.Autoupdate, '_GetSHA256')
Chris Sosa0356d3b2010-09-16 15:46:22 -070029 self.mox.StubOutWithMock(autoupdate.Autoupdate, 'GetUpdatePayload')
30 self.mox.StubOutWithMock(autoupdate.Autoupdate, '_GetLatestImageDir')
31 self.test_board = 'test-board'
32 self.build_root = '/src_path/build/images'
33 self.latest_dir = '12345_af_12-a1'
34 self.latest_verision = '12345_af_12'
35 self.static_image_dir = '/tmp/static-dir/'
36 self.hostname = 'fake-host'
37 self.test_dict = { 'client': 'ChromeOSUpdateEngine-1.0',
38 'version': 'ForcedUpdate',
39 'track': 'unused_var',
40 'board': self.test_board
41 }
42 self.test_data = _TEST_REQUEST % self.test_dict
43 self.forced_image_path = '/path_to_force/chromiumos_image.bin'
44 self.hash = 12345
45 self.size = 54321
46 self.url = 'http://%s/static/update.gz' % self.hostname
47 self.payload = 'My payload'
Chris Sosaa387a872010-09-29 11:51:36 -070048 self.sha256 = 'SHA LA LA'
Chris Sosa0356d3b2010-09-16 15:46:22 -070049
50 def _DummyAutoupdateConstructor(self):
51 """Creates a dummy autoupdater. Used to avoid using constructor."""
52 dummy = autoupdate.Autoupdate(root_dir=None,
53 static_dir=self.static_image_dir)
54 dummy.client_prefix = 'ChromeOSUpdateEngine'
55
56 # Set to fool the web.
57 web.ctx.host = self.hostname
58 return dummy
59
60 def testGenerateLatestUpdateImageWithForced(self):
61 self.mox.StubOutWithMock(autoupdate.Autoupdate, 'GenerateUpdateImage')
62 autoupdate.Autoupdate._GetLatestImageDir(self.test_board).AndReturn(
63 '%s/%s/%s' % (self.build_root, self.test_board, self.latest_dir))
64 autoupdate.Autoupdate.GenerateUpdateImage(
65 '%s/%s/%s/chromiumos_image.bin' % (self.build_root, self.test_board,
66 self.latest_dir),
67 move_to_static_dir=True,
68 static_image_dir=self.static_image_dir).AndReturn(True)
69
70 self.mox.ReplayAll()
71 au_mock = self._DummyAutoupdateConstructor()
72 self.assertTrue(au_mock.GenerateLatestUpdateImage(self.test_board,
73 'ForcedUpdate',
74 self.static_image_dir))
75 self.mox.VerifyAll()
76
77 def testHandleUpdatePingForForcedImage(self):
78 self.mox.StubOutWithMock(autoupdate.Autoupdate, 'GenerateUpdateImage')
79
80 test_data = _TEST_REQUEST % self.test_dict
81
82 autoupdate.Autoupdate.GenerateUpdateImage(
Chris Sosaa387a872010-09-29 11:51:36 -070083 self.forced_image_path,
84 move_to_static_dir=True,
85 static_image_dir=self.static_image_dir).AndReturn(True)
Chris Sosa0356d3b2010-09-16 15:46:22 -070086 autoupdate.Autoupdate._GetHash(os.path.join(
87 self.static_image_dir, 'update.gz')).AndReturn(self.hash)
Chris Sosaa387a872010-09-29 11:51:36 -070088 autoupdate.Autoupdate._GetSHA256(os.path.join(
89 self.static_image_dir, 'update.gz')).AndReturn(self.sha256)
Chris Sosa0356d3b2010-09-16 15:46:22 -070090 autoupdate.Autoupdate._GetSize(os.path.join(
91 self.static_image_dir, 'update.gz')).AndReturn(self.size)
92 autoupdate.Autoupdate.GetUpdatePayload(
Chris Sosaa387a872010-09-29 11:51:36 -070093 self.hash, self.sha256, self.size, self.url).AndReturn(self.payload)
Chris Sosa0356d3b2010-09-16 15:46:22 -070094
95 self.mox.ReplayAll()
96 au_mock = self._DummyAutoupdateConstructor()
97 au_mock.forced_image = self.forced_image_path
98 self.assertEqual(au_mock.HandleUpdatePing(test_data), self.payload)
99 self.mox.VerifyAll()
100
101 def testHandleUpdatePingForLatestImage(self):
102 self.mox.StubOutWithMock(autoupdate.Autoupdate, 'GenerateLatestUpdateImage')
103
104 test_data = _TEST_REQUEST % self.test_dict
105
106 autoupdate.Autoupdate.GenerateLatestUpdateImage(
107 self.test_board, 'ForcedUpdate', self.static_image_dir).AndReturn(True)
108 autoupdate.Autoupdate._GetHash(os.path.join(
109 self.static_image_dir, 'update.gz')).AndReturn(self.hash)
Chris Sosaa387a872010-09-29 11:51:36 -0700110 autoupdate.Autoupdate._GetSHA256(os.path.join(
111 self.static_image_dir, 'update.gz')).AndReturn(self.sha256)
Chris Sosa0356d3b2010-09-16 15:46:22 -0700112 autoupdate.Autoupdate._GetSize(os.path.join(
113 self.static_image_dir, 'update.gz')).AndReturn(self.size)
114 autoupdate.Autoupdate.GetUpdatePayload(
Chris Sosaa387a872010-09-29 11:51:36 -0700115 self.hash, self.sha256, self.size, self.url).AndReturn(self.payload)
Chris Sosa0356d3b2010-09-16 15:46:22 -0700116
117 self.mox.ReplayAll()
118 au_mock = self._DummyAutoupdateConstructor()
119 self.assertEqual(au_mock.HandleUpdatePing(test_data), self.payload)
120 self.mox.VerifyAll()
121
122 def testHandleUpdatePingForArchivedBuild(self):
123 self.mox.StubOutWithMock(autoupdate.Autoupdate, 'GenerateImageFromZip')
124
125 test_data = _TEST_REQUEST % self.test_dict
126
127 autoupdate.Autoupdate.GenerateImageFromZip(
128 self.static_image_dir).AndReturn(True)
129 autoupdate.Autoupdate._GetHash(os.path.join(
130 self.static_image_dir, 'update.gz')).AndReturn(self.hash)
Chris Sosaa387a872010-09-29 11:51:36 -0700131 autoupdate.Autoupdate._GetSHA256(os.path.join(
132 self.static_image_dir, 'update.gz')).AndReturn(self.sha256)
Chris Sosa0356d3b2010-09-16 15:46:22 -0700133 autoupdate.Autoupdate._GetSize(os.path.join(
134 self.static_image_dir, 'update.gz')).AndReturn(self.size)
135 autoupdate.Autoupdate.GetUpdatePayload(
Chris Sosaa387a872010-09-29 11:51:36 -0700136 self.hash, self.sha256, self.size,
Chris Sosa0356d3b2010-09-16 15:46:22 -0700137 'http://%s/static/archive/update.gz' % self.hostname).AndReturn(
138 self.payload)
139
140 self.mox.ReplayAll()
141 au_mock = self._DummyAutoupdateConstructor()
142 au_mock.serve_only = True
Chris Sosaa387a872010-09-29 11:51:36 -0700143 au_mock.static_urlbase = 'http://%s/static/archive' % self.hostname
Chris Sosa0356d3b2010-09-16 15:46:22 -0700144 self.assertEqual(au_mock.HandleUpdatePing(test_data), self.payload)
145 self.mox.VerifyAll()
146
147
148if __name__ == '__main__':
149 unittest.main()