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
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"})]
# 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):
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()
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)
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"))
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()