summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/toastergui/tests.py
diff options
context:
space:
mode:
Diffstat (limited to 'bitbake/lib/toaster/toastergui/tests.py')
-rw-r--r--bitbake/lib/toaster/toastergui/tests.py255
1 files changed, 42 insertions, 213 deletions
diff --git a/bitbake/lib/toaster/toastergui/tests.py b/bitbake/lib/toaster/toastergui/tests.py
index 56a7d7e860..1b6e78d517 100644
--- a/bitbake/lib/toaster/toastergui/tests.py
+++ b/bitbake/lib/toaster/toastergui/tests.py
@@ -51,205 +51,17 @@ CLI_BUILDS_PROJECT_NAME = 'Command line builds'
51class ViewTests(TestCase): 51class ViewTests(TestCase):
52 """Tests to verify view APIs.""" 52 """Tests to verify view APIs."""
53 53
54 def setUp(self): 54 fixtures = ['toastergui-unittest-data']
55 bbv = BitbakeVersion.objects.create(name="test bbv", giturl="/tmp/",
56 branch="master", dirpath="")
57 release = Release.objects.create(name="test release",
58 branch_name="master",
59 bitbake_version=bbv)
60 release2 = Release.objects.create(name="test release 2",
61 branch_name="master",
62 bitbake_version=bbv)
63
64 self.project = Project.objects.create_project(name=PROJECT_NAME,
65 release=release)
66
67 self.project2 = Project.objects.create_project(name=PROJECT_NAME2,
68 release=release2)
69
70 now = timezone.now()
71 later = now + timedelta(days=1)
72
73 build = Build.objects.create(project=self.project,
74 started_on=now,
75 completed_on=now,
76 outcome=Build.SUCCEEDED)
77
78 # for testing BuildsTable
79 build1 = Build.objects.create(project=self.project,
80 started_on=now,
81 completed_on=now,
82 outcome=Build.SUCCEEDED,
83 machine="raspberrypi2")
84
85 Build.objects.create(project=self.project,
86 started_on=later,
87 completed_on=later,
88 outcome=Build.FAILED,
89 machine="qemux86")
90
91 Build.objects.create(project=self.project2,
92 started_on=later,
93 completed_on=later,
94 outcome=Build.SUCCEEDED,
95 machine="qemux86")
96
97 # to test sorting by errors and warnings in BuildsTable
98 LogMessage.objects.create(build=build1, level=LogMessage.WARNING)
99 LogMessage.objects.create(build=build1, level=LogMessage.ERROR)
100
101 layersrc = LayerSource.objects.create(sourcetype=LayerSource.TYPE_IMPORTED)
102 self.priority = ReleaseLayerSourcePriority.objects.create(release=release,
103 layer_source=layersrc)
104 layer = Layer.objects.create(name="base-layer", layer_source=layersrc,
105 vcs_url="/tmp/")
106
107 layer_two = Layer.objects.create(name="z-layer",
108 layer_source=layersrc,
109 vcs_url="git://two/")
110
111
112 branch = Branch.objects.create(name="master", layer_source=layersrc)
113
114 self.lver = Layer_Version.objects.create(layer=layer,
115 project=self.project,
116 layer_source=layersrc,
117 commit="master",
118 dirpath="/tmp/",
119 up_branch=branch)
120
121 lver_two = Layer_Version.objects.create(layer=layer_two,
122 layer_source=layersrc,
123 commit="master",
124 up_branch=branch)
125
126 Recipe.objects.create(layer_source=layersrc,
127 name="z recipe",
128 version="5.2",
129 summary="z recipe",
130 description="G recipe",
131 license="Z GPL",
132 section="h section",
133 layer_version=lver_two)
134
135 # Create a dummy recipe file for the custom image generation to read
136 open("/tmp/my_recipe.bb", 'wa').close()
137 self.recipe1 = Recipe.objects.create(layer_source=layersrc,
138 name="base-recipe",
139 version="1.2",
140 summary="one recipe",
141 description="recipe",
142 section="A section",
143 license="Apache",
144 layer_version=self.lver,
145 file_path="my_recipe.bb")
146
147 Machine.objects.create(layer_version=self.lver, name="wisk",
148 description="wisking machine")
149 Machine.objects.create(layer_version=self.lver, name="zap",
150 description="zap machine")
151 Machine.objects.create(layer_version=lver_two, name="xray",
152 description="xray machine")
153
154
155
156 ProjectLayer.objects.create(project=self.project, layercommit=self.lver)
157
158 lver_custom = Layer_Version.objects.create(layer=layer,
159 project=self.project,
160 layer_source=layersrc,
161 commit="mymaster",
162 up_branch=branch)
163
164 self.customr = CustomImageRecipe.objects.create(\
165 name="custom recipe", project=self.project,
166 base_recipe=self.recipe1,
167 file_path="custr",
168 layer_version=lver_custom)
169
170 self.package = Package.objects.create(name='pkg1',
171 size=999,
172 recipe=self.recipe1,
173 license="HHH",
174 build=build)
175
176 Package.objects.create(name='A pkg1',
177 size=777,
178 recipe=self.recipe1,
179 build=build)
180
181 Package.objects.create(name='zpkg1',
182 recipe=self.recipe1,
183 build=build,
184 size=4,
185 license="ZZ")
186
187 self.cust_package = CustomImagePackage.objects.create(
188 name="A pkg",
189 recipe=self.recipe1,
190 size=10,
191 license="AAA")
192
193 self.customr.appends_set.add(self.cust_package)
194
195 # recipe with project for testing AvailableRecipe table
196 self.recipe2 = Recipe.objects.create(layer_source=layersrc,
197 name="fancy-recipe",
198 version="1.4",
199 summary="a fancy recipe",
200 description="fancy recipe",
201 license="MIT",
202 layer_version=self.lver,
203 section="Z section",
204 file_path='/home/foo')
205
206 # additional package for the sorting for the SelectPackagesTable
207 cust_package_two = CustomImagePackage.objects.create(name="ZZ pkg",
208 size=5,
209 recipe=self.recipe2)
210
211 self.customr.appends_set.add(cust_package_two)
212
213 Package.objects.create(name='one1',
214 recipe=self.recipe2,
215 build=build,
216 size=2,
217 license="L")
218
219 Recipe.objects.create(layer_source=layersrc,
220 is_image=True,
221 name="Test image one",
222 version="1.2",
223 summary="one recipe",
224 description="recipe",
225 section="A",
226 license="A",
227 file_path="/one/",
228 layer_version=self.lver)
229
230 zrecipe = Recipe.objects.create(layer_source=layersrc,
231 is_image=True,
232 name="Z Test image two",
233 version="1.3",
234 summary="two image recipe",
235 description="recipe two",
236 section="B",
237 license="Z",
238 file_path="/two/",
239 layer_version=lver_two)
240
241 CustomImageRecipe.objects.create(name="z custom recipe",
242 project=self.project,
243 base_recipe=zrecipe,
244 file_path="zzzz",
245 layer_version=lver_custom)
246
247 # Packages in PackagesTable requre that the recipe has been built so
248 # we need to create a target and build pair
249 target = Target.objects.create(target=self.recipe1.name,
250 build=build)
251 55
56 def setUp(self):
252 57
58 self.project = Project.objects.first()
59 self.recipe1 = Recipe.objects.get(pk=2)
60 self.recipe2 = Recipe.objects.last()
61 self.customr = CustomImageRecipe.objects.first()
62 self.cust_package = CustomImagePackage.objects.first()
63 self.package = Package.objects.first()
64 self.lver = Layer_Version.objects.first()
253 65
254 def test_get_base_call_returns_html(self): 66 def test_get_base_call_returns_html(self):
255 """Basic test for all-projects view""" 67 """Basic test for all-projects view"""
@@ -271,7 +83,7 @@ class ViewTests(TestCase):
271 self.assertEqual(data["error"], "ok") 83 self.assertEqual(data["error"], "ok")
272 self.assertTrue("rows" in data) 84 self.assertTrue("rows" in data)
273 85
274 self.assertTrue(PROJECT_NAME in [x["name"] for x in data["rows"]]) 86 self.assertTrue(self.project.name in [x["name"] for x in data["rows"]])
275 self.assertTrue("id" in data["rows"][0]) 87 self.assertTrue("id" in data["rows"][0])
276 88
277 def test_typeaheads(self): 89 def test_typeaheads(self):
@@ -333,11 +145,13 @@ class ViewTests(TestCase):
333 145
334 def test_xhr_import_layer(self): 146 def test_xhr_import_layer(self):
335 """Test xhr_importlayer API""" 147 """Test xhr_importlayer API"""
148 LayerSource.objects.create(sourcetype=LayerSource.TYPE_IMPORTED)
336 #Test for importing an already existing layer 149 #Test for importing an already existing layer
337 args = {'vcs_url' : "git://git.example.com/test", 150 args = {'vcs_url' : "git://git.example.com/test",
338 'name' : "base-layer", 151 'name' : "base-layer",
339 'git_ref': "c12b9596afd236116b25ce26dbe0d793de9dc7ce", 152 'git_ref': "c12b9596afd236116b25ce26dbe0d793de9dc7ce",
340 'project_id': 1, 'dir_path' : "/path/in/repository"} 153 'project_id': self.project.id,
154 'dir_path' : "/path/in/repository"}
341 response = self.client.post(reverse('xhr_importlayer'), args) 155 response = self.client.post(reverse('xhr_importlayer'), args)
342 data = json.loads(response.content) 156 data = json.loads(response.content)
343 self.assertEqual(response.status_code, 200) 157 self.assertEqual(response.status_code, 200)
@@ -407,13 +221,12 @@ class ViewTests(TestCase):
407 221
408 def test_xhr_custom_details(self): 222 def test_xhr_custom_details(self):
409 """Test getting custom recipe details""" 223 """Test getting custom recipe details"""
410 name = "custom recipe"
411 url = reverse('xhr_customrecipe_id', args=(self.customr.id,)) 224 url = reverse('xhr_customrecipe_id', args=(self.customr.id,))
412 response = self.client.get(url) 225 response = self.client.get(url)
413 self.assertEqual(response.status_code, 200) 226 self.assertEqual(response.status_code, 200)
414 expected = {"error": "ok", 227 expected = {"error": "ok",
415 "info": {'id': self.customr.id, 228 "info": {'id': self.customr.id,
416 'name': name, 229 'name': self.customr.name,
417 'base_recipe_id': self.recipe1.id, 230 'base_recipe_id': self.recipe1.id,
418 'project_id': self.project.id, 231 'project_id': self.project.id,
419 } 232 }
@@ -484,6 +297,10 @@ class ViewTests(TestCase):
484 {"error": "ok"}) 297 {"error": "ok"})
485 298
486 def test_download_custom_recipe(self): 299 def test_download_custom_recipe(self):
300 """Download the recipe file generated for the custom image"""
301
302 # Create a dummy recipe file for the custom image generation to read
303 open("/tmp/a_recipe.bb", 'wa').close()
487 response = self.client.get(reverse('customrecipedownload', 304 response = self.client.get(reverse('customrecipedownload',
488 args=(self.project.id, 305 args=(self.project.id,
489 self.customr.id))) 306 self.customr.id)))
@@ -503,8 +320,6 @@ class ViewTests(TestCase):
503 row2 = next(x for x in rows if x['name'] == self.recipe2.name) 320 row2 = next(x for x in rows if x['name'] == self.recipe2.name)
504 321
505 self.assertEqual(response.status_code, 200, 'should be 200 OK status') 322 self.assertEqual(response.status_code, 200, 'should be 200 OK status')
506 # All recipes in the setUp
507 self.assertEqual(len(rows), 5, 'should be 5 recipes')
508 323
509 # check other columns have been populated correctly 324 # check other columns have been populated correctly
510 self.assertEqual(row1['name'], self.recipe1.name) 325 self.assertEqual(row1['name'], self.recipe1.name)
@@ -529,13 +344,20 @@ class ViewTests(TestCase):
529 options['format'] = "json" 344 options['format'] = "json"
530 options['nocache'] = "true" 345 options['nocache'] = "true"
531 request = RequestFactory().get('/', options) 346 request = RequestFactory().get('/', options)
347
348 # This is the image recipe needed for a package list for
349 # PackagesTable do this here to throw a non exist exception
350 image_recipe = Recipe.objects.get(pk=4)
351
532 # Add any kwargs that are needed by any of the possible tables 352 # Add any kwargs that are needed by any of the possible tables
533 response = table.get(request, 353 args = {'pid': self.project.id,
534 pid=self.project.id, 354 'layerid': self.lver.pk,
535 layerid=self.lver.pk, 355 'recipeid': self.recipe1.pk,
536 recipeid=self.recipe1.pk, 356 'recipe_id': image_recipe.pk,
537 recipe_id=self.recipe1.pk, 357 'custrecipeid': self.customr.pk
538 custrecipeid=self.customr.pk) 358 }
359
360 response = table.get(request, **args)
539 return json.loads(response.content) 361 return json.loads(response.content)
540 362
541 # Get a list of classes in tables module 363 # Get a list of classes in tables module
@@ -562,10 +384,14 @@ class ViewTests(TestCase):
562 384
563 if '-' in table.default_orderby: 385 if '-' in table.default_orderby:
564 self.assertTrue(row_one >= row_two, 386 self.assertTrue(row_one >= row_two,
565 "Default ordering not working on %s" % name) 387 "Default ordering not working on %s"
388 " '%s' should be >= '%s'" %
389 (name, row_one, row_two))
566 else: 390 else:
567 self.assertTrue(row_one <= row_two, 391 self.assertTrue(row_one <= row_two,
568 "Default ordering not working on %s" % name) 392 "Default ordering not working on %s"
393 " '%s' should be <= '%s'" %
394 (name, row_one, row_two))
569 395
570 # Test the column ordering and filtering functionality 396 # Test the column ordering and filtering functionality
571 for column in table.columns: 397 for column in table.columns:
@@ -580,7 +406,9 @@ class ViewTests(TestCase):
580 406
581 self.assertTrue(row_one <= row_two, 407 self.assertTrue(row_one <= row_two,
582 "Ascending sort applied but row 0 is less " 408 "Ascending sort applied but row 0 is less "
583 "than row 1") 409 "than row 1 %s %s " %
410 (column['field_name'], name))
411
584 412
585 descending = get_data(table_cls(), 413 descending = get_data(table_cls(),
586 {"orderby" : 414 {"orderby" :
@@ -591,7 +419,8 @@ class ViewTests(TestCase):
591 419
592 self.assertTrue(row_one >= row_two, 420 self.assertTrue(row_one >= row_two,
593 "Descending sort applied but row 0 is " 421 "Descending sort applied but row 0 is "
594 "greater than row 1") 422 "greater than row 1 %s %s" %
423 (column['field_name'], name))
595 424
596 # If the two start rows are the same we haven't actually 425 # If the two start rows are the same we haven't actually
597 # changed the order 426 # changed the order