diff options
Diffstat (limited to 'yocto-poky/bitbake/lib/toaster/orm/tests.py')
-rw-r--r-- | yocto-poky/bitbake/lib/toaster/orm/tests.py | 187 |
1 files changed, 187 insertions, 0 deletions
diff --git a/yocto-poky/bitbake/lib/toaster/orm/tests.py b/yocto-poky/bitbake/lib/toaster/orm/tests.py new file mode 100644 index 0000000000..783aea890f --- /dev/null +++ b/yocto-poky/bitbake/lib/toaster/orm/tests.py @@ -0,0 +1,187 @@ +#! /usr/bin/env python +# ex:ts=4:sw=4:sts=4:et +# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- +# +# BitBake Toaster Implementation +# +# Copyright (C) 2013-2015 Intel Corporation +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 2 as +# published by the Free Software Foundation. +# +# 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. + +"""Test cases for Toaster ORM.""" + +from django.test import TestCase, TransactionTestCase +from orm.models import LocalLayerSource, LayerIndexLayerSource, ImportedLayerSource, LayerSource +from orm.models import Branch + +from orm.models import Project, Build, Layer, Layer_Version, Branch, ProjectLayer +from orm.models import Release, ReleaseLayerSourcePriority, BitbakeVersion + +from django.utils import timezone +from django.db import IntegrityError + +import os + +# set TTS_LAYER_INDEX to the base url to use a different instance of the layer index + +class LayerSourceVerifyInheritanceSaveLoad(TestCase): + """ + Tests to verify inheritance for the LayerSource proxy-inheritance classes. + """ + def test_object_creation(self): + """Test LayerSource object creation.""" + for name, sourcetype in [("a1", LayerSource.TYPE_LOCAL), + ("a2", LayerSource.TYPE_LAYERINDEX), + ("a3", LayerSource.TYPE_IMPORTED)]: + LayerSource.objects.create(name=name, sourcetype=sourcetype) + + objects = LayerSource.objects.all() + self.assertTrue(isinstance(objects[0], LocalLayerSource)) + self.assertTrue(isinstance(objects[1], LayerIndexLayerSource)) + self.assertTrue(isinstance(objects[2], ImportedLayerSource)) + + def test_duplicate_error(self): + """Test creation of duplicate LayerSource objects.""" + stype = LayerSource.TYPE_LOCAL + LayerSource.objects.create(name="a1", sourcetype=stype) + with self.assertRaises(IntegrityError): + LayerSource.objects.create(name="a1", sourcetype=stype) + + +class LILSUpdateTestCase(TransactionTestCase): + """Test Layer Source update.""" + + def setUp(self): + """Create release.""" + bbv = BitbakeVersion.objects.create(\ + name="master", giturl="git://git.openembedded.org/bitbake") + Release.objects.create(name="default-release", bitbake_version=bbv, + branch_name="master") + + def test_update(self): + """Check if LayerSource.update can fetch branches.""" + url = os.getenv("TTS_LAYER_INDEX", + default="http://layers.openembedded.org/") + + lsobj = LayerSource.objects.create(\ + name="b1", sourcetype=LayerSource.TYPE_LAYERINDEX, + apiurl=url + "layerindex/api/") + lsobj.update() + self.assertTrue(lsobj.branch_set.all().count() > 0, + "no branches fetched") + +class LayerVersionEquivalenceTestCase(TestCase): + """Verify Layer_Version priority selection.""" + + def setUp(self): + """Create required objects.""" + # create layer source + self.lsrc = LayerSource.objects.create(name="dummy-layersource", + sourcetype=LayerSource.TYPE_LOCAL) + # create release + bbv = BitbakeVersion.objects.create(\ + name="master", giturl="git://git.openembedded.org/bitbake") + self.release = Release.objects.create(name="default-release", + bitbake_version=bbv, + branch_name="master") + # attach layer source to release + ReleaseLayerSourcePriority.objects.create(\ + release=self.release, layer_source=self.lsrc, priority=1) + + # create a layer version for the layer on the specified branch + self.layer = Layer.objects.create(name="meta-testlayer", + layer_source=self.lsrc) + self.branch = Branch.objects.create(name="master", layer_source=self.lsrc) + self.lver = Layer_Version.objects.create(\ + layer=self.layer, layer_source=self.lsrc, up_branch=self.branch) + + # create project and project layer + self.project = Project.objects.create_project(name="test-project", + release=self.release) + ProjectLayer.objects.create(project=self.project, + layercommit=self.lver) + + # create spoof layer that should not appear in the search results + layer = Layer.objects.create(name="meta-notvalid", + layer_source=self.lsrc) + self.lver2 = Layer_Version.objects.create(layer=layer, + layer_source=self.lsrc, + up_branch=self.branch) + + def test_single_layersource(self): + """ + When we have a single layer version, + get_equivalents_wpriority() should return a list with + just this layer_version. + """ + equivqs = self.lver.get_equivalents_wpriority(self.project) + self.assertEqual(list(equivqs), [self.lver]) + + def test_dual_layersource(self): + """ + If we have two layers with the same name, from different layer sources, + we expect both layers in, in increasing priority of the layer source. + """ + lsrc2 = LayerSource.objects.create(\ + name="dummy-layersource2", + sourcetype=LayerSource.TYPE_LOCAL, + apiurl="test") + + # assign a lower priority for the second layer source + self.release.releaselayersourcepriority_set.create(layer_source=lsrc2, + priority=2) + + # create a new layer_version for a layer with the same name + # coming from the second layer source + layer2 = Layer.objects.create(name="meta-testlayer", + layer_source=lsrc2) + lver2 = Layer_Version.objects.create(layer=layer2, layer_source=lsrc2, + up_branch=self.branch) + + # expect two layer versions, in the priority order + equivqs = self.lver.get_equivalents_wpriority(self.project) + self.assertEqual(list(equivqs), [lver2, self.lver]) + + def test_build_layerversion(self): + """ + Any layer version coming from the build should show up + before any layer version coming from upstream + """ + build = Build.objects.create(project=self.project, + started_on=timezone.now(), + completed_on=timezone.now()) + lvb = Layer_Version.objects.create(layer=self.layer, build=build, + commit="deadbeef") + + # a build layerversion must be in the equivalence + # list for the original layerversion + equivqs = self.lver.get_equivalents_wpriority(self.project) + self.assertTrue(len(equivqs) == 2) + self.assertTrue(equivqs[0] == self.lver) + self.assertTrue(equivqs[1] == lvb) + + # getting the build layerversion equivalent list must + # return the same list as the original layer + bequivqs = lvb.get_equivalents_wpriority(self.project) + + self.assertEqual(list(equivqs), list(bequivqs)) + + def test_compatible_layerversions(self): + """ + When we have a 2 layer versions, compatible_layerversions() + should return a queryset with both. + """ + compat_lv = self.project.compatible_layerversions() + self.assertEqual(list(compat_lv), [self.lver, self.lver2]) + |