summaryrefslogtreecommitdiffstats
path: root/bitbake/lib
diff options
context:
space:
mode:
authorRichard Purdie <richard.purdie@linuxfoundation.org>2024-10-18 11:18:00 +0100
committerRichard Purdie <richard.purdie@linuxfoundation.org>2024-10-24 11:24:03 +0100
commitb04308f6706f98aa78007fd85d25c413377d1fe2 (patch)
tree4b68044c21489c73fae5c2e174693d1f72306741 /bitbake/lib
parentf599d2c702eae209557c4d2205c64fa994200574 (diff)
downloadpoky-b04308f6706f98aa78007fd85d25c413377d1fe2.tar.gz
bitbake: toaster/tests/function/basic: Improve exception handling for error readability
The 'fail' calls are useful for find() failures but not for wrapping existing asserts where they hide more useful error messages. Rework the code flow to give more readable error reporting. (Bitbake rev: 1a7a9af418874d3112aa6f148b30e5a4d3d176f3) Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib')
-rw-r--r--bitbake/lib/toaster/tests/functional/test_functional_basic.py108
1 files changed, 59 insertions, 49 deletions
diff --git a/bitbake/lib/toaster/tests/functional/test_functional_basic.py b/bitbake/lib/toaster/tests/functional/test_functional_basic.py
index e2d1c7dd86..a95ce4862c 100644
--- a/bitbake/lib/toaster/tests/functional/test_functional_basic.py
+++ b/bitbake/lib/toaster/tests/functional/test_functional_basic.py
@@ -40,44 +40,44 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
40 try: 40 try:
41 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'customimages/"'+"]").click() 41 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'customimages/"'+"]").click()
42 self.wait_until_present('#config-nav', poll=10) 42 self.wait_until_present('#config-nav', poll=10)
43 self.assertTrue(re.search("Custom images",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'Custom images information is not loading properly')
44 except: 43 except:
45 self.fail(msg='No Custom images tab available') 44 self.fail(msg='No Custom images tab available')
45 self.assertTrue(re.search("Custom images",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'Custom images information is not loading properly')
46 46
47 try: 47 try:
48 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'images/"'+"]").click() 48 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'images/"'+"]").click()
49 self.wait_until_present('#config-nav', poll=10) 49 self.wait_until_present('#config-nav', poll=10)
50 self.assertTrue(re.search("Compatible image recipes",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Compatible image recipes information is not loading properly')
51 except: 50 except:
52 self.fail(msg='No Compatible image tab available') 51 self.fail(msg='No Compatible image tab available')
52 self.assertTrue(re.search("Compatible image recipes",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Compatible image recipes information is not loading properly')
53 53
54 try: 54 try:
55 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'softwarerecipes/"'+"]").click() 55 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'softwarerecipes/"'+"]").click()
56 self.wait_until_present('#config-nav', poll=10) 56 self.wait_until_present('#config-nav', poll=10)
57 self.assertTrue(re.search("Compatible software recipes",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Compatible software recipe information is not loading properly')
58 except: 57 except:
59 self.fail(msg='No Compatible software recipe tab available') 58 self.fail(msg='No Compatible software recipe tab available')
59 self.assertTrue(re.search("Compatible software recipes",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Compatible software recipe information is not loading properly')
60 60
61 try: 61 try:
62 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'machines/"'+"]").click() 62 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'machines/"'+"]").click()
63 self.wait_until_present('#config-nav', poll=10) 63 self.wait_until_present('#config-nav', poll=10)
64 self.assertTrue(re.search("Compatible machines",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Compatible machine information is not loading properly')
65 except: 64 except:
66 self.fail(msg='No Compatible machines tab available') 65 self.fail(msg='No Compatible machines tab available')
66 self.assertTrue(re.search("Compatible machines",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Compatible machine information is not loading properly')
67 67
68 try: 68 try:
69 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'layers/"'+"]").click() 69 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'layers/"'+"]").click()
70 self.wait_until_present('#config-nav', poll=10) 70 self.wait_until_present('#config-nav', poll=10)
71 self.assertTrue(re.search("Compatible layers",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Compatible layer information is not loading properly')
72 except: 71 except:
73 self.fail(msg='No Compatible layers tab available') 72 self.fail(msg='No Compatible layers tab available')
73 self.assertTrue(re.search("Compatible layers",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Compatible layer information is not loading properly')
74 74
75 try: 75 try:
76 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'configuration"'+"]").click() 76 self.driver.find_element(By.XPATH, "//*[@id='config-nav']/ul/li/a[@href="+'"'+project_URL+'configuration"'+"]").click()
77 self.wait_until_present('#config-nav', poll=10) 77 self.wait_until_present('#config-nav', poll=10)
78 self.assertTrue(re.search("Bitbake variables",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Bitbake variables information is not loading properly')
79 except: 78 except:
80 self.fail(msg='No Bitbake variables tab available') 79 self.fail(msg='No Bitbake variables tab available')
80 self.assertTrue(re.search("Bitbake variables",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Bitbake variables information is not loading properly')
81 81
82# testcase (1516) 82# testcase (1516)
83 def test_review_configuration_information(self): 83 def test_review_configuration_information(self):
@@ -86,9 +86,11 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
86 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() 86 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
87 project_URL=self.get_URL() 87 project_URL=self.get_URL()
88 self.wait_until_present('#config-nav', poll=10) 88 self.wait_until_present('#config-nav', poll=10)
89
90 # Machine section of page
91 self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist')
92 self.assertTrue(re.search("qemux86-64",self.driver.find_element(By.XPATH, "//span[@id='project-machine-name']").text),'The machine type is not assigned')
89 try: 93 try:
90 self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist')
91 self.assertTrue(re.search("qemux86-64",self.driver.find_element(By.XPATH, "//span[@id='project-machine-name']").text),'The machine type is not assigned')
92 self.driver.find_element(By.XPATH, "//span[@id='change-machine-toggle']").click() 94 self.driver.find_element(By.XPATH, "//span[@id='change-machine-toggle']").click()
93 self.wait_until_visible('#select-machine-form', poll=10) 95 self.wait_until_visible('#select-machine-form', poll=10)
94 self.wait_until_visible('#cancel-machine-change', poll=10) 96 self.wait_until_visible('#cancel-machine-change', poll=10)
@@ -96,33 +98,34 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
96 except: 98 except:
97 self.fail(msg='The machine information is wrong in the configuration page') 99 self.fail(msg='The machine information is wrong in the configuration page')
98 100
101 # Most built recipes section
99 try: 102 try:
100 self.driver.find_element(By.ID, 'no-most-built') 103 self.driver.find_element(By.ID, 'no-most-built')
101 except: 104 except:
102 self.fail(msg='No Most built information in project detail page') 105 self.fail(msg='No Most built information in project detail page')
103 106
104 try: 107 # Project Release title
105 self.assertTrue(re.search("Yocto Project master",self.driver.find_element(By.XPATH, "//span[@id='project-release-title']").text),'The project release is not defined') 108 self.assertTrue(re.search("Yocto Project master",self.driver.find_element(By.XPATH, "//span[@id='project-release-title']").text), 'The project release is not defined in the project detail page')
106 except:
107 self.fail(msg='No project release title information in project detail page')
108 109
110 # List of layers in project
111 self.driver.find_element(By.XPATH, "//div[@id='layer-container']")
112 self.assertTrue(re.search("3",self.driver.find_element(By.ID, "project-layers-count").text),'There should be 3 layers listed in the layer count')
109 try: 113 try:
110 self.driver.find_element(By.XPATH, "//div[@id='layer-container']")
111 self.assertTrue(re.search("3",self.driver.find_element(By.ID, "project-layers-count").text),'There should be 3 layers listed in the layer count')
112 layer_list = self.driver.find_element(By.ID, "layers-in-project-list") 114 layer_list = self.driver.find_element(By.ID, "layers-in-project-list")
113 layers = layer_list.find_elements(By.TAG_NAME, "li") 115 layers = layer_list.find_elements(By.TAG_NAME, "li")
114 for layer in layers:
115 if re.match ("openembedded-core",layer.text):
116 print ("openembedded-core layer is a default layer in the project configuration")
117 elif re.match ("meta-poky",layer.text):
118 print ("meta-poky layer is a default layer in the project configuration")
119 elif re.match ("meta-yocto-bsp",layer.text):
120 print ("meta-yocto-bsp is a default layer in the project configuratoin")
121 else:
122 self.fail(msg='default layers are missing from the project configuration')
123 except: 116 except:
124 self.fail(msg='No Layer information in project detail page') 117 self.fail(msg='No Layer information in project detail page')
125 118
119 for layer in layers:
120 if re.match ("openembedded-core", layer.text):
121 print ("openembedded-core layer is a default layer in the project configuration")
122 elif re.match ("meta-poky", layer.text):
123 print ("meta-poky layer is a default layer in the project configuration")
124 elif re.match ("meta-yocto-bsp", layer.text):
125 print ("meta-yocto-bsp is a default layer in the project configuratoin")
126 else:
127 self.fail(msg='default layers are missing from the project configuration')
128
126# testcase (1517) 129# testcase (1517)
127 def test_verify_machine_information(self): 130 def test_verify_machine_information(self):
128 self.get(reverse('all-projects')) 131 self.get(reverse('all-projects'))
@@ -130,9 +133,9 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
130 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() 133 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
131 self.wait_until_present('#config-nav', poll=10) 134 self.wait_until_present('#config-nav', poll=10)
132 135
136 self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist')
137 self.assertTrue(re.search("qemux86-64",self.driver.find_element(By.ID, "project-machine-name").text),'The machine type is not assigned')
133 try: 138 try:
134 self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist')
135 self.assertTrue(re.search("qemux86-64",self.driver.find_element(By.ID, "project-machine-name").text),'The machine type is not assigned')
136 self.driver.find_element(By.ID, "change-machine-toggle").click() 139 self.driver.find_element(By.ID, "change-machine-toggle").click()
137 self.wait_until_visible('#select-machine-form', poll=10) 140 self.wait_until_visible('#select-machine-form', poll=10)
138 self.wait_until_visible('#cancel-machine-change', poll=10) 141 self.wait_until_visible('#cancel-machine-change', poll=10)
@@ -147,13 +150,13 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
147 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() 150 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
148 self.wait_until_present('#config-nav', poll=10) 151 self.wait_until_present('#config-nav', poll=10)
149 project_URL=self.get_URL() 152 project_URL=self.get_URL()
153 self.assertTrue(re.search("You haven't built any recipes yet",self.driver.find_element(By.ID, "no-most-built").text),'Default message of no builds is not present')
150 try: 154 try:
151 self.assertTrue(re.search("You haven't built any recipes yet",self.driver.find_element(By.ID, "no-most-built").text),'Default message of no builds is not present')
152 self.driver.find_element(By.XPATH, "//div[@id='no-most-built']/p/a[@href="+'"'+project_URL+'images/"'+"]").click() 155 self.driver.find_element(By.XPATH, "//div[@id='no-most-built']/p/a[@href="+'"'+project_URL+'images/"'+"]").click()
153 self.wait_until_present('#config-nav', poll=10)
154 self.assertTrue(re.search("Compatible image recipes",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Choose a recipe to build link is not working properly')
155 except: 156 except:
156 self.fail(msg='No Most built information in project detail page') 157 self.fail(msg='No Most built information in project detail page')
158 self.wait_until_present('#config-nav', poll=10)
159 self.assertTrue(re.search("Compatible image recipes",self.driver.find_element(By.XPATH, "//div[@class='col-md-10']").text),'The Choose a recipe to build link is not working properly')
157 160
158# testcase (1519) 161# testcase (1519)
159 def test_verify_project_release_information(self): 162 def test_verify_project_release_information(self):
@@ -161,11 +164,7 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
161 self.wait_until_present('#projectstable', poll=10) 164 self.wait_until_present('#projectstable', poll=10)
162 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() 165 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
163 self.wait_until_present('#config-nav', poll=10) 166 self.wait_until_present('#config-nav', poll=10)
164 167 self.assertTrue(re.search("Yocto Project master",self.driver.find_element(By.ID, "project-release-title").text), 'No project release title information in project detail page')
165 try:
166 self.assertTrue(re.search("Yocto Project master",self.driver.find_element(By.ID, "project-release-title").text),'The project release is not defined')
167 except:
168 self.fail(msg='No project release title information in project detail page')
169 168
170# testcase (1520) 169# testcase (1520)
171 def test_verify_layer_information(self): 170 def test_verify_layer_information(self):
@@ -174,28 +173,32 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
174 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click() 173 self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
175 self.wait_until_present('#config-nav', poll=10) 174 self.wait_until_present('#config-nav', poll=10)
176 project_URL=self.get_URL() 175 project_URL=self.get_URL()
176 self.driver.find_element(By.XPATH, "//div[@id='layer-container']")
177 self.assertTrue(re.search("3",self.driver.find_element(By.ID, "project-layers-count").text),'There should be 3 layers listed in the layer count')
178
177 try: 179 try:
178 self.driver.find_element(By.XPATH, "//div[@id='layer-container']")
179 self.assertTrue(re.search("3",self.driver.find_element(By.ID, "project-layers-count").text),'There should be 3 layers listed in the layer count')
180 layer_list = self.driver.find_element(By.ID, "layers-in-project-list") 180 layer_list = self.driver.find_element(By.ID, "layers-in-project-list")
181 layers = layer_list.find_elements(By.TAG_NAME, "li") 181 layers = layer_list.find_elements(By.TAG_NAME, "li")
182 except:
183 self.fail(msg='No Layer information in project detail page')
182 184
183 for layer in layers: 185 for layer in layers:
184 if re.match ("openembedded-core",layer.text): 186 if re.match ("openembedded-core",layer.text):
185 print ("openembedded-core layer is a default layer in the project configuration") 187 print ("openembedded-core layer is a default layer in the project configuration")
186 elif re.match ("meta-poky",layer.text): 188 elif re.match ("meta-poky",layer.text):
187 print ("meta-poky layer is a default layer in the project configuration") 189 print ("meta-poky layer is a default layer in the project configuration")
188 elif re.match ("meta-yocto-bsp",layer.text): 190 elif re.match ("meta-yocto-bsp",layer.text):
189 print ("meta-yocto-bsp is a default layer in the project configuratoin") 191 print ("meta-yocto-bsp is a default layer in the project configuratoin")
190 else: 192 else:
191 self.fail(msg='default layers are missing from the project configuration') 193 self.fail(msg='default layers are missing from the project configuration')
192 194
195 try:
193 self.driver.find_element(By.XPATH, "//input[@id='layer-add-input']") 196 self.driver.find_element(By.XPATH, "//input[@id='layer-add-input']")
194 self.driver.find_element(By.XPATH, "//button[@id='add-layer-btn']") 197 self.driver.find_element(By.XPATH, "//button[@id='add-layer-btn']")
195 self.driver.find_element(By.XPATH, "//div[@id='layer-container']/form[@class='form-inline']/p/a[@id='view-compatible-layers']") 198 self.driver.find_element(By.XPATH, "//div[@id='layer-container']/form[@class='form-inline']/p/a[@id='view-compatible-layers']")
196 self.driver.find_element(By.XPATH, "//div[@id='layer-container']/form[@class='form-inline']/p/a[@href="+'"'+project_URL+'importlayer"'+"]") 199 self.driver.find_element(By.XPATH, "//div[@id='layer-container']/form[@class='form-inline']/p/a[@href="+'"'+project_URL+'importlayer"'+"]")
197 except: 200 except:
198 self.fail(msg='No Layer information in project detail page') 201 self.fail(msg='Layer configuration controls missing')
199 202
200# testcase (1521) 203# testcase (1521)
201 def test_verify_project_detail_links(self): 204 def test_verify_project_detail_links(self):
@@ -211,7 +214,11 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
211 try: 214 try:
212 self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'builds/"'+"]").click() 215 self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'builds/"'+"]").click()
213 self.wait_until_visible('#project-topbar', poll=10) 216 self.wait_until_visible('#project-topbar', poll=10)
214 self.assertTrue(re.search("Builds",self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'builds/"'+"]").text), 'Builds tab in project topbar is misspelled') 217 except:
218 self.fail(msg='Builds tab information is not present')
219
220 self.assertTrue(re.search("Builds",self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'builds/"'+"]").text), 'Builds tab in project topbar is misspelled')
221 try:
215 self.driver.find_element(By.XPATH, "//div[@id='empty-state-projectbuildstable']") 222 self.driver.find_element(By.XPATH, "//div[@id='empty-state-projectbuildstable']")
216 except: 223 except:
217 self.fail(msg='Builds tab information is not present') 224 self.fail(msg='Builds tab information is not present')
@@ -219,7 +226,10 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
219 try: 226 try:
220 self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'importlayer"'+"]").click() 227 self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'importlayer"'+"]").click()
221 self.wait_until_visible('#project-topbar', poll=10) 228 self.wait_until_visible('#project-topbar', poll=10)
222 self.assertTrue(re.search("Import layer",self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'importlayer"'+"]").text), 'Import layer tab in project topbar is misspelled') 229 except:
230 self.fail(msg='Import layer tab not loading properly')
231 self.assertTrue(re.search("Import layer",self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'importlayer"'+"]").text), 'Import layer tab in project topbar is misspelled')
232 try:
223 self.driver.find_element(By.XPATH, "//fieldset[@id='repo-select']") 233 self.driver.find_element(By.XPATH, "//fieldset[@id='repo-select']")
224 self.driver.find_element(By.XPATH, "//fieldset[@id='git-repo']") 234 self.driver.find_element(By.XPATH, "//fieldset[@id='git-repo']")
225 except: 235 except:
@@ -228,10 +238,10 @@ class FuntionalTestBasic(SeleniumFunctionalTestCase):
228 try: 238 try:
229 self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'newcustomimage/"'+"]").click() 239 self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'newcustomimage/"'+"]").click()
230 self.wait_until_visible('#project-topbar', poll=10) 240 self.wait_until_visible('#project-topbar', poll=10)
231 self.assertTrue(re.search("New custom image",self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'newcustomimage/"'+"]").text), 'New custom image tab in project topbar is misspelled')
232 self.assertTrue(re.search("Select the image recipe you want to customise",self.driver.find_element(By.XPATH, "//div[@class='col-md-12']/h2").text),'The new custom image tab is not loading correctly')
233 except: 241 except:
234 self.fail(msg='New custom image tab not loading properly') 242 self.fail(msg='New custom image tab not loading properly')
243 self.assertTrue(re.search("New custom image",self.driver.find_element(By.XPATH, "//div[@id='project-topbar']/ul[@class='nav nav-tabs']/li/a[@href="+'"'+project_URL+'newcustomimage/"'+"]").text), 'New custom image tab in project topbar is misspelled')
244 self.assertTrue(re.search("Select the image recipe you want to customise",self.driver.find_element(By.XPATH, "//div[@class='col-md-12']/h2").text),'The new custom image tab is not loading correctly')
235 245
236 246
237 247