Running '. ./init-build-env; ${SCRIPTSDIR}/run-toaster-tests /srv/pokybuild/yocto-worker/toaster/build/build /srv/pokybuild/yocto-worker/toaster/build/build/../layers/bitbake' with output to /srv/pokybuild/yocto-worker/toaster/build/build/command-1-cmds.log in /srv/pokybuild/yocto-worker/toaster/build/build
Poky - The Yocto Project testing distribution
++ realpath /srv/pokybuild/yocto-worker/toaster/build/build
+ builddir=/srv/pokybuild/yocto-worker/toaster/build/build
++ realpath /srv/pokybuild/yocto-worker/toaster/build/build/../layers/bitbake
+ bitbakedir=/srv/pokybuild/yocto-worker/toaster/build/layers/bitbake
+ cd /srv/pokybuild/yocto-worker/toaster/build/build
+ bitbake -e
++ grep '^SSTATE_DIR=' bbenv
++ cut -d = -f2-
++ sed -e 's/^"//' -e 's/"$//'
+ export SSTATE_DIR=/srv/autobuilder/valkyrie.yocto.io/pub/sstate
+ SSTATE_DIR=/srv/autobuilder/valkyrie.yocto.io/pub/sstate
++ grep '^DL_DIR=' bbenv
++ cut -d = -f2-
++ sed -e 's/^"//' -e 's/"$//'
+ export DL_DIR=/srv/autobuilder/valkyrie.yocto.io/current_sources
+ DL_DIR=/srv/autobuilder/valkyrie.yocto.io/current_sources
++ grep '^BB_HASHSERVE=' bbenv
++ cut -d = -f2-
++ sed -e 's/^"//' -e 's/"$//'
+ export BB_HASHSERVE=wss://hashserv-eu.yoctoproject.org/ws
+ BB_HASHSERVE=wss://hashserv-eu.yoctoproject.org/ws
+ export TOASTER_DJANGO_TMPDIR=/srv/pokybuild/yocto-worker/toaster/build/build
+ TOASTER_DJANGO_TMPDIR=/srv/pokybuild/yocto-worker/toaster/build/build
+ export TOASTER_DIR=/srv/pokybuild/yocto-worker/toaster/build/build
+ TOASTER_DIR=/srv/pokybuild/yocto-worker/toaster/build/build
+ export TOASTER_TEST_USE_SSTATE_MIRROR=True
+ TOASTER_TEST_USE_SSTATE_MIRROR=True
+ export BUILDDIR=/srv/pokybuild/yocto-worker/toaster/build/build/
+ BUILDDIR=/srv/pokybuild/yocto-worker/toaster/build/build/
+ mkdir -p toaster_logs
+ python3 -m venv venv --without-pip --system-site-packages
+ source venv/bin/activate
++ deactivate nondestructive
++ '[' -n '' ']'
++ '[' -n '' ']'
++ hash -r
++ '[' -n '' ']'
++ unset VIRTUAL_ENV
++ unset VIRTUAL_ENV_PROMPT
++ '[' '!' nondestructive = nondestructive ']'
++ '[' linux-gnu = cygwin ']'
++ '[' linux-gnu = msys ']'
++ export VIRTUAL_ENV=/srv/pokybuild/yocto-worker/toaster/build/build/venv
++ VIRTUAL_ENV=/srv/pokybuild/yocto-worker/toaster/build/build/venv
++ _OLD_VIRTUAL_PATH=/srv/pokybuild/yocto-worker/toaster/build/layers/openembedded-core/scripts:/srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/bin:/srv/pokybuild/buildbot-venv/bin:/srv/pokybuild/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin
++ PATH=/srv/pokybuild/yocto-worker/toaster/build/build/venv/bin:/srv/pokybuild/yocto-worker/toaster/build/layers/openembedded-core/scripts:/srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/bin:/srv/pokybuild/buildbot-venv/bin:/srv/pokybuild/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/sbin:/usr/sbin
++ export PATH
++ '[' -n '' ']'
++ '[' -z '' ']'
++ _OLD_VIRTUAL_PS1=
++ PS1='(venv) '
++ export PS1
++ VIRTUAL_ENV_PROMPT='(venv) '
++ export VIRTUAL_ENV_PROMPT
++ hash -r
+ python3 -m pip install -r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/toaster-requirements.txt -r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt
Collecting Django<5.3,>5.2 (from -r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/toaster-requirements.txt (line 1))
Using cached django-5.2.17-py3-none-any.whl.metadata (4.1 kB)
Collecting beautifulsoup4>=4.4.0 (from -r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/toaster-requirements.txt (line 2))
Using cached beautifulsoup4-4.15.0-py3-none-any.whl.metadata (3.8 kB)
Requirement already satisfied: pytz in /usr/lib/python3/dist-packages (from -r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/toaster-requirements.txt (line 3)) (2024.1)
Collecting django-log-viewer==1.1.7 (from -r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/toaster-requirements.txt (line 4))
Using cached django_log_viewer-1.1.7-py2.py3-none-any.whl
Collecting selenium>=4.13.0 (from -r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 1))
Using cached selenium-4.49.0-py3-none-any.whl.metadata (7.4 kB)
Collecting pytest>=9.0.3 (from -r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 2))
Using cached pytest-9.1.1-py3-none-any.whl.metadata (7.6 kB)
Collecting pytest-django==4.5.2 (from -r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 3))
Using cached pytest_django-4.5.2-py3-none-any.whl.metadata (4.7 kB)
Collecting pytest-env==1.1.0 (from -r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 4))
Using cached pytest_env-1.1.0-py3-none-any.whl.metadata (5.3 kB)
Collecting pytest-html==4.0.2 (from -r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 5))
Using cached pytest_html-4.0.2-py3-none-any.whl.metadata (3.9 kB)
Collecting pytest-metadata==3.0.0 (from -r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 6))
Using cached pytest_metadata-3.0.0-py3-none-any.whl.metadata (8.6 kB)
Collecting pytest-order==1.1.0 (from -r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 7))
Using cached pytest_order-1.1.0-py3-none-any.whl.metadata (7.5 kB)
Requirement already satisfied: requests in /usr/lib/python3/dist-packages (from -r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 8)) (2.31.0)
Requirement already satisfied: jinja2>=3.0.0 in /usr/lib/python3/dist-packages (from pytest-html==4.0.2->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 5)) (3.1.2)
Collecting asgiref>=3.8.1 (from Django<5.3,>5.2->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/toaster-requirements.txt (line 1))
Using cached asgiref-3.12.1-py3-none-any.whl.metadata (9.4 kB)
Collecting sqlparse>=0.3.1 (from Django<5.3,>5.2->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/toaster-requirements.txt (line 1))
Using cached sqlparse-0.6.0-py3-none-any.whl.metadata (6.0 kB)
Collecting soupsieve>=1.6.1 (from beautifulsoup4>=4.4.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/toaster-requirements.txt (line 2))
Downloading soupsieve-2.10-py3-none-any.whl.metadata (4.4 kB)
Requirement already satisfied: typing-extensions>=4.0.0 in /usr/lib/python3/dist-packages (from beautifulsoup4>=4.4.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/toaster-requirements.txt (line 2)) (4.10.0)
Collecting certifi>=2026.2.25 (from selenium>=4.13.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 1))
Using cached certifi-2026.7.22-py3-none-any.whl.metadata (2.5 kB)
Collecting trio<1.0,>=0.31.0 (from selenium>=4.13.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 1))
Using cached trio-0.34.0-py3-none-any.whl.metadata (8.5 kB)
Collecting trio-websocket<1.0,>=0.12.2 (from selenium>=4.13.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 1))
Using cached trio_websocket-0.12.2-py3-none-any.whl.metadata (5.1 kB)
Collecting typing-extensions>=4.0.0 (from beautifulsoup4>=4.4.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/toaster-requirements.txt (line 2))
Using cached typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB)
Collecting urllib3<3.0,>=2.6.3 (from urllib3[socks]<3.0,>=2.6.3->selenium>=4.13.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 1))
Using cached urllib3-2.8.0-py3-none-any.whl.metadata (7.4 kB)
Collecting websocket-client<2.0,>=1.8.0 (from selenium>=4.13.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 1))
Using cached websocket_client-1.9.2-py3-none-any.whl.metadata (8.3 kB)
Collecting iniconfig>=1.0.1 (from pytest>=9.0.3->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 2))
Using cached iniconfig-2.3.0-py3-none-any.whl.metadata (2.5 kB)
Requirement already satisfied: packaging>=22 in /usr/lib/python3/dist-packages (from pytest>=9.0.3->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 2)) (24.0)
Collecting pluggy<2,>=1.5 (from pytest>=9.0.3->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 2))
Using cached pluggy-1.6.0-py3-none-any.whl.metadata (4.8 kB)
Requirement already satisfied: pygments>=2.7.2 in /usr/lib/python3/dist-packages (from pytest>=9.0.3->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 2)) (2.17.2)
Collecting attrs>=23.2.0 (from trio<1.0,>=0.31.0->selenium>=4.13.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 1))
Using cached attrs-26.1.0-py3-none-any.whl.metadata (8.8 kB)
Collecting sortedcontainers (from trio<1.0,>=0.31.0->selenium>=4.13.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 1))
Using cached sortedcontainers-2.4.0-py2.py3-none-any.whl.metadata (10 kB)
Requirement already satisfied: idna in /usr/lib/python3/dist-packages (from trio<1.0,>=0.31.0->selenium>=4.13.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 1)) (3.6)
Collecting outcome (from trio<1.0,>=0.31.0->selenium>=4.13.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 1))
Using cached outcome-1.3.0.post0-py2.py3-none-any.whl.metadata (2.6 kB)
Collecting sniffio>=1.3.0 (from trio<1.0,>=0.31.0->selenium>=4.13.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 1))
Using cached sniffio-1.3.1-py3-none-any.whl.metadata (3.9 kB)
Collecting wsproto>=0.14 (from trio-websocket<1.0,>=0.12.2->selenium>=4.13.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 1))
Using cached wsproto-1.3.2-py3-none-any.whl.metadata (5.2 kB)
Collecting pysocks!=1.5.7,<2.0,>=1.5.6 (from urllib3[socks]<3.0,>=2.6.3->selenium>=4.13.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 1))
Using cached PySocks-1.7.1-py3-none-any.whl.metadata (13 kB)
Collecting h11<1,>=0.16.0 (from wsproto>=0.14->trio-websocket<1.0,>=0.12.2->selenium>=4.13.0->-r /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/toaster-tests-requirements.txt (line 1))
Using cached h11-0.16.0-py3-none-any.whl.metadata (8.3 kB)
Using cached pytest_django-4.5.2-py3-none-any.whl (20 kB)
Using cached pytest_env-1.1.0-py3-none-any.whl (6.2 kB)
Using cached pytest_html-4.0.2-py3-none-any.whl (23 kB)
Using cached pytest_metadata-3.0.0-py3-none-any.whl (10 kB)
Using cached pytest_order-1.1.0-py3-none-any.whl (14 kB)
Using cached django-5.2.17-py3-none-any.whl (8.3 MB)
Using cached beautifulsoup4-4.15.0-py3-none-any.whl (109 kB)
Using cached selenium-4.49.0-py3-none-any.whl (11.8 MB)
Using cached pytest-9.1.1-py3-none-any.whl (386 kB)
Using cached asgiref-3.12.1-py3-none-any.whl (25 kB)
Using cached certifi-2026.7.22-py3-none-any.whl (136 kB)
Using cached iniconfig-2.3.0-py3-none-any.whl (7.5 kB)
Using cached pluggy-1.6.0-py3-none-any.whl (20 kB)
Downloading soupsieve-2.10-py3-none-any.whl (38 kB)
Using cached sqlparse-0.6.0-py3-none-any.whl (50 kB)
Using cached trio-0.34.0-py3-none-any.whl (511 kB)
Using cached trio_websocket-0.12.2-py3-none-any.whl (21 kB)
Using cached typing_extensions-4.16.0-py3-none-any.whl (45 kB)
Using cached urllib3-2.8.0-py3-none-any.whl (135 kB)
Using cached websocket_client-1.9.2-py3-none-any.whl (95 kB)
Using cached attrs-26.1.0-py3-none-any.whl (67 kB)
Using cached outcome-1.3.0.post0-py2.py3-none-any.whl (10 kB)
Using cached PySocks-1.7.1-py3-none-any.whl (16 kB)
Using cached sniffio-1.3.1-py3-none-any.whl (10 kB)
Using cached wsproto-1.3.2-py3-none-any.whl (24 kB)
Using cached sortedcontainers-2.4.0-py2.py3-none-any.whl (29 kB)
Using cached h11-0.16.0-py3-none-any.whl (37 kB)
Installing collected packages: sortedcontainers, django-log-viewer, websocket-client, urllib3, typing-extensions, sqlparse, soupsieve, sniffio, pysocks, pluggy, iniconfig, h11, certifi, attrs, asgiref, wsproto, pytest, outcome, Django, beautifulsoup4, trio, pytest-order, pytest-metadata, pytest-env, pytest-django, trio-websocket, pytest-html, selenium
Attempting uninstall: urllib3
Found existing installation: urllib3 2.0.7
Not uninstalling urllib3 at /usr/lib/python3/dist-packages, outside environment /srv/pokybuild/yocto-worker/toaster/build/build/venv
Can't uninstall 'urllib3'. No files were found to uninstall.
Attempting uninstall: typing-extensions
Found existing installation: typing_extensions 4.10.0
Not uninstalling typing-extensions at /usr/lib/python3/dist-packages, outside environment /srv/pokybuild/yocto-worker/toaster/build/build/venv
Can't uninstall 'typing_extensions'. No files were found to uninstall.
Attempting uninstall: certifi
Found existing installation: certifi 2023.11.17
Not uninstalling certifi at /usr/lib/python3/dist-packages, outside environment /srv/pokybuild/yocto-worker/toaster/build/build/venv
Can't uninstall 'certifi'. No files were found to uninstall.
Successfully installed Django-5.2.17 asgiref-3.12.1 attrs-26.1.0 beautifulsoup4-4.15.0 certifi-2026.7.22 django-log-viewer-1.1.7 h11-0.16.0 iniconfig-2.3.0 outcome-1.3.0.post0 pluggy-1.6.0 pysocks-1.7.1 pytest-9.1.1 pytest-django-4.5.2 pytest-env-1.1.0 pytest-html-4.0.2 pytest-metadata-3.0.0 pytest-order-1.1.0 selenium-4.49.0 sniffio-1.3.1 sortedcontainers-2.4.0 soupsieve-2.10 sqlparse-0.6.0 trio-0.34.0 trio-websocket-0.12.2 typing-extensions-4.16.0 urllib3-2.8.0 websocket-client-1.9.2 wsproto-1.3.2
+ python3 -m pytest -c /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/pytest.ini /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster/tests/
============================= test session starts ==============================
platform linux -- Python 3.12.3, pytest-9.1.1, pluggy-1.6.0
django: settings: toastermain.settings_test (from env)
rootdir: /srv/pokybuild/yocto-worker/toaster/build/layers/bitbake/lib/toaster
configfile: pytest.ini
plugins: django-4.5.2, html-4.0.2, order-1.1.0, env-1.1.0, metadata-3.0.0
collected 157 items
../layers/bitbake/lib/toaster/tests/db/test_db.py . [ 0%]
../layers/bitbake/lib/toaster/tests/commands/test_loaddata.py ... [ 2%]
../layers/bitbake/lib/toaster/tests/commands/test_lsupdates.py . [ 3%]
../layers/bitbake/lib/toaster/tests/builds/test_core_image_min.py ...... [ 7%]
................ [ 17%]
../layers/bitbake/lib/toaster/tests/commands/test_runbuilds.py . [ 17%]
../layers/bitbake/lib/toaster/tests/views/test_views.py ............... [ 27%]
../layers/bitbake/lib/toaster/tests/browser/test_all_builds_page.py .... [ 29%]
..... [ 33%]
../layers/bitbake/lib/toaster/tests/browser/test_all_projects_page.py .. [ 34%]
...... [ 38%]
../layers/bitbake/lib/toaster/tests/browser/test_builddashboard_page.py . [ 38%]
....... [ 43%]
../layers/bitbake/lib/toaster/tests/browser/test_builddashboard_page_artifacts.py . [ 43%]
.. [ 45%]
../layers/bitbake/lib/toaster/tests/browser/test_builddashboard_page_recipes.py . [ 45%]
[ 45%]
../layers/bitbake/lib/toaster/tests/browser/test_builddashboard_page_tasks.py . [ 46%]
[ 46%]
../layers/bitbake/lib/toaster/tests/browser/test_delete_project.py . [ 47%]
../layers/bitbake/lib/toaster/tests/browser/test_js_unit_tests.py . [ 47%]
../layers/bitbake/lib/toaster/tests/browser/test_landing_page.py ....... [ 52%]
...... [ 56%]
../layers/bitbake/lib/toaster/tests/browser/test_layerdetails_page.py .. [ 57%]
. [ 57%]
../layers/bitbake/lib/toaster/tests/browser/test_most_recent_builds_states.py . [ 58%]
.. [ 59%]
../layers/bitbake/lib/toaster/tests/browser/test_new_custom_image_page.py . [ 60%]
... [ 62%]
../layers/bitbake/lib/toaster/tests/browser/test_new_project_page.py .. [ 63%]
../layers/bitbake/lib/toaster/tests/browser/test_project_builds_page.py . [ 64%]
..... [ 67%]
../layers/bitbake/lib/toaster/tests/browser/test_project_config_page.py . [ 68%]
.... [ 70%]
../layers/bitbake/lib/toaster/tests/browser/test_project_page.py . [ 71%]
../layers/bitbake/lib/toaster/tests/browser/test_sample.py .. [ 72%]
../layers/bitbake/lib/toaster/tests/browser/test_task_page.py . [ 73%]
../layers/bitbake/lib/toaster/tests/browser/test_toastertable_ui.py . [ 73%]
../layers/bitbake/lib/toaster/tests/functional/test_create_new_project.py . [ 74%]
...... [ 78%]
../layers/bitbake/lib/toaster/tests/functional/test_functional_basic.py F [ 78%]
.....F [ 82%]
../layers/bitbake/lib/toaster/tests/functional/test_project_config.py .. [ 84%]
....... [ 88%]
../layers/bitbake/lib/toaster/tests/functional/test_project_page.py F.FF [ 91%]
...F [ 93%]
../layers/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py F [ 94%]
F.F.F. [ 98%]
../layers/bitbake/lib/toaster/tests/functional/test_project_page.py FF [ 99%]
../layers/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py F [100%]
=================================== FAILURES ===================================
___________ FuntionalTestBasic.test_review_configuration_information ___________
self = <toaster.tests.functional.test_functional_basic.FuntionalTestBasic testMethod=test_review_configuration_information>
def test_review_configuration_information(self):
self.get(reverse('all-projects'))
self.load_projects_page_helper()
self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
project_URL=self.get_URL()
# Machine section of page
self.wait_until_visible('#machine-section')
self.assertTrue(self.element_exists('#machine-section'),'Machine section for the project configuration page does not exist')
self.assertTrue(re.search("qemux86-64",self.driver.find_element(By.XPATH, "//span[@id='project-machine-name']").text),'The machine type is not assigned')
try:
self.driver.find_element(By.XPATH, "//span[@id='change-machine-toggle']").click()
self.wait_until_visible('#select-machine-form')
self.wait_until_visible('#cancel-machine-change')
self.driver.find_element(By.XPATH, "//form[@id='select-machine-form']/a[@id='cancel-machine-change']").click()
except:
self.fail(msg='The machine information is wrong in the configuration page')
# Most built recipes section
self.wait_until_visible('#no-most-built')
try:
self.driver.find_element(By.ID, 'no-most-built')
except:
self.fail(msg='No Most built information in project detail page')
# Project Release title
> self.assertTrue(re.search("Yocto Project master",self.driver.find_element(By.XPATH, "//span[@id='project-release-title']").text), 'The project release is not defined in the project detail page')
E AssertionError: None is not true : The project release is not defined in the project detail page
../layers/bitbake/lib/toaster/tests/functional/test_functional_basic.py:110: AssertionError
---------------------------- Captured stdout setup -----------------------------
The system will start.
Check if toaster can listen on localhost:8000
OK
Operations to perform:
Apply all migrations: admin, auth, bldcontrol, contenttypes, orm, sessions
Running migrations:
No migrations to apply.
Starting webserver...
Toaster development webserver started at http://localhost:8000
You can now run 'bitbake <target>' on the command line and monitor your build in Toaster.
You can also use a Toaster project to configure and run a build.
Successful start.
__________ FuntionalTestBasic.test_verify_project_release_information __________
self = <toaster.tests.functional.test_functional_basic.FuntionalTestBasic testMethod=test_verify_project_release_information>
def test_verify_project_release_information(self):
self.get(reverse('all-projects'))
self.load_projects_page_helper()
self.find_element_by_link_text_in_table('projectstable', 'selenium-project').click()
self.wait_until_visible('#project-release-title')
> self.assertTrue(re.search("Yocto Project master",self.driver.find_element(By.ID, "project-release-title").text), 'No project release title information in project detail page')
E AssertionError: None is not true : No project release title information in project detail page
../layers/bitbake/lib/toaster/tests/functional/test_functional_basic.py:173: AssertionError
--------------------------- Captured stdout teardown ---------------------------
The system will stop.
Successful stop.
_______________________ TestProjectPage.test_distro_page _______________________
self = <toaster.tests.functional.test_project_page.TestProjectPage testMethod=test_distro_page>
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)
../layers/bitbake/lib/toaster/tests/functional/test_project_page.py:595:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../layers/bitbake/lib/toaster/tests/functional/test_project_page.py:148: in _navigate_to_config_nav
self.wait_until_visible(f'#{nav_id}')
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:239: in wait_until_visible
Wait(self.driver, timeout=timeout).until(is_visible, msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.browser.selenium_helpers_base.Wait (session="2dee97315e744f21453d5405f034274f")>
method = <function SeleniumTestCaseBase.wait_until_visible.<locals>.<lambda> at 0x7f91af19d580>
message = 'An element matching "#distrostable" should be visible', scroll = None
def until(self, method, message='', scroll=None):
"""
Calls the method provided with the driver as an argument until the
return value is not False.
"""
end_time = time.time() + self._timeout
while True:
try:
if scroll:
scroll(self._driver)
value = method(self._driver)
if value:
return value
except ElementNotInteractableException:
pass
except NoSuchElementException:
pass
except StaleElementReferenceException:
pass
except WebDriverException:
# selenium.common.exceptions.WebDriverException: Message: unknown error: unhandled inspector error: {"code":-32000,"message":"Node with given id does not belong to the document"}
pass
time.sleep(self._poll)
if time.time() > end_time:
break
> raise TimeoutException(message)
E selenium.common.exceptions.TimeoutException: Message: An element matching "#distrostable" should be visible
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:132: TimeoutException
---------------------------- Captured stdout setup -----------------------------
The system will start.
Check if toaster can listen on localhost:8000
OK
Operations to perform:
Apply all migrations: admin, auth, bldcontrol, contenttypes, orm, sessions
Running migrations:
No migrations to apply.
Starting webserver...
Toaster development webserver started at http://localhost:8000
You can now run 'bitbake <target>' on the command line and monitor your build in Toaster.
You can also use a Toaster project to configure and run a build.
Successful start.
_______________________ TestProjectPage.test_layers_page _______________________
self = <toaster.tests.functional.test_project_page.TestProjectPage testMethod=test_layers_page>
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.assertIn("Compatible layers", 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'
)
../layers/bitbake/lib/toaster/tests/functional/test_project_page.py:522:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../layers/bitbake/lib/toaster/tests/functional/test_project_page.py:181: in _mixin_test_table_search_input
self.wait_until_visible(f'#{table_selector} tbody tr')
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:239: in wait_until_visible
Wait(self.driver, timeout=timeout).until(is_visible, msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.browser.selenium_helpers_base.Wait (session="2dee97315e744f21453d5405f034274f")>
method = <function SeleniumTestCaseBase.wait_until_visible.<locals>.<lambda> at 0x7f91b1136020>
message = 'An element matching "#layerstable tbody tr" should be visible'
scroll = None
def until(self, method, message='', scroll=None):
"""
Calls the method provided with the driver as an argument until the
return value is not False.
"""
end_time = time.time() + self._timeout
while True:
try:
if scroll:
scroll(self._driver)
value = method(self._driver)
if value:
return value
except ElementNotInteractableException:
pass
except NoSuchElementException:
pass
except StaleElementReferenceException:
pass
except WebDriverException:
# selenium.common.exceptions.WebDriverException: Message: unknown error: unhandled inspector error: {"code":-32000,"message":"Node with given id does not belong to the document"}
pass
time.sleep(self._poll)
if time.time() > end_time:
break
> raise TimeoutException(message)
E selenium.common.exceptions.TimeoutException: Message: An element matching "#layerstable tbody tr" should be visible
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:132: TimeoutException
______________________ TestProjectPage.test_machines_page ______________________
self = <toaster.tests.functional.test_project_page.TestProjectPage testMethod=test_machines_page>
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)
../layers/bitbake/lib/toaster/tests/functional/test_project_page.py:444:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../layers/bitbake/lib/toaster/tests/functional/test_project_page.py:148: in _navigate_to_config_nav
self.wait_until_visible(f'#{nav_id}')
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:239: in wait_until_visible
Wait(self.driver, timeout=timeout).until(is_visible, msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.browser.selenium_helpers_base.Wait (session="2dee97315e744f21453d5405f034274f")>
method = <function SeleniumTestCaseBase.wait_until_visible.<locals>.<lambda> at 0x7f91b1134720>
message = 'An element matching "#machinestable" should be visible'
scroll = None
def until(self, method, message='', scroll=None):
"""
Calls the method provided with the driver as an argument until the
return value is not False.
"""
end_time = time.time() + self._timeout
while True:
try:
if scroll:
scroll(self._driver)
value = method(self._driver)
if value:
return value
except ElementNotInteractableException:
pass
except NoSuchElementException:
pass
except StaleElementReferenceException:
pass
except WebDriverException:
# selenium.common.exceptions.WebDriverException: Message: unknown error: unhandled inspector error: {"code":-32000,"message":"Node with given id does not belong to the document"}
pass
time.sleep(self._poll)
if time.time() > end_time:
break
> raise TimeoutException(message)
E selenium.common.exceptions.TimeoutException: Message: An element matching "#machinestable" should be visible
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:132: TimeoutException
___________________ TestProjectPage.test_softwareRecipe_page ___________________
self = <toaster.tests.functional.test_project_page.TestProjectPage testMethod=test_softwareRecipe_page>
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)
../layers/bitbake/lib/toaster/tests/functional/test_project_page.py:385:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../layers/bitbake/lib/toaster/tests/functional/test_project_page.py:148: in _navigate_to_config_nav
self.wait_until_visible(f'#{nav_id}')
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:239: in wait_until_visible
Wait(self.driver, timeout=timeout).until(is_visible, msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.browser.selenium_helpers_base.Wait (session="2dee97315e744f21453d5405f034274f")>
method = <function SeleniumTestCaseBase.wait_until_visible.<locals>.<lambda> at 0x7f91b1098ea0>
message = 'An element matching "#softwarerecipestable" should be visible'
scroll = None
def until(self, method, message='', scroll=None):
"""
Calls the method provided with the driver as an argument until the
return value is not False.
"""
end_time = time.time() + self._timeout
while True:
try:
if scroll:
scroll(self._driver)
value = method(self._driver)
if value:
return value
except ElementNotInteractableException:
pass
except NoSuchElementException:
pass
except StaleElementReferenceException:
pass
except WebDriverException:
# selenium.common.exceptions.WebDriverException: Message: unknown error: unhandled inspector error: {"code":-32000,"message":"Node with given id does not belong to the document"}
pass
time.sleep(self._poll)
if time.time() > end_time:
break
> raise TimeoutException(message)
E selenium.common.exceptions.TimeoutException: Message: An element matching "#softwarerecipestable" should be visible
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:132: TimeoutException
--------------------------- Captured stdout teardown ---------------------------
The system will stop.
Successful stop.
______________ TestProjectConfigTab.test_image_recipe_editColumn _______________
self = <toaster.tests.functional.test_project_page_tab_config.TestProjectConfigTab testMethod=test_image_recipe_editColumn>
def test_image_recipe_editColumn(self):
""" Test the edit column feature in image recipe table on project page """
def test_edit_column(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'#imagerecipestable 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'#imagerecipestable 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'#imagerecipestable 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'#imagerecipestable thead th.{th_class}'
).is_displayed(),
f"The {th_class} column is checked in EditColumn dropdown, but it's not visible in table"
)
self._navigate_to_project_page()
# navigate to project image recipe page
recipe_image_page_link = self._get_config_nav_item(3)
recipe_image_page_link.click()
> self.wait_until_present('#imagerecipestable tbody tr')
../layers/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py:190:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:225: in wait_until_present
element = Wait(self.driver, timeout=timeout).until(is_present, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.browser.selenium_helpers_base.Wait (session="6e568f96feb5b6c0c345b5e97f0294e4")>
method = <function SeleniumTestCaseBase.wait_until_present.<locals>.<lambda> at 0x7f91b1099a80>
message = 'An element matching "#imagerecipestable tbody tr" should be on the page'
scroll = None
def until(self, method, message='', scroll=None):
"""
Calls the method provided with the driver as an argument until the
return value is not False.
"""
end_time = time.time() + self._timeout
while True:
try:
if scroll:
scroll(self._driver)
value = method(self._driver)
if value:
return value
except ElementNotInteractableException:
pass
except NoSuchElementException:
pass
except StaleElementReferenceException:
pass
except WebDriverException:
# selenium.common.exceptions.WebDriverException: Message: unknown error: unhandled inspector error: {"code":-32000,"message":"Node with given id does not belong to the document"}
pass
time.sleep(self._poll)
if time.time() > end_time:
break
> raise TimeoutException(message)
E selenium.common.exceptions.TimeoutException: Message: An element matching "#imagerecipestable tbody tr" should be on the page
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:132: TimeoutException
---------------------------- Captured stdout setup -----------------------------
The system will start.
Check if toaster can listen on localhost:8000
OK
Operations to perform:
Apply all migrations: admin, auth, bldcontrol, contenttypes, orm, sessions
Running migrations:
No migrations to apply.
Starting webserver...
Toaster development webserver started at http://localhost:8000
You can now run 'bitbake <target>' on the command line and monitor your build in Toaster.
You can also use a Toaster project to configure and run a build.
Successful start.
_______________ TestProjectConfigTab.test_image_recipe_show_rows _______________
self = <toaster.tests.functional.test_project_page_tab_config.TestProjectConfigTab testMethod=test_image_recipe_show_rows>
def test_image_recipe_show_rows(self):
""" Test the show rows feature in image recipe table on project 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('#imagerecipestable tbody tr')
# check at least some rows are visible
self.assertTrue(
len(self.find_all('#imagerecipestable tbody tr')) > 0
)
self._navigate_to_project_page()
# navigate to project image recipe page
recipe_image_page_link = self._get_config_nav_item(3)
recipe_image_page_link.click()
> self.wait_until_present('#imagerecipestable tbody tr')
../layers/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py:223:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:225: in wait_until_present
element = Wait(self.driver, timeout=timeout).until(is_present, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.browser.selenium_helpers_base.Wait (session="6e568f96feb5b6c0c345b5e97f0294e4")>
method = <function SeleniumTestCaseBase.wait_until_present.<locals>.<lambda> at 0x7f91b109b1a0>
message = 'An element matching "#imagerecipestable tbody tr" should be on the page'
scroll = None
def until(self, method, message='', scroll=None):
"""
Calls the method provided with the driver as an argument until the
return value is not False.
"""
end_time = time.time() + self._timeout
while True:
try:
if scroll:
scroll(self._driver)
value = method(self._driver)
if value:
return value
except ElementNotInteractableException:
pass
except NoSuchElementException:
pass
except StaleElementReferenceException:
pass
except WebDriverException:
# selenium.common.exceptions.WebDriverException: Message: unknown error: unhandled inspector error: {"code":-32000,"message":"Node with given id does not belong to the document"}
pass
time.sleep(self._poll)
if time.time() > end_time:
break
> raise TimeoutException(message)
E selenium.common.exceptions.TimeoutException: Message: An element matching "#imagerecipestable tbody tr" should be on the page
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:132: TimeoutException
__________ TestProjectConfigTab.test_project_config_tab_right_section __________
self = <toaster.tests.functional.test_project_page_tab_config.TestProjectConfigTab testMethod=test_project_config_tab_right_section>
def test_project_config_tab_right_section(self):
""" Test project config tab right section contains five blocks:
- Machine:
- check 'Machine' is displayed
- check can change Machine
- Distro:
- check 'Distro' is displayed
- check can change Distro
- Most built recipes:
- check 'Most built recipes' is displayed
- check can select a recipe and build it
- Project release:
- check 'Project release' is displayed
- check project has right release displayed
- Layers:
- check can add a layer if exists
- check at least three layers are displayed
- openembedded-core
- meta-poky
- meta-yocto-bsp
"""
project_id = self.create_new_project(self.PROJECT_NAME + "-ST", '3', None, True)
url = reverse('project', args=(project_id,))
self.get(url)
self.wait_until_visible('#config-nav')
# check if the menu is displayed
self.wait_until_visible('#project-page')
block_l = self.driver.find_element(
By.XPATH, '//*[@id="project-page"]/div[2]')
project_release = self.driver.find_element(
By.XPATH, '//*[@id="project-page"]/div[1]/div[4]')
layers = block_l.find_element(By.ID, 'layer-container')
def check_machine_distro(self, item_name, new_item_name, block_id):
block = self.find(f'#{block_id}')
title = block.find_element(By.TAG_NAME, 'h3')
self.assertIn(item_name.capitalize(), title.text)
edit_btn = self.find(f'#change-{item_name}-toggle')
edit_btn.click()
self.wait_until_visible(f'#{item_name}-change-input')
name_input = self.find(f'#{item_name}-change-input')
name_input.clear()
name_input.send_keys(new_item_name)
change_btn = self.find(f'#{item_name}-change-btn')
change_btn.click()
self.wait_until_visible(f'#project-{item_name}-name')
project_name = self.find(f'#project-{item_name}-name')
self.assertIn(new_item_name, project_name.text)
# check change notificaiton is displayed
change_notification = self.find('#change-notification')
self.assertIn(
f'You have changed the {item_name} to: {new_item_name}', change_notification.text
)
hide_button = self.find('#hide-alert')
hide_button.click()
self.wait_until_not_visible('#change-notification')
# Machine
check_machine_distro(self, 'machine', 'qemux86-64', 'machine-section')
# Distro
check_machine_distro(self, 'distro', 'poky-altcfg', 'distro-section')
# Project release
title = project_release.find_element(By.TAG_NAME, 'h3')
self.assertIn("Project release", title.text)
> self.assertIn(
"Yocto Project master", self.find('#project-release-title').text
)
E AssertionError: 'Yocto Project master' not found in 'Local Yocto Project'
../layers/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py:304: AssertionError
_____________ TestProjectConfigTab.test_project_page_image_recipe ______________
self = <toaster.tests.functional.test_project_page_tab_config.TestProjectConfigTab testMethod=test_project_page_image_recipe>
def test_project_page_image_recipe(self):
""" Test project page section images
- Check image recipes are displayed
- Check search input
- Check image recipe build button works
- Check image recipe table features(show/hide column, pagination)
"""
self._navigate_to_project_page()
# navigate to "Images section"
images_section = self._get_config_nav_item(3)
images_section.click()
> self.wait_until_visible('#imagerecipestable')
../layers/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py:433:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:239: in wait_until_visible
Wait(self.driver, timeout=timeout).until(is_visible, msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.browser.selenium_helpers_base.Wait (session="6e568f96feb5b6c0c345b5e97f0294e4")>
method = <function SeleniumTestCaseBase.wait_until_visible.<locals>.<lambda> at 0x7f91b109b060>
message = 'An element matching "#imagerecipestable" should be visible'
scroll = None
def until(self, method, message='', scroll=None):
"""
Calls the method provided with the driver as an argument until the
return value is not False.
"""
end_time = time.time() + self._timeout
while True:
try:
if scroll:
scroll(self._driver)
value = method(self._driver)
if value:
return value
except ElementNotInteractableException:
pass
except NoSuchElementException:
pass
except StaleElementReferenceException:
pass
except WebDriverException:
# selenium.common.exceptions.WebDriverException: Message: unknown error: unhandled inspector error: {"code":-32000,"message":"Node with given id does not belong to the document"}
pass
time.sleep(self._poll)
if time.time() > end_time:
break
> raise TimeoutException(message)
E selenium.common.exceptions.TimeoutException: Message: An element matching "#imagerecipestable" should be visible
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:132: TimeoutException
_____________ TestProjectPageRecipes.test_image_recipe_editColumn ______________
self = <toaster.tests.functional.test_project_page.TestProjectPageRecipes testMethod=test_image_recipe_editColumn>
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=(TestProjectPageBase.project_id,))
self.get(url)
> self.wait_until_present('#imagerecipestable tbody tr')
../layers/bitbake/lib/toaster/tests/functional/test_project_page.py:761:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:225: in wait_until_present
element = Wait(self.driver, timeout=timeout).until(is_present, msg)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.browser.selenium_helpers_base.Wait (session="e08ce883ae378cf8e01016a763864883")>
method = <function SeleniumTestCaseBase.wait_until_present.<locals>.<lambda> at 0x7f91b1099940>
message = 'An element matching "#imagerecipestable tbody tr" should be on the page'
scroll = None
def until(self, method, message='', scroll=None):
"""
Calls the method provided with the driver as an argument until the
return value is not False.
"""
end_time = time.time() + self._timeout
while True:
try:
if scroll:
scroll(self._driver)
value = method(self._driver)
if value:
return value
except ElementNotInteractableException:
pass
except NoSuchElementException:
pass
except StaleElementReferenceException:
pass
except WebDriverException:
# selenium.common.exceptions.WebDriverException: Message: unknown error: unhandled inspector error: {"code":-32000,"message":"Node with given id does not belong to the document"}
pass
time.sleep(self._poll)
if time.time() > end_time:
break
> raise TimeoutException(message)
E selenium.common.exceptions.TimeoutException: Message: An element matching "#imagerecipestable tbody tr" should be on the page
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:132: TimeoutException
---------------------------- Captured stdout setup -----------------------------
The system will start.
Check if toaster can listen on localhost:8000
OK
Operations to perform:
Apply all migrations: admin, auth, bldcontrol, contenttypes, orm, sessions
Running migrations:
No migrations to apply.
Starting webserver...
Toaster development webserver started at http://localhost:8000
You can now run 'bitbake <target>' on the command line and monitor your build in Toaster.
You can also use a Toaster project to configure and run a build.
Successful start.
________________ TestProjectPageRecipes.test_single_recipe_page ________________
self = <toaster.tests.functional.test_project_page.TestProjectPageRecipes testMethod=test_single_recipe_page>
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
"""
# Use a recipe which is likely to exist in the layer index but not enabled
# in poky out the box - xen-image-minimal from meta-virtualization
self._navigate_to_project_page()
prj = Project.objects.get(pk=TestProjectPageBase.project_id)
> recipe_id = prj.get_all_compatible_recipes().get(name="xen-image-minimal").pk
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
../layers/bitbake/lib/toaster/tests/functional/test_project_page.py:730:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <QuerySet []>, args = (), kwargs = {'name': 'xen-image-minimal'}
def get(self, *args, **kwargs):
"""
Perform the query and return a single object matching the given
keyword arguments.
"""
if self.query.combinator and (args or kwargs):
raise NotSupportedError(
"Calling QuerySet.get(...) with filters after %s() is not "
"supported." % self.query.combinator
)
clone = self._chain() if self.query.combinator else self.filter(*args, **kwargs)
if self.query.can_filter() and not self.query.distinct_fields:
clone = clone.order_by()
limit = None
if (
not clone.query.select_for_update
or connections[clone.db].features.supports_select_for_update_with_limit
):
limit = MAX_GET_RESULTS
clone.query.set_limits(high=limit)
num = len(clone)
if num == 1:
return clone._result_cache[0]
if not num:
> raise self.model.DoesNotExist(
"%s matching query does not exist." % self.model._meta.object_name
)
E orm.models.Recipe.DoesNotExist: Recipe matching query does not exist.
venv/lib/python3.12/site-packages/django/db/models/query.py:635: DoesNotExist
--------------------------- Captured stdout teardown ---------------------------
The system will stop.
Successful stop.
________________ TestProjectConfigTabDB.test_most_build_recipes ________________
self = <toaster.tests.functional.test_project_page_tab_config.TestProjectConfigTabDB testMethod=test_most_build_recipes>
def test_most_build_recipes(self):
""" Test most build recipes block contains"""
def rebuild_from_most_build_recipes(recipe_list_items):
checkbox = recipe_list_items[0].find_element(By.TAG_NAME, 'input')
checkbox.click()
build_btn = self.find('#freq-build-btn')
build_btn.click()
self.wait_until_visible('#latest-builds')
wait_until_build(self, 'queued cloning starting parsing failed')
lastest_builds = self.driver.find_elements(
By.XPATH,
'//div[@id="latest-builds"]/div'
)
self.assertTrue(len(lastest_builds) >= 2)
last_build = lastest_builds[0]
try:
cancel_button = last_build.find_element(
By.XPATH,
'//span[@class="cancel-build-btn pull-right alert-link"]',
)
cancel_button.click()
except NoSuchElementException:
# Skip if the build is already cancelled
pass
wait_until_build_cancelled(self)
# Create a new project for remaining asserts
project_id = self.create_new_project(self.PROJECT_NAME + "-MostBuilt", '2', None, True)
url = reverse('project', args=(project_id,))
self.get(url)
self.wait_until_visible('#config-nav')
current_url = self.driver.current_url
url = current_url.split('?')[0]
# Create a new builds
self._create_builds()
# back to project page
self.driver.get(url)
self.wait_until_visible('#project-page')
# Most built recipes
most_built_recipes = self.driver.find_element(
By.XPATH, '//*[@id="project-page"]/div[1]/div[3]')
title = most_built_recipes.find_element(By.TAG_NAME, 'h3')
self.assertIn("Most built recipes", title.text)
# check can select a recipe and build it
> self.wait_until_visible('#freq-build-list')
../layers/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py:499:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:239: in wait_until_visible
Wait(self.driver, timeout=timeout).until(is_visible, msg)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <tests.browser.selenium_helpers_base.Wait (session="364d200ec60e2b4c4b40c97829d82620")>
method = <function SeleniumTestCaseBase.wait_until_visible.<locals>.<lambda> at 0x7f91b10fe480>
message = 'An element matching "#freq-build-list" should be visible'
scroll = None
def until(self, method, message='', scroll=None):
"""
Calls the method provided with the driver as an argument until the
return value is not False.
"""
end_time = time.time() + self._timeout
while True:
try:
if scroll:
scroll(self._driver)
value = method(self._driver)
if value:
return value
except ElementNotInteractableException:
pass
except NoSuchElementException:
pass
except StaleElementReferenceException:
pass
except WebDriverException:
# selenium.common.exceptions.WebDriverException: Message: unknown error: unhandled inspector error: {"code":-32000,"message":"Node with given id does not belong to the document"}
pass
time.sleep(self._poll)
if time.time() > end_time:
break
> raise TimeoutException(message)
E selenium.common.exceptions.TimeoutException: Message: An element matching "#freq-build-list" should be visible
../layers/bitbake/lib/toaster/tests/browser/selenium_helpers_base.py:132: TimeoutException
---------------------------- Captured stdout setup -----------------------------
The system will start.
Check if toaster can listen on localhost:8000
OK
Operations to perform:
Apply all migrations: admin, auth, bldcontrol, contenttypes, orm, sessions
Running migrations:
No migrations to apply.
Starting webserver...
Toaster development webserver started at http://localhost:8000
You can now run 'bitbake <target>' on the command line and monitor your build in Toaster.
You can also use a Toaster project to configure and run a build.
Successful start.
--------------------------- Captured stdout teardown ---------------------------
The system will stop.
Successful stop.
- Generated html report: file:///srv/pokybuild/yocto-worker/toaster/build/build/Toaster%20Tests%20Report.html -
=========================== short test summary info ============================
FAILED ../layers/bitbake/lib/toaster/tests/functional/test_functional_basic.py::FuntionalTestBasic::test_review_configuration_information
FAILED ../layers/bitbake/lib/toaster/tests/functional/test_functional_basic.py::FuntionalTestBasic::test_verify_project_release_information
FAILED ../layers/bitbake/lib/toaster/tests/functional/test_project_page.py::TestProjectPage::test_distro_page
FAILED ../layers/bitbake/lib/toaster/tests/functional/test_project_page.py::TestProjectPage::test_layers_page
FAILED ../layers/bitbake/lib/toaster/tests/functional/test_project_page.py::TestProjectPage::test_machines_page
FAILED ../layers/bitbake/lib/toaster/tests/functional/test_project_page.py::TestProjectPage::test_softwareRecipe_page
FAILED ../layers/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py::TestProjectConfigTab::test_image_recipe_editColumn
FAILED ../layers/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py::TestProjectConfigTab::test_image_recipe_show_rows
FAILED ../layers/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py::TestProjectConfigTab::test_project_config_tab_right_section
FAILED ../layers/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py::TestProjectConfigTab::test_project_page_image_recipe
FAILED ../layers/bitbake/lib/toaster/tests/functional/test_project_page.py::TestProjectPageRecipes::test_image_recipe_editColumn
FAILED ../layers/bitbake/lib/toaster/tests/functional/test_project_page.py::TestProjectPageRecipes::test_single_recipe_page
FAILED ../layers/bitbake/lib/toaster/tests/functional/test_project_page_tab_config.py::TestProjectConfigTabDB::test_most_build_recipes
================== 13 failed, 144 passed in 945.57s (0:15:45) ==================