docs: install_deps> python -I -m pip install -r docs/requirements.txt buildcontroller: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt docs-linkcheck: install_deps> python -I -m pip install -r docs/requirements.txt checkbashisms: freeze> python -m pip freeze --all checkbashisms: pip==25.3,setuptools==80.9.0 checkbashisms: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./fixCIcentOS8reposMirrors.sh checkbashisms: commands[1] /w/workspace/transportpce-tox-verify-transportpce-master/tests> sh -c 'command checkbashisms>/dev/null || sudo yum install -y devscripts-checkbashisms || sudo yum install -y devscripts-minimal || sudo yum install -y devscripts || sudo yum install -y https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/31/Everything/x86_64/os/Packages/d/devscripts-checkbashisms-2.19.6-2.fc31.x86_64.rpm || (echo "checkbashisms command not found - please install it (e.g. sudo apt-get install devscripts | yum install devscripts-minimal )" >&2 && exit 1)' checkbashisms: commands[2] /w/workspace/transportpce-tox-verify-transportpce-master/tests> find . -not -path '*/\.*' -name '*.sh' -exec checkbashisms -f '{}' + checkbashisms: OK ✔ in 3.28 seconds pre-commit: install_deps> python -I -m pip install pre-commit pre-commit: freeze> python -m pip freeze --all pre-commit: cfgv==3.5.0,distlib==0.4.0,filelock==3.20.3,identify==2.6.16,nodeenv==1.10.0,pip==25.3,platformdirs==4.5.1,pre_commit==4.5.1,PyYAML==6.0.3,setuptools==80.9.0,virtualenv==20.36.1 pre-commit: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./fixCIcentOS8reposMirrors.sh pre-commit: commands[1] /w/workspace/transportpce-tox-verify-transportpce-master/tests> sh -c 'which cpan || sudo yum install -y perl-CPAN || (echo "cpan command not found - please install it (e.g. sudo apt-get install perl-modules | yum install perl-CPAN )" >&2 && exit 1)' /usr/bin/cpan pre-commit: commands[2] /w/workspace/transportpce-tox-verify-transportpce-master/tests> pre-commit run --all-files --show-diff-on-failure [WARNING] hook id `remove-tabs` uses deprecated stage names (commit) which will be removed in a future version. run: `pre-commit migrate-config` to automatically fix this. [WARNING] hook id `perltidy` uses deprecated stage names (commit) which will be removed in a future version. run: `pre-commit migrate-config` to automatically fix this. [INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks. [WARNING] repo `https://github.com/pre-commit/pre-commit-hooks` uses deprecated stage names (commit, push) which will be removed in a future version. Hint: often `pre-commit autoupdate --repo https://github.com/pre-commit/pre-commit-hooks` will fix this. if it does not -- consider reporting an issue to that repo. [INFO] Initializing environment for https://github.com/jorisroovers/gitlint. [INFO] Initializing environment for https://github.com/jorisroovers/gitlint:./gitlint-core[trusted-deps]. [INFO] Initializing environment for https://github.com/Lucas-C/pre-commit-hooks. [INFO] Initializing environment for https://github.com/pre-commit/mirrors-autopep8. buildcontroller: freeze> python -m pip freeze --all [INFO] Initializing environment for https://github.com/perltidy/perltidy. buildcontroller: bcrypt==5.0.0,certifi==2026.1.4,cffi==2.0.0,charset-normalizer==3.4.4,cryptography==46.0.3,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==2.2.1,lxml==6.0.2,netconf-client==3.5.0,packaging==26.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==3.0,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 buildcontroller: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_controller.sh java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64 java-1.17.0-openjdk-amd64 1711 /usr/lib/jvm/java-1.17.0-openjdk-amd64 java-1.21.0-openjdk-amd64 2111 /usr/lib/jvm/java-1.21.0-openjdk-amd64 21 [INFO] Installing environment for https://github.com/pre-commit/pre-commit-hooks. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... 21 ok, java is 21 or newer Apache Maven 3.9.12 (848fbb4bf2d427b72bdb2471c22fced7ebd9a7a1) Maven home: /opt/maven Java version: 21.0.9, vendor: Ubuntu, runtime: /usr/lib/jvm/java-21-openjdk-amd64 Default locale: en, platform encoding: UTF-8 OS name: "linux", version: "5.15.0-164-generic", arch: "amd64", family: "unix" [INFO] Installing environment for https://github.com/Lucas-C/pre-commit-hooks. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... [INFO] Installing environment for https://github.com/pre-commit/mirrors-autopep8. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... [INFO] Installing environment for https://github.com/perltidy/perltidy. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... docs: freeze> python -m pip freeze --all docs-linkcheck: freeze> python -m pip freeze --all docs: alabaster==1.0.0,attrs==25.4.0,babel==2.17.0,blockdiag==3.0.0,certifi==2026.1.4,charset-normalizer==3.4.4,contourpy==1.3.3,cycler==0.12.1,docutils==0.21.2,fonttools==4.61.1,funcparserlib==2.0.0a0,future==1.0.0,idna==3.11,imagesize==1.4.1,Jinja2==3.1.6,jsonschema==3.2.0,kiwisolver==1.4.9,lfdocs_conf==0.10.0,MarkupSafe==3.0.3,matplotlib==3.10.8,numpy==2.4.1,nwdiag==3.0.0,packaging==26.0,pillow==12.1.0,pip==25.3,Pygments==2.19.2,pyparsing==3.3.2,pyrsistent==0.20.0,python-dateutil==2.9.0.post0,PyYAML==6.0.3,requests==2.32.5,requests-file==1.5.1,roman-numerals==4.1.0,roman-numerals-py==4.1.0,seqdiag==3.0.0,setuptools==80.9.0,six==1.17.0,snowballstemmer==3.0.1,Sphinx==8.2.3,sphinx-bootstrap-theme==0.8.1,sphinx-data-viewer==0.1.5,sphinx-tabs==3.4.7,sphinx_rtd_theme==3.1.0,sphinxcontrib-applehelp==2.0.0,sphinxcontrib-blockdiag==3.0.0,sphinxcontrib-devhelp==2.0.0,sphinxcontrib-htmlhelp==2.1.0,sphinxcontrib-jquery==4.1,sphinxcontrib-jsmath==1.0.1,sphinxcontrib-needs==0.7.9,sphinxcontrib-nwdiag==2.0.0,sphinxcontrib-plantuml==0.31,sphinxcontrib-qthelp==2.0.0,sphinxcontrib-seqdiag==3.0.0,sphinxcontrib-serializinghtml==2.0.0,sphinxcontrib-swaggerdoc==0.1.7,urllib3==2.6.3,webcolors==25.10.0 docs: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> sphinx-build -q -W --keep-going -b html -n -d /w/workspace/transportpce-tox-verify-transportpce-master/.tox/docs/tmp/doctrees ../docs/ /w/workspace/transportpce-tox-verify-transportpce-master/docs/_build/html docs-linkcheck: alabaster==1.0.0,attrs==25.4.0,babel==2.17.0,blockdiag==3.0.0,certifi==2026.1.4,charset-normalizer==3.4.4,contourpy==1.3.3,cycler==0.12.1,docutils==0.21.2,fonttools==4.61.1,funcparserlib==2.0.0a0,future==1.0.0,idna==3.11,imagesize==1.4.1,Jinja2==3.1.6,jsonschema==3.2.0,kiwisolver==1.4.9,lfdocs_conf==0.10.0,MarkupSafe==3.0.3,matplotlib==3.10.8,numpy==2.4.1,nwdiag==3.0.0,packaging==26.0,pillow==12.1.0,pip==25.3,Pygments==2.19.2,pyparsing==3.3.2,pyrsistent==0.20.0,python-dateutil==2.9.0.post0,PyYAML==6.0.3,requests==2.32.5,requests-file==1.5.1,roman-numerals==4.1.0,roman-numerals-py==4.1.0,seqdiag==3.0.0,setuptools==80.9.0,six==1.17.0,snowballstemmer==3.0.1,Sphinx==8.2.3,sphinx-bootstrap-theme==0.8.1,sphinx-data-viewer==0.1.5,sphinx-tabs==3.4.7,sphinx_rtd_theme==3.1.0,sphinxcontrib-applehelp==2.0.0,sphinxcontrib-blockdiag==3.0.0,sphinxcontrib-devhelp==2.0.0,sphinxcontrib-htmlhelp==2.1.0,sphinxcontrib-jquery==4.1,sphinxcontrib-jsmath==1.0.1,sphinxcontrib-needs==0.7.9,sphinxcontrib-nwdiag==2.0.0,sphinxcontrib-plantuml==0.31,sphinxcontrib-qthelp==2.0.0,sphinxcontrib-seqdiag==3.0.0,sphinxcontrib-serializinghtml==2.0.0,sphinxcontrib-swaggerdoc==0.1.7,urllib3==2.6.3,webcolors==25.10.0 docs-linkcheck: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> sphinx-build -q -b linkcheck -d /w/workspace/transportpce-tox-verify-transportpce-master/.tox/docs-linkcheck/tmp/doctrees ../docs/ /w/workspace/transportpce-tox-verify-transportpce-master/docs/_build/linkcheck docs: OK ✔ in 29.35 seconds pylint: install_deps> python -I -m pip install 'pylint>=2.6.0' docs-linkcheck: OK ✔ in 30.83 seconds pylint: freeze> python -m pip freeze --all pylint: astroid==4.0.3,dill==0.4.1,isort==7.0.0,mccabe==0.7.0,pip==25.3,platformdirs==4.5.1,pylint==4.0.4,setuptools==80.9.0,tomlkit==0.14.0 pylint: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> find transportpce_tests/ -name '*.py' -exec pylint --fail-under=10 --max-line-length=120 --disable=missing-docstring,import-error --disable=fixme --disable=duplicate-code '--module-rgx=([a-z0-9_]+$)|([0-9.]{1,30}$)' '--method-rgx=(([a-z_][a-zA-Z0-9_]{2,})|(_[a-z0-9_]*)|(__[a-zA-Z][a-zA-Z0-9_]+__))$' '--variable-rgx=[a-zA-Z_][a-zA-Z0-9_]{1,30}$' '{}' + trim trailing whitespace.................................................Passed Tabs remover.............................................................Passed autopep8.................................................................Passed perltidy.................................................................Passed pre-commit: commands[3] /w/workspace/transportpce-tox-verify-transportpce-master/tests> pre-commit run gitlint-ci --hook-stage manual [WARNING] hook id `remove-tabs` uses deprecated stage names (commit) which will be removed in a future version. run: `pre-commit migrate-config` to automatically fix this. [WARNING] hook id `perltidy` uses deprecated stage names (commit) which will be removed in a future version. run: `pre-commit migrate-config` to automatically fix this. [INFO] Installing environment for https://github.com/jorisroovers/gitlint. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... gitlint..................................................................Passed ------------------------------------ Your code has been rated at 10.00/10 pre-commit: OK ✔ in 44.86 seconds pylint: OK ✔ in 28.94 seconds buildcontroller: OK ✔ in 2 minutes 10.96 seconds build_karaf_tests121: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt build_karaf_tests221: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt build_karaf_tests190: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt build_karaf_tests71: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt build_karaf_tests121: freeze> python -m pip freeze --all build_karaf_tests121: bcrypt==5.0.0,certifi==2026.1.4,cffi==2.0.0,charset-normalizer==3.4.4,cryptography==46.0.3,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==2.2.1,lxml==6.0.2,netconf-client==3.5.0,packaging==26.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==3.0,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 build_karaf_tests121: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_karaf_for_tests.sh build karaf in karaf121 with ./karaf121.env build_karaf_tests221: freeze> python -m pip freeze --all build_karaf_tests221: bcrypt==5.0.0,certifi==2026.1.4,cffi==2.0.0,charset-normalizer==3.4.4,cryptography==46.0.3,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==2.2.1,lxml==6.0.2,netconf-client==3.5.0,packaging==26.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==3.0,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 build_karaf_tests221: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_karaf_for_tests.sh build karaf in karaf221 with ./karaf221.env build_karaf_tests190: freeze> python -m pip freeze --all build_karaf_tests71: freeze> python -m pip freeze --all build_karaf_tests190: bcrypt==5.0.0,certifi==2026.1.4,cffi==2.0.0,charset-normalizer==3.4.4,cryptography==46.0.3,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==2.2.1,lxml==6.0.2,netconf-client==3.5.0,packaging==26.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==3.0,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 build_karaf_tests190: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_karaf_for_tests.sh build karaf in karafoc with ./karafoc.env build_karaf_tests71: bcrypt==5.0.0,certifi==2026.1.4,cffi==2.0.0,charset-normalizer==3.4.4,cryptography==46.0.3,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==2.2.1,lxml==6.0.2,netconf-client==3.5.0,packaging==26.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==3.0,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 build_karaf_tests71: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_karaf_for_tests.sh build karaf in karaf71 with ./karaf71.env build_karaf_tests121: OK ✔ in 1 minute 14.62 seconds buildlighty: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt build_karaf_tests221: OK ✔ in 1 minute 22.37 seconds sims: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt [ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:3.1.4:install (default-install) on project transportpce-karaf: Failed to install metadata org.opendaylight.transportpce:transportpce-karaf:13.0.0-SNAPSHOT/maven-metadata.xml: Could not read metadata /home/jenkins/.m2/repository/org/opendaylight/transportpce/transportpce-karaf/13.0.0-SNAPSHOT/maven-metadata-local.xml: input contained no data -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException build_karaf_tests190: OK ✔ in 1 minute 30.52 seconds build_karaf_tests71: OK ✔ in 1 minute 30.53 seconds testsPCE: install_deps> python -I -m pip install gnpy4tpce==2.4.7 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt buildlighty: freeze> python -m pip freeze --all sims: freeze> python -m pip freeze --all buildlighty: bcrypt==5.0.0,certifi==2026.1.4,cffi==2.0.0,charset-normalizer==3.4.4,cryptography==46.0.3,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==2.2.1,lxml==6.0.2,netconf-client==3.5.0,packaging==26.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==3.0,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 buildlighty: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/lighty> ./build.sh sims: bcrypt==5.0.0,certifi==2026.1.4,cffi==2.0.0,charset-normalizer==3.4.4,cryptography==46.0.3,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==2.2.1,lxml==6.0.2,netconf-client==3.5.0,packaging==26.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==3.0,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 sims: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./install_lightynode.sh Using lighynode version 20.1.0.5 Installing lightynode device to ./lightynode/lightynode-openroadm-device directory sims: OK ✔ in 22.16 seconds buildlighty: OK ✔ in 47.7 seconds testsPCE: freeze> python -m pip freeze --all testsPCE: bcrypt==5.0.0,certifi==2026.1.4,cffi==2.0.0,charset-normalizer==3.4.4,click==8.3.1,contourpy==1.3.3,cryptography==3.3.2,cycler==0.12.1,dict2xml==1.7.8,Flask==2.1.3,Flask-Injector==0.14.0,fonttools==4.61.1,gnpy4tpce==2.4.7,idna==3.11,iniconfig==2.3.0,injector==0.24.0,invoke==2.2.1,itsdangerous==2.2.0,Jinja2==3.1.6,kiwisolver==1.4.9,lxml==6.0.2,MarkupSafe==3.0.3,matplotlib==3.10.8,netconf-client==3.5.0,networkx==2.8.8,numpy==1.26.4,packaging==26.0,pandas==1.5.3,paramiko==4.0.0,pbr==5.11.1,pillow==12.1.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==3.0,Pygments==2.19.2,PyNaCl==1.6.2,pyparsing==3.3.2,pytest==9.0.2,python-dateutil==2.9.0.post0,pytz==2025.2,requests==2.32.5,scipy==1.17.0,setuptools==50.3.2,six==1.17.0,urllib3==2.6.3,Werkzeug==2.0.3,xlrd==1.2.0 testsPCE: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh pce pytest -q transportpce_tests/pce/test01_pce.py .................... [100%] 20 passed in 110.72s (0:01:50) pytest -q transportpce_tests/pce/test02_pce_400G.py ............ [100%] 12 passed in 46.68s pytest -q transportpce_tests/pce/test03_gnpy.py ........ [100%] 8 passed in 38.16s pytest -q transportpce_tests/pce/test04_pce_bug_fix.py ... [100%] 3 passed in 36.15s testsPCE: OK ✔ in 4 minutes 49.7 seconds tests190: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt tests_tapi: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt tests121: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt tests190: freeze> python -m pip freeze --all tests121: freeze> python -m pip freeze --all tests_tapi: freeze> python -m pip freeze --all tests190: bcrypt==5.0.0,certifi==2026.1.4,cffi==2.0.0,charset-normalizer==3.4.4,cryptography==46.0.3,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==2.2.1,lxml==6.0.2,netconf-client==3.5.0,packaging==26.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==3.0,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 tests190: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh oc using environment variables from ./karafoc.env pytest -q transportpce_tests/oc/test01_portmapping.py tests121: bcrypt==5.0.0,certifi==2026.1.4,cffi==2.0.0,charset-normalizer==3.4.4,cryptography==46.0.3,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==2.2.1,lxml==6.0.2,netconf-client==3.5.0,packaging==26.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==3.0,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 tests121: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh 1.2.1 using environment variables from ./karaf121.env pytest -q transportpce_tests/1.2.1/test01_portmapping.py tests_tapi: bcrypt==5.0.0,certifi==2026.1.4,cffi==2.0.0,charset-normalizer==3.4.4,cryptography==46.0.3,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==2.2.1,lxml==6.0.2,netconf-client==3.5.0,packaging==26.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==3.0,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 tests_tapi: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh tapi using environment variables from ./karaf221.env pytest -q transportpce_tests/tapi/test01_abstracted_topology.py ........... [100%] 10 passed in 80.09s (0:01:20) pytest -q transportpce_tests/oc/test02_topology.py .................................... [100%] 21 passed in 128.06s (0:02:08) pytest -q transportpce_tests/1.2.1/test02_topo_portmapping.py ........................ [100%] 14 passed in 66.72s (0:01:06) pytest -q transportpce_tests/oc/test03_renderer.py ................ [100%] 6 passed in 57.68s pytest -q transportpce_tests/1.2.1/test03_topology.py .................... [100%] 19 passed in 58.26s tests190: OK ✔ in 3 minutes 36.48 seconds tests71: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt .tests71: freeze> python -m pip freeze --all tests71: bcrypt==5.0.0,certifi==2026.1.4,cffi==2.0.0,charset-normalizer==3.4.4,cryptography==46.0.3,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==2.2.1,lxml==6.0.2,netconf-client==3.5.0,packaging==26.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==3.0,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 tests71: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh 7.1 using environment variables from ./karaf71.env pytest -q transportpce_tests/7.1/test01_portmapping.py .................................... [100%] 12 passed in 55.94s pytest -q transportpce_tests/7.1/test02_otn_renderer.py ............................... [100%] 51 passed in 314.51s (0:05:14) pytest -q transportpce_tests/tapi/test02_full_topology.py ...................... [100%] 44 passed in 151.95s (0:02:31) pytest -q transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py ............................................................................... [100%] 62 passed in 157.98s (0:02:37) pytest -q transportpce_tests/7.1/test03_renderer_or_modes.py .. [100%] 24 passed in 93.12s (0:01:33) pytest -q transportpce_tests/1.2.1/test05_olm.py ..FF...........F............................F....F....................................................... [100%] 40 passed in 199.97s (0:03:19) pytest -q transportpce_tests/1.2.1/test06_end2end.py . [100%] =================================== FAILURES =================================== _ TestTransportPCEFullTopology.test_18a_get_tapi_Pht_node_details_at_Pht_Service_creation _ self = def test_18a_get_tapi_Pht_node_details_at_Pht_Service_creation(self): response = test_utils.get_tapi_topology_node( test_utils.T0_FULL_MULTILAYER_TOPO_UUID, self.uuidSpdrSA1xpdr1, self.uuidOnepSpdrSA1xpdr1OTS, "nonconfig") time.sleep(2) self.assertEqual(response['status_code'], requests.codes.ok) input_dict_1 = {"spectrum-capability-pac": {"occupied-spectrum": [{"upper-frequency": "196125000000000", "lower-frequency": "196075000000000"}], "supportable-spectrum": [{"upper-frequency": "196125000000000", "lower-frequency": "191325000000000"}]} } self.assertDictEqual(dict(input_dict_1, **response['onep'][0]['tapi-photonic-media:photonic-media-node-edge-point-spec']), response['onep'][0]['tapi-photonic-media:photonic-media-node-edge-point-spec']) self.assertEqual(response['onep'][0]['name'][0]['value-name'], 'eNodeEdgePoint') self.assertEqual(response['onep'][0]['name'][0]['value'], 'SPDR-SA1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1') self.assertEqual(response['onep'][0]['administrative-state'], 'UNLOCKED') self.assertEqual(response['onep'][0]['operational-state'], 'ENABLED') self.assertEqual(response['onep'][0]['available-payload-structure'][0]['number-of-cep-instances'], '1') self.assertEqual(response['onep'][0]['available-payload-structure'][0]['capacity']['value'], '100.0') self.assertEqual(response['onep'][0]['supported-payload-structure'][0]['number-of-cep-instances'], '1') self.assertEqual(response['onep'][0]['supported-payload-structure'][0]['capacity']['value'], '100.0') self.assertEqual(response['onep'][0]['available-capacity']['total-size']['value'], '100.0') self.assertEqual(response['onep'][0]['tapi-connectivity:cep-list']['connection-end-point'][0] ['client-node-edge-point'][0]['node-edge-point-uuid'], 'f32f5e9e-d167-31ba-a9e4-8f1efdb8786d') self.assertEqual(response['onep'][0]['tapi-connectivity:cep-list']['connection-end-point'][0] ['parent-node-edge-point']['node-edge-point-uuid'], '21efd6a4-2d81-3cdb-aabb-b983fb61904e') response = test_utils.get_tapi_topology_node( test_utils.T0_FULL_MULTILAYER_TOPO_UUID, self.uuidSpdrSA1xpdr1, self.uuidOnepSpdrSA1xpdr1OTSi, "nonconfig") time.sleep(2) self.assertDictEqual(dict(input_dict_1, **response['onep'][0]['tapi-photonic-media:photonic-media-node-edge-point-spec']), response['onep'][0]['tapi-photonic-media:photonic-media-node-edge-point-spec']) self.assertEqual(response['status_code'], requests.codes.ok) self.assertEqual(response['onep'][0]['name'][0]['value-name'], 'PhotMedNodeEdgePoint') self.assertEqual(response['onep'][0]['name'][0]['value'], 'SPDR-SA1-XPDR1+OTSi_MEDIA_CHANNEL+XPDR1-NETWORK1') self.assertEqual(response['onep'][0]['administrative-state'], 'UNLOCKED') self.assertEqual(response['onep'][0]['operational-state'], 'ENABLED') self.assertEqual(response['onep'][0]['available-payload-structure'][0]['number-of-cep-instances'], '1') self.assertEqual(response['onep'][0]['available-payload-structure'][0]['capacity']['value'], '100.0') self.assertEqual(response['onep'][0]['supported-payload-structure'][0]['number-of-cep-instances'], '1') self.assertEqual(response['onep'][0]['supported-payload-structure'][0]['capacity']['value'], '100.0') self.assertEqual(response['onep'][0]['available-capacity']['total-size']['value'], '100.0') > self.assertEqual(response['onep'][0]['tapi-connectivity:cep-list']['connection-end-point'][0] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ['client-node-edge-point'][0]['node-edge-point-uuid'], '7d2a0549-63e3-3c7f-b4dc-5653e8a81dbe') E KeyError: 'tapi-connectivity:cep-list' transportpce_tests/tapi/test02_full_topology.py:428: KeyError _ TestTransportPCEFullTopology.test_18b_get_tapi_OTN_node_details_at_Pht_Service_creation _ self = def test_18b_get_tapi_OTN_node_details_at_Pht_Service_creation(self): response = test_utils.get_tapi_topology_node( test_utils.T0_FULL_MULTILAYER_TOPO_UUID, self.uuidSpdrSA1xpdr1, self.uuidOnepSpdrSA1xpdr1iODU, "nonconfig") time.sleep(2) self.assertEqual(response['onep'][0]['name'][0]['value-name'], 'iNodeEdgePoint_N') self.assertEqual(response['onep'][0]['name'][0]['value'], 'SPDR-SA1-XPDR1+iODU+XPDR1-NETWORK1') self.assertEqual(response['onep'][0]['administrative-state'], 'UNLOCKED') self.assertEqual(response['onep'][0]['operational-state'], 'ENABLED') self.assertEqual(response['onep'][0]['available-payload-structure'][0]['number-of-cep-instances'], '1') self.assertEqual(response['onep'][0]['available-payload-structure'][0]['capacity']['value'], '100.0') self.assertEqual(response['onep'][0]['supported-payload-structure'][0]['number-of-cep-instances'], '1') self.assertEqual(response['onep'][0]['supported-payload-structure'][0]['capacity']['value'], '100.0') self.assertEqual(response['onep'][0]['available-capacity']['total-size']['value'], '100.0') response = test_utils.get_tapi_topology_node(test_utils.T0_FULL_MULTILAYER_TOPO_UUID, self.uuidSpdrSA1xpdr1, self.uuidOnepSpdrSA1xpdr1eODUC1, "nonconfig") time.sleep(2) self.assertEqual(response['onep'][0]['name'][0]['value-name'], 'eNodeEdgePoint_N') self.assertEqual(response['onep'][0]['name'][0]['value'], 'SPDR-SA1-XPDR1+eODU+XPDR1-CLIENT1') self.assertEqual(response['onep'][0]['administrative-state'], 'UNLOCKED') self.assertEqual(response['onep'][0]['operational-state'], 'ENABLED') self.assertEqual(response['onep'][0]['available-payload-structure'][0]['number-of-cep-instances'], '1') self.assertEqual(response['onep'][0]['available-payload-structure'][0]['capacity']['value'], '10.0') self.assertEqual(response['onep'][0]['supported-payload-structure'][0]['number-of-cep-instances'], '1') self.assertEqual(response['onep'][0]['supported-payload-structure'][0]['capacity']['value'], '10.0') self.assertEqual(response['onep'][0]['available-capacity']['total-size']['value'], '10.0') > self.assertEqual(response['onep'][0]['tapi-connectivity:cep-list']['connection-end-point'][0] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ['parent-node-edge-point']['node-edge-point-uuid'], '72c6b97a-3944-3d88-9882-b7e688bb2772') E KeyError: 'tapi-connectivity:cep-list' transportpce_tests/tapi/test02_full_topology.py:478: KeyError _ TestTransportPCEFullTopology.test_20_get_tapi_node_details_at_ODU_Service_creation _ self = def test_20_get_tapi_node_details_at_ODU_Service_creation(self): # ODU service creation correspond to the creation of HO-ODU between 2 Network ports and is associated an # iODU4 top connection which uses 100% of underlying OTU4 response = test_utils.get_tapi_topology_node(test_utils.T0_FULL_MULTILAYER_TOPO_UUID, self.uuidSpdrSA1xpdr1, self.uuidOnepSpdrSA1xpdr1eODUC1, "nonconfig") time.sleep(2) self.assertEqual(response['onep'][0]['name'][0]['value'], 'SPDR-SA1-XPDR1+eODU+XPDR1-CLIENT1') self.assertEqual(response['onep'][0]['administrative-state'], 'UNLOCKED') self.assertEqual(response['onep'][0]['operational-state'], 'ENABLED') self.assertEqual(response['onep'][0]['available-payload-structure'][0]['number-of-cep-instances'], '1') self.assertEqual(response['onep'][0]['available-payload-structure'][0]['capacity']['value'], '10.0') self.assertEqual(response['onep'][0]['supported-payload-structure'][0]['number-of-cep-instances'], '1') self.assertEqual(response['onep'][0]['supported-payload-structure'][0]['capacity']['value'], '10.0') self.assertEqual(response['onep'][0]['available-capacity']['total-size']['value'], '10.0') > self.assertEqual(response['onep'][0]['tapi-connectivity:cep-list']['connection-end-point'][0] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ['client-node-edge-point'][0]['node-edge-point-uuid'], 'c6cd334c-51a1-3995-bed3-5cf2b7445c04') E KeyError: 'tapi-connectivity:cep-list' transportpce_tests/tapi/test02_full_topology.py:545: KeyError _ TestTransportPCEFullTopology.test_23_get_tapi_node_details_at_DSR_Service_creation _ self = def test_23_get_tapi_node_details_at_DSR_Service_creation(self): response = test_utils.get_tapi_topology_node(test_utils.T0_FULL_MULTILAYER_TOPO_UUID, self.uuidSpdrSA1xpdr1, self.uuidOnepSpdrSA1xpdr1eODUC1, "nonconfig") time.sleep(2) self.assertEqual(response['onep'][0]['name'][0]['value'], 'SPDR-SA1-XPDR1+eODU+XPDR1-CLIENT1') self.assertEqual(response['onep'][0]['administrative-state'], 'UNLOCKED') self.assertEqual(response['onep'][0]['operational-state'], 'ENABLED') > self.assertEqual(response['onep'][0]['available-payload-structure'][0]['number-of-cep-instances'], '0') E AssertionError: '1' != '0' E - 1 E + 0 transportpce_tests/tapi/test02_full_topology.py:663: AssertionError ______ TestTransportPCEFullTopology.test_25_get_connectivity_service_list ______ self = def test_25_get_connectivity_service_list(self): response = test_utils.transportpce_api_rpc_request( 'tapi-connectivity', 'get-connectivity-service-list', None) self.assertEqual(response['status_code'], requests.codes.ok) liste_service = response['output']['service'] for ele in liste_service: if ele['uuid'] == self.uuid_services.pm: self.assertEqual(ele['operational-state'], 'ENABLED') # self.assertEqual(ele['service-layer'], 'PHOTONIC_MEDIA') self.assertEqual(ele['layer-protocol-name'], 'PHOTONIC_MEDIA') nbconnection = len(ele['connection']) self.assertEqual(nbconnection, 4, 'There should be 4 connections') elif ele['uuid'] == self.uuid_services.odu: > self.assertEqual(ele['operational-state'], 'ENABLED') E AssertionError: 'DISABLED' != 'ENABLED' E - DISABLED E + ENABLED transportpce_tests/tapi/test02_full_topology.py:714: AssertionError =========================== short test summary info ============================ FAILED transportpce_tests/tapi/test02_full_topology.py::TestTransportPCEFullTopology::test_18a_get_tapi_Pht_node_details_at_Pht_Service_creation FAILED transportpce_tests/tapi/test02_full_topology.py::TestTransportPCEFullTopology::test_18b_get_tapi_OTN_node_details_at_Pht_Service_creation FAILED transportpce_tests/tapi/test02_full_topology.py::TestTransportPCEFullTopology::test_20_get_tapi_node_details_at_ODU_Service_creation FAILED transportpce_tests/tapi/test02_full_topology.py::TestTransportPCEFullTopology::test_23_get_tapi_node_details_at_DSR_Service_creation FAILED transportpce_tests/tapi/test02_full_topology.py::TestTransportPCEFullTopology::test_25_get_connectivity_service_list 5 failed, 31 passed in 324.00s (0:05:23) tests_tapi: exit 1 (639.16 seconds) /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh tapi pid=6831 tests_tapi: FAIL ✖ in 10 minutes 49.63 seconds tests221: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt tests221: freeze> python -m pip freeze --all tests221: bcrypt==5.0.0,certifi==2026.1.4,cffi==2.0.0,charset-normalizer==3.4.4,cryptography==46.0.3,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==2.2.1,lxml==6.0.2,netconf-client==3.5.0,packaging==26.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==3.0,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 tests221: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh 2.2.1 using environment variables from ./karaf221.env pytest -q transportpce_tests/2.2.1/test01_portmapping.py ............F. [100%] 48 passed in 354.12s (0:05:54) pytest -q transportpce_tests/7.1/test04_renderer_regen_mode.py ..........F.......FFFF..............................E.. [100%] =================================== FAILURES =================================== __________ TestTransportPCEPortmapping.test_01_rdm_device_connection ___________ self = conn = method = 'PUT' url = '/rests/data/network-topology:network-topology/topology=topology-netconf/node=ROADM-A1' body = '{"node": [{"node-id": "ROADM-A1", "netconf-node-topology:netconf-node": {"netconf-node-topology:host": "127.0.0.1", "...ff-millis": 1800000, "netconf-node-topology:backoff-multiplier": 1.5, "netconf-node-topology:keepalive-delay": 120}}]}' headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/json', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '710', 'Authorization': 'Basic YWRtaW46YWRtaW4='} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) timeout = Timeout(connect=30, read=30, total=None), chunked = False response_conn = preload_content = False, decode_content = False, enforce_content_length = True def _make_request( self, conn: BaseHTTPConnection, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | None = None, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, chunked: bool = False, response_conn: BaseHTTPConnection | None = None, preload_content: bool = True, decode_content: bool = True, enforce_content_length: bool = True, ) -> BaseHTTPResponse: """ Perform a request on a given urllib connection object taken from our pool. :param conn: a connection from one of our connection pools :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. Pass ``None`` to retry until you receive a response. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param response_conn: Set this to ``None`` if you will handle releasing the connection or set the connection to have the response release it. :param preload_content: If True, the response's body will be preloaded during construction. :param decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param enforce_content_length: Enforce content length checking. Body returned by server must match value of Content-Length header, if present. Otherwise, raise error. """ self.num_requests += 1 timeout_obj = self._get_timeout(timeout) timeout_obj.start_connect() conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) try: # Trigger any extra validation we need to do. try: self._validate_conn(conn) except (SocketTimeout, BaseSSLError) as e: self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) raise # _validate_conn() starts the connection to an HTTPS proxy # so we need to wrap errors with 'ProxyError' here too. except ( OSError, NewConnectionError, TimeoutError, BaseSSLError, CertificateError, SSLError, ) as e: new_e: Exception = e if isinstance(e, (BaseSSLError, CertificateError)): new_e = SSLError(e) # If the connection didn't successfully connect to it's proxy # then there if isinstance( new_e, (OSError, NewConnectionError, TimeoutError, SSLError) ) and (conn and conn.proxy and not conn.has_connected_to_proxy): new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) raise new_e # conn.request() calls http.client.*.request, not the method in # urllib3.request. It also calls makefile (recv) on the socket. try: conn.request( method, url, body=body, headers=headers, chunked=chunked, preload_content=preload_content, decode_content=decode_content, enforce_content_length=enforce_content_length, ) # We are swallowing BrokenPipeError (errno.EPIPE) since the server is # legitimately able to close the connection after sending a valid response. # With this behaviour, the received response is still readable. except BrokenPipeError: pass except OSError as e: # MacOS/Linux # EPROTOTYPE and ECONNRESET are needed on macOS # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ # Condition changed later to emit ECONNRESET instead of only EPROTOTYPE. if e.errno != errno.EPROTOTYPE and e.errno != errno.ECONNRESET: raise # Reset the timeout for the recv() on the socket read_timeout = timeout_obj.read_timeout if not conn.is_closed: # In Python 3 socket.py will catch EAGAIN and return None when you # try and read into the file pointer created by http.client, which # instead raises a BadStatusLine exception. Instead of catching # the exception and assuming all BadStatusLine exceptions are read # timeouts, check for a zero timeout before making the request. if read_timeout == 0: raise ReadTimeoutError( self, url, f"Read timed out. (read timeout={read_timeout})" ) conn.timeout = read_timeout # Receive the response from the server try: > response = conn.getresponse() ^^^^^^^^^^^^^^^^^^ ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../.tox/tests221/lib/python3.11/site-packages/urllib3/connection.py:571: in getresponse httplib_response = super().getresponse() ^^^^^^^^^^^^^^^^^^^^^ /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:1395: in getresponse response.begin() /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:325: in begin version, status, reason = self._read_status() ^^^^^^^^^^^^^^^^^^^ /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:286: in _read_status line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = b = def readinto(self, b): """Read up to len(b) bytes into the writable buffer *b* and return the number of bytes read. If the socket is non-blocking and no bytes are available, None is returned. If *b* is non-empty, a 0 return value indicates that the connection was shutdown at the other end. """ self._checkClosed() self._checkReadable() if self._timeout_occurred: raise OSError("cannot read from timed out object") while True: try: > return self._sock.recv_into(b) ^^^^^^^^^^^^^^^^^^^^^^^ E TimeoutError: timed out /opt/pyenv/versions/3.11.10/lib/python3.11/socket.py:718: TimeoutError The above exception was the direct cause of the following exception: self = request = , stream = False timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) ../.tox/tests221/lib/python3.11/site-packages/requests/adapters.py:644: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:841: in urlopen retries = retries.increment( ../.tox/tests221/lib/python3.11/site-packages/urllib3/util/retry.py:490: in increment raise reraise(type(error), error, _stacktrace) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests221/lib/python3.11/site-packages/urllib3/util/util.py:39: in reraise raise value ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:787: in urlopen response = self._make_request( ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:536: in _make_request self._raise_timeout(err=e, url=url, timeout_value=read_timeout) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = err = TimeoutError('timed out') url = '/rests/data/network-topology:network-topology/topology=topology-netconf/node=ROADM-A1' timeout_value = 30 def _raise_timeout( self, err: BaseSSLError | OSError | SocketTimeout, url: str, timeout_value: _TYPE_TIMEOUT | None, ) -> None: """Is the error actually a timeout? Will raise a ReadTimeout or pass""" if isinstance(err, SocketTimeout): > raise ReadTimeoutError( self, url, f"Read timed out. (read timeout={timeout_value})" ) from err E urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=8183): Read timed out. (read timeout=30) ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:367: ReadTimeoutError During handling of the above exception, another exception occurred: self = def test_01_rdm_device_connection(self): > response = test_utils.mount_device("ROADM-A1", ('roadma', self.NODE_VERSION)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ transportpce_tests/2.2.1/test01_portmapping.py:51: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:376: in mount_device response = put_request(url[RESTCONF_VERSION].format('{}', node), body) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ transportpce_tests/common/test_utils.py:125: in put_request return requests.request( ../.tox/tests221/lib/python3.11/site-packages/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests221/lib/python3.11/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests221/lib/python3.11/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = , stream = False timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) raise ConnectionError(e, request=request) except ClosedPoolError as e: raise ConnectionError(e, request=request) except _ProxyError as e: raise ProxyError(e) except (_SSLError, _HTTPError) as e: if isinstance(e, _SSLError): # This branch is for urllib3 versions earlier than v1.22 raise SSLError(e, request=request) elif isinstance(e, ReadTimeoutError): > raise ReadTimeout(e, request=request) E requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=8183): Read timed out. (read timeout=30) ../.tox/tests221/lib/python3.11/site-packages/requests/adapters.py:690: ReadTimeout ---------------------------- Captured stdout setup ----------------------------- starting OpenDaylight... starting KARAF (karaf221) TransportPCE build... Searching for patterns in karaf.log... Pattern found! OpenDaylight started ! starting simulator xpdra in OpenROADM device version 2.2.1... Searching for patterns in xpdra-221.log... Pattern found! simulator for xpdra started starting simulator roadma in OpenROADM device version 2.2.1... Searching for patterns in roadma-221.log... Pattern found! simulator for roadma started starting simulator spdra in OpenROADM device version 2.2.1... Searching for patterns in spdra-221.log... Pattern found! simulator for spdra started ----------------------------- Captured stdout call ----------------------------- execution of test_01_rdm_device_connection ___________ TestTransportPCEPortmapping.test_02_rdm_device_connected ___________ self = conn = method = 'GET' url = '/rests/data/network-topology:network-topology/topology=topology-netconf/node=ROADM-A1?content=nonconfig' body = None headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/json', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Authorization': 'Basic YWRtaW46YWRtaW4='} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) timeout = Timeout(connect=30, read=30, total=None), chunked = False response_conn = preload_content = False, decode_content = False, enforce_content_length = True def _make_request( self, conn: BaseHTTPConnection, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | None = None, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, chunked: bool = False, response_conn: BaseHTTPConnection | None = None, preload_content: bool = True, decode_content: bool = True, enforce_content_length: bool = True, ) -> BaseHTTPResponse: """ Perform a request on a given urllib connection object taken from our pool. :param conn: a connection from one of our connection pools :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. Pass ``None`` to retry until you receive a response. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param response_conn: Set this to ``None`` if you will handle releasing the connection or set the connection to have the response release it. :param preload_content: If True, the response's body will be preloaded during construction. :param decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param enforce_content_length: Enforce content length checking. Body returned by server must match value of Content-Length header, if present. Otherwise, raise error. """ self.num_requests += 1 timeout_obj = self._get_timeout(timeout) timeout_obj.start_connect() conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) try: # Trigger any extra validation we need to do. try: self._validate_conn(conn) except (SocketTimeout, BaseSSLError) as e: self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) raise # _validate_conn() starts the connection to an HTTPS proxy # so we need to wrap errors with 'ProxyError' here too. except ( OSError, NewConnectionError, TimeoutError, BaseSSLError, CertificateError, SSLError, ) as e: new_e: Exception = e if isinstance(e, (BaseSSLError, CertificateError)): new_e = SSLError(e) # If the connection didn't successfully connect to it's proxy # then there if isinstance( new_e, (OSError, NewConnectionError, TimeoutError, SSLError) ) and (conn and conn.proxy and not conn.has_connected_to_proxy): new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) raise new_e # conn.request() calls http.client.*.request, not the method in # urllib3.request. It also calls makefile (recv) on the socket. try: conn.request( method, url, body=body, headers=headers, chunked=chunked, preload_content=preload_content, decode_content=decode_content, enforce_content_length=enforce_content_length, ) # We are swallowing BrokenPipeError (errno.EPIPE) since the server is # legitimately able to close the connection after sending a valid response. # With this behaviour, the received response is still readable. except BrokenPipeError: pass except OSError as e: # MacOS/Linux # EPROTOTYPE and ECONNRESET are needed on macOS # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ # Condition changed later to emit ECONNRESET instead of only EPROTOTYPE. if e.errno != errno.EPROTOTYPE and e.errno != errno.ECONNRESET: raise # Reset the timeout for the recv() on the socket read_timeout = timeout_obj.read_timeout if not conn.is_closed: # In Python 3 socket.py will catch EAGAIN and return None when you # try and read into the file pointer created by http.client, which # instead raises a BadStatusLine exception. Instead of catching # the exception and assuming all BadStatusLine exceptions are read # timeouts, check for a zero timeout before making the request. if read_timeout == 0: raise ReadTimeoutError( self, url, f"Read timed out. (read timeout={read_timeout})" ) conn.timeout = read_timeout # Receive the response from the server try: > response = conn.getresponse() ^^^^^^^^^^^^^^^^^^ ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../.tox/tests221/lib/python3.11/site-packages/urllib3/connection.py:571: in getresponse httplib_response = super().getresponse() ^^^^^^^^^^^^^^^^^^^^^ /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:1395: in getresponse response.begin() /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:325: in begin version, status, reason = self._read_status() ^^^^^^^^^^^^^^^^^^^ /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:286: in _read_status line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = b = def readinto(self, b): """Read up to len(b) bytes into the writable buffer *b* and return the number of bytes read. If the socket is non-blocking and no bytes are available, None is returned. If *b* is non-empty, a 0 return value indicates that the connection was shutdown at the other end. """ self._checkClosed() self._checkReadable() if self._timeout_occurred: raise OSError("cannot read from timed out object") while True: try: > return self._sock.recv_into(b) ^^^^^^^^^^^^^^^^^^^^^^^ E TimeoutError: timed out /opt/pyenv/versions/3.11.10/lib/python3.11/socket.py:718: TimeoutError The above exception was the direct cause of the following exception: self = request = , stream = False timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) ../.tox/tests221/lib/python3.11/site-packages/requests/adapters.py:644: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:841: in urlopen retries = retries.increment( ../.tox/tests221/lib/python3.11/site-packages/urllib3/util/retry.py:490: in increment raise reraise(type(error), error, _stacktrace) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests221/lib/python3.11/site-packages/urllib3/util/util.py:39: in reraise raise value ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:787: in urlopen response = self._make_request( ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:536: in _make_request self._raise_timeout(err=e, url=url, timeout_value=read_timeout) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = err = TimeoutError('timed out') url = '/rests/data/network-topology:network-topology/topology=topology-netconf/node=ROADM-A1?content=nonconfig' timeout_value = 30 def _raise_timeout( self, err: BaseSSLError | OSError | SocketTimeout, url: str, timeout_value: _TYPE_TIMEOUT | None, ) -> None: """Is the error actually a timeout? Will raise a ReadTimeout or pass""" if isinstance(err, SocketTimeout): > raise ReadTimeoutError( self, url, f"Read timed out. (read timeout={timeout_value})" ) from err E urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=8183): Read timed out. (read timeout=30) ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:367: ReadTimeoutError During handling of the above exception, another exception occurred: self = def test_02_rdm_device_connected(self): > response = test_utils.check_device_connection("ROADM-A1") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ transportpce_tests/2.2.1/test01_portmapping.py:55: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:404: in check_device_connection response = get_request(url[RESTCONF_VERSION].format('{}', node)) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ transportpce_tests/common/test_utils.py:117: in get_request return requests.request( ../.tox/tests221/lib/python3.11/site-packages/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests221/lib/python3.11/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests221/lib/python3.11/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = , stream = False timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) raise ConnectionError(e, request=request) except ClosedPoolError as e: raise ConnectionError(e, request=request) except _ProxyError as e: raise ProxyError(e) except (_SSLError, _HTTPError) as e: if isinstance(e, _SSLError): # This branch is for urllib3 versions earlier than v1.22 raise SSLError(e, request=request) elif isinstance(e, ReadTimeoutError): > raise ReadTimeout(e, request=request) E requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=8183): Read timed out. (read timeout=30) ../.tox/tests221/lib/python3.11/site-packages/requests/adapters.py:690: ReadTimeout ----------------------------- Captured stdout call ----------------------------- execution of test_02_rdm_device_connected ___________ TestTransportPCEPortmapping.test_03_rdm_portmapping_info ___________ self = conn = method = 'GET' url = '/rests/data/transportpce-portmapping:network/nodes=ROADM-A1/node-info' body = None headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/json', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Authorization': 'Basic YWRtaW46YWRtaW4='} retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) timeout = Timeout(connect=30, read=30, total=None), chunked = False response_conn = preload_content = False, decode_content = False, enforce_content_length = True def _make_request( self, conn: BaseHTTPConnection, method: str, url: str, body: _TYPE_BODY | None = None, headers: typing.Mapping[str, str] | None = None, retries: Retry | None = None, timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, chunked: bool = False, response_conn: BaseHTTPConnection | None = None, preload_content: bool = True, decode_content: bool = True, enforce_content_length: bool = True, ) -> BaseHTTPResponse: """ Perform a request on a given urllib connection object taken from our pool. :param conn: a connection from one of our connection pools :param method: HTTP request method (such as GET, POST, PUT, etc.) :param url: The URL to perform the request on. :param body: Data to send in the request body, either :class:`str`, :class:`bytes`, an iterable of :class:`str`/:class:`bytes`, or a file-like object. :param headers: Dictionary of custom headers to send, such as User-Agent, If-None-Match, etc. If None, pool headers are used. If provided, these headers completely replace any pool-specific headers. :param retries: Configure the number of retries to allow before raising a :class:`~urllib3.exceptions.MaxRetryError` exception. Pass ``None`` to retry until you receive a response. Pass a :class:`~urllib3.util.retry.Retry` object for fine-grained control over different types of retries. Pass an integer number to retry connection errors that many times, but no other types of errors. Pass zero to never retry. If ``False``, then retries are disabled and any exception is raised immediately. Also, instead of raising a MaxRetryError on redirects, the redirect response will be returned. :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. :param timeout: If specified, overrides the default timeout for this one request. It may be a float (in seconds) or an instance of :class:`urllib3.util.Timeout`. :param chunked: If True, urllib3 will send the body using chunked transfer encoding. Otherwise, urllib3 will send the body using the standard content-length form. Defaults to False. :param response_conn: Set this to ``None`` if you will handle releasing the connection or set the connection to have the response release it. :param preload_content: If True, the response's body will be preloaded during construction. :param decode_content: If True, will attempt to decode the body based on the 'content-encoding' header. :param enforce_content_length: Enforce content length checking. Body returned by server must match value of Content-Length header, if present. Otherwise, raise error. """ self.num_requests += 1 timeout_obj = self._get_timeout(timeout) timeout_obj.start_connect() conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) try: # Trigger any extra validation we need to do. try: self._validate_conn(conn) except (SocketTimeout, BaseSSLError) as e: self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) raise # _validate_conn() starts the connection to an HTTPS proxy # so we need to wrap errors with 'ProxyError' here too. except ( OSError, NewConnectionError, TimeoutError, BaseSSLError, CertificateError, SSLError, ) as e: new_e: Exception = e if isinstance(e, (BaseSSLError, CertificateError)): new_e = SSLError(e) # If the connection didn't successfully connect to it's proxy # then there if isinstance( new_e, (OSError, NewConnectionError, TimeoutError, SSLError) ) and (conn and conn.proxy and not conn.has_connected_to_proxy): new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) raise new_e # conn.request() calls http.client.*.request, not the method in # urllib3.request. It also calls makefile (recv) on the socket. try: conn.request( method, url, body=body, headers=headers, chunked=chunked, preload_content=preload_content, decode_content=decode_content, enforce_content_length=enforce_content_length, ) # We are swallowing BrokenPipeError (errno.EPIPE) since the server is # legitimately able to close the connection after sending a valid response. # With this behaviour, the received response is still readable. except BrokenPipeError: pass except OSError as e: # MacOS/Linux # EPROTOTYPE and ECONNRESET are needed on macOS # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ # Condition changed later to emit ECONNRESET instead of only EPROTOTYPE. if e.errno != errno.EPROTOTYPE and e.errno != errno.ECONNRESET: raise # Reset the timeout for the recv() on the socket read_timeout = timeout_obj.read_timeout if not conn.is_closed: # In Python 3 socket.py will catch EAGAIN and return None when you # try and read into the file pointer created by http.client, which # instead raises a BadStatusLine exception. Instead of catching # the exception and assuming all BadStatusLine exceptions are read # timeouts, check for a zero timeout before making the request. if read_timeout == 0: raise ReadTimeoutError( self, url, f"Read timed out. (read timeout={read_timeout})" ) conn.timeout = read_timeout # Receive the response from the server try: > response = conn.getresponse() ^^^^^^^^^^^^^^^^^^ ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:534: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../.tox/tests221/lib/python3.11/site-packages/urllib3/connection.py:571: in getresponse httplib_response = super().getresponse() ^^^^^^^^^^^^^^^^^^^^^ /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:1395: in getresponse response.begin() /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:325: in begin version, status, reason = self._read_status() ^^^^^^^^^^^^^^^^^^^ /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:286: in _read_status line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = b = def readinto(self, b): """Read up to len(b) bytes into the writable buffer *b* and return the number of bytes read. If the socket is non-blocking and no bytes are available, None is returned. If *b* is non-empty, a 0 return value indicates that the connection was shutdown at the other end. """ self._checkClosed() self._checkReadable() if self._timeout_occurred: raise OSError("cannot read from timed out object") while True: try: > return self._sock.recv_into(b) ^^^^^^^^^^^^^^^^^^^^^^^ E TimeoutError: timed out /opt/pyenv/versions/3.11.10/lib/python3.11/socket.py:718: TimeoutError The above exception was the direct cause of the following exception: self = request = , stream = False timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: > resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) ../.tox/tests221/lib/python3.11/site-packages/requests/adapters.py:644: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:841: in urlopen retries = retries.increment( ../.tox/tests221/lib/python3.11/site-packages/urllib3/util/retry.py:490: in increment raise reraise(type(error), error, _stacktrace) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests221/lib/python3.11/site-packages/urllib3/util/util.py:39: in reraise raise value ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:787: in urlopen response = self._make_request( ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:536: in _make_request self._raise_timeout(err=e, url=url, timeout_value=read_timeout) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = err = TimeoutError('timed out') url = '/rests/data/transportpce-portmapping:network/nodes=ROADM-A1/node-info' timeout_value = 30 def _raise_timeout( self, err: BaseSSLError | OSError | SocketTimeout, url: str, timeout_value: _TYPE_TIMEOUT | None, ) -> None: """Is the error actually a timeout? Will raise a ReadTimeout or pass""" if isinstance(err, SocketTimeout): > raise ReadTimeoutError( self, url, f"Read timed out. (read timeout={timeout_value})" ) from err E urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=8183): Read timed out. (read timeout=30) ../.tox/tests221/lib/python3.11/site-packages/urllib3/connectionpool.py:367: ReadTimeoutError During handling of the above exception, another exception occurred: self = def test_03_rdm_portmapping_info(self): > response = test_utils.get_portmapping_node_attr("ROADM-A1", "node-info", None) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ transportpce_tests/2.2.1/test01_portmapping.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:514: in get_portmapping_node_attr response = get_request(target_url) ^^^^^^^^^^^^^^^^^^^^^^^ transportpce_tests/common/test_utils.py:117: in get_request return requests.request( ../.tox/tests221/lib/python3.11/site-packages/requests/api.py:59: in request return session.request(method=method, url=url, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests221/lib/python3.11/site-packages/requests/sessions.py:589: in request resp = self.send(prep, **send_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests221/lib/python3.11/site-packages/requests/sessions.py:703: in send r = adapter.send(request, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = request = , stream = False timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None proxies = OrderedDict() def send( self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None ): """Sends PreparedRequest object. Returns Response object. :param request: The :class:`PreparedRequest ` being sent. :param stream: (optional) Whether to stream the request content. :param timeout: (optional) How long to wait for the server to send data before giving up, as a float, or a :ref:`(connect timeout, read timeout) ` tuple. :type timeout: float or tuple or urllib3 Timeout object :param verify: (optional) Either a boolean, in which case it controls whether we verify the server's TLS certificate, or a string, in which case it must be a path to a CA bundle to use :param cert: (optional) Any user-provided SSL certificate to be trusted. :param proxies: (optional) The proxies dictionary to apply to the request. :rtype: requests.Response """ try: conn = self.get_connection_with_tls_context( request, verify, proxies=proxies, cert=cert ) except LocationValueError as e: raise InvalidURL(e, request=request) self.cert_verify(conn, request.url, verify, cert) url = self.request_url(request, proxies) self.add_headers( request, stream=stream, timeout=timeout, verify=verify, cert=cert, proxies=proxies, ) chunked = not (request.body is None or "Content-Length" in request.headers) if isinstance(timeout, tuple): try: connect, read = timeout timeout = TimeoutSauce(connect=connect, read=read) except ValueError: raise ValueError( f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " f"or a single float to set both timeouts to the same value." ) elif isinstance(timeout, TimeoutSauce): pass else: timeout = TimeoutSauce(connect=timeout, read=timeout) try: resp = conn.urlopen( method=request.method, url=url, body=request.body, headers=request.headers, redirect=False, assert_same_host=False, preload_content=False, decode_content=False, retries=self.max_retries, timeout=timeout, chunked=chunked, ) except (ProtocolError, OSError) as err: raise ConnectionError(err, request=request) except MaxRetryError as e: if isinstance(e.reason, ConnectTimeoutError): # TODO: Remove this in 3.0.0: see #2811 if not isinstance(e.reason, NewConnectionError): raise ConnectTimeout(e, request=request) if isinstance(e.reason, ResponseError): raise RetryError(e, request=request) if isinstance(e.reason, _ProxyError): raise ProxyError(e, request=request) if isinstance(e.reason, _SSLError): # This branch is for urllib3 v1.22 and later. raise SSLError(e, request=request) raise ConnectionError(e, request=request) except ClosedPoolError as e: raise ConnectionError(e, request=request) except _ProxyError as e: raise ProxyError(e) except (_SSLError, _HTTPError) as e: if isinstance(e, _SSLError): # This branch is for urllib3 versions earlier than v1.22 raise SSLError(e, request=request) elif isinstance(e, ReadTimeoutError): > raise ReadTimeout(e, request=request) E requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=8183): Read timed out. (read timeout=30) ../.tox/tests221/lib/python3.11/site-packages/requests/adapters.py:690: ReadTimeout ----------------------------- Captured stdout call ----------------------------- execution of test_03_rdm_portmapping_info ______ TestTransportPCEPortmapping.test_04_rdm_portmapping_DEG1_TTP_TXRX _______ self = def test_04_rdm_portmapping_DEG1_TTP_TXRX(self): response = test_utils.get_portmapping_node_attr("ROADM-A1", "mapping", "DEG1-TTP-TXRX") > self.assertEqual(response['status_code'], requests.codes.ok) E AssertionError: 409 != 200 transportpce_tests/2.2.1/test01_portmapping.py:73: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_04_rdm_portmapping_DEG1_TTP_TXRX _ TestTransportPCEPortmapping.test_05_rdm_portmapping_DEG2_TTP_TXRX_with_ots_oms _ self = def test_05_rdm_portmapping_DEG2_TTP_TXRX_with_ots_oms(self): response = test_utils.get_portmapping_node_attr("ROADM-A1", "mapping", "DEG2-TTP-TXRX") > self.assertEqual(response['status_code'], requests.codes.ok) E AssertionError: 409 != 200 transportpce_tests/2.2.1/test01_portmapping.py:82: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_05_rdm_portmapping_DEG2_TTP_TXRX_with_ots_oms ______ TestTransportPCEPortmapping.test_06_rdm_portmapping_SRG1_PP3_TXRX _______ self = def test_06_rdm_portmapping_SRG1_PP3_TXRX(self): response = test_utils.get_portmapping_node_attr("ROADM-A1", "mapping", "SRG1-PP3-TXRX") > self.assertEqual(response['status_code'], requests.codes.ok) E AssertionError: 409 != 200 transportpce_tests/2.2.1/test01_portmapping.py:93: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_06_rdm_portmapping_SRG1_PP3_TXRX =========================== short test summary info ============================ FAILED transportpce_tests/2.2.1/test01_portmapping.py::TestTransportPCEPortmapping::test_01_rdm_device_connection FAILED transportpce_tests/2.2.1/test01_portmapping.py::TestTransportPCEPortmapping::test_02_rdm_device_connected FAILED transportpce_tests/2.2.1/test01_portmapping.py::TestTransportPCEPortmapping::test_03_rdm_portmapping_info FAILED transportpce_tests/2.2.1/test01_portmapping.py::TestTransportPCEPortmapping::test_04_rdm_portmapping_DEG1_TTP_TXRX FAILED transportpce_tests/2.2.1/test01_portmapping.py::TestTransportPCEPortmapping::test_05_rdm_portmapping_DEG2_TTP_TXRX_with_ots_oms FAILED transportpce_tests/2.2.1/test01_portmapping.py::TestTransportPCEPortmapping::test_06_rdm_portmapping_SRG1_PP3_TXRX 6 failed, 29 passed in 239.58s (0:03:59) tests221: exit 1 (240.08 seconds) /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh 2.2.1 pid=19442 tests221: FAIL ✖ in 4 minutes 9.36 seconds tests_hybrid: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt .....Ftests_hybrid: freeze> python -m pip freeze --all tests_hybrid: bcrypt==5.0.0,certifi==2026.1.4,cffi==2.0.0,charset-normalizer==3.4.4,cryptography==46.0.3,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==2.2.1,lxml==6.0.2,netconf-client==3.5.0,packaging==26.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==3.0,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 tests_hybrid: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh hybrid using environment variables from ./karaf221.env pytest -q transportpce_tests/hybrid/test01_device_change_notifications.py FFFFF.F..F.FFFF..FFFF.........E.F.. [100%] ==================================== ERRORS ==================================== _ ERROR at setup of TestTransportPCERendererRegenMode.test_01_xpdr_device_connection _ cls = @classmethod def setUpClass(cls): > cls.processes = test_utils.start_tpce() ^^^^^^^^^^^^^^^^^^^^^^^ transportpce_tests/7.1/test04_renderer_regen_mode.py:67: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ def start_tpce(): if 'NO_ODL_STARTUP' in os.environ: print('No OpenDaylight instance to start!') return [] print('starting OpenDaylight...') if 'USE_LIGHTY' in os.environ and os.environ['USE_LIGHTY'] == 'True': process = start_lighty() else: process = start_karaf() if wait_until_log_contains(TPCE_LOG, [LIGHTY_OK_START_MSG, KARAF_OK_START_MSG], time_to_wait=100): print('OpenDaylight started !') else: print('OpenDaylight failed to start !') shutdown_process(process) for pid in process_list: shutdown_process(pid) > sys.exit(1) E SystemExit: 1 transportpce_tests/common/test_utils.py:232: SystemExit ---------------------------- Captured stdout setup ----------------------------- starting OpenDaylight... starting KARAF (karaf71) TransportPCE build... Searching for patterns in karaf.log... Pattern not found after 100 seconds! OpenDaylight failed to start ! =================================== FAILURES =================================== __________ TestTransportPCERendererRegenMode.test_02_check_xpdr_type ___________ self = def test_02_check_xpdr_type(self): response = test_utils.get_portmapping_node_attr("XPDR-A2", "mapping", "XPDR4-NETWORK1") > self.assertEqual(response["status_code"], requests.codes.ok) E AssertionError: 409 != 200 transportpce_tests/7.1/test04_renderer_regen_mode.py:92: AssertionError ---------------------------- Captured stdout setup ----------------------------- starting OpenDaylight... starting KARAF (karaf71) TransportPCE build... Searching for patterns in karaf.log... Pattern found! OpenDaylight started ! starting simulator xpdra2 in OpenROADM device version 7.1... Searching for patterns in xpdra2-71.log... Pattern found! simulator for xpdra2 started ----------------------------- Captured stdout call ----------------------------- execution of test_02_check_xpdr_type __________ TestTransportPCERendererRegenMode.test_03_check_xpdr_type ___________ self = def test_03_check_xpdr_type(self): response = test_utils.get_portmapping_node_attr("XPDR-A2", "mapping", "XPDR4-NETWORK2") > self.assertEqual(response["status_code"], requests.codes.ok) E AssertionError: 409 != 200 transportpce_tests/7.1/test04_renderer_regen_mode.py:103: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_03_check_xpdr_type ___ TestTransportPCERendererRegenMode.test_04_400g_regen_service_path_create ___ self = def test_04_400g_regen_service_path_create(self): response = test_utils.transportpce_api_rpc_request( "transportpce-device-renderer", "service-path", { "service-name": "service_400g_regen", "wave-number": "0", "modulation-format": "dp-qam16", "operation": "create", "nodes": [ { "node-id": "XPDR-A2", "src-tp": "XPDR4-NETWORK1", "dest-tp": "XPDR4-NETWORK2" } ], "center-freq": 195.0, "nmc-width": 75, "mc-width": 87.5, "min-freq": 194.95625, "max-freq": 195.04375, "lower-spectral-slot-number": 582, "higher-spectral-slot-number": 595, }) self.assertEqual(response["status_code"], requests.codes.ok) > self.assertIn("Interfaces created successfully for nodes: ", response["output"]["result"]) E AssertionError: 'Interfaces created successfully for nodes: ' not found in 'XPDR-A2 is not mounted on the controller' transportpce_tests/7.1/test04_renderer_regen_mode.py:134: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_04_400g_regen_service_path_create ______ TestTransportPCERendererRegenMode.test_05_get_portmapping_network1 ______ self = def test_05_get_portmapping_network1(self): response = test_utils.get_portmapping_node_attr("XPDR-A2", "mapping", "XPDR4-NETWORK1") > self.assertEqual(response["status_code"], requests.codes.ok) E AssertionError: 409 != 200 transportpce_tests/7.1/test04_renderer_regen_mode.py:159: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_05_get_portmapping_network1 ______ TestTransportPCERendererRegenMode.test_06_get_portmapping_network1 ______ self = def test_06_get_portmapping_network1(self): response = test_utils.get_portmapping_node_attr("XPDR-A2", "mapping", "XPDR4-NETWORK2") > self.assertEqual(response["status_code"], requests.codes.ok) E AssertionError: 409 != 200 transportpce_tests/7.1/test04_renderer_regen_mode.py:172: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_06_get_portmapping_network1 _______ TestTransportPCERendererRegenMode.test_07_check_interface_oduc4 ________ self = def test_07_check_interface_oduc4(self): response = test_utils.check_node_attribute_request( "XPDR-A2", "interface", "XPDR4-NETWORK1-ODUC4") > self.assertEqual(response["status_code"], requests.codes.ok) E AssertionError: 503 != 200 transportpce_tests/7.1/test04_renderer_regen_mode.py:188: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_07_check_interface_oduc4 _______ TestTransportPCERendererRegenMode.test_08_check_interface_oduc4 ________ self = def test_08_check_interface_oduc4(self): response = test_utils.check_node_attribute_request( "XPDR-A2", "interface", "XPDR4-NETWORK2-ODUC4") > self.assertEqual(response["status_code"], requests.codes.ok) E AssertionError: 503 != 200 transportpce_tests/7.1/test04_renderer_regen_mode.py:211: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_08_check_interface_oduc4 _____ TestTransportPCERendererRegenMode.test_09_service_path_delete_regen ______ self = def test_09_service_path_delete_regen(self): response = test_utils.transportpce_api_rpc_request( "transportpce-device-renderer", "service-path", { "modulation-format": "dp-qam16", "operation": "delete", "service-name": "test1_regen", "wave-number": "0", "center-freq": 195.0, "nmc-width": 75, "mc-width": 87.5, "min-freq": 194.95625, "max-freq": 195.04375, "lower-spectral-slot-number": 582, "higher-spectral-slot-number": 595, "nodes": [ { "node-id": "XPDR-A2", "src-tp": "XPDR4-NETWORK1", "dest-tp": "XPDR4-NETWORK2" } ] }) self.assertEqual(response["status_code"], requests.codes.ok) > self.assertIn("Request processed", response["output"]["result"]) E AssertionError: 'Request processed' not found in 'XPDR-A2 is not mounted on the controller' transportpce_tests/7.1/test04_renderer_regen_mode.py:257: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_09_service_path_delete_regen ______ TestTransportPCERendererRegenMode.test_10_check_no_interface_oduc4 ______ self = def test_10_check_no_interface_oduc4(self): response = test_utils.check_node_attribute_request( "XPDR-A2", "interface", "XPDR4-NETWORK1-ODUC4") > self.assertEqual(response["status_code"], requests.codes.conflict) E AssertionError: 503 != 409 transportpce_tests/7.1/test04_renderer_regen_mode.py:262: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_10_check_no_interface_oduc4 ______ TestTransportPCERendererRegenMode.test_11_check_no_interface_oduc4 ______ self = def test_11_check_no_interface_oduc4(self): response = test_utils.check_node_attribute_request( "XPDR-A2", "interface", "XPDR4-NETWORK2-ODUC4") > self.assertEqual(response["status_code"], requests.codes.conflict) E AssertionError: 503 != 409 transportpce_tests/7.1/test04_renderer_regen_mode.py:267: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_11_check_no_interface_oduc4 ______ TestTransportPCERendererRegenMode.test_12_check_no_interface_otuc4 ______ self = def test_12_check_no_interface_otuc4(self): response = test_utils.check_node_attribute_request( "XPDR-A2", "interface", "XPDR4-NETWORK1-OTUC1") > self.assertEqual(response["status_code"], requests.codes.conflict) E AssertionError: 503 != 409 transportpce_tests/7.1/test04_renderer_regen_mode.py:272: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_12_check_no_interface_otuc4 ______ TestTransportPCERendererRegenMode.test_13_check_no_interface_otuc4 ______ self = def test_13_check_no_interface_otuc4(self): response = test_utils.check_node_attribute_request( "XPDR-A2", "interface", "XPDR4-NETWORK2-OTUC1") > self.assertEqual(response["status_code"], requests.codes.conflict) E AssertionError: 503 != 409 transportpce_tests/7.1/test04_renderer_regen_mode.py:277: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_13_check_no_interface_otuc4 ______ TestTransportPCERendererRegenMode.test_16_check_no_interface_otsig ______ self = def test_16_check_no_interface_otsig(self): response = test_utils.check_node_attribute_request( "XPDR-A2", "interface", "XPDR4-NETWORK1-OTSIGROUP-400G") > self.assertEqual(response["status_code"], requests.codes.conflict) E AssertionError: 503 != 409 transportpce_tests/7.1/test04_renderer_regen_mode.py:291: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_16_check_no_interface_otsig ______ TestTransportPCERendererRegenMode.test_17_check_no_interface_otsig ______ self = def test_17_check_no_interface_otsig(self): response = test_utils.check_node_attribute_request( "XPDR-A2", "interface", "XPDR4-NETWORK2-OTSIGROUP-400G") > self.assertEqual(response["status_code"], requests.codes.conflict) E AssertionError: 503 != 409 transportpce_tests/7.1/test04_renderer_regen_mode.py:296: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_17_check_no_interface_otsig ______ TestTransportPCERendererRegenMode.test_18_check_no_interface_otsi _______ self = def test_18_check_no_interface_otsi(self): response = test_utils.check_node_attribute_request( "XPDR-A2", "interface", "XPDR4-NETWORK1-582:595") > self.assertEqual(response["status_code"], requests.codes.conflict) E AssertionError: 503 != 409 transportpce_tests/7.1/test04_renderer_regen_mode.py:301: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_18_check_no_interface_otsi ______ TestTransportPCERendererRegenMode.test_19_check_no_interface_otsi _______ self = def test_19_check_no_interface_otsi(self): response = test_utils.check_node_attribute_request( "XPDR-A2", "interface", "XPDR4-NETWORK2-582:595") > self.assertEqual(response["status_code"], requests.codes.conflict) E AssertionError: 503 != 409 transportpce_tests/7.1/test04_renderer_regen_mode.py:306: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_19_check_no_interface_otsi _____ TestTransportPCERendererRegenMode.test_20_xpdr_device_disconnection ______ self = def test_20_xpdr_device_disconnection(self): response = test_utils.unmount_device("XPDR-A2") > self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content)) E AssertionError: 409 not found in (200, 204) transportpce_tests/7.1/test04_renderer_regen_mode.py:311: AssertionError ----------------------------- Captured stdout call ----------------------------- execution of test_20_xpdr_device_disconnection Searching for patterns in karaf.log... Pattern not found after 180 seconds! Node XPDR-A2 still not deleted from tpce topology... =========================== short test summary info ============================ FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_02_check_xpdr_type FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_03_check_xpdr_type FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_04_400g_regen_service_path_create FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_05_get_portmapping_network1 FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_06_get_portmapping_network1 FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_07_check_interface_oduc4 FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_08_check_interface_oduc4 FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_09_service_path_delete_regen FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_10_check_no_interface_oduc4 FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_11_check_no_interface_oduc4 FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_12_check_no_interface_otuc4 FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_13_check_no_interface_otuc4 FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_16_check_no_interface_otsig FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_17_check_no_interface_otsig FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_18_check_no_interface_otsi FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_19_check_no_interface_otsi FAILED transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_20_xpdr_device_disconnection ERROR transportpce_tests/7.1/test04_renderer_regen_mode.py::TestTransportPCERendererRegenMode::test_01_xpdr_device_connection 17 failed, 4 passed, 1 error in 352.86s (0:05:52) tests71: exit 1 (922.25 seconds) /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh 7.1 pid=12087 EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE [100%] ==================================== ERRORS ==================================== _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_01_connect_xpdrA _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ sims_list = [('xpdra', '1.2.1'), ('roadma', '2.2.1'), ('roadmc', '2.2.1'), ('xpdrc', '7.1')] def start_sims(sims_list): if SIMS_TO_USE == 'None': return None if SIMS_TO_USE == 'honeynode': start_method = start_honeynode else: start_method = start_lightynode for sim in sims_list: print('starting simulator ' + sim[0] + ' in OpenROADM device version ' + sim[1] + '...') log_file = os.path.join(SIM_LOG_DIRECTORY, SIMS[sim]['logfile']) process = start_method(log_file, sim) if wait_until_log_contains(log_file, [HONEYNODE_OK_START_MSG, LIGHTYNODE_OK_START_MSG], 100): print('simulator for ' + sim[0] + ' started') else: print('simulator for ' + sim[0] + ' failed to start') shutdown_process(process) for pid in process_list: shutdown_process(pid) > sys.exit(3) E SystemExit: 3 transportpce_tests/common/test_utils.py:211: SystemExit ---------------------------- Captured stdout setup ----------------------------- starting OpenDaylight... starting KARAF (karaf221) TransportPCE build... Searching for patterns in karaf.log... Pattern found! OpenDaylight started ! starting simulator xpdra in OpenROADM device version 1.2.1... Searching for patterns in xpdra-121.log... Pattern not found after 100 seconds! simulator for xpdra failed to start _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_02_connect_xpdrC _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess ---------------------------- Captured stdout setup ----------------------------- starting OpenDaylight... starting KARAF (karaf221) TransportPCE build... Searching for patterns in karaf.log... Pattern found! OpenDaylight started ! starting simulator xpdra in OpenROADM device version 1.2.1... Searching for patterns in xpdra-121.log... Pattern not found after 100 seconds! simulator for xpdra failed to start _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_03_connect_rdmA _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_04_connect_rdmC _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_05_connect_xpdrA_N1_to_roadmA_PP1 _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_06_connect_roadmA_PP1_to_xpdrA_N1 _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_07_connect_xpdrC_N1_to_roadmC_PP1 _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_08_connect_roadmC_PP1_to_xpdrC_N1 _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_09_add_omsAttributes_ROADMA_ROADMC _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_10_add_omsAttributes_ROADMC_ROADMA _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_11_create_eth_service1 _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_12_get_eth_service1 _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_13_change_status_line_port_xpdra _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_14_check_update_portmapping _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_15_check_update_openroadm_topo _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_16_check_update_service1 _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_17_restore_status_line_port_xpdra _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_18_check_update_portmapping_ok _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_19_check_update_openroadm_topo_ok _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_20_check_update_service1_ok _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_21_change_status_port_roadma_srg _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_22_check_update_portmapping _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_23_check_update_openroadm_topo _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_24_restore_status_port_roadma_srg _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_25_check_update_portmapping_ok _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_26_check_update_openroadm_topo_ok _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_27_check_update_service1_ok _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_28_change_status_line_port_roadma_deg _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_29_check_update_portmapping _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_30_check_update_openroadm_topo _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_31_restore_status_line_port_roadma_srg _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_32_check_update_portmapping_ok _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_33_check_update_openroadm_topo_ok _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_34_check_update_service1_ok _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_35_change_status_line_port_xpdrc _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_36_check_update_portmapping _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_37_check_update_openroadm_topo _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_38_restore_status_line_port_xpdrc _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_39_check_update_portmapping_ok _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_40_check_update_openroadm_topo_ok _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_41_check_update_service1_ok _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_42_change_status_port_roadma_srg _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_43_check_update_portmapping _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_44_check_update_openroadm_topo _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_45_check_update_service1_ok _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_46_delete_eth_service1 _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_47_disconnect_xponders_from_roadm _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_48_disconnect_XPDRA _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_49_disconnect_XPDRC _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_50_disconnect_ROADMA _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess _ ERROR at setup of TestTransportPCEDeviceChangeNotifications.test_51_disconnect_ROADMC _ cls = @classmethod def setUpClass(cls): cls.processes = test_utils.start_tpce() > cls.processes = test_utils.start_sims([('xpdra', cls.NODE_VERSION_121), ('roadma', cls.NODE_VERSION_221), ('roadmc', cls.NODE_VERSION_221), ('xpdrc', cls.NODE_VERSION_71)]) transportpce_tests/hybrid/test01_device_change_notifications.py:78: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ transportpce_tests/common/test_utils.py:210: in start_sims shutdown_process(pid) transportpce_tests/common/test_utils.py:286: in shutdown_process for child in psutil.Process(process.pid).children(): ^^^^^^^^^^^^^^^^^^^^^^^^^^^ ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:314: in __init__ self._init(pid) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = psutil.Process(pid=22334, status='terminated'), pid = 22334 _ignore_nsp = False def _init(self, pid, _ignore_nsp=False): if pid is None: pid = os.getpid() else: if pid < 0: msg = f"pid must be a positive integer (got {pid})" raise ValueError(msg) try: _psplatform.cext.check_pid_range(pid) except OverflowError as err: msg = "process PID out of range" raise NoSuchProcess(pid, msg=msg) from err self._pid = pid self._name = None self._exe = None self._create_time = None self._gone = False self._pid_reused = False self._hash = None self._lock = threading.RLock() # used for caching on Windows only (on POSIX ppid may change) self._ppid = None # platform-specific modules define an _psplatform.Process # implementation class self._proc = _psplatform.Process(pid) self._last_sys_cpu_times = None self._last_proc_cpu_times = None self._exitcode = _SENTINEL self._ident = (self.pid, None) try: self._ident = self._get_ident() except AccessDenied: # This should happen on Windows only, since we use the fast # create time method. AFAIK, on all other platforms we are # able to get create time for all PIDs. pass except ZombieProcess: # Zombies can still be queried by this class (although # not always) and pids() return them so just go on. pass except NoSuchProcess: if not _ignore_nsp: msg = "process PID not found" > raise NoSuchProcess(pid, msg=msg) from None E psutil.NoSuchProcess: process PID not found (pid=22334) ../.tox/tests_hybrid/lib/python3.11/site-packages/psutil/__init__.py:360: NoSuchProcess =========================== short test summary info ============================ ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_01_connect_xpdrA ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_02_connect_xpdrC ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_03_connect_rdmA ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_04_connect_rdmC ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_05_connect_xpdrA_N1_to_roadmA_PP1 ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_06_connect_roadmA_PP1_to_xpdrA_N1 ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_07_connect_xpdrC_N1_to_roadmC_PP1 ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_08_connect_roadmC_PP1_to_xpdrC_N1 ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_09_add_omsAttributes_ROADMA_ROADMC ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_10_add_omsAttributes_ROADMC_ROADMA ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_11_create_eth_service1 ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_12_get_eth_service1 ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_13_change_status_line_port_xpdra ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_14_check_update_portmapping ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_15_check_update_openroadm_topo ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_16_check_update_service1 ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_17_restore_status_line_port_xpdra ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_18_check_update_portmapping_ok ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_19_check_update_openroadm_topo_ok ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_20_check_update_service1_ok ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_21_change_status_port_roadma_srg ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_22_check_update_portmapping ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_23_check_update_openroadm_topo ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_24_restore_status_port_roadma_srg ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_25_check_update_portmapping_ok ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_26_check_update_openroadm_topo_ok ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_27_check_update_service1_ok ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_28_change_status_line_port_roadma_deg ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_29_check_update_portmapping ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_30_check_update_openroadm_topo ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_31_restore_status_line_port_roadma_srg ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_32_check_update_portmapping_ok ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_33_check_update_openroadm_topo_ok ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_34_check_update_service1_ok ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_35_change_status_line_port_xpdrc ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_36_check_update_portmapping ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_37_check_update_openroadm_topo ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_38_restore_status_line_port_xpdrc ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_39_check_update_portmapping_ok ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_40_check_update_openroadm_topo_ok ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_41_check_update_service1_ok ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_42_change_status_port_roadma_srg ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_43_check_update_portmapping ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_44_check_update_openroadm_topo ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_45_check_update_service1_ok ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_46_delete_eth_service1 ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_47_disconnect_xponders_from_roadm ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_48_disconnect_XPDRA ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_49_disconnect_XPDRC ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_50_disconnect_ROADMA ERROR transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_51_disconnect_ROADMC 51 errors in 235.19s (0:03:55) tests71: FAIL ✖ in 15 minutes 29.34 seconds tests_hybrid: exit 1 (235.51 seconds) /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh hybrid pid=22324 ..... [100%] 54 passed in 625.06s (0:10:25) tests_hybrid: FAIL ✖ in 4 minutes 21.58 seconds buildcontroller: OK (130.96=setup[8.64]+cmd[122.32] seconds) sims: OK (22.16=setup[19.01]+cmd[3.15] seconds) build_karaf_tests121: OK (74.62=setup[11.46]+cmd[63.15] seconds) testsPCE: OK (289.70=setup[56.67]+cmd[233.03] seconds) tests121: OK (1269.14=setup[10.40]+cmd[1258.74] seconds) build_karaf_tests221: OK (82.37=setup[11.83]+cmd[70.53] seconds) tests_tapi: FAIL code 1 (649.63=setup[10.48]+cmd[639.16] seconds) tests221: FAIL code 1 (249.36=setup[9.28]+cmd[240.08] seconds) build_karaf_tests71: OK (90.53=setup[12.68]+cmd[77.85] seconds) tests71: FAIL code 1 (929.34=setup[7.09]+cmd[922.25] seconds) build_karaf_tests190: OK (90.52=setup[12.51]+cmd[78.01] seconds) tests190: OK (216.48=setup[10.34]+cmd[206.14] seconds) tests_hybrid: FAIL code 1 (261.58=setup[26.07]+cmd[235.51] seconds) buildlighty: OK (47.70=setup[26.53]+cmd[21.17] seconds) docs: OK (29.35=setup[26.70]+cmd[2.65] seconds) docs-linkcheck: OK (30.83=setup[26.91]+cmd[3.92] seconds) checkbashisms: OK (3.28=setup[2.00]+cmd[0.01,0.05,1.22] seconds) pre-commit: OK (44.86=setup[3.06]+cmd[0.00,0.01,33.31,8.49] seconds) pylint: OK (28.94=setup[3.58]+cmd[25.36] seconds) evaluation failed :( (1780.38 seconds)