blob: eebb346e695c4282383aad629e4b72e45bf9b337 [file] [log] [blame]
David Rochberg7c79a812011-01-19 19:24:451#!/usr/bin/python
2
3# Copyright (c) 2011 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 gmerge."""
8
Chris Sosa6c922142013-02-16 01:37:499import mox
Chris Sosa37b217a2011-04-13 21:03:5110import os
David Rochberg7c79a812011-01-19 19:24:4511import unittest
Chris Sosa6c922142013-02-16 01:37:4912import urllib2
David Rochberg7c79a812011-01-19 19:24:4513
Gilad Arnoldabb352e2012-09-23 08:24:2714import gmerge
15
16
David Rochberg7c79a812011-01-19 19:24:4517class Flags(object):
18 def __init__(self, dictionary):
19 self.__dict__.update(dictionary)
20
21
Chris Sosa6c922142013-02-16 01:37:4922class GMergeTest(mox.MoxTestBase):
David Rochberg7c79a812011-01-19 19:24:4523 """Test for gmerge."""
24
25 def setUp(self):
Chris Sosa6c922142013-02-16 01:37:4926 super(GMergeTest, self).setUp()
David Rochberg7c79a812011-01-19 19:24:4527 self.lsb_release_lines = [
28 'CHROMEOS_RELEASE_BOARD=x86-mario\r\n',
29 'CHROMEOS_DEVSERVER=http://localhost:8080/\n']
30
31 def testLsbRelease(self):
Chris Sosa6c922142013-02-16 01:37:4932 """Basic LSB release parsing test."""
33 merger = gmerge.GMerger(None, None)
34 merger.ParseLsbRelease(self.lsb_release_lines)
35 self.assertEqual(merger.board_name, 'x86-mario')
36 self.assertEqual(merger.devserver_url, 'http://localhost:8080/')
37
38 def testLsbReleaseWithFlagsOverride(self):
39 """Board/url values passed in to constructor should override parsed ones."""
40 override_url = 'http://override:8080'
41 override_board = 'override_board'
42 merger = gmerge.GMerger(override_url, override_board)
43 merger.ParseLsbRelease(self.lsb_release_lines)
44 self.assertEqual(merger.board_name, override_board)
45 self.assertEqual(merger.devserver_url, override_url)
46
47 def testLsbReleaseWithMultipleKeyValCopies(self):
48 """Lsb Release should only use the last val for any key=val combo."""
49 override_url = 'http://override:8080'
50 override_board = 'override_board'
51 lsb_release_lines = self.lsb_release_lines + (
52 ['CHROMEOS_RELEASE_BOARD=%s\r\n' % override_board,
53 'CHROMEOS_DEVSERVER=%s\n' % override_url])
54 merger = gmerge.GMerger(None, None)
55 merger.ParseLsbRelease(lsb_release_lines)
56 self.assertEqual(merger.board_name, override_board)
57 self.assertEqual(merger.devserver_url, override_url)
David Rochberg7c79a812011-01-19 19:24:4558
59 def testPostData(self):
Chris Sosa6c922142013-02-16 01:37:4960 """Validate we construct the data url to the devserver correctly."""
61 self.mox.StubOutWithMock(urllib2, 'urlopen')
Chris Sosae66c2652011-04-13 21:55:2562 old_env = os.environ
63 os.environ = {}
Chris Sosa37b217a2011-04-13 21:03:5164 os.environ['USE'] = 'a b c d +e'
David Rochberg7c79a812011-01-19 19:24:4565
Chris Sosa6c922142013-02-16 01:37:4966 merger = gmerge.GMerger(None, None)
67 merger.ParseLsbRelease(self.lsb_release_lines)
68
69 # Expected post request.
70 expected_data = ('use=a+b+c+d+%2Be&board=x86-mario&'
71 'deep=&pkg=package_name&usepkg=&accept_stable=blah')
72
73 mock_object = self.mox.CreateMock(file)
74 urllib2.urlopen(mox.IgnoreArg(), data=expected_data).AndReturn(mock_object)
75 mock_object.read().AndReturn('Build succeeded')
76 mock_object.close()
77 self.mox.ReplayAll()
78 merger.RequestPackageBuild('package_name', False, 'blah', False)
79 self.mox.VerifyAll()
Chris Sosae66c2652011-04-13 21:55:2580 os.environ = old_env
David Rochberg7c79a812011-01-19 19:24:4581
82
83if __name__ == '__main__':
84 unittest.main()