toaster.lists.yoctoproject.org archive mirror
 help / color / mirror / Atom feed
* [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).