blob: 1a2c73bec82f0c6bfd46b4fa0f4ee69532c79392 [file] [log] [blame]
Luis Hector Chaveza1518052018-06-14 08:19:34 -07001#!/usr/bin/env python2
2# -*- coding: utf-8 -*-
Chris Sosa0356d3b2010-09-16 15:46:22 -07003# 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
Don Garrettfb15e322016-06-21 19:12:08 -07009from __future__ import print_function
10
Dale Curtisc9aaf3a2011-08-09 15:47:40 -070011import json
Chris Sosa0356d3b2010-09-16 15:46:22 -070012import os
Chris Sosa6a3697f2013-01-29 16:44:43 -080013import shutil
Chris Sosa7c931362010-10-11 19:49:01 -070014import socket
joychen121fc9b2013-08-02 14:30:30 -070015import tempfile
Chris Sosa0356d3b2010-09-16 15:46:22 -070016import unittest
Chris Sosa0356d3b2010-09-16 15:46:22 -070017
Gilad Arnoldabb352e2012-09-23 01:24:27 -070018import cherrypy
19import mox
20
Chris Sosa0356d3b2010-09-16 15:46:22 -070021import autoupdate
Gilad Arnold55a2a372012-10-02 09:46:32 -070022import common_util
joychen7c2054a2013-07-25 11:14:07 -070023import devserver_constants as constants
joychen121fc9b2013-08-02 14:30:30 -070024import xbuddy
Chris Sosa0356d3b2010-09-16 15:46:22 -070025
Amin Hassani8d718d12019-06-02 21:28:39 -070026from nebraska import nebraska
Gilad Arnoldabb352e2012-09-23 01:24:27 -070027
Chris Sosa0356d3b2010-09-16 15:46:22 -070028
Amin Hassani8d718d12019-06-02 21:28:39 -070029_TEST_REQUEST = """<?xml version="1.0" encoding="UTF-8"?>
30<request protocol="3.0" updater="ChromeOSUpdateEngine" updaterversion="0.1.0.0">
31 <app appid="test-appid" version="%(version)s" track="%(track)s"
32 board="%(board)s" hardware_class="%(hwclass)s">
33 <updatecheck />
34 </app>
35</request>"""
Chris Sosa4b951602014-04-09 20:26:07 -070036
Chris Sosa6a3697f2013-01-29 16:44:43 -080037#pylint: disable=W0212
Chris Sosa0356d3b2010-09-16 15:46:22 -070038class AutoupdateTest(mox.MoxTestBase):
Chris Sosa4b951602014-04-09 20:26:07 -070039 """Tests for the autoupdate.Autoupdate class."""
40
Chris Sosa0356d3b2010-09-16 15:46:22 -070041 def setUp(self):
42 mox.MoxTestBase.setUp(self)
Chris Sosa7c931362010-10-11 19:49:01 -070043 self.port = 8080
Chris Sosa0356d3b2010-09-16 15:46:22 -070044 self.test_board = 'test-board'
joychen121fc9b2013-08-02 14:30:30 -070045 self.build_root = tempfile.mkdtemp('autoupdate_build_root')
Chris Sosa0356d3b2010-09-16 15:46:22 -070046 self.latest_dir = '12345_af_12-a1'
47 self.latest_verision = '12345_af_12'
joychen121fc9b2013-08-02 14:30:30 -070048 self.static_image_dir = tempfile.mkdtemp('autoupdate_static_dir')
Chris Sosa7c931362010-10-11 19:49:01 -070049 self.hostname = '%s:%s' % (socket.gethostname(), self.port)
Dale Curtisc9aaf3a2011-08-09 15:47:40 -070050 self.test_dict = {
Dale Curtisc9aaf3a2011-08-09 15:47:40 -070051 'version': 'ForcedUpdate',
Chris Sosa4b951602014-04-09 20:26:07 -070052 'track': 'test-channel',
Dale Curtisc9aaf3a2011-08-09 15:47:40 -070053 'board': self.test_board,
Amin Hassani8d718d12019-06-02 21:28:39 -070054 'hwclass': 'test-hardware-class',
Dale Curtisc9aaf3a2011-08-09 15:47:40 -070055 }
Chris Sosa0356d3b2010-09-16 15:46:22 -070056 self.test_data = _TEST_REQUEST % self.test_dict
Chris Sosa0356d3b2010-09-16 15:46:22 -070057 self.payload = 'My payload'
Chris Sosa54555862010-10-25 17:26:17 -070058 cherrypy.request.base = 'http://%s' % self.hostname
joychen121fc9b2013-08-02 14:30:30 -070059 common_util.MkDirP(self.static_image_dir)
60 self._xbuddy = xbuddy.XBuddy(False,
joychen121fc9b2013-08-02 14:30:30 -070061 static_dir=self.static_image_dir)
62 self.mox.StubOutWithMock(xbuddy.XBuddy, '_GetArtifact')
Chris Sosa6a3697f2013-01-29 16:44:43 -080063
64 def tearDown(self):
joychen121fc9b2013-08-02 14:30:30 -070065 shutil.rmtree(self.build_root)
Chris Sosa6a3697f2013-01-29 16:44:43 -080066 shutil.rmtree(self.static_image_dir)
Chris Sosa54555862010-10-25 17:26:17 -070067
Gilad Arnold0c9c8602012-10-02 23:58:58 -070068 def _DummyAutoupdateConstructor(self, **kwargs):
Chris Sosa0356d3b2010-09-16 15:46:22 -070069 """Creates a dummy autoupdater. Used to avoid using constructor."""
joychen121fc9b2013-08-02 14:30:30 -070070 dummy = autoupdate.Autoupdate(self._xbuddy,
Chris Sosa7c931362010-10-11 19:49:01 -070071 static_dir=self.static_image_dir,
Gilad Arnold0c9c8602012-10-02 23:58:58 -070072 **kwargs)
Chris Sosa0356d3b2010-09-16 15:46:22 -070073 return dummy
74
Don Garrett0ad09372010-12-06 16:20:30 -080075 def testChangeUrlPort(self):
76 r = autoupdate._ChangeUrlPort('http://fuzzy:8080/static', 8085)
77 self.assertEqual(r, 'http://fuzzy:8085/static')
78
79 r = autoupdate._ChangeUrlPort('http://fuzzy/static', 8085)
80 self.assertEqual(r, 'http://fuzzy:8085/static')
81
82 r = autoupdate._ChangeUrlPort('ftp://fuzzy/static', 8085)
83 self.assertEqual(r, 'ftp://fuzzy:8085/static')
84
85 r = autoupdate._ChangeUrlPort('ftp://fuzzy', 8085)
86 self.assertEqual(r, 'ftp://fuzzy:8085')
87
Dale Curtisc9aaf3a2011-08-09 15:47:40 -070088 def testHandleHostInfoPing(self):
89 au_mock = self._DummyAutoupdateConstructor()
90 self.assertRaises(AssertionError, au_mock.HandleHostInfoPing, None)
91
Gilad Arnold286a0062012-01-12 13:47:02 -080092 # Setup fake host_infos entry and ensure it comes back to us in one piece.
Dale Curtisc9aaf3a2011-08-09 15:47:40 -070093 test_ip = '1.2.3.4'
Gilad Arnold286a0062012-01-12 13:47:02 -080094 au_mock.host_infos.GetInitHostInfo(test_ip).attrs = self.test_dict
Dale Curtisc9aaf3a2011-08-09 15:47:40 -070095 self.assertEqual(
96 json.loads(au_mock.HandleHostInfoPing(test_ip)), self.test_dict)
97
Dale Curtisc9aaf3a2011-08-09 15:47:40 -070098
Gilad Arnoldc65330c2012-09-20 15:17:48 -070099if __name__ == '__main__':
100 unittest.main()