blob: eebb346e695c4282383aad629e4b72e45bf9b337 [file] [log] [blame]
David Rochberg7c79a812011-01-19 14:24:45 -05001#!/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-15 17:37:49 -08009import mox
Chris Sosa37b217a2011-04-13 14:03:51 -070010import os
David Rochberg7c79a812011-01-19 14:24:45 -050011import unittest
Chris Sosa6c922142013-02-15 17:37:49 -080012import urllib2
David Rochberg7c79a812011-01-19 14:24:45 -050013
Gilad Arnoldabb352e2012-09-23 01:24:27 -070014import gmerge
15
16
David Rochberg7c79a812011-01-19 14:24:45 -050017class Flags(object):
18 def __init__(self, dictionary):
19 self.__dict__.update(dictionary)
20
21
Chris Sosa6c922142013-02-15 17:37:49 -080022class GMergeTest(mox.MoxTestBase):
David Rochberg7c79a812011-01-19 14:24:45 -050023 """Test for gmerge."""
24
25 def setUp(self):
Chris Sosa6c922142013-02-15 17:37:49 -080026 super(GMergeTest, self).setUp()
David Rochberg7c79a812011-01-19 14:24:45 -050027 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-15 17:37:49 -080032 """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 14:24:45 -050058
59 def testPostData(self):
Chris Sosa6c922142013-02-15 17:37:49 -080060 """Validate we construct the data url to the devserver correctly."""
61 self.mox.StubOutWithMock(urllib2, 'urlopen')
Chris Sosae66c2652011-04-13 14:55:25 -070062 old_env = os.environ
63 os.environ = {}
Chris Sosa37b217a2011-04-13 14:03:51 -070064 os.environ['USE'] = 'a b c d +e'
David Rochberg7c79a812011-01-19 14:24:45 -050065
Chris Sosa6c922142013-02-15 17:37:49 -080066 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 14:55:25 -070080 os.environ = old_env
David Rochberg7c79a812011-01-19 14:24:45 -050081
82
83if __name__ == '__main__':
84 unittest.main()