summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/toaster/toastergui/tests.py
diff options
context:
space:
mode:
authorMichael Wood <michael.g.wood@intel.com>2016-02-18 21:21:50 -0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2016-02-19 15:38:48 +0000
commit94bca58067b8dcda3cb84a64d0fbce65c7bb8270 (patch)
tree16d93f45930db114ba9b253bb2c9cb8c8393d17d /bitbake/lib/toaster/toastergui/tests.py
parent8796ac8a55fa994e7c1969395597b9c1557005df (diff)
downloadpoky-94bca58067b8dcda3cb84a64d0fbce65c7bb8270.tar.gz
bitbake: toaster: toastergui unit tests convert to use fixtures
Instead of having to manually write up in the setUp function all the different objects to create in the database, just specifiy them in a fixture and load it. This has the advantage that it can be used on a live server by using the ./manage.py loaddata command and can then be inspected. (Bitbake rev: 8a653ad8b075892d24d15696b3070c5a28a4fbe2) Signed-off-by: Michael Wood <michael.g.wood@intel.com> Signed-off-by: brian avery <avery.brian@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
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