summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/orm/tests.py
diff options
context:
space:
mode:
authorAlexandru DAMIAN <alexandru.damian@intel.com>2015-02-02 17:57:36 +0000
committerRichard Purdie <richard.purdie@linuxfoundation.org>2015-02-10 23:07:48 +0000
commit202d808f890b03958cd6873486e6a37f3f437098 (patch)
tree7b88e2cb5ab7b85648821bec4d2f4c16d290207f /bitbake/lib/toaster/orm/tests.py
parentb741c9a4b4047439c6c5428e36a72c22a784feda (diff)
downloadpoky-202d808f890b03958cd6873486e6a37f3f437098.tar.gz
bitbake: toastergui: improvements in layer selection logic
This patch clearers and bring fixes for the layer selection logic in order to enable information collected during build to be used in configuring projects, specifically targeting the recipes learned through the building process. The patch also adds tests to verify the layer selection logic. [YOCTO #7189] (Bitbake rev: f0faba8ef0f08c98ac4bddf5b3954d540820d215) Signed-off-by: Alexandru DAMIAN <alexandru.damian@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/toaster/orm/tests.py')
-rw-r--r--bitbake/lib/toaster/orm/tests.py131
1 files changed, 130 insertions, 1 deletions
diff --git a/bitbake/lib/toaster/orm/tests.py b/bitbake/lib/toaster/orm/tests.py
index b965d8e50e..7b1b9633f9 100644
--- a/bitbake/lib/toaster/orm/tests.py
+++ b/bitbake/lib/toaster/orm/tests.py
@@ -2,6 +2,12 @@ from django.test import TestCase
2from orm.models import LocalLayerSource, LayerIndexLayerSource, ImportedLayerSource, LayerSource 2from orm.models import LocalLayerSource, LayerIndexLayerSource, ImportedLayerSource, LayerSource
3from orm.models import Branch 3from orm.models import Branch
4 4
5from orm.models import Project, Build, Layer, Layer_Version, Branch, ProjectLayer
6from orm.models import Release, ReleaseLayerSourcePriority, BitbakeVersion
7
8from django.utils import timezone
9
10# tests to verify inheritance for the LayerSource proxy-inheritance classes
5class LayerSourceVerifyInheritanceSaveLoad(TestCase): 11class LayerSourceVerifyInheritanceSaveLoad(TestCase):
6 def test_object_creation(self): 12 def test_object_creation(self):
7 lls = LayerSource.objects.create(name = "a1", sourcetype = LayerSource.TYPE_LOCAL, apiurl = "") 13 lls = LayerSource.objects.create(name = "a1", sourcetype = LayerSource.TYPE_LOCAL, apiurl = "")
@@ -23,7 +29,7 @@ class LayerSourceVerifyInheritanceSaveLoad(TestCase):
23 self.assertRaises(Exception, duplicate) 29 self.assertRaises(Exception, duplicate)
24 30
25 31
26 32# test to verify the layer source update functionality for layerindex. edit to pass the URL to a layerindex application
27class LILSUpdateTestCase(TestCase): 33class LILSUpdateTestCase(TestCase):
28 def test_update(self): 34 def test_update(self):
29 lils = LayerSource.objects.create(name = "b1", sourcetype = LayerSource.TYPE_LAYERINDEX, apiurl = "http://adamian-desk.local:8080/layerindex/api/") 35 lils = LayerSource.objects.create(name = "b1", sourcetype = LayerSource.TYPE_LAYERINDEX, apiurl = "http://adamian-desk.local:8080/layerindex/api/")
@@ -34,3 +40,126 @@ class LILSUpdateTestCase(TestCase):
34 40
35 # print vars(lils) 41 # print vars(lils)
36 #print map(lambda x: vars(x), Branch.objects.all()) 42 #print map(lambda x: vars(x), Branch.objects.all())
43
44 # run asserts
45 self.assertTrue(lils.branch_set.all().count() > 0, "update() needs to fetch some branches")
46
47
48
49# tests to verify layer_version priority selection
50class LayerVersionEquivalenceTestCase(TestCase):
51 def setUp(self):
52 # create layer sources
53 ls = LayerSource.objects.create(name = "dummy-layersource", sourcetype = LayerSource.TYPE_LOCAL)
54
55 # create bitbake version
56 bbv = BitbakeVersion.objects.create(name="master", giturl="git://git.openembedded.org/bitbake")
57 # create release
58 release = Release.objects.create(name="default-release", bitbake_version = bbv, branch_name = "master")
59 # attach layer source to release
60 ReleaseLayerSourcePriority.objects.create(release = release, layer_source = ls, priority = 1)
61
62 # create layer attach
63 self.layer = Layer.objects.create(name="meta-testlayer", layer_source = ls)
64 # create branch
65 self.branch = Branch.objects.create(name="master", layer_source = ls)
66
67 # set a layer version for the layer on the specified branch
68 self.layerversion = Layer_Version.objects.create(layer = self.layer, layer_source = ls, up_branch = self.branch)
69
70 # create spoof layer that should not appear in the search results
71 Layer_Version.objects.create(layer = Layer.objects.create(name="meta-notvalid", layer_source = ls), layer_source = ls, up_branch = self.branch)
72
73
74 # create a project ...
75 self.project = Project.objects.create_project(name="test-project", release = release)
76 # ... and set it up with a single layer version
77 ProjectLayer.objects.create(project= self.project, layercommit = self.layerversion)
78
79 def test_single_layersource(self):
80 # when we have a single layer version, get_equivalents_wpriority() should return a list with just this layer_version
81 equivalent_list = self.layerversion.get_equivalents_wpriority(self.project)
82 self.assertTrue(len(equivalent_list) == 1)
83 self.assertTrue(equivalent_list[0] == self.layerversion)
84
85 def test_dual_layersource(self):
86 # 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
87 ls2 = LayerSource.objects.create(name = "dummy-layersource2", sourcetype = LayerSource.TYPE_LOCAL)
88
89 # assign a lower priority for the second layer source
90 Release.objects.get(name="default-release").releaselayersourcepriority_set.create(layer_source = ls2, priority = 2)
91
92 # create a new layer_version for a layer with the same name coming from the second layer source
93 self.layer2 = Layer.objects.create(name="meta-testlayer", layer_source = ls2)
94 self.layerversion2 = Layer_Version.objects.create(layer = self.layer2, layer_source = ls2, up_branch = self.branch)
95
96 # expect two layer versions, in the priority order
97 equivalent_list = self.layerversion.get_equivalents_wpriority(self.project)
98 self.assertTrue(len(equivalent_list) == 2)
99 self.assertTrue(equivalent_list[0] == self.layerversion2)
100 self.assertTrue(equivalent_list[1] == self.layerversion)
101
102 def test_build_layerversion(self):
103 # any layer version coming from the build should show up before any layer version coming from upstream
104 build = Build.objects.create(project = self.project, started_on = timezone.now(), completed_on = timezone.now())
105 self.layerversion_build = Layer_Version.objects.create(layer = self.layer, build = build, commit = "deadbeef")
106
107 # a build layerversion must be in the equivalence list for the original layerversion
108 equivalent_list = self.layerversion.get_equivalents_wpriority(self.project)
109 self.assertTrue(len(equivalent_list) == 2)
110 self.assertTrue(equivalent_list[0] == self.layerversion)
111 self.assertTrue(equivalent_list[1] == self.layerversion_build)
112
113 # getting the build layerversion equivalent list must return the same list as the original layer
114 build_equivalent_list = self.layerversion_build.get_equivalents_wpriority(self.project)
115
116 self.assertTrue(equivalent_list == build_equivalent_list, "%s is not %s" % (equivalent_list, build_equivalent_list))
117
118class ProjectLVSelectionTestCase(TestCase):
119 def setUp(self):
120 # create layer sources
121 ls = LayerSource.objects.create(name = "dummy-layersource", sourcetype = LayerSource.TYPE_LOCAL)
122
123 # create bitbake version
124 bbv = BitbakeVersion.objects.create(name="master", giturl="git://git.openembedded.org/bitbake")
125 # create release
126 release = Release.objects.create(name="default-release", bitbake_version = bbv, branch_name="master")
127 # attach layer source to release
128 ReleaseLayerSourcePriority.objects.create(release = release, layer_source = ls, priority = 1)
129
130 # create layer attach
131 self.layer = Layer.objects.create(name="meta-testlayer", layer_source = ls)
132 # create branch
133 self.branch = Branch.objects.create(name="master", layer_source = ls)
134
135 # set a layer version for the layer on the specified branch
136 self.layerversion = Layer_Version.objects.create(layer = self.layer, layer_source = ls, up_branch = self.branch)
137
138
139 # create a project ...
140 self.project = Project.objects.create_project(name="test-project", release = release)
141 # ... and set it up with a single layer version
142 ProjectLayer.objects.create(project= self.project, layercommit = self.layerversion)
143
144 def test_single_layersource(self):
145 compatible_layerversions = self.project.compatible_layerversions()
146 self.assertTrue(len(compatible_layerversions) == 1)
147 self.assertTrue(compatible_layerversions[0] == self.layerversion)
148
149
150 def test_dual_layersource(self):
151 # 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
152 ls2 = LayerSource.objects.create(name = "dummy-layersource2", sourcetype = LayerSource.TYPE_LOCAL)
153
154 # assign a lower priority for the second layer source
155 Release.objects.get(name="default-release").releaselayersourcepriority_set.create(layer_source = ls2, priority = 2)
156
157 # create a new layer_version for a layer with the same name coming from the second layer source
158 self.layer2 = Layer.objects.create(name="meta-testlayer", layer_source = ls2)
159 self.layerversion2 = Layer_Version.objects.create(layer = self.layer2, layer_source = ls2, up_branch = self.branch)
160
161 # expect two layer versions, in the priority order
162 equivalent_list = self.project.compatible_layerversions()
163 self.assertTrue(len(equivalent_list) == 2)
164 self.assertTrue(equivalent_list[0] == self.layerversion2)
165 self.assertTrue(equivalent_list[1] == self.layerversion)