aboutsummaryrefslogtreecommitdiffstats
path: root/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_buildslave_libvirt.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_buildslave_libvirt.py')
-rw-r--r--lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_buildslave_libvirt.py282
1 files changed, 0 insertions, 282 deletions
diff --git a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_buildslave_libvirt.py b/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_buildslave_libvirt.py
deleted file mode 100644
index 2478e46c..00000000
--- a/lib/python2.7/site-packages/buildbot-0.8.8-py2.7.egg/buildbot/test/unit/test_buildslave_libvirt.py
+++ /dev/null
@@ -1,282 +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
-
-import mock
-from twisted.trial import unittest
-from twisted.internet import defer, reactor, utils
-from twisted.python import failure
-from buildbot import config
-from buildbot.test.fake import libvirt
-from buildbot.test.util import compat
-from buildbot.buildslave import libvirt as libvirtbuildslave
-
-
-class TestLibVirtSlave(unittest.TestCase):
-
- class ConcreteBuildSlave(libvirtbuildslave.LibVirtSlave):
- pass
-
- def setUp(self):
- self.patch(libvirtbuildslave, "libvirt", libvirt)
- self.conn = libvirtbuildslave.Connection("test://")
- self.lvconn = self.conn.connection
-
- def test_constructor_nolibvirt(self):
- self.patch(libvirtbuildslave, "libvirt", None)
- self.assertRaises(config.ConfigErrors, self.ConcreteBuildSlave,
- 'bot', 'pass', None, 'path', 'path')
-
- def test_constructor_minimal(self):
- bs = self.ConcreteBuildSlave('bot', 'pass', self.conn, 'path', 'otherpath')
- yield bs._find_existing_deferred
- self.assertEqual(bs.slavename, 'bot')
- self.assertEqual(bs.password, 'pass')
- self.assertEqual(bs.connection, self.conn)
- self.assertEqual(bs.image, 'path')
- self.assertEqual(bs.base_image, 'otherpath')
- self.assertEqual(bs.keepalive_interval, 3600)
-
- @defer.inlineCallbacks
- def test_find_existing(self):
- d = self.lvconn.fake_add("bot")
-
- bs = self.ConcreteBuildSlave('bot', 'pass', self.conn, 'p', 'o')
- yield bs._find_existing_deferred
-
- self.assertEqual(bs.domain.domain, d)
- self.assertEqual(bs.substantiated, True)
-
- @defer.inlineCallbacks
- def test_prepare_base_image_none(self):
- self.patch(utils, "getProcessValue", mock.Mock())
- utils.getProcessValue.side_effect = lambda x,y: defer.succeed(0)
-
- bs = self.ConcreteBuildSlave('bot', 'pass', self.conn, 'p', None)
- yield bs._find_existing_deferred
- yield bs._prepare_base_image()
-
- self.assertEqual(utils.getProcessValue.call_count, 0)
-
- @defer.inlineCallbacks
- def test_prepare_base_image_cheap(self):
- self.patch(utils, "getProcessValue", mock.Mock())
- utils.getProcessValue.side_effect = lambda x,y: defer.succeed(0)
-
- bs = self.ConcreteBuildSlave('bot', 'pass', self.conn, 'p', 'o')
- yield bs._find_existing_deferred
- yield bs._prepare_base_image()
-
- utils.getProcessValue.assert_called_with(
- "qemu-img", ["create", "-b", "o", "-f", "qcow2", "p"])
-
- @defer.inlineCallbacks
- def test_prepare_base_image_full(self):
- pass
- self.patch(utils, "getProcessValue", mock.Mock())
- utils.getProcessValue.side_effect = lambda x,y: defer.succeed(0)
-
- bs = self.ConcreteBuildSlave('bot', 'pass', self.conn, 'p', 'o')
- yield bs._find_existing_deferred
- bs.cheap_copy = False
- yield bs._prepare_base_image()
-
- utils.getProcessValue.assert_called_with(
- "cp", ["o", "p"])
-
- @defer.inlineCallbacks
- def test_start_instance(self):
- bs = self.ConcreteBuildSlave('b', 'p', self.conn, 'p', 'o',
- xml='<xml/>')
-
- prep = mock.Mock()
- prep.side_effect = lambda: defer.succeed(0)
- self.patch(bs, "_prepare_base_image", prep)
-
- yield bs._find_existing_deferred
- started = yield bs.start_instance(mock.Mock())
-
- self.assertEqual(started, True)
-
- @compat.usesFlushLoggedErrors
- @defer.inlineCallbacks
- def test_start_instance_create_fails(self):
- bs = self.ConcreteBuildSlave('b', 'p', self.conn, 'p', 'o',
- xml='<xml/>')
-
- prep = mock.Mock()
- prep.side_effect = lambda: defer.succeed(0)
- self.patch(bs, "_prepare_base_image", prep)
-
- create = mock.Mock()
- create.side_effect = lambda self : defer.fail(
- failure.Failure(RuntimeError('oh noes')))
- self.patch(libvirtbuildslave.Connection, 'create', create)
-
- yield bs._find_existing_deferred
- started = yield bs.start_instance(mock.Mock())
-
- self.assertEqual(bs.domain, None)
- self.assertEqual(started, False)
- self.assertEqual(len(self.flushLoggedErrors(RuntimeError)), 1)
-
- @defer.inlineCallbacks
- def setup_canStartBuild(self):
- bs = self.ConcreteBuildSlave('b', 'p', self.conn, 'p', 'o')
- yield bs._find_existing_deferred
- bs.updateLocks()
- defer.returnValue(bs)
-
- @defer.inlineCallbacks
- def test_canStartBuild(self):
- bs = yield self.setup_canStartBuild()
- self.assertEqual(bs.canStartBuild(), True)
-
- @defer.inlineCallbacks
- def test_canStartBuild_notready(self):
- """
- If a LibVirtSlave hasnt finished scanning for existing VMs then we shouldn't
- start builds on it as it might create a 2nd VM when we want to reuse the existing
- one.
- """
- bs = yield self.setup_canStartBuild()
- bs.ready = False
- self.assertEqual(bs.canStartBuild(), False)
-
- @defer.inlineCallbacks
- def test_canStartBuild_domain_and_not_connected(self):
- """
- If we've found that the VM this slave would instance already exists but hasnt
- connected then we shouldn't start builds or we'll end up with a dupe.
- """
- bs = yield self.setup_canStartBuild()
- bs.domain = mock.Mock()
- self.assertEqual(bs.canStartBuild(), False)
-
- @defer.inlineCallbacks
- def test_canStartBuild_domain_and_connected(self):
- """
- If we've found an existing VM and it is connected then we should start builds
- """
- bs = yield self.setup_canStartBuild()
- bs.domain = mock.Mock()
- isconnected = mock.Mock()
- isconnected.return_value = True
- self.patch(bs, "isConnected", isconnected)
- self.assertEqual(bs.canStartBuild(), True)
-
-
-class TestWorkQueue(unittest.TestCase):
-
- def setUp(self):
- self.queue = libvirtbuildslave.WorkQueue()
-
- def delayed_success(self):
- def work():
- d = defer.Deferred()
- reactor.callLater(0, d.callback, True)
- return d
- return work
-
- def delayed_errback(self):
- def work():
- d = defer.Deferred()
- reactor.callLater(0, d.errback,
- failure.Failure(RuntimeError("Test failure")))
- return d
- return work
-
- def expect_errback(self, d):
- def shouldnt_get_called(f):
- self.failUnlessEqual(True, False)
- d.addCallback(shouldnt_get_called)
- def errback(f):
- #log.msg("errback called?")
- pass
- d.addErrback(errback)
- return d
-
- def test_handle_exceptions(self):
- def work():
- raise ValueError
- return self.expect_errback(self.queue.execute(work))
-
- def test_handle_immediate_errback(self):
- def work():
- return defer.fail(RuntimeError("Sad times"))
- return self.expect_errback(self.queue.execute(work))
-
- def test_handle_delayed_errback(self):
- work = self.delayed_errback()
- return self.expect_errback(self.queue.execute(work))
-
- def test_handle_immediate_success(self):
- def work():
- return defer.succeed(True)
- return self.queue.execute(work)
-
- def test_handle_delayed_success(self):
- work = self.delayed_success()
- return self.queue.execute(work)
-
- def test_single_pow_fires(self):
- return self.queue.execute(self.delayed_success())
-
- def test_single_pow_errors_gracefully(self):
- d = self.queue.execute(self.delayed_errback())
- return self.expect_errback(d)
-
- def test_fail_doesnt_break_further_work(self):
- self.expect_errback(self.queue.execute(self.delayed_errback()))
- return self.queue.execute(self.delayed_success())
-
- def test_second_pow_fires(self):
- self.queue.execute(self.delayed_success())
- return self.queue.execute(self.delayed_success())
-
- def test_work(self):
- # We want these deferreds to fire in order
- flags = {1: False, 2: False, 3: False }
-
- # When first deferred fires, flags[2] and flags[3] should still be false
- # flags[1] shouldnt already be set, either
- d1 = self.queue.execute(self.delayed_success())
- def cb1(res):
- self.failUnlessEqual(flags[1], False)
- flags[1] = True
- self.failUnlessEqual(flags[2], False)
- self.failUnlessEqual(flags[3], False)
- d1.addCallback(cb1)
-
- # When second deferred fires, only flags[3] should be set
- # flags[2] should definitely be False
- d2 = self.queue.execute(self.delayed_success())
- def cb2(res):
- assert flags[2] == False
- flags[2] = True
- assert flags[1] == True
- assert flags[3] == False
- d2.addCallback(cb2)
-
- # When third deferred fires, only flags[3] should be unset
- d3 = self.queue.execute(self.delayed_success())
- def cb3(res):
- assert flags[3] == False
- flags[3] = True
- assert flags[1] == True
- assert flags[2] == True
- d3.addCallback(cb3)
-
- return defer.DeferredList([d1, d2, d3], fireOnOneErrback=True)
-