diff options
-rw-r--r-- | lib/toaster/bldcontrol/localhostbecontroller.py | 2 | ||||
-rw-r--r-- | lib/toaster/bldcontrol/sshbecontroller.py | 5 | ||||
-rw-r--r-- | lib/toaster/bldcontrol/tests.py | 84 |
3 files changed, 61 insertions, 30 deletions
diff --git a/lib/toaster/bldcontrol/localhostbecontroller.py b/lib/toaster/bldcontrol/localhostbecontroller.py index dfe06f947..bc3566ace 100644 --- a/lib/toaster/bldcontrol/localhostbecontroller.py +++ b/lib/toaster/bldcontrol/localhostbecontroller.py @@ -117,7 +117,7 @@ class LocalhostBEController(BuildEnvironmentController): f.seek(0, 2) # jump to the end toaster_ui_log_filelength = f.tell() - cmd = "bash -c \"source %s/oe-init-build-env %s 2>&1 >toaster_server.log && bitbake --read conf/toaster-pre.conf --postread conf/toaster.conf --server-only -t xmlrpc -B 0.0.0.0:0 2>&1 >>toaster_server.log \"" % (self.pokydirname, self.be.builddir) + cmd = "bash -c \"source %s/oe-init-build-env %s 2>&1 >toaster_server.log && bitbake --read %s/conf/toaster-pre.conf --postread %s/conf/toaster.conf --server-only -t xmlrpc -B 0.0.0.0:0 2>&1 >>toaster_server.log \"" % (self.pokydirname, self.be.builddir, self.be.builddir, self.be.builddir) port = "-1" logger.debug("localhostbecontroller: starting builder \n%s\n" % cmd) diff --git a/lib/toaster/bldcontrol/sshbecontroller.py b/lib/toaster/bldcontrol/sshbecontroller.py index 11ad08d44..29ed0a770 100644 --- a/lib/toaster/bldcontrol/sshbecontroller.py +++ b/lib/toaster/bldcontrol/sshbecontroller.py @@ -31,6 +31,9 @@ from toastermain import settings from bbcontroller import BuildEnvironmentController, ShellCmdException, BuildSetupException +class NotImplementedException(Exception): + pass + def DN(path): return "/".join(path.split("/")[0:-1]) @@ -125,7 +128,7 @@ class SSHBEController(BuildEnvironmentController): # set layers in the layersource - raise Exception("Not implemented: SSH setLayers") + raise NotImplementedException("Not implemented: SSH setLayers") # 3. configure the build environment, so we have a conf/bblayers.conf assert self.pokydirname is not None self._setupBE() diff --git a/lib/toaster/bldcontrol/tests.py b/lib/toaster/bldcontrol/tests.py index 5a9d1df37..5dbc77fda 100644 --- a/lib/toaster/bldcontrol/tests.py +++ b/lib/toaster/bldcontrol/tests.py @@ -7,7 +7,7 @@ Replace this with more appropriate tests for your application. from django.test import TestCase -from bldcontrol.bbcontroller import BitbakeController +from bldcontrol.bbcontroller import BitbakeController, BuildSetupException from bldcontrol.localhostbecontroller import LocalhostBEController from bldcontrol.sshbecontroller import SSHBEController from bldcontrol.models import BuildEnvironment, BuildRequest @@ -15,6 +15,7 @@ from bldcontrol.management.commands.runbuilds import Command import socket import subprocess +import os # standard poky data hardcoded for testing BITBAKE_LAYERS = [type('bitbake_info', (object,), { "giturl": "git://git.yoctoproject.org/poky.git", "dirpath": "", "commit": "HEAD"})] @@ -29,6 +30,17 @@ POKY_LAYERS = [ # we have an abstract test class designed to ensure that the controllers use a single interface # specific controller tests only need to override the _getBuildEnvironment() method +test_sourcedir = os.getenv("TTS_SOURCE_DIR") +test_builddir = os.getenv("TTS_BUILD_DIR") +test_address = os.getenv("TTS_TEST_ADDRESS", "localhost") + +if test_sourcedir == None or test_builddir == None or test_address == None: + raise Exception("Please set TTTS_SOURCE_DIR, TTS_BUILD_DIR and TTS_TEST_ADDRESS") + +# The bb server will expect a toaster-pre.conf file to exist. If it doesn't exit then we make +# an empty one here. +open(test_builddir + 'conf/toaster-pre.conf', 'a').close() + class BEControllerTests(object): def _serverForceStop(self, bc): @@ -36,28 +48,53 @@ class BEControllerTests(object): self.assertTrue(err == '', "bitbake server pid %s not stopped" % err) def test_serverStartAndStop(self): + from bldcontrol.sshbecontroller import NotImplementedException obe = self._getBuildEnvironment() bc = self._getBEController(obe) - bc.setLayers(BITBAKE_LAYERS, POKY_LAYERS) # setting layers, skip any layer info + try: + # setting layers, skip any layer info + bc.setLayers(BITBAKE_LAYERS, POKY_LAYERS) + except NotImplementedException, e: + print "Test skipped due to command not implemented yet" + return True + # We are ok with the exception as we're handling the git already exists + except BuildSetupException: + pass + + bc.pokydirname = test_sourcedir + bc.islayerset = True - hostname = self.test_address.split("@")[-1] + hostname = test_address.split("@")[-1] # test start server and stop - self.assertTrue(socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect_ex((hostname, 8200)), "Port already occupied") - bc.startBBServer("0:0") - self.assertFalse(socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect_ex((hostname, 8200)), "Server not answering") + bc.startBBServer() + + self.assertFalse(socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect_ex((hostname, int(bc.be.bbport))), "Server not answering") bc.stopBBServer() - self.assertTrue(socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect_ex((hostname, 8200)), "Server not stopped") + self.assertTrue(socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect_ex((hostname, int(bc.be.bbport))), "Server not stopped") self._serverForceStop(bc) def test_getBBController(self): + from bldcontrol.sshbecontroller import NotImplementedException obe = self._getBuildEnvironment() bc = self._getBEController(obe) - bc.setLayers(BITBAKE_LAYERS, POKY_LAYERS) # setting layers, skip any layer info - - bbc = bc.getBBController("%d:%d" % (-1, obe.pk)) + layerSet = False + try: + # setting layers, skip any layer info + layerSet = bc.setLayers(BITBAKE_LAYERS, POKY_LAYERS) + except NotImplementedException: + print "Test skipped due to command not implemented yet" + return True + # We are ok with the exception as we're handling the git already exists + except BuildSetupException: + pass + + bc.pokydirname = test_sourcedir + bc.islayerset = True + + bbc = bc.getBBController() self.assertTrue(isinstance(bbc, BitbakeController)) bc.stopBBServer() @@ -66,19 +103,15 @@ class BEControllerTests(object): class LocalhostBEControllerTests(TestCase, BEControllerTests): def __init__(self, *args): super(LocalhostBEControllerTests, self).__init__(*args) - # hardcoded for Alex's machine; since the localhost BE is machine-dependent, - # I found no good way to abstractize this - self.test_sourcedir = "/home/ddalex/ssd/yocto" - self.test_builddir = "/home/ddalex/ssd/yocto/build" - self.test_address = "localhost" + def _getBuildEnvironment(self): return BuildEnvironment.objects.create( lock = BuildEnvironment.LOCK_FREE, betype = BuildEnvironment.TYPE_LOCAL, - address = self.test_address, - sourcedir = self.test_sourcedir, - builddir = self.test_builddir ) + address = test_address, + sourcedir = test_sourcedir, + builddir = test_builddir ) def _getBEController(self, obe): return LocalhostBEController(obe) @@ -86,25 +119,20 @@ class LocalhostBEControllerTests(TestCase, BEControllerTests): class SSHBEControllerTests(TestCase, BEControllerTests): def __init__(self, *args): super(SSHBEControllerTests, self).__init__(*args) - self.test_address = "ddalex-desktop.local" - # hardcoded for ddalex-desktop.local machine; since the localhost BE is machine-dependent, - # I found no good way to abstractize this - self.test_sourcedir = "/home/ddalex/ssd/yocto" - self.test_builddir = "/home/ddalex/ssd/yocto/build" def _getBuildEnvironment(self): return BuildEnvironment.objects.create( lock = BuildEnvironment.LOCK_FREE, betype = BuildEnvironment.TYPE_SSH, - address = self.test_address, - sourcedir = self.test_sourcedir, - builddir = self.test_builddir ) + address = test_address, + sourcedir = test_sourcedir, + builddir = test_builddir ) def _getBEController(self, obe): return SSHBEController(obe) def test_pathExists(self): - obe = BuildEnvironment.objects.create(betype = BuildEnvironment.TYPE_SSH, address= self.test_address) + obe = BuildEnvironment.objects.create(betype = BuildEnvironment.TYPE_SSH, address= test_address) sbc = SSHBEController(obe) self.assertTrue(sbc._pathexists("/")) self.assertFalse(sbc._pathexists("/.deadbeef")) @@ -129,7 +157,7 @@ class RunBuildsCommandTests(TestCase): self.assertRaises(IndexError, command._selectBuildEnvironment) def test_br_select(self): - from orm.models import Project, Release, BitbakeVersion + from orm.models import Project, Release, BitbakeVersion, Branch p = Project.objects.create_project("test", Release.objects.get_or_create(name = "HEAD", bitbake_version = BitbakeVersion.objects.get_or_create(name="HEAD", branch=Branch.objects.get_or_create(name="HEAD"))[0])[0]) obr = BuildRequest.objects.create(state = BuildRequest.REQ_QUEUED, project = p) command = Command() |