Allow easy gmerge overrides for board and devserver_url.
Right now, we only use what's in /etc/lsb-release for gmerge
settings. This is fine for a developer, but now with dev_install
fixed in R27, gmerge has become very useful for devs in dev mode.
The /usr/local override specifically has been long wanted.
Also did a little refactoring and fixed some pylint warnings.
BUG=chromium-os:37782
TEST=Ran it on a stumpy Chrome OS machine after dev_install and using
local workstation to build and install screen w/without options.
Change-Id: Ie1bac164bc8a2e3028bfa449bdbeba85e8bec66a
Reviewed-on: https://gerrit.chromium.org/gerrit/43463
Commit-Queue: Chris Sosa <sosa@chromium.org>
Reviewed-by: Chris Sosa <sosa@chromium.org>
Tested-by: Chris Sosa <sosa@chromium.org>
diff --git a/gmerge_test.py b/gmerge_test.py
index 9e28ed7..eebb346 100755
--- a/gmerge_test.py
+++ b/gmerge_test.py
@@ -6,8 +6,10 @@
"""Unit tests for gmerge."""
+import mox
import os
import unittest
+import urllib2
import gmerge
@@ -17,33 +19,64 @@
self.__dict__.update(dictionary)
-class GMergeTest(unittest.TestCase):
+class GMergeTest(mox.MoxTestBase):
"""Test for gmerge."""
def setUp(self):
+ super(GMergeTest, self).setUp()
self.lsb_release_lines = [
'CHROMEOS_RELEASE_BOARD=x86-mario\r\n',
'CHROMEOS_DEVSERVER=http://localhost:8080/\n']
def testLsbRelease(self):
- merger = gmerge.GMerger(self.lsb_release_lines)
- self.assertEqual({'CHROMEOS_RELEASE_BOARD': 'x86-mario',
- 'CHROMEOS_DEVSERVER': 'http://localhost:8080/'},
- merger.lsb_release)
+ """Basic LSB release parsing test."""
+ merger = gmerge.GMerger(None, None)
+ merger.ParseLsbRelease(self.lsb_release_lines)
+ self.assertEqual(merger.board_name, 'x86-mario')
+ self.assertEqual(merger.devserver_url, 'http://localhost:8080/')
+
+ def testLsbReleaseWithFlagsOverride(self):
+ """Board/url values passed in to constructor should override parsed ones."""
+ override_url = 'http://override:8080'
+ override_board = 'override_board'
+ merger = gmerge.GMerger(override_url, override_board)
+ merger.ParseLsbRelease(self.lsb_release_lines)
+ self.assertEqual(merger.board_name, override_board)
+ self.assertEqual(merger.devserver_url, override_url)
+
+ def testLsbReleaseWithMultipleKeyValCopies(self):
+ """Lsb Release should only use the last val for any key=val combo."""
+ override_url = 'http://override:8080'
+ override_board = 'override_board'
+ lsb_release_lines = self.lsb_release_lines + (
+ ['CHROMEOS_RELEASE_BOARD=%s\r\n' % override_board,
+ 'CHROMEOS_DEVSERVER=%s\n' % override_url])
+ merger = gmerge.GMerger(None, None)
+ merger.ParseLsbRelease(lsb_release_lines)
+ self.assertEqual(merger.board_name, override_board)
+ self.assertEqual(merger.devserver_url, override_url)
def testPostData(self):
+ """Validate we construct the data url to the devserver correctly."""
+ self.mox.StubOutWithMock(urllib2, 'urlopen')
old_env = os.environ
os.environ = {}
os.environ['USE'] = 'a b c d +e'
- gmerge.FLAGS = Flags({'accept_stable': 'blah',
- 'deep': False,
- 'usepkg': False})
- merger = gmerge.GMerger(self.lsb_release_lines)
- self.assertEqual(
- 'use=a+b+c+d+%2Be&board=x86-mario&deep=&pkg=package_name&usepkg=&'
- 'accept_stable=blah',
- merger.GeneratePackageRequest('package_name'))
+ merger = gmerge.GMerger(None, None)
+ merger.ParseLsbRelease(self.lsb_release_lines)
+
+ # Expected post request.
+ expected_data = ('use=a+b+c+d+%2Be&board=x86-mario&'
+ 'deep=&pkg=package_name&usepkg=&accept_stable=blah')
+
+ mock_object = self.mox.CreateMock(file)
+ urllib2.urlopen(mox.IgnoreArg(), data=expected_data).AndReturn(mock_object)
+ mock_object.read().AndReturn('Build succeeded')
+ mock_object.close()
+ self.mox.ReplayAll()
+ merger.RequestPackageBuild('package_name', False, 'blah', False)
+ self.mox.VerifyAll()
os.environ = old_env