Revert "TEST=run minimomaha server. Confirm identical tolast working revision."
This reverts commit 723f326e7549cb07e4b549d6961f5e7c6cbd4780.
BUG=
TEST=Tested with validate_factory_config and by using the factory install process with test images.
Review URL: http://codereview.chromium.org/3460003
Change-Id: I0087a46385fbb24c22d4ec4ae88096526e513ee9
diff --git a/autoupdate_unittest.py b/autoupdate_unittest.py
new file mode 100755
index 0000000..d2af440
--- /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()