* [PATCH 1/9] toaster/tests: Update methods wait_until_~ to skip using time.sleep
@ 2023-11-29 22:53 Alassane Yattara
2023-11-29 22:53 ` [PATCH 2/9] toaster/test: Override table edit columns TestCase from image recipe page Alassane Yattara
` (7 more replies)
0 siblings, 8 replies; 13+ messages in thread
From: Alassane Yattara @ 2023-11-29 22:53 UTC (permalink / raw)
To: toaster; +Cc: Alassane Yattara
Update Class Wait from selenium_helpers_base, to override
wait_until_visible and wait_until_present with poll argument to better
handle delay between driver actions
Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
---
lib/toaster/tests/browser/selenium_helpers_base.py | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/lib/toaster/tests/browser/selenium_helpers_base.py b/lib/toaster/tests/browser/selenium_helpers_base.py
index e0ac4376..d9ea7fd1 100644
--- a/lib/toaster/tests/browser/selenium_helpers_base.py
+++ b/lib/toaster/tests/browser/selenium_helpers_base.py
@@ -71,7 +71,9 @@ class Wait(WebDriverWait):
_TIMEOUT = 10
_POLL_FREQUENCY = 0.5
- def __init__(self, driver):
+ def __init__(self, driver, timeout=_TIMEOUT, poll=_POLL_FREQUENCY):
+ self._TIMEOUT = timeout
+ self._POLL_FREQUENCY = poll
super(Wait, self).__init__(driver, self._TIMEOUT, self._POLL_FREQUENCY)
def until(self, method, message=''):
@@ -175,18 +177,19 @@ class SeleniumTestCaseBase(unittest.TestCase):
""" Return the element which currently has focus on the page """
return self.driver.switch_to.active_element
- def wait_until_present(self, selector):
+ def wait_until_present(self, selector, poll=0.5):
""" Wait until element matching CSS selector is on the page """
is_present = lambda driver: self.find(selector)
msg = 'An element matching "%s" should be on the page' % selector
- element = Wait(self.driver).until(is_present, msg)
+ element = Wait(self.driver, poll=poll).until(is_present, msg)
return element
- def wait_until_visible(self, selector):
+ def wait_until_visible(self, selector, poll=1):
""" Wait until element matching CSS selector is visible on the page """
is_visible = lambda driver: self.find(selector).is_displayed()
msg = 'An element matching "%s" should be visible' % selector
- Wait(self.driver).until(is_visible, msg)
+ Wait(self.driver, poll=poll).until(is_visible, msg)
+ time.sleep(poll) # wait for visibility to settle
return self.find(selector)
def wait_until_focused(self, selector):
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 2/9] toaster/test: Override table edit columns TestCase from image recipe page
2023-11-29 22:53 [PATCH 1/9] toaster/tests: Update methods wait_until_~ to skip using time.sleep Alassane Yattara
@ 2023-11-29 22:53 ` Alassane Yattara
2023-11-29 22:53 ` [PATCH 3/9] toaster/test: Test software " Alassane Yattara
` (6 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Alassane Yattara @ 2023-11-29 22:53 UTC (permalink / raw)
To: toaster; +Cc: Alassane Yattara
Better handle TestCase of table edit column feature
Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
---
.../tests/functional/test_project_page.py | 130 ++++++++++++++++++
1 file changed, 130 insertions(+)
diff --git a/lib/toaster/tests/functional/test_project_page.py b/lib/toaster/tests/functional/test_project_page.py
index 3edf967a..f1eb9cfa 100644
--- a/lib/toaster/tests/functional/test_project_page.py
+++ b/lib/toaster/tests/functional/test_project_page.py
@@ -8,8 +8,10 @@
import pytest
from django.urls import reverse
+from django.utils import timezone
from selenium.webdriver.support.select import Select
from tests.functional.functional_helpers import SeleniumFunctionalTestCase
+from orm.models import Build, Project, Target
from selenium.webdriver.common.by import By
@@ -55,6 +57,134 @@ class TestProjectPage(SeleniumFunctionalTestCase):
self.driver.find_element(By.ID, "create-project-button").click()
+ def _get_create_builds(self, **kwargs):
+ """ Create a build and return the build object """
+ # parameters for builds to associate with the projects
+ now = timezone.now()
+ release = '3'
+ project_name = 'projectmaster'
+ self._create_test_new_project(
+ project_name+"2",
+ release,
+ False,
+ )
+
+ self.project1_build_success = {
+ 'project': Project.objects.get(id=1),
+ 'started_on': now,
+ 'completed_on': now,
+ 'outcome': Build.SUCCEEDED
+ }
+
+ self.project1_build_failure = {
+ 'project': Project.objects.get(id=1),
+ 'started_on': now,
+ 'completed_on': now,
+ 'outcome': Build.FAILED
+ }
+ build1 = Build.objects.create(**self.project1_build_success)
+ build2 = Build.objects.create(**self.project1_build_failure)
+
+ # add some targets to these builds so they have recipe links
+ # (and so we can find the row in the ToasterTable corresponding to
+ # a particular build)
+ Target.objects.create(build=build1, target='foo')
+ Target.objects.create(build=build2, target='bar')
+
+ if kwargs:
+ # Create kwargs.get('success') builds with success status with target
+ # and kwargs.get('failure') builds with failure status with target
+ for i in range(kwargs.get('success', 0)):
+ now = timezone.now()
+ self.project1_build_success['started_on'] = now
+ self.project1_build_success[
+ 'completed_on'] = now - timezone.timedelta(days=i)
+ build = Build.objects.create(**self.project1_build_success)
+ Target.objects.create(build=build,
+ target=f'{i}_success_recipe',
+ task=f'{i}_success_task')
+
+ for i in range(kwargs.get('failure', 0)):
+ now = timezone.now()
+ self.project1_build_failure['started_on'] = now
+ self.project1_build_failure[
+ 'completed_on'] = now - timezone.timedelta(days=i)
+ build = Build.objects.create(**self.project1_build_failure)
+ Target.objects.create(build=build,
+ target=f'{i}_fail_recipe',
+ task=f'{i}_fail_task')
+ return build1, build2
+
+ def _mixin_test_table_edit_column(
+ self,
+ table_id,
+ edit_btn_id,
+ list_check_box_id: list
+ ):
+ # Check edit column
+ edit_column = self.find(f'#{edit_btn_id}')
+ self.assertTrue(edit_column.is_displayed())
+ edit_column.click()
+ # Check dropdown is visible
+ self.wait_until_visible('ul.dropdown-menu.editcol')
+ for check_box_id in list_check_box_id:
+ # Check that we can hide/show table column
+ check_box = self.find(f'#{check_box_id}')
+ th_class = str(check_box_id).replace('checkbox-', '')
+ if check_box.is_selected():
+ # check if column is visible in table
+ self.assertTrue(
+ self.find(
+ f'#{table_id} thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is checked in EditColumn dropdown, but it's not visible in table"
+ )
+ check_box.click()
+ # check if column is hidden in table
+ self.assertFalse(
+ self.find(
+ f'#{table_id} thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is unchecked in EditColumn dropdown, but it's visible in table"
+ )
+ else:
+ # check if column is hidden in table
+ self.assertFalse(
+ self.find(
+ f'#{table_id} thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is unchecked in EditColumn dropdown, but it's visible in table"
+ )
+ check_box.click()
+ # check if column is visible in table
+ self.assertTrue(
+ self.find(
+ f'#{table_id} thead th.{th_class}'
+ ).is_displayed(),
+ f"The {th_class} column is checked in EditColumn dropdown, but it's not visible in table"
+ )
+
+ def test_image_recipe_editColumn(self):
+ """ Test the edit column feature in image recipe table on project page """
+ self._get_create_builds(success=10, failure=10)
+
+ url = reverse('projectimagerecipes', args=(1,))
+ self.get(url)
+ self.wait_until_present('#imagerecipestable tbody tr')
+
+ column_list = [
+ 'get_description_or_summary', 'layer_version__get_vcs_reference',
+ 'layer_version__layer__name', 'license', 'recipe-file', 'section',
+ 'version'
+ ]
+
+ # Check that we can hide the edit column
+ self._mixin_test_table_edit_column(
+ 'imagerecipestable',
+ 'edit-columns-button',
+ [f'checkbox-{column}' for column in column_list]
+ )
+
def test_page_header_on_project_page(self):
""" Check page header in project page:
- AT LEFT -> Logo of Yocto project, displayed, clickable
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 3/9] toaster/test: Test software recipe page
2023-11-29 22:53 [PATCH 1/9] toaster/tests: Update methods wait_until_~ to skip using time.sleep Alassane Yattara
2023-11-29 22:53 ` [PATCH 2/9] toaster/test: Override table edit columns TestCase from image recipe page Alassane Yattara
@ 2023-11-29 22:53 ` Alassane Yattara
2023-11-29 22:53 ` [PATCH 4/9] toaster/test: Added Machine page TestCase Alassane Yattara
` (5 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Alassane Yattara @ 2023-11-29 22:53 UTC (permalink / raw)
To: toaster; +Cc: Alassane Yattara
Test software recipe page
- Check title "Compatible software recipes" is displayed
- Check search input
- Check "build recipe" button works
- Check software recipe table feature(show/hide column, pagination)
Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
---
.../tests/functional/test_project_page.py | 118 ++++++++++++++++++
1 file changed, 118 insertions(+)
diff --git a/lib/toaster/tests/functional/test_project_page.py b/lib/toaster/tests/functional/test_project_page.py
index f1eb9cfa..28f1fcb6 100644
--- a/lib/toaster/tests/functional/test_project_page.py
+++ b/lib/toaster/tests/functional/test_project_page.py
@@ -7,9 +7,11 @@
#
import pytest
+from time import sleep
from django.urls import reverse
from django.utils import timezone
from selenium.webdriver.support.select import Select
+from selenium.common.exceptions import NoSuchElementException
from tests.functional.functional_helpers import SeleniumFunctionalTestCase
from orm.models import Build, Project, Target
from selenium.webdriver.common.by import By
@@ -164,6 +166,70 @@ class TestProjectPage(SeleniumFunctionalTestCase):
f"The {th_class} column is checked in EditColumn dropdown, but it's not visible in table"
)
+ def _get_config_nav_item(self, index):
+ config_nav = self.find('#config-nav')
+ return config_nav.find_elements(By.TAG_NAME, 'li')[index]
+
+ def _navigate_to_config_nav(self, nav_id, nav_index):
+ # navigate to the project page
+ url = reverse("project", args=(1,))
+ self.get(url)
+ self.wait_until_visible('#config-nav')
+ # click on "Software recipe" tab
+ soft_recipe = self._get_config_nav_item(nav_index)
+ soft_recipe.click()
+ self.wait_until_visible(f'#{nav_id}')
+
+ def _mixin_test_table_show_rows(self, table_selector, **kwargs):
+ """ Test the show rows feature in the builds table on the all builds page """
+ def test_show_rows(row_to_show, show_row_link):
+ # Check that we can show rows == row_to_show
+ show_row_link.select_by_value(str(row_to_show))
+ self.wait_until_visible(f'#{table_selector} tbody tr', poll=2)
+ self.assertTrue(
+ len(self.find_all(f'#{table_selector} tbody tr')) == row_to_show
+ )
+ self.wait_until_present(f'#{table_selector} tbody tr')
+ show_rows = self.driver.find_elements(
+ By.XPATH,
+ f'//select[@class="form-control pagesize-{table_selector}"]'
+ )
+ rows_to_show = [10, 25, 50, 100, 150]
+ to_skip = kwargs.get('to_skip', [])
+ # Check show rows
+ for show_row_link in show_rows:
+ show_row_link = Select(show_row_link)
+ for row_to_show in rows_to_show:
+ if row_to_show not in to_skip:
+ test_show_rows(row_to_show, show_row_link)
+
+ def _wait_until_build(self, state):
+ while True:
+ try:
+ last_build_state = self.driver.find_element(
+ By.XPATH,
+ '//*[@id="latest-builds"]/div[1]//div[@class="build-state"]',
+ )
+ build_state = last_build_state.get_attribute(
+ 'data-build-state')
+ state_text = state.lower().split()
+ if any(x in str(build_state).lower() for x in state_text):
+ break
+ except NoSuchElementException:
+ continue
+ sleep(1)
+
+ def _mixin_test_table_search_input(self, **kwargs):
+ input_selector, input_text, searchBtn_selector, table_selector, *_ = kwargs.values()
+ # Test search input
+ self.wait_until_visible(f'#{input_selector}')
+ recipe_input = self.find(f'#{input_selector}')
+ recipe_input.send_keys(input_text)
+ self.find(f'#{searchBtn_selector}').click()
+ self.wait_until_visible(f'#{table_selector} tbody tr')
+ rows = self.find_all(f'#{table_selector} tbody tr')
+ self.assertTrue(len(rows) > 0)
+
def test_image_recipe_editColumn(self):
""" Test the edit column feature in image recipe table on project page """
self._get_create_builds(success=10, failure=10)
@@ -375,3 +441,55 @@ class TestProjectPage(SeleniumFunctionalTestCase):
self.assertTrue(
'core-image-minimal' in str(last_build.text)
)
+
+ def test_softwareRecipe_page(self):
+ """ Test software recipe page
+ - Check title "Compatible software recipes" is displayed
+ - Check search input
+ - Check "build recipe" button works
+ - Check software recipe table feature(show/hide column, pagination)
+ """
+ self._navigate_to_config_nav('softwarerecipestable', 4)
+ # check title "Compatible software recipes" is displayed
+ self.assertTrue("Compatible software recipes" in self.get_page_source())
+ # Test search input
+ self._mixin_test_table_search_input(
+ input_selector='search-input-softwarerecipestable',
+ input_text='busybox',
+ searchBtn_selector='search-submit-softwarerecipestable',
+ table_selector='softwarerecipestable'
+ )
+ # check "build recipe" button works
+ rows = self.find_all('#softwarerecipestable tbody tr')
+ image_to_build = rows[0]
+ build_btn = image_to_build.find_element(
+ By.XPATH,
+ '//td[@class="add-del-layers"]'
+ )
+ build_btn.click()
+ self._wait_until_build('parsing starting cloning')
+ lastest_builds = self.driver.find_elements(
+ By.XPATH,
+ '//div[@id="latest-builds"]/div'
+ )
+ self.assertTrue(len(lastest_builds) > 0)
+
+ # check software recipe table feature(show/hide column, pagination)
+ self._navigate_to_config_nav('softwarerecipestable', 4)
+ column_list = [
+ 'get_description_or_summary',
+ 'layer_version__get_vcs_reference',
+ 'layer_version__layer__name',
+ 'license',
+ 'recipe-file',
+ 'section',
+ 'version',
+ ]
+ self._mixin_test_table_edit_column(
+ 'softwarerecipestable',
+ 'edit-columns-button',
+ [f'checkbox-{column}' for column in column_list]
+ )
+ self._navigate_to_config_nav('softwarerecipestable', 4)
+ # check show rows(pagination)
+ self._mixin_test_table_show_rows(table_selector='softwarerecipestable')
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 4/9] toaster/test: Added Machine page TestCase
2023-11-29 22:53 [PATCH 1/9] toaster/tests: Update methods wait_until_~ to skip using time.sleep Alassane Yattara
2023-11-29 22:53 ` [PATCH 2/9] toaster/test: Override table edit columns TestCase from image recipe page Alassane Yattara
2023-11-29 22:53 ` [PATCH 3/9] toaster/test: Test software " Alassane Yattara
@ 2023-11-29 22:53 ` Alassane Yattara
2023-11-29 22:53 ` [PATCH 5/9] toaster/test: Added Layers " Alassane Yattara
` (4 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Alassane Yattara @ 2023-11-29 22:53 UTC (permalink / raw)
To: toaster; +Cc: Alassane Yattara
Test Machine page
- Check if title "Compatible machines" is displayed
- Check search input
- Check "Select machine" button works
- Check "Add layer" button works
- Check Machine table feature(show/hide column, pagination)
Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
---
.../tests/functional/test_project_page.py | 79 +++++++++++++++++++
1 file changed, 79 insertions(+)
diff --git a/lib/toaster/tests/functional/test_project_page.py b/lib/toaster/tests/functional/test_project_page.py
index 28f1fcb6..46a60c01 100644
--- a/lib/toaster/tests/functional/test_project_page.py
+++ b/lib/toaster/tests/functional/test_project_page.py
@@ -493,3 +493,82 @@ class TestProjectPage(SeleniumFunctionalTestCase):
self._navigate_to_config_nav('softwarerecipestable', 4)
# check show rows(pagination)
self._mixin_test_table_show_rows(table_selector='softwarerecipestable')
+
+ def test_machines_page(self):
+ """ Test Machine page
+ - Check if title "Compatible machines" is displayed
+ - Check search input
+ - Check "Select machine" button works
+ - Check "Add layer" button works
+ - Check Machine table feature(show/hide column, pagination)
+ """
+ self._navigate_to_config_nav('machinestable', 5)
+ # check title "Compatible software recipes" is displayed
+ self.assertTrue("Compatible machines" in self.get_page_source())
+ # Test search input
+ self._mixin_test_table_search_input(
+ input_selector='search-input-machinestable',
+ input_text='qemux86-64',
+ searchBtn_selector='search-submit-machinestable',
+ table_selector='machinestable'
+ )
+ # check "Select machine" button works
+ rows = self.find_all('#machinestable tbody tr')
+ machine_to_select = rows[0]
+ select_btn = machine_to_select.find_element(
+ By.XPATH,
+ '//td[@class="add-del-layers"]'
+ )
+ select_btn.click()
+ self.wait_until_visible('#config-nav')
+ project_machine_name = self.find('#project-machine-name')
+ self.assertTrue(
+ 'qemux86-64' in project_machine_name.text
+ )
+ # check "Add layer" button works
+ self._navigate_to_config_nav('machinestable', 5)
+ # Search for a machine whit layer not in project
+ self._mixin_test_table_search_input(
+ input_selector='search-input-machinestable',
+ input_text='qemux86-64-screen',
+ searchBtn_selector='search-submit-machinestable',
+ table_selector='machinestable'
+ )
+ rows = self.find_all('#machinestable tbody tr')
+ machine_to_add = rows[0]
+ add_btn = machine_to_add.find_element(
+ By.XPATH,
+ '//td[@class="add-del-layers"]'
+ )
+ add_btn.click()
+ # check modal is displayed
+ self.wait_until_visible('#dependencies-modal')
+ list_dependencies = self.find_all('#dependencies-list li')
+ # click on add-layers button
+ add_layers_btn = self.driver.find_element(
+ By.XPATH,
+ '//form[@id="dependencies-modal-form"]//button[@class="btn btn-primary"]'
+ )
+ add_layers_btn.click()
+ self.wait_until_visible('#change-notification')
+ change_notification = self.find('#change-notification')
+ self.assertTrue(
+ f'You have added {len(list_dependencies)+1} layers to your project: meta-tanowrt and its dependencies' in change_notification.text
+ )
+
+ # check Machine table feature(show/hide column, pagination)
+ self._navigate_to_config_nav('machinestable', 5)
+ column_list = [
+ 'description',
+ 'layer_version__get_vcs_reference',
+ 'layer_version__layer__name',
+ 'machinefile',
+ ]
+ self._mixin_test_table_edit_column(
+ 'machinestable',
+ 'edit-columns-button',
+ [f'checkbox-{column}' for column in column_list]
+ )
+ self._navigate_to_config_nav('machinestable', 5)
+ # check show rows(pagination)
+ self._mixin_test_table_show_rows(table_selector='machinestable')
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 5/9] toaster/test: Added Layers page TestCase
2023-11-29 22:53 [PATCH 1/9] toaster/tests: Update methods wait_until_~ to skip using time.sleep Alassane Yattara
` (2 preceding siblings ...)
2023-11-29 22:53 ` [PATCH 4/9] toaster/test: Added Machine page TestCase Alassane Yattara
@ 2023-11-29 22:53 ` Alassane Yattara
2023-11-29 22:53 ` [PATCH 6/9] toaster/test: Added distro " Alassane Yattara
` (3 subsequent siblings)
7 siblings, 0 replies; 13+ messages in thread
From: Alassane Yattara @ 2023-11-29 22:53 UTC (permalink / raw)
To: toaster; +Cc: Alassane Yattara
Test layers page
- Check if title "Compatible layerss" is displayed
- Check search input
- Check "Add layer" button works
- Check "Remove layer" button works
- Check layers table feature(show/hide column, pagination)
Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
---
.../tests/functional/test_project_page.py | 72 +++++++++++++++++++
1 file changed, 72 insertions(+)
diff --git a/lib/toaster/tests/functional/test_project_page.py b/lib/toaster/tests/functional/test_project_page.py
index 46a60c01..47dec1d9 100644
--- a/lib/toaster/tests/functional/test_project_page.py
+++ b/lib/toaster/tests/functional/test_project_page.py
@@ -572,3 +572,75 @@ class TestProjectPage(SeleniumFunctionalTestCase):
self._navigate_to_config_nav('machinestable', 5)
# check show rows(pagination)
self._mixin_test_table_show_rows(table_selector='machinestable')
+
+ def test_layers_page(self):
+ """ Test layers page
+ - Check if title "Compatible layerss" is displayed
+ - Check search input
+ - Check "Add layer" button works
+ - Check "Remove layer" button works
+ - Check layers table feature(show/hide column, pagination)
+ """
+ self._navigate_to_config_nav('layerstable', 6)
+ # check title "Compatible layers" is displayed
+ self.assertTrue("Compatible layers" in self.get_page_source())
+ # Test search input
+ input_text='meta-tanowrt'
+ self._mixin_test_table_search_input(
+ input_selector='search-input-layerstable',
+ input_text=input_text,
+ searchBtn_selector='search-submit-layerstable',
+ table_selector='layerstable'
+ )
+ # check "Add layer" button works
+ rows = self.find_all('#layerstable tbody tr')
+ layer_to_add = rows[0]
+ add_btn = layer_to_add.find_element(
+ By.XPATH,
+ '//td[@class="add-del-layers"]'
+ )
+ add_btn.click()
+ # check modal is displayed
+ self.wait_until_visible('#dependencies-modal')
+ list_dependencies = self.find_all('#dependencies-list li')
+ # click on add-layers button
+ add_layers_btn = self.driver.find_element(
+ By.XPATH,
+ '//form[@id="dependencies-modal-form"]//button[@class="btn btn-primary"]'
+ )
+ add_layers_btn.click()
+ self.wait_until_visible('#change-notification')
+ change_notification = self.find('#change-notification')
+ self.assertTrue(
+ f'You have added {len(list_dependencies)+1} layers to your project: {input_text} and its dependencies' in change_notification.text
+ )
+ # check "Remove layer" button works
+ rows = self.find_all('#layerstable tbody tr')
+ layer_to_remove = rows[0]
+ remove_btn = layer_to_remove.find_element(
+ By.XPATH,
+ '//td[@class="add-del-layers"]'
+ )
+ remove_btn.click()
+ self.wait_until_visible('#change-notification', poll=2)
+ change_notification = self.find('#change-notification')
+ self.assertTrue(
+ f'You have removed 1 layer from your project: {input_text}' in change_notification.text
+ )
+ # check layers table feature(show/hide column, pagination)
+ self._navigate_to_config_nav('layerstable', 6)
+ column_list = [
+ 'dependencies',
+ 'revision',
+ 'layer__vcs_url',
+ 'git_subdir',
+ 'layer__summary',
+ ]
+ self._mixin_test_table_edit_column(
+ 'layerstable',
+ 'edit-columns-button',
+ [f'checkbox-{column}' for column in column_list]
+ )
+ self._navigate_to_config_nav('layerstable', 6)
+ # check show rows(pagination)
+ self._mixin_test_table_show_rows(table_selector='layerstable')
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 6/9] toaster/test: Added distro page TestCase
2023-11-29 22:53 [PATCH 1/9] toaster/tests: Update methods wait_until_~ to skip using time.sleep Alassane Yattara
` (3 preceding siblings ...)
2023-11-29 22:53 ` [PATCH 5/9] toaster/test: Added Layers " Alassane Yattara
@ 2023-11-29 22:53 ` Alassane Yattara
2023-11-30 17:28 ` [Toaster] " Richard Purdie
2023-11-29 22:53 ` [PATCH 7/9] toaster/test: Bug-fix on tests/functional/test_project_page Alassane Yattara
` (2 subsequent siblings)
7 siblings, 1 reply; 13+ messages in thread
From: Alassane Yattara @ 2023-11-29 22:53 UTC (permalink / raw)
To: toaster; +Cc: Alassane Yattara
Test distros page
- Check if title "Compatible distros" is displayed
- Check search input
- Check "Add layer" button works
- Check distro table feature(show/hide column, pagination)
Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
---
.../tests/functional/test_project_page.py | 51 +++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/lib/toaster/tests/functional/test_project_page.py b/lib/toaster/tests/functional/test_project_page.py
index 47dec1d9..dd33e802 100644
--- a/lib/toaster/tests/functional/test_project_page.py
+++ b/lib/toaster/tests/functional/test_project_page.py
@@ -644,3 +644,54 @@ class TestProjectPage(SeleniumFunctionalTestCase):
self._navigate_to_config_nav('layerstable', 6)
# check show rows(pagination)
self._mixin_test_table_show_rows(table_selector='layerstable')
+
+ def test_distro_page(self):
+ """ Test distros page
+ - Check if title "Compatible distros" is displayed
+ - Check search input
+ - Check "Add layer" button works
+ - Check distro table feature(show/hide column, pagination)
+ """
+ self._navigate_to_config_nav('distrostable', 7)
+ # check title "Compatible distros" is displayed
+ self.assertTrue("Compatible Distros" in self.get_page_source())
+ # Test search input
+ input_text='poky-altcfg'
+ self._mixin_test_table_search_input(
+ input_selector='search-input-distrostable',
+ input_text=input_text,
+ searchBtn_selector='search-submit-distrostable',
+ table_selector='distrostable'
+ )
+ # check "Add distro" button works
+ rows = self.find_all('#distrostable tbody tr')
+ distro_to_add = rows[0]
+ add_btn = distro_to_add.find_element(
+ By.XPATH,
+ '//td[@class="add-del-layers"]'
+ )
+ add_btn.click()
+ self.wait_until_visible('#change-notification', poll=2)
+ change_notification = self.find('#change-notification')
+ self.assertTrue(
+ f'You have changed the distro to: {input_text}' in change_notification.text
+ )
+ # check distro table feature(show/hide column, pagination)
+ self._navigate_to_config_nav('distrostable', 7)
+ column_list = [
+ 'description',
+ 'templatefile',
+ 'layer_version__get_vcs_reference',
+ 'layer_version__layer__name',
+ ]
+ self._mixin_test_table_edit_column(
+ 'distrostable',
+ 'edit-columns-button',
+ [f'checkbox-{column}' for column in column_list]
+ )
+ self._navigate_to_config_nav('distrostable', 7)
+ # check show rows(pagination)
+ self._mixin_test_table_show_rows(
+ table_selector='distrostable',
+ to_skip=[150]
+ )
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 7/9] toaster/test: Bug-fix on tests/functional/test_project_page
2023-11-29 22:53 [PATCH 1/9] toaster/tests: Update methods wait_until_~ to skip using time.sleep Alassane Yattara
` (4 preceding siblings ...)
2023-11-29 22:53 ` [PATCH 6/9] toaster/test: Added distro " Alassane Yattara
@ 2023-11-29 22:53 ` Alassane Yattara
2023-11-29 22:53 ` [PATCH 8/9] toaster/test: Test single layer page Alassane Yattara
2023-11-29 22:53 ` [PATCH 9/9] toaster/test: Test single recipe page Alassane Yattara
7 siblings, 0 replies; 13+ messages in thread
From: Alassane Yattara @ 2023-11-29 22:53 UTC (permalink / raw)
To: toaster; +Cc: Alassane Yattara
- Generate a random name for create project while test
- Set timeout on method _wait_until_build
- update test_machines_page, test_softwareRecipe_page and
test_single_layer_page to fix exception "element not interactable"
Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
---
.../tests/functional/test_project_page.py | 64 +++++++++----------
1 file changed, 32 insertions(+), 32 deletions(-)
diff --git a/lib/toaster/tests/functional/test_project_page.py b/lib/toaster/tests/functional/test_project_page.py
index dd33e802..70829509 100644
--- a/lib/toaster/tests/functional/test_project_page.py
+++ b/lib/toaster/tests/functional/test_project_page.py
@@ -6,12 +6,15 @@
# SPDX-License-Identifier: GPL-2.0-only
#
+import random
+import string
import pytest
from time import sleep
from django.urls import reverse
from django.utils import timezone
+from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.select import Select
-from selenium.common.exceptions import NoSuchElementException
+from selenium.common.exceptions import NoSuchElementException, TimeoutException
from tests.functional.functional_helpers import SeleniumFunctionalTestCase
from orm.models import Build, Project, Target
from selenium.webdriver.common.by import By
@@ -23,13 +26,18 @@ class TestProjectPage(SeleniumFunctionalTestCase):
def setUp(self):
super().setUp()
release = '3'
- project_name = 'projectmaster'
+ project_name = 'project_' + self.generate_random_string()
self._create_test_new_project(
project_name,
release,
False,
)
+ def generate_random_string(self, length=10):
+ characters = string.ascii_letters + string.digits # alphabetic and numerical characters
+ random_string = ''.join(random.choice(characters) for _ in range(length))
+ return random_string
+
def _create_test_new_project(
self,
project_name,
@@ -204,7 +212,13 @@ class TestProjectPage(SeleniumFunctionalTestCase):
test_show_rows(row_to_show, show_row_link)
def _wait_until_build(self, state):
+ timeout = 10
+ start_time = 0
while True:
+ if start_time > timeout:
+ raise TimeoutException(
+ f'Build did not reach {state} state within {timeout} seconds'
+ )
try:
last_build_state = self.driver.find_element(
By.XPATH,
@@ -217,7 +231,8 @@ class TestProjectPage(SeleniumFunctionalTestCase):
break
except NoSuchElementException:
continue
- sleep(1)
+ start_time += 1
+ sleep(1) # take a breath and try again
def _mixin_test_table_search_input(self, **kwargs):
input_selector, input_text, searchBtn_selector, table_selector, *_ = kwargs.values()
@@ -380,11 +395,9 @@ class TestProjectPage(SeleniumFunctionalTestCase):
self.wait_until_visible('#topbar-configuration-tab')
config_tab = self.find('#topbar-configuration-tab')
self.assertTrue(config_tab.get_attribute('class') == 'active')
- self.assertTrue('Configuration' in config_tab.text)
- config_tab_link = config_tab.find_element(By.TAG_NAME, 'a')
+ self.assertTrue('Configuration' in str(config_tab.text))
self.assertTrue(
- f"/toastergui/project/1" in str(config_tab_link.get_attribute(
- 'href'))
+ f"/toastergui/project/1" in str(self.driver.current_url)
)
def get_tabs():
@@ -464,10 +477,10 @@ class TestProjectPage(SeleniumFunctionalTestCase):
image_to_build = rows[0]
build_btn = image_to_build.find_element(
By.XPATH,
- '//td[@class="add-del-layers"]'
+ '//td[@class="add-del-layers"]//a[1]'
)
build_btn.click()
- self._wait_until_build('parsing starting cloning')
+ self._wait_until_build('parsing starting cloning queued')
lastest_builds = self.driver.find_elements(
By.XPATH,
'//div[@id="latest-builds"]/div'
@@ -517,9 +530,9 @@ class TestProjectPage(SeleniumFunctionalTestCase):
machine_to_select = rows[0]
select_btn = machine_to_select.find_element(
By.XPATH,
- '//td[@class="add-del-layers"]'
+ '//td[@class="add-del-layers"]//a[1]'
)
- select_btn.click()
+ select_btn.send_keys(Keys.RETURN)
self.wait_until_visible('#config-nav')
project_machine_name = self.find('#project-machine-name')
self.assertTrue(
@@ -530,32 +543,19 @@ class TestProjectPage(SeleniumFunctionalTestCase):
# Search for a machine whit layer not in project
self._mixin_test_table_search_input(
input_selector='search-input-machinestable',
- input_text='qemux86-64-screen',
+ input_text='qemux86-64-tpm2',
searchBtn_selector='search-submit-machinestable',
table_selector='machinestable'
)
rows = self.find_all('#machinestable tbody tr')
machine_to_add = rows[0]
- add_btn = machine_to_add.find_element(
- By.XPATH,
- '//td[@class="add-del-layers"]'
- )
+ add_btn = machine_to_add.find_element(By.XPATH, '//td[@class="add-del-layers"]')
add_btn.click()
- # check modal is displayed
- self.wait_until_visible('#dependencies-modal')
- list_dependencies = self.find_all('#dependencies-list li')
- # click on add-layers button
- add_layers_btn = self.driver.find_element(
- By.XPATH,
- '//form[@id="dependencies-modal-form"]//button[@class="btn btn-primary"]'
- )
- add_layers_btn.click()
self.wait_until_visible('#change-notification')
change_notification = self.find('#change-notification')
self.assertTrue(
- f'You have added {len(list_dependencies)+1} layers to your project: meta-tanowrt and its dependencies' in change_notification.text
+ f'You have added 1 layer to your project' in str(change_notification.text)
)
-
# check Machine table feature(show/hide column, pagination)
self._navigate_to_config_nav('machinestable', 5)
column_list = [
@@ -601,7 +601,7 @@ class TestProjectPage(SeleniumFunctionalTestCase):
)
add_btn.click()
# check modal is displayed
- self.wait_until_visible('#dependencies-modal')
+ self.wait_until_visible('#dependencies-modal', poll=2)
list_dependencies = self.find_all('#dependencies-list li')
# click on add-layers button
add_layers_btn = self.driver.find_element(
@@ -612,7 +612,7 @@ class TestProjectPage(SeleniumFunctionalTestCase):
self.wait_until_visible('#change-notification')
change_notification = self.find('#change-notification')
self.assertTrue(
- f'You have added {len(list_dependencies)+1} layers to your project: {input_text} and its dependencies' in change_notification.text
+ f'You have added {len(list_dependencies)+1} layers to your project: {input_text} and its dependencies' in str(change_notification.text)
)
# check "Remove layer" button works
rows = self.find_all('#layerstable tbody tr')
@@ -625,7 +625,7 @@ class TestProjectPage(SeleniumFunctionalTestCase):
self.wait_until_visible('#change-notification', poll=2)
change_notification = self.find('#change-notification')
self.assertTrue(
- f'You have removed 1 layer from your project: {input_text}' in change_notification.text
+ f'You have removed 1 layer from your project: {input_text}' in str(change_notification.text)
)
# check layers table feature(show/hide column, pagination)
self._navigate_to_config_nav('layerstable', 6)
@@ -668,13 +668,13 @@ class TestProjectPage(SeleniumFunctionalTestCase):
distro_to_add = rows[0]
add_btn = distro_to_add.find_element(
By.XPATH,
- '//td[@class="add-del-layers"]'
+ '//td[@class="add-del-layers"]//a[1]'
)
add_btn.click()
self.wait_until_visible('#change-notification', poll=2)
change_notification = self.find('#change-notification')
self.assertTrue(
- f'You have changed the distro to: {input_text}' in change_notification.text
+ f'You have changed the distro to: {input_text}' in str(change_notification.text)
)
# check distro table feature(show/hide column, pagination)
self._navigate_to_config_nav('distrostable', 7)
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 8/9] toaster/test: Test single layer page
2023-11-29 22:53 [PATCH 1/9] toaster/tests: Update methods wait_until_~ to skip using time.sleep Alassane Yattara
` (5 preceding siblings ...)
2023-11-29 22:53 ` [PATCH 7/9] toaster/test: Bug-fix on tests/functional/test_project_page Alassane Yattara
@ 2023-11-29 22:53 ` Alassane Yattara
2023-11-29 22:53 ` [PATCH 9/9] toaster/test: Test single recipe page Alassane Yattara
7 siblings, 0 replies; 13+ messages in thread
From: Alassane Yattara @ 2023-11-29 22:53 UTC (permalink / raw)
To: toaster; +Cc: Alassane Yattara
Test layer page
- Check if title is displayed
- Check add/remove layer button works
- Check tabs(layers, recipes, machines) are displayed
- Check left section is displayed
- Check layer name
- Check layer summary
- Check layer description
Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
---
.../tests/functional/test_project_page.py | 61 +++++++++++++++++++
1 file changed, 61 insertions(+)
diff --git a/lib/toaster/tests/functional/test_project_page.py b/lib/toaster/tests/functional/test_project_page.py
index 70829509..771a8484 100644
--- a/lib/toaster/tests/functional/test_project_page.py
+++ b/lib/toaster/tests/functional/test_project_page.py
@@ -695,3 +695,64 @@ class TestProjectPage(SeleniumFunctionalTestCase):
table_selector='distrostable',
to_skip=[150]
)
+
+ def test_single_layer_page(self):
+ """ Test layer page
+ - Check if title is displayed
+ - Check add/remove layer button works
+ - Check tabs(layers, recipes, machines) are displayed
+ - Check left section is displayed
+ - Check layer name
+ - Check layer summary
+ - Check layer description
+ """
+ url = reverse("layerdetails", args=(1, 8))
+ self.get(url)
+ self.wait_until_visible('.page-header')
+ # check title is displayed
+ self.assertTrue(self.find('.page-header h1').is_displayed())
+
+ # check add layer button works
+ remove_layer_btn = self.find('#add-remove-layer-btn')
+ remove_layer_btn.click()
+ self.wait_until_visible('#change-notification', poll=2)
+ change_notification = self.find('#change-notification')
+ self.assertTrue(
+ f'You have removed 1 layer from your project' in str(change_notification.text)
+ )
+ # check add layer button works, 18 is the random layer id
+ add_layer_btn = self.find('#add-remove-layer-btn')
+ add_layer_btn.click()
+ self.wait_until_visible('#change-notification')
+ change_notification = self.find('#change-notification')
+ self.assertTrue(
+ f'You have added 1 layer to your project' in str(change_notification.text)
+ )
+ # check tabs(layers, recipes, machines) are displayed
+ tabs = self.find_all('.nav-tabs li')
+ self.assertEqual(len(tabs), 3)
+ # Check first tab
+ tabs[0].click()
+ self.assertTrue(
+ 'active' in str(self.find('#information').get_attribute('class'))
+ )
+ # Check second tab
+ tabs[1].click()
+ self.assertTrue(
+ 'active' in str(self.find('#recipes').get_attribute('class'))
+ )
+ # Check third tab
+ tabs[2].click()
+ self.assertTrue(
+ 'active' in str(self.find('#machines').get_attribute('class'))
+ )
+ # Check left section is displayed
+ section = self.find('.well')
+ # Check layer name
+ self.assertTrue(
+ section.find_element(By.XPATH, '//h2[1]').is_displayed()
+ )
+ # Check layer summary
+ self.assertTrue("Summary" in section.text)
+ # Check layer description
+ self.assertTrue("Description" in section.text)
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* [PATCH 9/9] toaster/test: Test single recipe page
2023-11-29 22:53 [PATCH 1/9] toaster/tests: Update methods wait_until_~ to skip using time.sleep Alassane Yattara
` (6 preceding siblings ...)
2023-11-29 22:53 ` [PATCH 8/9] toaster/test: Test single layer page Alassane Yattara
@ 2023-11-29 22:53 ` Alassane Yattara
7 siblings, 0 replies; 13+ messages in thread
From: Alassane Yattara @ 2023-11-29 22:53 UTC (permalink / raw)
To: toaster; +Cc: Alassane Yattara
Test recipe page
- Check if title is displayed
- Check add recipe layer displayed
- Check left section is displayed
- Check recipe: name, summary, description, Version, Section,
License, Approx. packages included, Approx. size, Recipe file
Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
---
.../tests/functional/test_project_page.py | 32 +++++++++++++++++++
1 file changed, 32 insertions(+)
diff --git a/lib/toaster/tests/functional/test_project_page.py b/lib/toaster/tests/functional/test_project_page.py
index 771a8484..03f64f8f 100644
--- a/lib/toaster/tests/functional/test_project_page.py
+++ b/lib/toaster/tests/functional/test_project_page.py
@@ -756,3 +756,35 @@ class TestProjectPage(SeleniumFunctionalTestCase):
self.assertTrue("Summary" in section.text)
# Check layer description
self.assertTrue("Description" in section.text)
+
+ def test_single_recipe_page(self):
+ """ Test recipe page
+ - Check if title is displayed
+ - Check add recipe layer displayed
+ - Check left section is displayed
+ - Check recipe: name, summary, description, Version, Section,
+ License, Approx. packages included, Approx. size, Recipe file
+ """
+ url = reverse("recipedetails", args=(1, 53428))
+ self.get(url)
+ self.wait_until_visible('.page-header')
+ # check title is displayed
+ self.assertTrue(self.find('.page-header h1').is_displayed())
+ # check add recipe layer displayed
+ add_recipe_layer_btn = self.find('#add-layer-btn')
+ self.assertTrue(add_recipe_layer_btn.is_displayed())
+ # check left section is displayed
+ section = self.find('.well')
+ # Check recipe name
+ self.assertTrue(
+ section.find_element(By.XPATH, '//h2[1]').is_displayed()
+ )
+ # Check recipe sections details info are displayed
+ self.assertTrue("Summary" in section.text)
+ self.assertTrue("Description" in section.text)
+ self.assertTrue("Version" in section.text)
+ self.assertTrue("Section" in section.text)
+ self.assertTrue("License" in section.text)
+ self.assertTrue("Approx. packages included" in section.text)
+ self.assertTrue("Approx. package size" in section.text)
+ self.assertTrue("Recipe file" in section.text)
--
2.34.1
^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Toaster] [PATCH 6/9] toaster/test: Added distro page TestCase
2023-11-29 22:53 ` [PATCH 6/9] toaster/test: Added distro " Alassane Yattara
@ 2023-11-30 17:28 ` Richard Purdie
2023-11-30 18:29 ` Alassane Yattara
0 siblings, 1 reply; 13+ messages in thread
From: Richard Purdie @ 2023-11-30 17:28 UTC (permalink / raw)
To: Alassane Yattara, toaster
On Wed, 2023-11-29 at 23:53 +0100, Alassane Yattara wrote:
> Test distros page
> - Check if title "Compatible distros" is displayed
> - Check search input
> - Check "Add layer" button works
> - Check distro table feature(show/hide column, pagination)
>
> Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
> ---
> .../tests/functional/test_project_page.py | 51 +++++++++++++++++++
> 1 file changed, 51 insertions(+)
I put these into testing but we're seeing failures, including in some
of the new tests such as the one in this patch:
https://autobuilder.yoctoproject.org/typhoon/#/builders/161/builds/12/steps/11/logs/stdio
Cheers,
Richard
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Toaster] [PATCH 6/9] toaster/test: Added distro page TestCase
2023-11-30 17:28 ` [Toaster] " Richard Purdie
@ 2023-11-30 18:29 ` Alassane Yattara
2023-11-30 22:24 ` Richard Purdie
0 siblings, 1 reply; 13+ messages in thread
From: Alassane Yattara @ 2023-11-30 18:29 UTC (permalink / raw)
To: Richard Purdie; +Cc: toaster
Hello Richard,
Yes, some tests do fail when we run all the test suites together, we are working to resolve this issue:
Here are some bugs that we know cause errors/failures:
- Testcases fails when they are run out sequence, mainly testcases from tests/functional/
- Build need some fix to work with pytest
- Better handle delay between driver actions instead of using time.sleep.
All test suites should pass once the above bugs have been fixed.
Next actions:
1 - Can you merge these patches, w'll send new patches that fix the above mentioned issues ? Or,
2 - Update current patches to fix above mentioned bugs and re-send patches.
Thanks
Alassane
----- Mail original -----
De: "Richard Purdie" <richard.purdie@linuxfoundation.org>
À: "Alassane Yattara" <alassane.yattara@savoirfairelinux.com>, "toaster" <toaster@lists.yoctoproject.org>
Envoyé: Jeudi 30 Novembre 2023 18:28:53
Objet: Re: [Toaster] [PATCH 6/9] toaster/test: Added distro page TestCase
On Wed, 2023-11-29 at 23:53 +0100, Alassane Yattara wrote:
> Test distros page
> - Check if title "Compatible distros" is displayed
> - Check search input
> - Check "Add layer" button works
> - Check distro table feature(show/hide column, pagination)
>
> Signed-off-by: Alassane Yattara <alassane.yattara@savoirfairelinux.com>
> ---
> .../tests/functional/test_project_page.py | 51 +++++++++++++++++++
> 1 file changed, 51 insertions(+)
I put these into testing but we're seeing failures, including in some
of the new tests such as the one in this patch:
https://autobuilder.yoctoproject.org/typhoon/#/builders/161/builds/12/steps/11/logs/stdio
Cheers,
Richard
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#6035): https://lists.yoctoproject.org/g/toaster/message/6035
Mute This Topic: https://lists.yoctoproject.org/mt/102882948/7896845
Group Owner: toaster+owner@lists.yoctoproject.org
Unsubscribe: https://lists.yoctoproject.org/g/toaster/unsub [alassane.yattara@savoirfairelinux.com]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Toaster] [PATCH 6/9] toaster/test: Added distro page TestCase
2023-11-30 18:29 ` Alassane Yattara
@ 2023-11-30 22:24 ` Richard Purdie
2023-11-30 22:43 ` Alassane Yattara
0 siblings, 1 reply; 13+ messages in thread
From: Richard Purdie @ 2023-11-30 22:24 UTC (permalink / raw)
To: Alassane Yattara; +Cc: toaster
Hi Alassane,
On Thu, 2023-11-30 at 13:29 -0500, Alassane Yattara wrote:
> Yes, some tests do fail when we run all the test suites together, we are working to resolve this issue:
> Here are some bugs that we know cause errors/failures:
>
> - Testcases fails when they are run out sequence, mainly testcases from tests/functional/
> - Build need some fix to work with pytest
> - Better handle delay between driver actions instead of using time.sleep.
>
> All test suites should pass once the above bugs have been fixed.
>
> Next actions:
> 1 - Can you merge these patches, w'll send new patches that fix the above mentioned issues ? Or,
> 2 - Update current patches to fix above mentioned bugs and re-send patches.
I think I will merge them and we can continue to work on things. With
the fix from Alexander it does look like we've improved on some of the
errors.
Cheers,
Richard
^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Toaster] [PATCH 6/9] toaster/test: Added distro page TestCase
2023-11-30 22:24 ` Richard Purdie
@ 2023-11-30 22:43 ` Alassane Yattara
0 siblings, 0 replies; 13+ messages in thread
From: Alassane Yattara @ 2023-11-30 22:43 UTC (permalink / raw)
To: Richard Purdie; +Cc: toaster
Richard,
All right, once done w'll send fixes as new patches serie.
Thanks
Alassane
----- Mail original -----
De: "Richard Purdie" <richard.purdie@linuxfoundation.org>
À: "Alassane Yattara" <alassane.yattara@savoirfairelinux.com>
Cc: "toaster" <toaster@lists.yoctoproject.org>
Envoyé: Jeudi 30 Novembre 2023 23:24:19
Objet: Re: [Toaster] [PATCH 6/9] toaster/test: Added distro page TestCase
Hi Alassane,
On Thu, 2023-11-30 at 13:29 -0500, Alassane Yattara wrote:
> Yes, some tests do fail when we run all the test suites together, we are working to resolve this issue:
> Here are some bugs that we know cause errors/failures:
>
> - Testcases fails when they are run out sequence, mainly testcases from tests/functional/
> - Build need some fix to work with pytest
> - Better handle delay between driver actions instead of using time.sleep.
>
> All test suites should pass once the above bugs have been fixed.
>
> Next actions:
> 1 - Can you merge these patches, w'll send new patches that fix the above mentioned issues ? Or,
> 2 - Update current patches to fix above mentioned bugs and re-send patches.
I think I will merge them and we can continue to work on things. With
the fix from Alexander it does look like we've improved on some of the
errors.
Cheers,
Richard
-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#6040): https://lists.yoctoproject.org/g/toaster/message/6040
Mute This Topic: https://lists.yoctoproject.org/mt/102882948/7896845
Group Owner: toaster+owner@lists.yoctoproject.org
Unsubscribe: https://lists.yoctoproject.org/g/toaster/unsub [alassane.yattara@savoirfairelinux.com]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2023-11-30 22:43 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-11-29 22:53 [PATCH 1/9] toaster/tests: Update methods wait_until_~ to skip using time.sleep Alassane Yattara
2023-11-29 22:53 ` [PATCH 2/9] toaster/test: Override table edit columns TestCase from image recipe page Alassane Yattara
2023-11-29 22:53 ` [PATCH 3/9] toaster/test: Test software " Alassane Yattara
2023-11-29 22:53 ` [PATCH 4/9] toaster/test: Added Machine page TestCase Alassane Yattara
2023-11-29 22:53 ` [PATCH 5/9] toaster/test: Added Layers " Alassane Yattara
2023-11-29 22:53 ` [PATCH 6/9] toaster/test: Added distro " Alassane Yattara
2023-11-30 17:28 ` [Toaster] " Richard Purdie
2023-11-30 18:29 ` Alassane Yattara
2023-11-30 22:24 ` Richard Purdie
2023-11-30 22:43 ` Alassane Yattara
2023-11-29 22:53 ` [PATCH 7/9] toaster/test: Bug-fix on tests/functional/test_project_page Alassane Yattara
2023-11-29 22:53 ` [PATCH 8/9] toaster/test: Test single layer page Alassane Yattara
2023-11-29 22:53 ` [PATCH 9/9] toaster/test: Test single recipe page Alassane Yattara
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).