Skip to content

Commit

Permalink
unit tests on 'buildslave upgrade' command
Browse files Browse the repository at this point in the history
Test that older buildbot.tac files are updated correctly.
Test that modern buildbot.tac files are not changed.
  • Loading branch information
Elmir Jagudin committed May 3, 2013
1 parent 7268940 commit 9255a82
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 3 deletions.
82 changes: 79 additions & 3 deletions slave/buildslave/test/unit/test_scripts_upgrade_slave.py
Expand Up @@ -13,15 +13,42 @@
#
# Copyright Buildbot Team Members

import os
import mock
from twisted.trial import unittest
from buildslave.scripts import upgrade_slave
from buildslave.test.util import misc

MODERN_BUILDBOT_TAC = \
"""# dummy buildbot.tac
import os
class TestUpgradeSlave(misc.IsBuildslaveDirMixin, unittest.TestCase):
from buildslave.bot import BuildSlave
"""

OLD_BUILDBOT_TAC = \
"""# dummy buildbot.tac
import os
from buildbot.slave.bot import BuildSlave
"""


class TestUpgradeSlave(misc.IsBuildslaveDirMixin,
misc.StdoutAssertionsMixin,
misc.OpenFileMixin,
unittest.TestCase):
"""
Test buildslave.scripts.runner.upgradeSlave()
"""
config = {"basedir": "dummy"}

def setUp(self):
self.setUpStdoutAssertions()

# expected buildbot.tac relative path
self.buildbot_tac = os.path.join(self.config["basedir"],
"buildbot.tac")

def test_upgradeSlave_bad_basedir(self):
"""
Expand All @@ -31,9 +58,58 @@ def test_upgradeSlave_bad_basedir(self):
self.setupUpIsBuildslaveDir(False)

# call upgradeSlave() and check that correct exit code is returned
config = {"basedir": "dummy"}
self.assertEqual(upgrade_slave.upgradeSlave(config), 1,
self.assertEqual(upgrade_slave.upgradeSlave(self.config), 1,
"unexpected exit code")

# check that isBuildslaveDir was called with correct argument
self.isBuildslaveDir.assert_called_once_with("dummy")

def test_upgradeSlave_no_changes(self):
"""
test calling upgradeSlave() on a buildbot.tac that don't need to be
upgraded
"""
# patch basedir check to always succeed
self.setupUpIsBuildslaveDir(True)

# patch open() to return a modern buildbot.tac file
self.setUpOpen(MODERN_BUILDBOT_TAC)

# call upgradeSlave() and check the success exit code is returned
self.assertEqual(upgrade_slave.upgradeSlave(self.config), 0,
"unexpected exit code")

# check message to stdout
self.assertStdoutEqual("No changes made\n")

# check that open() was called with correct path
self.open.assert_called_once_with(self.buildbot_tac)

# check that no writes where made
self.assertFalse(self.fileobj.write.called,
"unexpected write to buildbot.tac file")

def test_upgradeSlave_updated(self):
"""
test calling upgradeSlave() on an older buildbot.tac, that need to
be updated
"""
# patch basedir check to always succeed
self.setupUpIsBuildslaveDir(True)

# patch open() to return older buildbot.tac file
self.setUpOpen(OLD_BUILDBOT_TAC)

# call upgradeSlave() and check the success exit code is returned
self.assertEqual(upgrade_slave.upgradeSlave(self.config), 0,
"unexpected exit code")

# check message to stdout
self.assertStdoutEqual("buildbot.tac updated\n")

# check calls to open()
self.open.assert_has_calls([mock.call(self.buildbot_tac),
mock.call(self.buildbot_tac, "w")])

# check that we wrote correct updated buildbot.tac file
self.fileobj.write.assert_called_once_with(MODERN_BUILDBOT_TAC)
2 changes: 2 additions & 0 deletions slave/buildslave/test/util/misc.py
Expand Up @@ -81,8 +81,10 @@ def setUpOpen(self, file_contents):
read() method
"""
# create mocked file object that returns 'file_contents' on read()
# and tracks any write() calls
self.fileobj = mock.Mock()
self.fileobj.read = mock.Mock(return_value=file_contents)
self.fileobj.write = mock.Mock()

# patch open() to return mocked object
self.open = mock.Mock(return_value=self.fileobj)
Expand Down

0 comments on commit 9255a82

Please sign in to comment.