Skip to content

Commit

Permalink
- test.test_builder: added testcases for builder module
Browse files Browse the repository at this point in the history
  • Loading branch information
marcus-h committed Jul 14, 2012
1 parent bf86e3e commit 039f0c6
Show file tree
Hide file tree
Showing 2 changed files with 225 additions and 0 deletions.
221 changes: 221 additions & 0 deletions test/test_builder.py
@@ -0,0 +1,221 @@
import os
import unittest
from tempfile import NamedTemporaryFile

from lxml import etree

from osc.builder import Builder, su_cmd, sudo_cmd
from test.osctest import OscTest


def suite():
return unittest.makeSuite(TestBuilder)


class TestBuilder(OscTest):
def __init__(self, *args, **kwargs):
kwargs['fixtures_dir'] = 'test_builder_fixtures'
super(TestBuilder, self).__init__(*args, **kwargs)

def test_builder1(self):
"""test options 1"""
builder = Builder()
builder.jobs = 2
builder.debug = True
builder.no_init = True
builder.root = '/var/tmp/build-root'
exp_opts = ['--debug', '--jobs', '2', '--no-init',
'--root', '"/var/tmp/build-root"']
self.assertEqual(builder.opts(), exp_opts)

def test_builder2(self):
"""test options 1 (via set)"""
builder = Builder()
builder.set('jobs', 2)
builder.set('debug', True)
builder.set('no_init', True)
builder.set('root', '/var/tmp/build-root')
exp_opts = ['--debug', '--jobs', '2', '--no-init',
'--root', '"/var/tmp/build-root"']
self.assertEqual(builder.opts(), exp_opts)

def test_builder3(self):
"""test multiple options"""
builder = Builder()
builder.without = 'feat1'
builder.without += 'abc'
builder.rsync_src = '/path/to/src'
builder.without += 'feat2'
exp_opts = ['--rsync-src', '"/path/to/src"', '--without', '"feat1"',
'--without', '"abc"', '--without', '"feat2"']
self.assertEqual(builder.opts(), exp_opts)

def test_builder4(self):
"""test multiple options (via set)"""
builder = Builder()
builder.set('without', 'feat1')
builder.set('without', 'abc', append=True)
builder.set('rsync_src', '/path/to/src')
builder.set('without', 'feat2', append=True)
exp_opts = ['--rsync-src', '"/path/to/src"', '--without', '"feat1"',
'--without', '"abc"', '--without', '"feat2"']
self.assertEqual(builder.opts(), exp_opts)

def test_builder5(self):
"""test multiple options (no append)"""
builder = Builder()
builder.foo = 'bar'
builder.foo += 'xyz'
builder.foo = 'foobar'
builder.bar = 42
exp_opts = ['--bar', '42', '--foo', '"foobar"']
self.assertEqual(builder.opts(), exp_opts)

def test_builder6(self):
"""test multiple options (no append via set)"""
builder = Builder()
builder.set('foo', 'bar')
builder.set('foo', 'xyz', append=True)
builder.set('foo', 'foobar')
builder.set('bar', 42)
exp_opts = ['--bar', '42', '--foo', '"foobar"']
self.assertEqual(builder.opts(), exp_opts)

def test_builder7(self):
"""test multiple options (lists)"""
builder = Builder()
builder.foo = 'bar'
builder.foo += ['x', 'y', 'z']
builder.z = True
builder.foo += 'a'
exp_opts = ['--foo', '"bar"', '--foo', '"x"', '--foo', '"y"',
'--foo', '"z"', '--foo', '"a"', '--z']
self.assertEqual(builder.opts(), exp_opts)

def test_builder8(self):
"""test multiple options (lists via set)"""
builder = Builder()
builder.set('foo', 'bar')
builder.set('foo', ['x', 'y', 'z'], append=True)
builder.set('z', True)
builder.set('foo', 'a', append=True)
exp_opts = ['--foo', '"bar"', '--foo', '"x"', '--foo', '"y"',
'--foo', '"z"', '--foo', '"a"', '--z']
self.assertEqual(builder.opts(), exp_opts)

def test_builder9(self):
"""test unset option (set to None)"""
builder = Builder()
builder.abc = 'def'
builder.test = 'test123'
builder.jobs = 42
builder.abc = None
builder.jobs = None
self.assertEqual(builder.opts(), ['--test', '"test123"'])

def test_builder10(self):
"""test unset option (set to None via set)"""
builder = Builder()
builder.abc = 'def'
builder.test = 'test123'
builder.jobs = 42
builder.set('abc', None)
builder.set('jobs', None)
self.assertEqual(builder.opts(), ['--test', '"test123"'])

def test_builder11(self):
"""test unset option (set to None via del)"""
builder = Builder()
builder.abc = 'def'
builder.test = 'test123'
builder.jobs = 42
del builder.abc
del builder.jobs
self.assertEqual(builder.opts(), ['--test', '"test123"'])

def test_builder12(self):
"""test constructor parameters"""
builder = Builder(rpmlist='/path/to/rpmlist', jobs=2,
root='/var/tmp/build-root', arch='x86_64',
config='/path/to/buildconfig')
# overwrite jobs
builder.jobs = 3
exp_opts = ['--arch', '"x86_64"', '--config', '"/path/to/buildconfig"',
'--jobs', '3', '--root', '"/var/tmp/build-root"',
'--rpmlist', '"/path/to/rpmlist"']
self.assertEqual(builder.opts(), exp_opts)

def test_builder13(self):
"""test cmd construction (with su (default))"""
builder = Builder(arch='x86_64', root='/var/tmp/build-root', jobs=2)
exp_cmd = ['su', '--shell', '"/usr/bin/build"', 'root', '--',
'--arch', '"x86_64"', '--jobs', '2',
'--root', '"/var/tmp/build-root"']
self.assertEqual(builder.cmd(), exp_cmd)

def test_builder14(self):
"""test cmd construction (with sudo)"""
builder = Builder(su_cmd=Builder.SUDO, arch='x86_64',
root='/var/tmp/build-root', jobs=2)
exp_cmd = ['sudo', '"/usr/bin/build"', '--arch', '"x86_64"',
'--jobs', '2', '--root', '"/var/tmp/build-root"']
self.assertEqual(builder.cmd(), exp_cmd)

def test_builder15(self):
"""test cmd construction different build_cmd (no su_cmd)"""
builder = Builder(build_cmd='/bin/echo', su_cmd=None, foo='bar')
exp_cmd = ['/bin/echo', '--foo', '"bar"']
self.assertEqual(builder.cmd(), exp_cmd)

def test_builder16(self):
"""test run method (retcode 0)"""
build_cmd = self.fixture_file('./dummy.sh')
builder = Builder(build_cmd=build_cmd, su_cmd=None)
ret = builder.run()
self.assertEqual(ret, 0)

def test_builder17(self):
"""test run method (retcode 1)"""
build_cmd = self.fixture_file('dummy.sh')
builder = Builder(build_cmd=build_cmd, su_cmd=None, fail=True)
ret = builder.run()
self.assertEqual(ret, 1)

def test_builder18(self):
"""test run method (write stdout to tmpfile)"""
build_cmd = self.fixture_file('dummy.sh')
builder = Builder(build_cmd=build_cmd, su_cmd=None, out='blah')
with NamedTemporaryFile() as f:
ret = builder.run(stdout=f)
self.assertEqual(ret, 0)
f.seek(0, os.SEEK_SET)
self.assertEqual(f.read(), '"blah"\n')

def test_builder19(self):
"""test run method (no shell expansion)"""
build_cmd = self.fixture_file('dummy.sh')
builder = Builder(build_cmd=build_cmd, su_cmd=None, out='$PATH')
with NamedTemporaryFile() as f:
ret = builder.run(stdout=f)
self.assertEqual(ret, 0)
f.seek(0, os.SEEK_SET)
# path is not expanded because subprocess.call is invoked
# with shell=False
self.assertEqual(f.read(), '"$PATH"\n')

def test_su_cmd1(self):
"""test the construction of the "su" cmd"""
cmd = su_cmd('/usr/bin/build', ['--arch', '"x86_64"', '--jobs', '3'])
exp_cmd = ['su', '--shell', '"/usr/bin/build"', 'root', '--',
'--arch', '"x86_64"', '--jobs', '3']
self.assertEqual(cmd, exp_cmd)

def test_sudo_cmd1(self):
"""test the construction of the "sudo" cmd"""
cmd = sudo_cmd('/usr/bin/build', ['--arch', '"x86_64"', '--jobs', '3'])
exp_cmd = ['sudo', '"/usr/bin/build"', '--arch', '"x86_64"',
'--jobs', '3']
self.assertEqual(cmd, exp_cmd)

if __name__ == '__main__':
unittest.main()
4 changes: 4 additions & 0 deletions test/test_builder_fixtures/dummy.sh
@@ -0,0 +1,4 @@
#!/bin/bash
test "$1" = "--fail" && exit 1
test "$1" = "--out" && echo "$2"
exit 0

0 comments on commit 039f0c6

Please sign in to comment.