| Index: autoupdate_unittest.py
|
| diff --git a/autoupdate_unittest.py b/autoupdate_unittest.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..d2af440b06282d940459ec0644ad4355a22187c0
|
| --- /dev/null
|
| +++ b/autoupdate_unittest.py
|
| @@ -0,0 +1,137 @@
|
| +#!/usr/bin/python
|
| +
|
| +# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +"""Unit tests for autoupdate.py."""
|
| +
|
| +import mox
|
| +import os
|
| +import unittest
|
| +import web
|
| +
|
| +import autoupdate
|
| +
|
| +_TEST_REQUEST = """
|
| +<client_test xmlns:o="http://www.google.com/update2/request" updaterversion="%(client)s" >
|
| + <o:app version="%(version)s" track="%(track)s" board="%(board)s" />
|
| +</client_test>"""
|
| +
|
| +
|
| +class AutoupdateTest(mox.MoxTestBase):
|
| + def setUp(self):
|
| + mox.MoxTestBase.setUp(self)
|
| + self.mox.StubOutWithMock(autoupdate.Autoupdate, '_GetSize')
|
| + self.mox.StubOutWithMock(autoupdate.Autoupdate, '_GetHash')
|
| + self.mox.StubOutWithMock(autoupdate.Autoupdate, 'GetUpdatePayload')
|
| + self.mox.StubOutWithMock(autoupdate.Autoupdate, '_GetLatestImageDir')
|
| + self.test_board = 'test-board'
|
| + self.build_root = '/src_path/build/images'
|
| + self.latest_dir = '12345_af_12-a1'
|
| + self.latest_verision = '12345_af_12'
|
| + self.static_image_dir = '/tmp/static-dir/'
|
| + self.hostname = 'fake-host'
|
| + self.test_dict = { 'client': 'ChromeOSUpdateEngine-1.0',
|
| + 'version': 'ForcedUpdate',
|
| + 'track': 'unused_var',
|
| + 'board': self.test_board
|
| + }
|
| + self.test_data = _TEST_REQUEST % self.test_dict
|
| + self.forced_image_path = '/path_to_force/chromiumos_image.bin'
|
| + self.hash = 12345
|
| + self.size = 54321
|
| + self.url = 'http://%s/static/update.gz' % self.hostname
|
| + self.payload = 'My payload'
|
| +
|
| + def _DummyAutoupdateConstructor(self):
|
| + """Creates a dummy autoupdater. Used to avoid using constructor."""
|
| + dummy = autoupdate.Autoupdate(root_dir=None,
|
| + static_dir=self.static_image_dir)
|
| + dummy.client_prefix = 'ChromeOSUpdateEngine'
|
| +
|
| + # Set to fool the web.
|
| + web.ctx.host = self.hostname
|
| + return dummy
|
| +
|
| + def testGenerateLatestUpdateImageWithForced(self):
|
| + self.mox.StubOutWithMock(autoupdate.Autoupdate, 'GenerateUpdateImage')
|
| + autoupdate.Autoupdate._GetLatestImageDir(self.test_board).AndReturn(
|
| + '%s/%s/%s' % (self.build_root, self.test_board, self.latest_dir))
|
| + autoupdate.Autoupdate.GenerateUpdateImage(
|
| + '%s/%s/%s/chromiumos_image.bin' % (self.build_root, self.test_board,
|
| + self.latest_dir),
|
| + move_to_static_dir=True,
|
| + static_image_dir=self.static_image_dir).AndReturn(True)
|
| +
|
| + self.mox.ReplayAll()
|
| + au_mock = self._DummyAutoupdateConstructor()
|
| + self.assertTrue(au_mock.GenerateLatestUpdateImage(self.test_board,
|
| + 'ForcedUpdate',
|
| + self.static_image_dir))
|
| + self.mox.VerifyAll()
|
| +
|
| + def testHandleUpdatePingForForcedImage(self):
|
| + self.mox.StubOutWithMock(autoupdate.Autoupdate, 'GenerateUpdateImage')
|
| +
|
| + test_data = _TEST_REQUEST % self.test_dict
|
| +
|
| + autoupdate.Autoupdate.GenerateUpdateImage(
|
| + self.forced_image_path, self.static_image_dir).AndReturn(True)
|
| + autoupdate.Autoupdate._GetHash(os.path.join(
|
| + self.static_image_dir, 'update.gz')).AndReturn(self.hash)
|
| + autoupdate.Autoupdate._GetSize(os.path.join(
|
| + self.static_image_dir, 'update.gz')).AndReturn(self.size)
|
| + autoupdate.Autoupdate.GetUpdatePayload(
|
| + self.hash, self.size, self.url).AndReturn(self.payload)
|
| +
|
| + self.mox.ReplayAll()
|
| + au_mock = self._DummyAutoupdateConstructor()
|
| + au_mock.forced_image = self.forced_image_path
|
| + self.assertEqual(au_mock.HandleUpdatePing(test_data), self.payload)
|
| + self.mox.VerifyAll()
|
| +
|
| + def testHandleUpdatePingForLatestImage(self):
|
| + self.mox.StubOutWithMock(autoupdate.Autoupdate, 'GenerateLatestUpdateImage')
|
| +
|
| + test_data = _TEST_REQUEST % self.test_dict
|
| +
|
| + autoupdate.Autoupdate.GenerateLatestUpdateImage(
|
| + self.test_board, 'ForcedUpdate', self.static_image_dir).AndReturn(True)
|
| + autoupdate.Autoupdate._GetHash(os.path.join(
|
| + self.static_image_dir, 'update.gz')).AndReturn(self.hash)
|
| + autoupdate.Autoupdate._GetSize(os.path.join(
|
| + self.static_image_dir, 'update.gz')).AndReturn(self.size)
|
| + autoupdate.Autoupdate.GetUpdatePayload(
|
| + self.hash, self.size, self.url).AndReturn(self.payload)
|
| +
|
| + self.mox.ReplayAll()
|
| + au_mock = self._DummyAutoupdateConstructor()
|
| + self.assertEqual(au_mock.HandleUpdatePing(test_data), self.payload)
|
| + self.mox.VerifyAll()
|
| +
|
| + def testHandleUpdatePingForArchivedBuild(self):
|
| + self.mox.StubOutWithMock(autoupdate.Autoupdate, 'GenerateImageFromZip')
|
| +
|
| + test_data = _TEST_REQUEST % self.test_dict
|
| +
|
| + autoupdate.Autoupdate.GenerateImageFromZip(
|
| + self.static_image_dir).AndReturn(True)
|
| + autoupdate.Autoupdate._GetHash(os.path.join(
|
| + self.static_image_dir, 'update.gz')).AndReturn(self.hash)
|
| + autoupdate.Autoupdate._GetSize(os.path.join(
|
| + self.static_image_dir, 'update.gz')).AndReturn(self.size)
|
| + autoupdate.Autoupdate.GetUpdatePayload(
|
| + self.hash, self.size,
|
| + 'http://%s/static/archive/update.gz' % self.hostname).AndReturn(
|
| + self.payload)
|
| +
|
| + self.mox.ReplayAll()
|
| + au_mock = self._DummyAutoupdateConstructor()
|
| + au_mock.serve_only = True
|
| + self.assertEqual(au_mock.HandleUpdatePing(test_data), self.payload)
|
| + self.mox.VerifyAll()
|
| +
|
| +
|
| +if __name__ == '__main__':
|
| + unittest.main()
|
|
|