aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_scripts_runner.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_scripts_runner.py')
-rw-r--r--lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_scripts_runner.py971
1 files changed, 0 insertions, 971 deletions
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_scripts_runner.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_scripts_runner.py
deleted file mode 100644
index 0da2c7d0..00000000
--- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_scripts_runner.py
+++ /dev/null
@@ -1,971 +0,0 @@
-# This file is part of Buildbot. Buildbot is free software: you can
-# redistribute it and/or modify it under the terms of the GNU General Public
-# License as published by the Free Software Foundation, version 2.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 51
-# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-#
-# Copyright Buildbot Team Members
-
-from __future__ import with_statement
-
-import os
-import sys
-import getpass
-import mock
-import cStringIO
-from twisted.trial import unittest
-from twisted.python import usage, runtime, log
-from buildbot.scripts import base, runner
-from buildbot.test.util import misc
-
-class OptionsMixin(object):
-
- def setUpOptions(self):
- self.options_file = {}
- self.patch(base.SubcommandOptions, 'loadOptionsFile',
- lambda other_self : self.options_file)
-
- def assertOptions(self, opts, exp):
- got = dict([(k, opts[k]) for k in exp])
- if got != exp:
- msg = []
- for k in exp:
- if opts[k] != exp[k]:
- msg.append(" %s: expected %r, got %r" %
- (k, exp[k], opts[k]))
- self.fail("did not get expected options\n" + ("\n".join(msg)))
-
-
-class TestUpgradeMasterOptions(OptionsMixin, unittest.TestCase):
-
- def setUp(self):
- self.setUpOptions()
-
- def parse(self, *args):
- self.opts = runner.UpgradeMasterOptions()
- self.opts.parseOptions(args)
- return self.opts
-
- def test_synopsis(self):
- opts = runner.UpgradeMasterOptions()
- self.assertIn('buildbot upgrade-master', opts.getSynopsis())
-
- def test_defaults(self):
- opts = self.parse()
- exp = dict(quiet=False, replace=False)
- self.assertOptions(opts, exp)
-
- def test_short(self):
- opts = self.parse('-q', '-r')
- exp = dict(quiet=True, replace=True)
- self.assertOptions(opts, exp)
-
- def test_long(self):
- opts = self.parse('--quiet', '--replace')
- exp = dict(quiet=True, replace=True)
- self.assertOptions(opts, exp)
-
-
-class TestCreateMasterOptions(OptionsMixin, unittest.TestCase):
-
- def setUp(self):
- self.setUpOptions()
-
- def parse(self, *args):
- self.opts = runner.CreateMasterOptions()
- self.opts.parseOptions(args)
- return self.opts
-
- def defaults_and(self, **kwargs):
- defaults = dict(force=False, relocatable=False, config='master.cfg',
- db='sqlite:///state.sqlite', basedir=os.getcwd(), quiet=False,
- **{'no-logrotate':False, 'log-size':'10000000',
- 'log-count':'10'})
- unk_keys = set(kwargs.keys()) - set(defaults.keys())
- assert not unk_keys, "invalid keys %s" % (unk_keys,)
- opts = defaults.copy()
- opts.update(kwargs)
- return opts
-
- def test_synopsis(self):
- opts = runner.CreateMasterOptions()
- self.assertIn('buildbot create-master', opts.getSynopsis())
-
- def test_defaults(self):
- opts = self.parse()
- exp = self.defaults_and()
- self.assertOptions(opts, exp)
-
- def test_db_quiet(self):
- opts = self.parse('-q')
- exp = self.defaults_and(quiet=True)
- self.assertOptions(opts, exp)
-
- def test_db_quiet_long(self):
- opts = self.parse('--quiet')
- exp = self.defaults_and(quiet=True)
- self.assertOptions(opts, exp)
-
- def test_force(self):
- opts = self.parse('-f')
- exp = self.defaults_and(force=True)
- self.assertOptions(opts, exp)
-
- def test_force_long(self):
- opts = self.parse('--force')
- exp = self.defaults_and(force=True)
- self.assertOptions(opts, exp)
-
- def test_relocatable(self):
- opts = self.parse('-r')
- exp = self.defaults_and(relocatable=True)
- self.assertOptions(opts, exp)
-
- def test_relocatable_long(self):
- opts = self.parse('--relocatable')
- exp = self.defaults_and(relocatable=True)
- self.assertOptions(opts, exp)
-
- def test_no_logrotate(self):
- opts = self.parse('-n')
- exp = self.defaults_and(**{'no-logrotate' : True})
- self.assertOptions(opts, exp)
-
- def test_no_logrotate_long(self):
- opts = self.parse('--no-logrotate')
- exp = self.defaults_and(**{'no-logrotate' : True})
- self.assertOptions(opts, exp)
-
- def test_config(self):
- opts = self.parse('-cxyz')
- exp = self.defaults_and(config='xyz')
- self.assertOptions(opts, exp)
-
- def test_config_long(self):
- opts = self.parse('--config=xyz')
- exp = self.defaults_and(config='xyz')
- self.assertOptions(opts, exp)
-
- def test_log_size(self):
- opts = self.parse('-s124')
- exp = self.defaults_and(**{'log-size':'124'})
- self.assertOptions(opts, exp)
-
- def test_log_size_long(self):
- opts = self.parse('--log-size=124')
- exp = self.defaults_and(**{'log-size':'124'})
- self.assertOptions(opts, exp)
-
- def test_log_size_noninteger(self):
- self.assertRaises(usage.UsageError,
- lambda :self.parse('--log-size=1M'))
-
- def test_log_count(self):
- opts = self.parse('-l124')
- exp = self.defaults_and(**{'log-count':'124'})
- self.assertOptions(opts, exp)
-
- def test_log_count_long(self):
- opts = self.parse('--log-count=124')
- exp = self.defaults_and(**{'log-count':'124'})
- self.assertOptions(opts, exp)
-
- def test_log_count_noninteger(self):
- self.assertRaises(usage.UsageError,
- lambda :self.parse('--log-count=M'))
-
- def test_db_long(self):
- opts = self.parse('--db=foo://bar')
- exp = self.defaults_and(db='foo://bar')
- self.assertOptions(opts, exp)
-
- def test_db_basedir(self):
- path = r'c:\foo\bar' if runtime.platformType == "win32" else '/foo/bar'
- opts = self.parse('-f', path)
- exp = self.defaults_and(force=True, basedir=path)
- self.assertOptions(opts, exp)
-
-
-class BaseTestSimpleOptions(OptionsMixin):
- # tests for options with just --quiet and a usage message
-
- commandName = None
- optionsClass = None
-
- def setUp(self):
- self.setUpOptions()
-
- def parse(self, *args):
- self.opts = self.optionsClass()
- self.opts.parseOptions(args)
- return self.opts
-
- def test_synopsis(self):
- opts = self.optionsClass()
- self.assertIn('buildbot %s' % self.commandName, opts.getSynopsis())
-
- def test_defaults(self):
- opts = self.parse()
- exp = dict(quiet=False)
- self.assertOptions(opts, exp)
-
- def test_quiet(self):
- opts = self.parse('--quiet')
- exp = dict(quiet=True)
- self.assertOptions(opts, exp)
-
-
-class TestStopOptions(BaseTestSimpleOptions, unittest.TestCase):
- commandName = 'stop'
- optionsClass = runner.StopOptions
-
-
-class TestResetartOptions(BaseTestSimpleOptions, unittest.TestCase):
- commandName = 'restart'
- optionsClass = runner.RestartOptions
-
- def test_nodaemon(self):
- opts = self.parse('--nodaemon')
- exp = dict(nodaemon=True)
- self.assertOptions(opts, exp)
-
-
-class TestStartOptions(BaseTestSimpleOptions, unittest.TestCase):
- commandName = 'start'
- optionsClass = runner.StartOptions
-
- def test_nodaemon(self):
- opts = self.parse('--nodaemon')
- exp = dict(nodaemon=True)
- self.assertOptions(opts, exp)
-
-
-class TestReconfigOptions(BaseTestSimpleOptions, unittest.TestCase):
- commandName = 'reconfig'
- optionsClass = runner.ReconfigOptions
-
-
-class TestDebugClientOptions(OptionsMixin, unittest.TestCase):
-
- def setUp(self):
- self.setUpOptions()
-
- def parse(self, *args):
- self.opts = runner.DebugClientOptions()
- self.opts.parseOptions(args)
- return self.opts
-
- def test_synopsis(self):
- opts = runner.DebugClientOptions()
- self.assertIn('buildbot debugclient', opts.getSynopsis())
-
- def test_defaults(self):
- self.assertRaises(usage.UsageError,
- lambda : self.parse())
-
- def test_args_missing_passwd(self):
- self.assertRaises(usage.UsageError,
- lambda : self.parse('-m', 'mm'))
-
- def test_options_long(self):
- opts = self.parse('--master', 'mm:9989', '--passwd', 'pp')
- exp = dict(master='mm:9989', passwd='pp')
- self.assertOptions(opts, exp)
-
- def test_positional_master_passwd(self):
- opts = self.parse('foo:9989', 'pass')
- exp = dict(master='foo:9989', passwd='pass')
- self.assertOptions(opts, exp)
-
- def test_positional_master(self):
- opts = self.parse('-p', 'pass', 'foo:9989')
- exp = dict(master='foo:9989', passwd='pass')
- self.assertOptions(opts, exp)
-
- def test_args_master_passwd(self):
- opts = self.parse('foo:9989', 'pass')
- exp = dict(master='foo:9989', passwd='pass')
- self.assertOptions(opts, exp)
-
- def test_missing_both(self):
- self.assertRaises(usage.UsageError,
- lambda :self.parse())
-
- def test_missing_passwd(self):
- self.assertRaises(usage.UsageError,
- lambda :self.parse('master'))
-
- def test_missing_master(self):
- self.assertRaises(usage.UsageError,
- lambda :self.parse('-p', 'pass'))
-
- def test_invalid_master(self):
- self.assertRaises(usage.UsageError, self.parse,
- "-m", "foo", "-p", "pass")
-
- def test_options_extra_positional(self):
- self.assertRaises(usage.UsageError,
- lambda : self.parse('mm', 'pp', '??'))
-
- def test_options_master(self):
- self.options_file['master'] = 'opt:9989'
- opts = self.parse('-p', 'pass')
- exp = dict(master='opt:9989', passwd='pass')
- self.assertOptions(opts, exp)
-
- def test_options_debugMaster(self):
- self.options_file['master'] = 'not seen'
- self.options_file['debugMaster'] = 'opt:9989'
- opts = self.parse('-p', 'pass')
- exp = dict(master='opt:9989', passwd='pass')
- self.assertOptions(opts, exp)
-
-
-class TestBaseStatusClientOptions(OptionsMixin, unittest.TestCase):
-
- def setUp(self):
- self.setUpOptions()
-
- def parse(self, *args):
- self.opts = runner.BaseStatusClientOptions()
- self.opts.parseOptions(args)
- return self.opts
-
- def test_defaults(self):
- opts = self.parse('--master', 'm:20')
- exp = dict(master='m:20', username='statusClient', passwd='clientpw')
- self.assertOptions(opts, exp)
-
- def test_short(self):
- opts = self.parse('-m', 'm:20', '-u', 'u', '-p', 'p')
- exp = dict(master='m:20', username='u', passwd='p')
- self.assertOptions(opts, exp)
-
- def test_long(self):
- opts = self.parse('--master', 'm:20',
- '--username', 'u', '--passwd', 'p')
- exp = dict(master='m:20', username='u', passwd='p')
- self.assertOptions(opts, exp)
-
- def test_positional_master(self):
- opts = self.parse('--username', 'u', '--passwd', 'p', 'm:20')
- exp = dict(master='m:20', username='u', passwd='p')
- self.assertOptions(opts, exp)
-
- def test_positional_extra(self):
- self.assertRaises(usage.UsageError,
- lambda : self.parse('--username', 'u', '--passwd', 'p', 'm', '2'))
-
- def test_missing_master(self):
- self.assertRaises(usage.UsageError,
- lambda : self.parse('--username', 'u', '--passwd', 'p'))
-
- def test_invalid_master(self):
- self.assertRaises(usage.UsageError, self.parse, "-m foo")
-
- def test_options_masterstatus(self):
- self.options_file['master'] = 'not_seen:2'
- self.options_file['masterstatus'] = 'opt:3'
- opts = self.parse('-p', 'pass', '-u', 'user')
- exp = dict(master='opt:3', username='user', passwd='pass')
- self.assertOptions(opts, exp)
-
-
-class TestStatusLogOptions(unittest.TestCase):
-
- def test_synopsis(self):
- opts = runner.StatusLogOptions()
- self.assertIn('buildbot statuslog', opts.getSynopsis())
-
-
-class TestStatusGuiOptions(unittest.TestCase):
-
- def test_synopsis(self):
- opts = runner.StatusGuiOptions()
- self.assertIn('buildbot statusgui', opts.getSynopsis())
-
-
-class TestTryOptions(OptionsMixin, unittest.TestCase):
-
- def setUp(self):
- self.setUpOptions()
-
- def parse(self, *args):
- self.opts = runner.TryOptions()
- self.opts.parseOptions(args)
- return self.opts
-
- def defaults_and(self, **kwargs):
- defaults = dict(connect=None, host=None, jobdir=None, username=None,
- master=None, passwd=None, who=None, comment=None, diff=None,
- patchlevel=0, baserev=None, vc=None, branch=None,
- repository=None, topfile=None, topdir=None, wait=False,
- dryrun=False, quiet=False, builders=[], properties={},
- buildbotbin='buildbot')
- # dashes make python syntax hard..
- defaults['get-builder-names'] = False
- if 'get_builder_names' in kwargs:
- kwargs['get-builder-names'] = kwargs['get_builder_names']
- del kwargs['get_builder_names']
- assert set(kwargs.keys()) <= set(defaults.keys()), "invalid keys"
- opts = defaults.copy()
- opts.update(kwargs)
- return opts
-
- def test_synopsis(self):
- opts = runner.TryOptions()
- self.assertIn('buildbot try', opts.getSynopsis())
-
- def test_defaults(self):
- opts = self.parse()
- exp = self.defaults_and()
- self.assertOptions(opts, exp)
-
- def test_properties(self):
- opts = self.parse('--properties=a=b')
- exp = self.defaults_and(properties=dict(a='b'))
- self.assertOptions(opts, exp)
-
- def test_properties_multiple_opts(self):
- opts = self.parse('--properties=X=1', '--properties=Y=2')
- exp = self.defaults_and(properties=dict(X='1', Y='2'))
- self.assertOptions(opts, exp)
-
- def test_properties_equals(self):
- opts = self.parse('--properties=X=2+2=4')
- exp = self.defaults_and(properties=dict(X='2+2=4'))
- self.assertOptions(opts, exp)
-
- def test_properties_commas(self):
- opts = self.parse('--properties=a=b,c=d')
- exp = self.defaults_and(properties=dict(a='b', c='d'))
- self.assertOptions(opts, exp)
-
- def test_property(self):
- opts = self.parse('--property=a=b')
- exp = self.defaults_and(properties=dict(a='b'))
- self.assertOptions(opts, exp)
-
- def test_property_multiple_opts(self):
- opts = self.parse('--property=X=1', '--property=Y=2')
- exp = self.defaults_and(properties=dict(X='1', Y='2'))
- self.assertOptions(opts, exp)
-
- def test_property_equals(self):
- opts = self.parse('--property=X=2+2=4')
- exp = self.defaults_and(properties=dict(X='2+2=4'))
- self.assertOptions(opts, exp)
-
- def test_property_commas(self):
- opts = self.parse('--property=a=b,c=d')
- exp = self.defaults_and(properties=dict(a='b,c=d'))
- self.assertOptions(opts, exp)
-
- def test_property_and_properties(self):
- opts = self.parse('--property=X=1', '--properties=Y=2')
- exp = self.defaults_and(properties=dict(X='1', Y='2'))
- self.assertOptions(opts, exp)
-
- def test_properties_builders_multiple(self):
- opts = self.parse('--builder=aa', '--builder=bb')
- exp = self.defaults_and(builders=['aa', 'bb'])
- self.assertOptions(opts, exp)
-
- def test_options_short(self):
- opts = self.parse(
- *'-n -q -c pb -u me -m mr:7 -w you -C comm -p 2 -b bb'.split())
- exp = self.defaults_and(dryrun=True, quiet=True, connect='pb',
- username='me', master='mr:7', who='you', comment='comm',
- patchlevel=2, builders=['bb'])
- self.assertOptions(opts, exp)
-
- def test_options_long(self):
- opts = self.parse(
- *"""--wait --dryrun --get-builder-names --quiet --connect=pb
- --host=h --jobdir=j --username=u --master=m:1234 --passwd=p
- --who=w --comment=comm --diff=d --patchlevel=7 --baserev=br
- --vc=cvs --branch=br --repository=rep --builder=bl
- --properties=a=b --topfile=Makefile --topdir=.
- --buildbotbin=.virtualenvs/buildbot/bin/buildbot""".split())
- exp = self.defaults_and(wait=True, dryrun=True, get_builder_names=True,
- quiet=True, connect='pb', host='h', jobdir='j', username='u',
- master='m:1234', passwd='p', who='w', comment='comm', diff='d',
- patchlevel=7, baserev='br', vc='cvs', branch='br',
- repository='rep', builders=['bl'], properties=dict(a='b'),
- topfile='Makefile', topdir='.',
- buildbotbin='.virtualenvs/buildbot/bin/buildbot')
- self.assertOptions(opts, exp)
-
- def test_patchlevel_inval(self):
- self.assertRaises(ValueError, lambda:
- self.parse('-p', 'a'))
-
- def test_config_builders(self):
- self.options_file['try_builders'] = ['a', 'b']
- opts = self.parse()
- self.assertOptions(opts, dict(builders=['a', 'b']))
-
- def test_config_builders_override(self):
- self.options_file['try_builders'] = ['a', 'b']
- opts = self.parse('-b', 'd') # overrides a, b
- self.assertOptions(opts, dict(builders=['d']))
-
- def test_config_old_names(self):
- self.options_file['try_masterstatus'] = 'ms'
- self.options_file['try_dir'] = 'td'
- self.options_file['try_password'] = 'pw'
- opts = self.parse()
- self.assertOptions(opts, dict(master='ms', jobdir='td', passwd='pw'))
-
- def test_config_masterstatus(self):
- self.options_file['masterstatus'] = 'ms'
- opts = self.parse()
- self.assertOptions(opts, dict(master='ms'))
-
- def test_config_masterstatus_override(self):
- self.options_file['masterstatus'] = 'ms'
- opts = self.parse('-m', 'mm')
- self.assertOptions(opts, dict(master='mm'))
-
- def test_config_options(self):
- self.options_file.update(dict(try_connect='pb', try_vc='cvs',
- try_branch='br', try_repository='rep', try_topdir='.',
- try_topfile='Makefile', try_host='h', try_username='u',
- try_jobdir='j', try_password='p', try_master='m:8', try_who='w',
- try_comment='comm', try_quiet='y', try_wait='y',
- try_buildbotbin='.virtualenvs/buildbot/bin/buildbot'))
- opts = self.parse()
- exp = self.defaults_and(wait=True, quiet=True, connect='pb', host='h',
- jobdir='j', username='u', master='m:8', passwd='p', who='w',
- comment='comm', vc='cvs', branch='br', repository='rep',
- topfile='Makefile', topdir='.',
- buildbotbin='.virtualenvs/buildbot/bin/buildbot')
- self.assertOptions(opts, exp)
-
- def test_pb_withNoMaster(self):
- """
- When 'builbot try' is asked to connect via pb, but no master is
- specified, a usage error is raised.
- """
- self.assertRaises(usage.UsageError, self.parse, '--connect=pb')
-
- def test_pb_withInvalidMaster(self):
- """
- When 'buildbot try' is asked to conncect via pb, but an invalid
- master is specified, a usage error is raised.
- """
- self.assertRaises(usage.UsageError, self.parse,
- '--connect=pb', '--master=foo')
-
-class TestSendChangeOptions(OptionsMixin, unittest.TestCase):
-
- master_and_who = ['-m', 'm:1', '-W', 'w']
-
- def setUp(self):
- self.setUpOptions()
- self.getpass_response = 'typed-password'
- self.patch(getpass, 'getpass', lambda prompt : self.getpass_response)
-
- def parse(self, *args):
- self.opts = runner.SendChangeOptions()
- self.opts.parseOptions(args)
- return self.opts
-
- def test_synopsis(self):
- opts = runner.SendChangeOptions()
- self.assertIn('buildbot sendchange', opts.getSynopsis())
-
- def test_defaults(self):
- opts = self.parse('-m', 'm:1', '-W', 'me')
- exp = dict(master='m:1', auth=('change', 'changepw'), who='me',
- vc=None, repository='', project='', branch=None, category=None,
- revision=None, revision_file=None, property=None,
- comments='', logfile=None, when=None, revlink='',
- encoding='utf8', files=())
- self.assertOptions(opts, exp)
-
- def test_files(self):
- opts = self.parse(*self.master_and_who + ['a', 'b', 'c'])
- self.assertEqual(opts['files'], ('a', 'b', 'c'))
-
- def test_properties(self):
- opts = self.parse('--property', 'x:y', '--property', 'a:b',
- *self.master_and_who)
- self.assertEqual(opts['properties'], dict(x="y", a="b"))
-
- def test_properties_with_colon(self):
- opts = self.parse('--property', 'x:http://foo', *self.master_and_who)
- self.assertEquals(opts['properties'], dict(x='http://foo'))
-
- def test_config_file(self):
- self.options_file['master'] = 'MMM:123'
- self.options_file['who'] = 'WWW'
- self.options_file['branch'] = 'BBB'
- self.options_file['category'] = 'CCC'
- self.options_file['vc'] = 'svn'
- opts = self.parse()
- exp = dict(master='MMM:123', who='WWW',
- branch='BBB', category='CCC', vc='svn')
- self.assertOptions(opts, exp)
-
- def test_short_args(self):
- opts = self.parse(*('-m m:1 -a a:b -W W -R r -P p -b b -s git ' +
- '-C c -r r -p pn:pv -c c -F f -w 123 -l l -e e').split())
- exp = dict(master='m:1', auth=('a','b'), who='W', repository='r',
- project='p', branch='b', category='c', revision='r', vc='git',
- properties=dict(pn='pv'), comments='c', logfile='f',
- when=123.0, revlink='l', encoding='e')
- self.assertOptions(opts, exp)
-
- def test_long_args(self):
- opts = self.parse(*('--master m:1 --auth a:b --who w --repository r ' +
- '--project p --branch b --category c --revision r --vc git ' +
- '--property pn:pv --comments c --logfile f ' +
- '--when 123 --revlink l --encoding e').split())
- exp = dict(master='m:1', auth=('a', 'b'), who='w', repository='r',
- project='p', branch='b', category='c', revision='r', vc='git',
- properties=dict(pn='pv'), comments='c', logfile='f',
- when=123.0, revlink='l', encoding='e')
- self.assertOptions(opts, exp)
-
- def test_revision_file(self):
- with open('revfile', 'wt') as f:
- f.write('my-rev')
- self.addCleanup(lambda : os.unlink('revfile'))
- opts = self.parse('--revision_file', 'revfile', *self.master_and_who)
- self.assertOptions(opts, dict(revision='my-rev'))
-
- def test_invalid_when(self):
- self.assertRaises(usage.UsageError,
- lambda : self.parse('--when=foo', *self.master_and_who))
-
- def test_comments_overrides_logfile(self):
- opts = self.parse('--logfile', 'logs', '--comments', 'foo',
- *self.master_and_who)
- self.assertOptions(opts, dict(comments='foo'))
-
- def test_logfile(self):
- with open('comments', 'wt') as f:
- f.write('hi')
- self.addCleanup(lambda : os.unlink('comments'))
- opts = self.parse('--logfile', 'comments', *self.master_and_who)
- self.assertOptions(opts, dict(comments='hi'))
-
- def test_logfile_stdin(self):
- stdin = mock.Mock()
- stdin.read = lambda : 'hi'
- self.patch(sys, 'stdin', stdin)
- opts = self.parse('--logfile', '-', *self.master_and_who)
- self.assertOptions(opts, dict(comments='hi'))
-
- def test_auth_getpass(self):
- opts = self.parse('--auth=dustin', *self.master_and_who)
- self.assertOptions(opts, dict(auth=('dustin', 'typed-password')))
-
- def test_invalid_vcs(self):
- self.assertRaises(usage.UsageError,
- lambda : self.parse('--vc=foo', *self.master_and_who))
-
- def test_invalid_master(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- "--who=test", "-m foo")
-
-
-class TestTryServerOptions(OptionsMixin, unittest.TestCase):
-
- def setUp(self):
- self.setUpOptions()
-
- def parse(self, *args):
- self.opts = runner.TryServerOptions()
- self.opts.parseOptions(args)
- return self.opts
-
- def test_synopsis(self):
- opts = runner.TryServerOptions()
- self.assertIn('buildbot tryserver', opts.getSynopsis())
-
- def test_defaults(self):
- self.assertRaises(usage.UsageError,
- lambda : self.parse())
-
- def test_with_jobdir(self):
- opts = self.parse('--jobdir', 'xyz')
- exp = dict(jobdir='xyz')
- self.assertOptions(opts, exp)
-
-
-class TestCheckConfigOptions(OptionsMixin, unittest.TestCase):
-
- def setUp(self):
- self.setUpOptions()
-
- def parse(self, *args):
- self.opts = runner.CheckConfigOptions()
- self.opts.parseOptions(args)
- return self.opts
-
- def test_synopsis(self):
- opts = runner.CheckConfigOptions()
- self.assertIn('buildbot checkconfig', opts.getSynopsis())
-
- def test_defaults(self):
- opts = self.parse()
- exp = dict(quiet=False, configFile='master.cfg')
- self.assertOptions(opts, exp)
-
- def test_configfile(self):
- opts = self.parse('foo.cfg')
- exp = dict(quiet=False, configFile='foo.cfg')
- self.assertOptions(opts, exp)
-
- def test_quiet(self):
- opts = self.parse('-q')
- exp = dict(quiet=True, configFile='master.cfg')
- self.assertOptions(opts, exp)
-
-
-class TestUserOptions(OptionsMixin, unittest.TestCase):
-
- # mandatory arguments
- extra_args = [ '--master', 'a:1',
- '--username', 'u', '--passwd', 'p' ]
-
- def setUp(self):
- self.setUpOptions()
-
- def parse(self, *args):
- self.opts = runner.UserOptions()
- self.opts.parseOptions(args)
- return self.opts
-
- def test_defaults(self):
- self.assertRaises(usage.UsageError,
- lambda : self.parse())
-
- def test_synopsis(self):
- opts = runner.UserOptions()
- self.assertIn('buildbot user', opts.getSynopsis())
-
- def test_master(self):
- opts = self.parse("--master", "abcd:1234",
- '--op=get', '--ids=x', '--username=u', '--passwd=p')
- self.assertOptions(opts, dict(master="abcd:1234"))
-
- def test_ids(self):
- opts = self.parse("--ids", "id1,id2,id3",
- '--op', 'get', *self.extra_args)
- self.assertEqual(opts['ids'], ['id1', 'id2', 'id3'])
-
- def test_info(self):
- opts = self.parse("--info", "git=Tyler Durden <tyler@mayhem.net>",
- '--op', 'add', *self.extra_args)
- self.assertEqual(opts['info'],
- [dict(git='Tyler Durden <tyler@mayhem.net>')])
-
- def test_info_only_id(self):
- opts = self.parse("--info", "tdurden",
- '--op', 'update', *self.extra_args)
- self.assertEqual(opts['info'], [dict(identifier='tdurden')])
-
- def test_info_with_id(self):
- opts = self.parse("--info", "tdurden:svn=marla",
- '--op', 'update', *self.extra_args)
- self.assertEqual(opts['info'], [dict(identifier='tdurden', svn='marla')])
-
- def test_info_multiple(self):
- opts = self.parse("--info", "git=Tyler Durden <tyler@mayhem.net>",
- "--info", "git=Narrator <narrator@mayhem.net>",
- '--op', 'add', *self.extra_args)
- self.assertEqual(opts['info'],
- [dict(git='Tyler Durden <tyler@mayhem.net>'),
- dict(git='Narrator <narrator@mayhem.net>')])
-
- def test_config_user_params(self):
- self.options_file['user_master'] = 'mm:99'
- self.options_file['user_username'] = 'un'
- self.options_file['user_passwd'] = 'pw'
- opts = self.parse('--op', 'get', '--ids', 'x')
- self.assertOptions(opts, dict(master='mm:99', username='un', passwd='pw'))
-
- def test_config_master(self):
- self.options_file['master'] = 'mm:99'
- opts = self.parse('--op', 'get', '--ids', 'x',
- '--username=u', '--passwd=p')
- self.assertOptions(opts, dict(master='mm:99'))
-
- def test_config_master_override(self):
- self.options_file['master'] = 'not seen'
- self.options_file['user_master'] = 'mm:99'
- opts = self.parse('--op', 'get', '--ids', 'x',
- '--username=u', '--passwd=p')
- self.assertOptions(opts, dict(master='mm:99'))
-
- def test_invalid_info(self):
- self.assertRaises(usage.UsageError,
- lambda : self.parse("--info", "foo=bar",
- '--op', 'add', *self.extra_args))
-
- def test_no_master(self):
- self.assertRaises(usage.UsageError,
- lambda : self.parse('-op=foo'))
-
- def test_invalid_master(self):
- self.assertRaises(usage.UsageError, self.parse,'-m', 'foo')
-
- def test_no_operation(self):
- self.assertRaises(usage.UsageError, self.parse, '-m', 'a:1')
-
- def test_bad_operation(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- '-m', 'a:1', '--op=mayhem')
-
- def test_no_username(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- '-m', 'a:1', '--op=add')
-
- def test_no_password(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- '--op=add', '-m', 'a:1', '-u', 'tdurden')
-
- def test_invalid_bb_username(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- '--op=add', '--bb_username=tdurden',
- *self.extra_args)
-
- def test_invalid_bb_password(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- '--op=add', '--bb_password=marla',
- *self.extra_args)
-
- def test_update_no_bb_username(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- '--op=update', '--bb_password=marla',
- *self.extra_args)
-
- def test_update_no_bb_password(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- '--op=update', '--bb_username=tdurden',
- *self.extra_args)
-
- def test_no_ids_info(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- '--op=add', *self.extra_args)
-
- def test_ids_with_add(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- '--op=add', '--ids=id1', *self.extra_args)
-
- def test_ids_with_update(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- '--op=update', '--ids=id1', *self.extra_args)
-
- def test_no_ids_found_update(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- "--op=update", "--info=svn=x", *self.extra_args)
-
- def test_id_with_add(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- "--op=add", "--info=id:x", *self.extra_args)
-
- def test_info_with_remove(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- '--op=remove', '--info=x=v', *self.extra_args)
-
-
- def test_info_with_get(self):
- self.assertRaises(usage.UsageError,
- self.parse,
- '--op=get', '--info=x=v', *self.extra_args)
-
-
-class TestOptions(OptionsMixin, misc.StdoutAssertionsMixin, unittest.TestCase):
-
- def setUp(self):
- self.setUpOptions()
- self.setUpStdoutAssertions()
-
- def parse(self, *args):
- self.opts = runner.Options()
- self.opts.parseOptions(args)
- return self.opts
-
- def test_defaults(self):
- self.assertRaises(usage.UsageError,
- lambda : self.parse())
-
- def test_version(self):
- try:
- self.parse('--version')
- except SystemExit, e:
- self.assertEqual(e.args[0], 0)
- self.assertInStdout('Buildbot version:')
-
- def test_verbose(self):
- self.patch(log, 'startLogging', mock.Mock())
- self.assertRaises(usage.UsageError, self.parse, "--verbose")
- log.startLogging.assert_called_once_with(sys.stderr)
-
-
-class TestRun(unittest.TestCase):
-
- class MySubCommand(usage.Options):
- subcommandFunction = 'buildbot.test.unit.test_scripts_runner.subcommandFunction'
- optFlags = [
- [ 'loud', 'l', 'be noisy' ]
- ]
- def postOptions(self):
- if self['loud']:
- raise usage.UsageError('THIS IS ME BEING LOUD')
-
- def setUp(self):
- # patch our subcommand in
- self.patch(runner.Options, 'subCommands',
- [ [ 'my', None, self.MySubCommand, 'my, my' ] ])
-
- # and patch in the callback for it
- global subcommandFunction
- subcommandFunction = mock.Mock(name='subcommandFunction',
- return_value=3)
-
- def test_run_good(self):
- self.patch(sys, 'argv', [ 'buildbot', 'my' ])
- try:
- runner.run()
- except SystemExit, e:
- self.assertEqual(e.args[0], 3)
- else:
- self.fail("didn't exit")
-
- def test_run_bad(self):
- self.patch(sys, 'argv', [ 'buildbot', 'my', '-l' ])
- stdout = cStringIO.StringIO()
- self.patch(sys, 'stdout', stdout)
- try:
- runner.run()
- except SystemExit, e:
- self.assertEqual(e.args[0], 1)
- else:
- self.fail("didn't exit")
- self.assertIn('THIS IS ME', stdout.getvalue())