08:01:12 Triggered by Gerrit: https://git.opendaylight.org/gerrit/c/transportpce/+/120111 08:01:12 Running as SYSTEM 08:01:12 [EnvInject] - Loading node environment variables. 08:01:12 Building remotely on prd-ubuntu2204-docker-4c-16g-415 (ubuntu2204-docker-4c-16g) in workspace /w/workspace/transportpce-tox-verify-transportpce-master 08:01:12 [ssh-agent] Looking for ssh-agent implementation... 08:01:12 [ssh-agent] Exec ssh-agent (binary ssh-agent on a remote machine) 08:01:12 $ ssh-agent 08:01:12 SSH_AUTH_SOCK=/tmp/ssh-XXXXXXKHnT0c/agent.1589 08:01:12 SSH_AGENT_PID=1591 08:01:12 [ssh-agent] Started. 08:01:12 Running ssh-add (command line suppressed) 08:01:12 Identity added: /w/workspace/transportpce-tox-verify-transportpce-master@tmp/private_key_5560857326862816951.key (/w/workspace/transportpce-tox-verify-transportpce-master@tmp/private_key_5560857326862816951.key) 08:01:13 [ssh-agent] Using credentials jenkins (jenkins-ssh) 08:01:13 The recommended git tool is: NONE 08:01:14 using credential jenkins-ssh 08:01:14 Wiping out workspace first. 08:01:14 Cloning the remote Git repository 08:01:14 Cloning repository git://devvexx.opendaylight.org/mirror/transportpce 08:01:14 > git init /w/workspace/transportpce-tox-verify-transportpce-master # timeout=10 08:01:14 Fetching upstream changes from git://devvexx.opendaylight.org/mirror/transportpce 08:01:14 > git --version # timeout=10 08:01:14 > git --version # 'git version 2.34.1' 08:01:14 using GIT_SSH to set credentials jenkins-ssh 08:01:14 Verifying host key using known hosts file 08:01:15 You're using 'Known hosts file' strategy to verify ssh host keys, but your known_hosts file does not exist, please go to 'Manage Jenkins' -> 'Security' -> 'Git Host Key Verification Configuration' and configure host key verification. 08:01:15 > git fetch --tags --force --progress -- git://devvexx.opendaylight.org/mirror/transportpce +refs/heads/*:refs/remotes/origin/* # timeout=10 08:01:18 > git config remote.origin.url git://devvexx.opendaylight.org/mirror/transportpce # timeout=10 08:01:18 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10 08:01:19 > git config remote.origin.url git://devvexx.opendaylight.org/mirror/transportpce # timeout=10 08:01:19 Fetching upstream changes from git://devvexx.opendaylight.org/mirror/transportpce 08:01:19 using GIT_SSH to set credentials jenkins-ssh 08:01:19 Verifying host key using known hosts file 08:01:19 You're using 'Known hosts file' strategy to verify ssh host keys, but your known_hosts file does not exist, please go to 'Manage Jenkins' -> 'Security' -> 'Git Host Key Verification Configuration' and configure host key verification. 08:01:19 > git fetch --tags --force --progress -- git://devvexx.opendaylight.org/mirror/transportpce refs/changes/11/120111/1 # timeout=10 08:01:19 > git rev-parse 7bab5df6d60805e7323ddae08846d99e4973abce^{commit} # timeout=10 08:01:19 JENKINS-19022: warning: possible memory leak due to Git plugin usage; see: https://plugins.jenkins.io/git/#remove-git-plugin-buildsbybranch-builddata-script 08:01:19 Checking out Revision 7bab5df6d60805e7323ddae08846d99e4973abce (refs/changes/11/120111/1) 08:01:19 > git config core.sparsecheckout # timeout=10 08:01:19 > git checkout -f 7bab5df6d60805e7323ddae08846d99e4973abce # timeout=10 08:01:22 Commit message: "Bump the lightynode version" 08:01:22 > git rev-parse FETCH_HEAD^{commit} # timeout=10 08:01:22 > git rev-list --no-walk 6ec1623684600d226fdd9b9483b3e7d8bb6c6232 # timeout=10 08:01:22 > git remote # timeout=10 08:01:22 > git submodule init # timeout=10 08:01:22 > git submodule sync # timeout=10 08:01:22 > git config --get remote.origin.url # timeout=10 08:01:22 > git submodule init # timeout=10 08:01:22 > git config -f .gitmodules --get-regexp ^submodule\.(.+)\.url # timeout=10 08:01:22 ERROR: No submodules found. 08:01:23 provisioning config files... 08:01:23 copy managed file [npmrc] to file:/home/jenkins/.npmrc 08:01:23 copy managed file [pipconf] to file:/home/jenkins/.config/pip/pip.conf 08:01:23 [transportpce-tox-verify-transportpce-master] $ /bin/bash /tmp/jenkins14249653084504870115.sh 08:01:23 ---> python-tools-install.sh 08:01:23 Setup pyenv: 08:01:23 * system (set by /opt/pyenv/version) 08:01:23 * 3.8.20 (set by /opt/pyenv/version) 08:01:23 * 3.9.20 (set by /opt/pyenv/version) 08:01:23 3.10.15 08:01:23 3.11.10 08:01:27 lf-activate-venv(): INFO: Creating python3 venv at /tmp/venv-zWVR 08:01:27 lf-activate-venv(): INFO: Save venv in file: /tmp/.os_lf_venv 08:01:27 lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv) 08:01:27 lf-activate-venv(): INFO: Attempting to install with network-safe options... 08:01:32 lf-activate-venv(): INFO: Base packages installed successfully 08:01:32 lf-activate-venv(): INFO: Installing additional packages: lftools 08:02:01 lf-activate-venv(): INFO: Adding /tmp/venv-zWVR/bin to PATH 08:02:01 Generating Requirements File 08:02:22 ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. 08:02:22 httplib2 0.31.1 requires pyparsing<4,>=3.0.4, but you have pyparsing 2.4.7 which is incompatible. 08:02:22 Python 3.11.10 08:02:22 pip 25.3 from /tmp/venv-zWVR/lib/python3.11/site-packages/pip (python 3.11) 08:02:23 appdirs==1.4.4 08:02:23 argcomplete==3.6.3 08:02:23 aspy.yaml==1.3.0 08:02:23 attrs==25.4.0 08:02:23 autopage==0.5.2 08:02:23 beautifulsoup4==4.14.3 08:02:23 boto3==1.42.28 08:02:23 botocore==1.42.28 08:02:23 bs4==0.0.2 08:02:23 certifi==2026.1.4 08:02:23 cffi==2.0.0 08:02:23 cfgv==3.5.0 08:02:23 chardet==5.2.0 08:02:23 charset-normalizer==3.4.4 08:02:23 click==8.3.1 08:02:23 cliff==4.13.1 08:02:23 cmd2==3.1.0 08:02:23 cryptography==3.3.2 08:02:23 debtcollector==3.0.0 08:02:23 decorator==5.2.1 08:02:23 defusedxml==0.7.1 08:02:23 Deprecated==1.3.1 08:02:23 distlib==0.4.0 08:02:23 dnspython==2.8.0 08:02:23 docker==7.1.0 08:02:23 dogpile.cache==1.5.0 08:02:23 durationpy==0.10 08:02:23 email-validator==2.3.0 08:02:23 filelock==3.20.3 08:02:23 future==1.0.0 08:02:23 gitdb==4.0.12 08:02:23 GitPython==3.1.46 08:02:23 google-auth==2.47.0 08:02:23 httplib2==0.31.1 08:02:23 identify==2.6.16 08:02:23 idna==3.11 08:02:23 importlib-resources==1.5.0 08:02:23 iso8601==2.1.0 08:02:23 Jinja2==3.1.6 08:02:23 jmespath==1.0.1 08:02:23 jsonpatch==1.33 08:02:23 jsonpointer==3.0.0 08:02:23 jsonschema==4.26.0 08:02:23 jsonschema-specifications==2025.9.1 08:02:23 keystoneauth1==5.12.0 08:02:23 kubernetes==34.1.0 08:02:23 lftools==0.37.19 08:02:23 lxml==6.0.2 08:02:23 markdown-it-py==4.0.0 08:02:23 MarkupSafe==3.0.3 08:02:23 mdurl==0.1.2 08:02:23 msgpack==1.1.2 08:02:23 multi_key_dict==2.0.3 08:02:23 munch==4.0.0 08:02:23 netaddr==1.3.0 08:02:23 niet==1.4.2 08:02:23 nodeenv==1.10.0 08:02:23 oauth2client==4.1.3 08:02:23 oauthlib==3.3.1 08:02:23 openstacksdk==4.8.0 08:02:23 os-service-types==1.8.2 08:02:23 osc-lib==4.3.0 08:02:23 oslo.config==10.2.0 08:02:23 oslo.context==6.2.0 08:02:23 oslo.i18n==6.7.1 08:02:23 oslo.log==8.0.0 08:02:23 oslo.serialization==5.9.0 08:02:23 oslo.utils==9.2.0 08:02:23 packaging==25.0 08:02:23 pbr==7.0.3 08:02:23 platformdirs==4.5.1 08:02:23 prettytable==3.17.0 08:02:23 psutil==7.2.1 08:02:23 pyasn1==0.6.1 08:02:23 pyasn1_modules==0.4.2 08:02:23 pycparser==2.23 08:02:23 pygerrit2==2.0.15 08:02:23 PyGithub==2.8.1 08:02:23 Pygments==2.19.2 08:02:23 PyJWT==2.10.1 08:02:23 PyNaCl==1.6.2 08:02:23 pyparsing==2.4.7 08:02:23 pyperclip==1.11.0 08:02:23 pyrsistent==0.20.0 08:02:23 python-cinderclient==9.8.0 08:02:23 python-dateutil==2.9.0.post0 08:02:23 python-heatclient==4.3.0 08:02:23 python-jenkins==1.8.3 08:02:23 python-keystoneclient==5.7.0 08:02:23 python-magnumclient==4.9.0 08:02:23 python-openstackclient==8.3.0 08:02:23 python-swiftclient==4.9.0 08:02:23 PyYAML==6.0.3 08:02:23 referencing==0.37.0 08:02:23 requests==2.32.5 08:02:23 requests-oauthlib==2.0.0 08:02:23 requestsexceptions==1.4.0 08:02:23 rfc3986==2.0.0 08:02:23 rich==14.2.0 08:02:23 rich-argparse==1.7.2 08:02:23 rpds-py==0.30.0 08:02:23 rsa==4.9.1 08:02:23 ruamel.yaml==0.19.1 08:02:23 ruamel.yaml.clib==0.2.15 08:02:23 s3transfer==0.16.0 08:02:23 simplejson==3.20.2 08:02:23 six==1.17.0 08:02:23 smmap==5.0.2 08:02:23 soupsieve==2.8.1 08:02:23 stevedore==5.6.0 08:02:23 tabulate==0.9.0 08:02:23 toml==0.10.2 08:02:23 tomlkit==0.14.0 08:02:23 tqdm==4.67.1 08:02:23 typing_extensions==4.15.0 08:02:23 tzdata==2025.3 08:02:23 urllib3==1.26.20 08:02:23 virtualenv==20.36.1 08:02:23 wcwidth==0.2.14 08:02:23 websocket-client==1.9.0 08:02:23 wrapt==2.0.1 08:02:23 xdg==6.0.0 08:02:23 xmltodict==1.0.2 08:02:23 yq==3.4.3 08:02:23 [EnvInject] - Injecting environment variables from a build step. 08:02:23 [EnvInject] - Injecting as environment variables the properties content 08:02:23 PYTHON=python3 08:02:23 08:02:23 [EnvInject] - Variables injected successfully. 08:02:23 [transportpce-tox-verify-transportpce-master] $ /bin/bash -l /tmp/jenkins11499271109519073088.sh 08:02:23 ---> tox-install.sh 08:02:23 + source /home/jenkins/lf-env.sh 08:02:23 + lf-activate-venv --venv-file /tmp/.toxenv tox virtualenv urllib3~=1.26.15 08:02:23 ++ mktemp -d /tmp/venv-XXXX 08:02:23 + lf_venv=/tmp/venv-lM2x 08:02:23 + local venv_file=/tmp/.os_lf_venv 08:02:23 + local python=python3 08:02:23 + local options 08:02:23 + local set_path=true 08:02:23 + local install_args= 08:02:23 ++ getopt -o np:v: -l no-path,system-site-packages,python:,venv-file: -n lf-activate-venv -- --venv-file /tmp/.toxenv tox virtualenv urllib3~=1.26.15 08:02:23 + options=' --venv-file '\''/tmp/.toxenv'\'' -- '\''tox'\'' '\''virtualenv'\'' '\''urllib3~=1.26.15'\''' 08:02:23 + eval set -- ' --venv-file '\''/tmp/.toxenv'\'' -- '\''tox'\'' '\''virtualenv'\'' '\''urllib3~=1.26.15'\''' 08:02:23 ++ set -- --venv-file /tmp/.toxenv -- tox virtualenv urllib3~=1.26.15 08:02:23 + true 08:02:23 + case $1 in 08:02:23 + venv_file=/tmp/.toxenv 08:02:23 + shift 2 08:02:23 + true 08:02:23 + case $1 in 08:02:23 + shift 08:02:23 + break 08:02:23 + case $python in 08:02:23 + local pkg_list= 08:02:23 + [[ -d /opt/pyenv ]] 08:02:23 + echo 'Setup pyenv:' 08:02:23 Setup pyenv: 08:02:23 + export PYENV_ROOT=/opt/pyenv 08:02:23 + PYENV_ROOT=/opt/pyenv 08:02:23 + export PATH=/opt/pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:23 + PATH=/opt/pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:23 + pyenv versions 08:02:23 system 08:02:23 3.8.20 08:02:23 3.9.20 08:02:23 3.10.15 08:02:23 * 3.11.10 (set by /w/workspace/transportpce-tox-verify-transportpce-master/.python-version) 08:02:23 + command -v pyenv 08:02:23 ++ pyenv init - --no-rehash 08:02:23 + eval 'PATH="$(bash --norc -ec '\''IFS=:; paths=($PATH); 08:02:23 for i in ${!paths[@]}; do 08:02:23 if [[ ${paths[i]} == "'\'''\''/opt/pyenv/shims'\'''\''" ]]; then unset '\''\'\'''\''paths[i]'\''\'\'''\''; 08:02:23 fi; done; 08:02:23 echo "${paths[*]}"'\'')" 08:02:23 export PATH="/opt/pyenv/shims:${PATH}" 08:02:23 export PYENV_SHELL=bash 08:02:23 source '\''/opt/pyenv/libexec/../completions/pyenv.bash'\'' 08:02:23 pyenv() { 08:02:23 local command 08:02:23 command="${1:-}" 08:02:23 if [ "$#" -gt 0 ]; then 08:02:23 shift 08:02:23 fi 08:02:23 08:02:23 case "$command" in 08:02:23 rehash|shell) 08:02:23 eval "$(pyenv "sh-$command" "$@")" 08:02:23 ;; 08:02:23 *) 08:02:23 command pyenv "$command" "$@" 08:02:23 ;; 08:02:23 esac 08:02:23 }' 08:02:23 +++ bash --norc -ec 'IFS=:; paths=($PATH); 08:02:23 for i in ${!paths[@]}; do 08:02:23 if [[ ${paths[i]} == "/opt/pyenv/shims" ]]; then unset '\''paths[i]'\''; 08:02:23 fi; done; 08:02:23 echo "${paths[*]}"' 08:02:23 ++ PATH=/opt/pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:23 ++ export PATH=/opt/pyenv/shims:/opt/pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:23 ++ PATH=/opt/pyenv/shims:/opt/pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:23 ++ export PYENV_SHELL=bash 08:02:23 ++ PYENV_SHELL=bash 08:02:23 ++ source /opt/pyenv/libexec/../completions/pyenv.bash 08:02:23 +++ complete -F _pyenv pyenv 08:02:23 ++ lf-pyver python3 08:02:23 ++ local py_version_xy=python3 08:02:23 ++ local py_version_xyz= 08:02:23 ++ pyenv versions 08:02:23 ++ local command 08:02:23 ++ command=versions 08:02:23 ++ '[' 1 -gt 0 ']' 08:02:23 ++ shift 08:02:23 ++ case "$command" in 08:02:23 ++ command pyenv versions 08:02:23 ++ awk '{ print $1 }' 08:02:23 ++ sed 's/^[ *]* //' 08:02:23 ++ grep -E '^[0-9.]*[0-9]$' 08:02:23 ++ [[ ! -s /tmp/.pyenv_versions ]] 08:02:23 +++ grep '^3' /tmp/.pyenv_versions 08:02:23 +++ sort -V 08:02:23 +++ tail -n 1 08:02:23 ++ py_version_xyz=3.11.10 08:02:23 ++ [[ -z 3.11.10 ]] 08:02:23 ++ echo 3.11.10 08:02:23 ++ return 0 08:02:23 + pyenv local 3.11.10 08:02:23 + local command 08:02:23 + command=local 08:02:23 + '[' 2 -gt 0 ']' 08:02:23 + shift 08:02:23 + case "$command" in 08:02:23 + command pyenv local 3.11.10 08:02:23 + for arg in "$@" 08:02:23 + case $arg in 08:02:23 + pkg_list+='tox ' 08:02:23 + for arg in "$@" 08:02:23 + case $arg in 08:02:23 + pkg_list+='virtualenv ' 08:02:23 + for arg in "$@" 08:02:23 + case $arg in 08:02:23 + pkg_list+='urllib3~=1.26.15 ' 08:02:23 + [[ -f /tmp/.toxenv ]] 08:02:23 + [[ ! -f /tmp/.toxenv ]] 08:02:23 + [[ -n '' ]] 08:02:23 + python3 -m venv /tmp/venv-lM2x 08:02:27 + echo 'lf-activate-venv(): INFO: Creating python3 venv at /tmp/venv-lM2x' 08:02:27 lf-activate-venv(): INFO: Creating python3 venv at /tmp/venv-lM2x 08:02:27 + echo /tmp/venv-lM2x 08:02:27 + echo 'lf-activate-venv(): INFO: Save venv in file: /tmp/.toxenv' 08:02:27 lf-activate-venv(): INFO: Save venv in file: /tmp/.toxenv 08:02:27 + echo 'lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv)' 08:02:27 lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv) 08:02:27 + local 'pip_opts=--upgrade --quiet' 08:02:27 + pip_opts='--upgrade --quiet --trusted-host pypi.org' 08:02:27 + pip_opts='--upgrade --quiet --trusted-host pypi.org --trusted-host files.pythonhosted.org' 08:02:27 + pip_opts='--upgrade --quiet --trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host pypi.python.org' 08:02:27 + [[ -n '' ]] 08:02:27 + [[ -n '' ]] 08:02:27 + echo 'lf-activate-venv(): INFO: Attempting to install with network-safe options...' 08:02:27 lf-activate-venv(): INFO: Attempting to install with network-safe options... 08:02:27 + /tmp/venv-lM2x/bin/python3 -m pip install --upgrade --quiet --trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host pypi.python.org pip 'setuptools<66' virtualenv 08:02:31 + echo 'lf-activate-venv(): INFO: Base packages installed successfully' 08:02:31 lf-activate-venv(): INFO: Base packages installed successfully 08:02:31 + [[ -z tox virtualenv urllib3~=1.26.15 ]] 08:02:31 + echo 'lf-activate-venv(): INFO: Installing additional packages: tox virtualenv urllib3~=1.26.15 ' 08:02:31 lf-activate-venv(): INFO: Installing additional packages: tox virtualenv urllib3~=1.26.15 08:02:31 + /tmp/venv-lM2x/bin/python3 -m pip install --upgrade --quiet --trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host pypi.python.org --upgrade-strategy eager tox virtualenv urllib3~=1.26.15 08:02:33 + type python3 08:02:33 + true 08:02:33 + echo 'lf-activate-venv(): INFO: Adding /tmp/venv-lM2x/bin to PATH' 08:02:33 lf-activate-venv(): INFO: Adding /tmp/venv-lM2x/bin to PATH 08:02:33 + PATH=/tmp/venv-lM2x/bin:/opt/pyenv/shims:/opt/pyenv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:33 + return 0 08:02:33 + python3 --version 08:02:33 Python 3.11.10 08:02:33 + python3 -m pip --version 08:02:33 pip 25.3 from /tmp/venv-lM2x/lib/python3.11/site-packages/pip (python 3.11) 08:02:33 + python3 -m pip freeze 08:02:33 cachetools==6.2.4 08:02:33 chardet==5.2.0 08:02:33 colorama==0.4.6 08:02:33 distlib==0.4.0 08:02:33 filelock==3.20.3 08:02:33 packaging==25.0 08:02:33 platformdirs==4.5.1 08:02:33 pluggy==1.6.0 08:02:33 pyproject-api==1.10.0 08:02:33 tox==4.34.1 08:02:33 urllib3==1.26.20 08:02:33 virtualenv==20.36.1 08:02:34 [transportpce-tox-verify-transportpce-master] $ /bin/sh -xe /tmp/jenkins10462266184241218778.sh 08:02:34 [EnvInject] - Injecting environment variables from a build step. 08:02:34 [EnvInject] - Injecting as environment variables the properties content 08:02:34 PARALLEL=True 08:02:34 08:02:34 [EnvInject] - Variables injected successfully. 08:02:34 [transportpce-tox-verify-transportpce-master] $ /bin/bash -l /tmp/jenkins1748931246563731252.sh 08:02:34 ---> tox-run.sh 08:02:34 + PATH=/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:34 + ARCHIVE_TOX_DIR=/w/workspace/transportpce-tox-verify-transportpce-master/archives/tox 08:02:34 + ARCHIVE_DOC_DIR=/w/workspace/transportpce-tox-verify-transportpce-master/archives/docs 08:02:34 + mkdir -p /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox 08:02:34 + cd /w/workspace/transportpce-tox-verify-transportpce-master/. 08:02:34 + source /home/jenkins/lf-env.sh 08:02:34 + lf-activate-venv --venv-file /tmp/.toxenv tox virtualenv urllib3~=1.26.15 08:02:34 ++ mktemp -d /tmp/venv-XXXX 08:02:34 + lf_venv=/tmp/venv-WFBd 08:02:34 + local venv_file=/tmp/.os_lf_venv 08:02:34 + local python=python3 08:02:34 + local options 08:02:34 + local set_path=true 08:02:34 + local install_args= 08:02:34 ++ getopt -o np:v: -l no-path,system-site-packages,python:,venv-file: -n lf-activate-venv -- --venv-file /tmp/.toxenv tox virtualenv urllib3~=1.26.15 08:02:34 + options=' --venv-file '\''/tmp/.toxenv'\'' -- '\''tox'\'' '\''virtualenv'\'' '\''urllib3~=1.26.15'\''' 08:02:34 + eval set -- ' --venv-file '\''/tmp/.toxenv'\'' -- '\''tox'\'' '\''virtualenv'\'' '\''urllib3~=1.26.15'\''' 08:02:34 ++ set -- --venv-file /tmp/.toxenv -- tox virtualenv urllib3~=1.26.15 08:02:34 + true 08:02:34 + case $1 in 08:02:34 + venv_file=/tmp/.toxenv 08:02:34 + shift 2 08:02:34 + true 08:02:34 + case $1 in 08:02:34 + shift 08:02:34 + break 08:02:34 + case $python in 08:02:34 + local pkg_list= 08:02:34 + [[ -d /opt/pyenv ]] 08:02:34 + echo 'Setup pyenv:' 08:02:34 Setup pyenv: 08:02:34 + export PYENV_ROOT=/opt/pyenv 08:02:34 + PYENV_ROOT=/opt/pyenv 08:02:34 + export PATH=/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:34 + PATH=/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:34 + pyenv versions 08:02:34 system 08:02:34 3.8.20 08:02:34 3.9.20 08:02:34 3.10.15 08:02:34 * 3.11.10 (set by /w/workspace/transportpce-tox-verify-transportpce-master/.python-version) 08:02:34 + command -v pyenv 08:02:34 ++ pyenv init - --no-rehash 08:02:34 + eval 'PATH="$(bash --norc -ec '\''IFS=:; paths=($PATH); 08:02:34 for i in ${!paths[@]}; do 08:02:34 if [[ ${paths[i]} == "'\'''\''/opt/pyenv/shims'\'''\''" ]]; then unset '\''\'\'''\''paths[i]'\''\'\'''\''; 08:02:34 fi; done; 08:02:34 echo "${paths[*]}"'\'')" 08:02:34 export PATH="/opt/pyenv/shims:${PATH}" 08:02:34 export PYENV_SHELL=bash 08:02:34 source '\''/opt/pyenv/libexec/../completions/pyenv.bash'\'' 08:02:34 pyenv() { 08:02:34 local command 08:02:34 command="${1:-}" 08:02:34 if [ "$#" -gt 0 ]; then 08:02:34 shift 08:02:34 fi 08:02:34 08:02:34 case "$command" in 08:02:34 rehash|shell) 08:02:34 eval "$(pyenv "sh-$command" "$@")" 08:02:34 ;; 08:02:34 *) 08:02:34 command pyenv "$command" "$@" 08:02:34 ;; 08:02:34 esac 08:02:34 }' 08:02:34 +++ bash --norc -ec 'IFS=:; paths=($PATH); 08:02:34 for i in ${!paths[@]}; do 08:02:34 if [[ ${paths[i]} == "/opt/pyenv/shims" ]]; then unset '\''paths[i]'\''; 08:02:34 fi; done; 08:02:34 echo "${paths[*]}"' 08:02:34 ++ PATH=/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:34 ++ export PATH=/opt/pyenv/shims:/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:34 ++ PATH=/opt/pyenv/shims:/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:34 ++ export PYENV_SHELL=bash 08:02:34 ++ PYENV_SHELL=bash 08:02:34 ++ source /opt/pyenv/libexec/../completions/pyenv.bash 08:02:34 +++ complete -F _pyenv pyenv 08:02:34 ++ lf-pyver python3 08:02:34 ++ local py_version_xy=python3 08:02:34 ++ local py_version_xyz= 08:02:34 ++ pyenv versions 08:02:34 ++ local command 08:02:34 ++ command=versions 08:02:34 ++ '[' 1 -gt 0 ']' 08:02:34 ++ shift 08:02:34 ++ case "$command" in 08:02:34 ++ grep -E '^[0-9.]*[0-9]$' 08:02:34 ++ command pyenv versions 08:02:34 ++ sed 's/^[ *]* //' 08:02:34 ++ awk '{ print $1 }' 08:02:34 ++ [[ ! -s /tmp/.pyenv_versions ]] 08:02:34 +++ grep '^3' /tmp/.pyenv_versions 08:02:34 +++ sort -V 08:02:34 +++ tail -n 1 08:02:34 ++ py_version_xyz=3.11.10 08:02:34 ++ [[ -z 3.11.10 ]] 08:02:34 ++ echo 3.11.10 08:02:34 ++ return 0 08:02:34 + pyenv local 3.11.10 08:02:34 + local command 08:02:34 + command=local 08:02:34 + '[' 2 -gt 0 ']' 08:02:34 + shift 08:02:34 + case "$command" in 08:02:34 + command pyenv local 3.11.10 08:02:34 + for arg in "$@" 08:02:34 + case $arg in 08:02:34 + pkg_list+='tox ' 08:02:34 + for arg in "$@" 08:02:34 + case $arg in 08:02:34 + pkg_list+='virtualenv ' 08:02:34 + for arg in "$@" 08:02:34 + case $arg in 08:02:34 + pkg_list+='urllib3~=1.26.15 ' 08:02:34 + [[ -f /tmp/.toxenv ]] 08:02:34 ++ cat /tmp/.toxenv 08:02:34 + lf_venv=/tmp/venv-lM2x 08:02:34 + echo 'lf-activate-venv(): INFO: Reuse venv:/tmp/venv-lM2x from' file:/tmp/.toxenv 08:02:34 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-lM2x from file:/tmp/.toxenv 08:02:34 + echo 'lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv)' 08:02:34 lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv) 08:02:34 + local 'pip_opts=--upgrade --quiet' 08:02:34 + pip_opts='--upgrade --quiet --trusted-host pypi.org' 08:02:34 + pip_opts='--upgrade --quiet --trusted-host pypi.org --trusted-host files.pythonhosted.org' 08:02:34 + pip_opts='--upgrade --quiet --trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host pypi.python.org' 08:02:34 + [[ -n '' ]] 08:02:34 + [[ -n '' ]] 08:02:34 + echo 'lf-activate-venv(): INFO: Attempting to install with network-safe options...' 08:02:34 lf-activate-venv(): INFO: Attempting to install with network-safe options... 08:02:34 + /tmp/venv-lM2x/bin/python3 -m pip install --upgrade --quiet --trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host pypi.python.org pip 'setuptools<66' virtualenv 08:02:35 + echo 'lf-activate-venv(): INFO: Base packages installed successfully' 08:02:35 lf-activate-venv(): INFO: Base packages installed successfully 08:02:35 + [[ -z tox virtualenv urllib3~=1.26.15 ]] 08:02:35 + echo 'lf-activate-venv(): INFO: Installing additional packages: tox virtualenv urllib3~=1.26.15 ' 08:02:35 lf-activate-venv(): INFO: Installing additional packages: tox virtualenv urllib3~=1.26.15 08:02:35 + /tmp/venv-lM2x/bin/python3 -m pip install --upgrade --quiet --trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host pypi.python.org --upgrade-strategy eager tox virtualenv urllib3~=1.26.15 08:02:36 + type python3 08:02:36 + true 08:02:36 + echo 'lf-activate-venv(): INFO: Adding /tmp/venv-lM2x/bin to PATH' 08:02:36 lf-activate-venv(): INFO: Adding /tmp/venv-lM2x/bin to PATH 08:02:36 + PATH=/tmp/venv-lM2x/bin:/opt/pyenv/shims:/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:36 + return 0 08:02:36 + [[ -d /opt/pyenv ]] 08:02:36 + echo '---> Setting up pyenv' 08:02:36 ---> Setting up pyenv 08:02:36 + export PYENV_ROOT=/opt/pyenv 08:02:36 + PYENV_ROOT=/opt/pyenv 08:02:36 + export PATH=/opt/pyenv/bin:/tmp/venv-lM2x/bin:/opt/pyenv/shims:/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:36 + PATH=/opt/pyenv/bin:/tmp/venv-lM2x/bin:/opt/pyenv/shims:/opt/pyenv/bin:/home/jenkins/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/opt/puppetlabs/bin 08:02:36 ++ pwd 08:02:36 + PYTHONPATH=/w/workspace/transportpce-tox-verify-transportpce-master 08:02:36 + export PYTHONPATH 08:02:36 + export TOX_TESTENV_PASSENV=PYTHONPATH 08:02:36 + TOX_TESTENV_PASSENV=PYTHONPATH 08:02:36 + tox --version 08:02:36 4.34.1 from /tmp/venv-lM2x/lib/python3.11/site-packages/tox/__init__.py 08:02:36 + PARALLEL=True 08:02:36 + TOX_OPTIONS_LIST= 08:02:36 + [[ -n '' ]] 08:02:36 + case ${PARALLEL,,} in 08:02:36 + TOX_OPTIONS_LIST=' --parallel auto --parallel-live' 08:02:36 + tox --parallel auto --parallel-live 08:02:36 + tee -a /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/tox.log 08:02:38 checkbashisms: freeze> python -m pip freeze --all 08:02:38 docs: install_deps> python -I -m pip install -r docs/requirements.txt 08:02:38 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 08:02:38 docs-linkcheck: install_deps> python -I -m pip install -r docs/requirements.txt 08:02:38 checkbashisms: pip==25.3,setuptools==80.9.0 08:02:38 checkbashisms: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./fixCIcentOS8reposMirrors.sh 08:02:38 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)' 08:02:38 checkbashisms: commands[2] /w/workspace/transportpce-tox-verify-transportpce-master/tests> find . -not -path '*/\.*' -name '*.sh' -exec checkbashisms -f '{}' + 08:02:40 checkbashisms: OK ✔ in 3.25 seconds 08:02:40 pre-commit: install_deps> python -I -m pip install pre-commit 08:02:42 pre-commit: freeze> python -m pip freeze --all 08:02:43 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 08:02:43 pre-commit: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./fixCIcentOS8reposMirrors.sh 08:02:43 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)' 08:02:43 /usr/bin/cpan 08:02:43 pre-commit: commands[2] /w/workspace/transportpce-tox-verify-transportpce-master/tests> pre-commit run --all-files --show-diff-on-failure 08:02:43 [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. 08:02:43 [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. 08:02:43 [INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks. 08:02:43 [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. 08:02:43 [INFO] Initializing environment for https://github.com/jorisroovers/gitlint. 08:02:44 [INFO] Initializing environment for https://github.com/jorisroovers/gitlint:./gitlint-core[trusted-deps]. 08:02:44 [INFO] Initializing environment for https://github.com/Lucas-C/pre-commit-hooks. 08:02:44 [INFO] Initializing environment for https://github.com/pre-commit/mirrors-autopep8. 08:02:45 [INFO] Initializing environment for https://github.com/perltidy/perltidy. 08:02:45 buildcontroller: freeze> python -m pip freeze --all 08:02:45 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==25.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==2.23,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 08:02:45 buildcontroller: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_controller.sh 08:02:45 + update-java-alternatives -l 08:02:45 java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64 08:02:45 java-1.17.0-openjdk-amd64 1711 /usr/lib/jvm/java-1.17.0-openjdk-amd64 08:02:45 java-1.21.0-openjdk-amd64 2111 /usr/lib/jvm/java-1.21.0-openjdk-amd64 08:02:45 + sudo update-java-alternatives -s java-1.21.0-openjdk-amd64 08:02:45 update-alternatives: error: no alternatives for jaotc 08:02:45 [INFO] Installing environment for https://github.com/pre-commit/pre-commit-hooks. 08:02:45 [INFO] Once installed this environment will be reused. 08:02:45 [INFO] This may take a few minutes... 08:02:45 update-alternatives: error: no alternatives for rmic 08:02:46 + sed -n ;s/.* version "\(.*\)\.\(.*\)\..*".*$/\1/p; 08:02:46 + java -version 08:02:46 + JAVA_VER=21 08:02:46 + echo 21 08:02:46 21 08:02:46 + sed -n ;s/javac \(.*\)\.\(.*\)\..*.*$/\1/p; 08:02:46 + javac -version 08:02:46 + JAVAC_VER=21 08:02:46 + echo 21 08:02:46 21 08:02:46 ok, java is 21 or newer 08:02:46 + [ 21 -ge 21 ] 08:02:46 + [ 21 -ge 21 ] 08:02:46 + echo ok, java is 21 or newer 08:02:46 + wget -nv https://dlcdn.apache.org/maven/maven-3/3.9.12/binaries/apache-maven-3.9.12-bin.tar.gz -P /tmp 08:02:47 2026-01-15 08:02:47 URL:https://dlcdn.apache.org/maven/maven-3/3.9.12/binaries/apache-maven-3.9.12-bin.tar.gz [9233336/9233336] -> "/tmp/apache-maven-3.9.12-bin.tar.gz" [1] 08:02:47 + sudo mkdir -p /opt 08:02:47 + sudo tar xf /tmp/apache-maven-3.9.12-bin.tar.gz -C /opt 08:02:48 + sudo ln -s /opt/apache-maven-3.9.12 /opt/maven 08:02:48 + sudo ln -s /opt/maven/bin/mvn /usr/bin/mvn 08:02:48 + mvn --version 08:02:48 Apache Maven 3.9.12 (848fbb4bf2d427b72bdb2471c22fced7ebd9a7a1) 08:02:48 Maven home: /opt/maven 08:02:48 Java version: 21.0.9, vendor: Ubuntu, runtime: /usr/lib/jvm/java-21-openjdk-amd64 08:02:48 Default locale: en, platform encoding: UTF-8 08:02:48 OS name: "linux", version: "5.15.0-164-generic", arch: "amd64", family: "unix" 08:02:48 NOTE: Picked up JDK_JAVA_OPTIONS: 08:02:48 --add-opens=java.base/java.io=ALL-UNNAMED 08:02:48 --add-opens=java.base/java.lang=ALL-UNNAMED 08:02:48 --add-opens=java.base/java.lang.invoke=ALL-UNNAMED 08:02:48 --add-opens=java.base/java.lang.reflect=ALL-UNNAMED 08:02:48 --add-opens=java.base/java.net=ALL-UNNAMED 08:02:48 --add-opens=java.base/java.nio=ALL-UNNAMED 08:02:48 --add-opens=java.base/java.nio.charset=ALL-UNNAMED 08:02:48 --add-opens=java.base/java.nio.file=ALL-UNNAMED 08:02:48 --add-opens=java.base/java.util=ALL-UNNAMED 08:02:48 --add-opens=java.base/java.util.jar=ALL-UNNAMED 08:02:48 --add-opens=java.base/java.util.stream=ALL-UNNAMED 08:02:48 --add-opens=java.base/java.util.zip=ALL-UNNAMED 08:02:48 --add-opens java.base/sun.nio.ch=ALL-UNNAMED 08:02:48 --add-opens java.base/sun.nio.fs=ALL-UNNAMED 08:02:48 -Xlog:disable 08:02:50 [INFO] Installing environment for https://github.com/Lucas-C/pre-commit-hooks. 08:02:50 [INFO] Once installed this environment will be reused. 08:02:50 [INFO] This may take a few minutes... 08:02:57 [INFO] Installing environment for https://github.com/pre-commit/mirrors-autopep8. 08:02:57 [INFO] Once installed this environment will be reused. 08:02:57 [INFO] This may take a few minutes... 08:03:01 [INFO] Installing environment for https://github.com/perltidy/perltidy. 08:03:01 [INFO] Once installed this environment will be reused. 08:03:01 [INFO] This may take a few minutes... 08:03:02 docs: freeze> python -m pip freeze --all 08:03:02 docs-linkcheck: freeze> python -m pip freeze --all 08:03:02 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.22.4,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.9.0,MarkupSafe==3.0.3,matplotlib==3.10.8,numpy==2.4.1,nwdiag==3.0.0,packaging==25.0,pillow==12.1.0,pip==25.3,Pygments==2.19.2,pyparsing==3.3.1,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,seqdiag==3.0.0,setuptools==80.9.0,six==1.17.0,snowballstemmer==3.0.1,Sphinx==9.0.4,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 08:03:02 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 08:03:02 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.22.4,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.9.0,MarkupSafe==3.0.3,matplotlib==3.10.8,numpy==2.4.1,nwdiag==3.0.0,packaging==25.0,pillow==12.1.0,pip==25.3,Pygments==2.19.2,pyparsing==3.3.1,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,seqdiag==3.0.0,setuptools==80.9.0,six==1.17.0,snowballstemmer==3.0.1,Sphinx==9.0.4,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 08:03:02 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 08:03:05 docs: OK ✔ in 28.1 seconds 08:03:05 pylint: install_deps> python -I -m pip install 'pylint>=2.6.0' 08:03:08 docs-linkcheck: OK ✔ in 30.7 seconds 08:03:08 pylint: freeze> python -m pip freeze --all 08:03:08 pylint: astroid==4.0.3,dill==0.4.0,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 08:03:08 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}$' '{}' + 08:03:11 trim trailing whitespace.................................................Passed 08:03:11 Tabs remover.............................................................Passed 08:03:11 autopep8.................................................................Passed 08:03:16 perltidy.................................................................Passed 08:03:17 pre-commit: commands[3] /w/workspace/transportpce-tox-verify-transportpce-master/tests> pre-commit run gitlint-ci --hook-stage manual 08:03:17 [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. 08:03:17 [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. 08:03:17 [INFO] Installing environment for https://github.com/jorisroovers/gitlint. 08:03:17 [INFO] Once installed this environment will be reused. 08:03:17 [INFO] This may take a few minutes... 08:03:25 gitlint..................................................................Passed 08:03:34 08:03:34 ------------------------------------ 08:03:34 Your code has been rated at 10.00/10 08:03:34 08:04:35 pre-commit: OK ✔ in 45.73 seconds 08:04:35 pylint: OK ✔ in 30.71 seconds 08:04:35 buildcontroller: OK ✔ in 1 minute 57.55 seconds 08:04:35 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 08:04:35 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 08:04:35 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 08:04:35 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 08:04:42 build_karaf_tests71: freeze> python -m pip freeze --all 08:04:42 build_karaf_tests190: freeze> python -m pip freeze --all 08:04:42 build_karaf_tests121: freeze> python -m pip freeze --all 08:04:42 build_karaf_tests221: freeze> python -m pip freeze --all 08:04:42 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==25.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==2.23,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 08:04:42 build_karaf_tests71: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_karaf_for_tests.sh 08:04:42 build karaf in karaf71 with ./karaf71.env 08:04:42 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==25.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==2.23,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 08:04:42 build_karaf_tests190: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_karaf_for_tests.sh 08:04:42 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==25.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==2.23,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 08:04:42 build_karaf_tests121: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_karaf_for_tests.sh 08:04:42 build karaf in karafoc with ./karafoc.env 08:04:42 build karaf in karaf121 with ./karaf121.env 08:04:43 NOTE: Picked up JDK_JAVA_OPTIONS: 08:04:43 --add-opens=java.base/java.io=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.lang=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.lang.invoke=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.lang.reflect=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.net=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.nio=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.nio.charset=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.nio.file=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util.jar=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util.stream=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util.zip=ALL-UNNAMED 08:04:43 --add-opens java.base/sun.nio.ch=ALL-UNNAMED 08:04:43 --add-opens java.base/sun.nio.fs=ALL-UNNAMED 08:04:43 -Xlog:disable 08:04:43 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==25.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==2.23,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 08:04:43 build_karaf_tests221: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_karaf_for_tests.sh 08:04:43 build karaf in karaf221 with ./karaf221.env 08:04:43 NOTE: Picked up JDK_JAVA_OPTIONS: 08:04:43 --add-opens=java.base/java.io=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.lang=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.lang.invoke=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.lang.reflect=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.net=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.nio=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.nio.charset=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.nio.file=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util.jar=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util.stream=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util.zip=ALL-UNNAMED 08:04:43 --add-opens java.base/sun.nio.ch=ALL-UNNAMED 08:04:43 --add-opens java.base/sun.nio.fs=ALL-UNNAMED 08:04:43 -Xlog:disable 08:04:43 NOTE: Picked up JDK_JAVA_OPTIONS: 08:04:43 --add-opens=java.base/java.io=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.lang=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.lang.invoke=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.lang.reflect=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.net=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.nio=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.nio.charset=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.nio.file=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util.jar=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util.stream=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util.zip=ALL-UNNAMED 08:04:43 --add-opens java.base/sun.nio.ch=ALL-UNNAMED 08:04:43 --add-opens java.base/sun.nio.fs=ALL-UNNAMED 08:04:43 -Xlog:disable 08:04:43 NOTE: Picked up JDK_JAVA_OPTIONS: 08:04:43 --add-opens=java.base/java.io=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.lang=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.lang.invoke=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.lang.reflect=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.net=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.nio=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.nio.charset=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.nio.file=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util.jar=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util.stream=ALL-UNNAMED 08:04:43 --add-opens=java.base/java.util.zip=ALL-UNNAMED 08:04:43 --add-opens java.base/sun.nio.ch=ALL-UNNAMED 08:04:43 --add-opens java.base/sun.nio.fs=ALL-UNNAMED 08:04:43 -Xlog:disable 08:05:47 [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/maven-metadata.xml: Could not read metadata /home/jenkins/.m2/repository/org/opendaylight/transportpce/transportpce-karaf/maven-metadata-local.xml: input contained no data -> [Help 1] 08:05:47 [ERROR] 08:05:47 [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. 08:05:47 [ERROR] Re-run Maven using the -X switch to enable full debug logging. 08:05:47 [ERROR] 08:05:47 [ERROR] For more information about the errors and possible solutions, please read the following articles: 08:05:47 [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException 08:05:47 build_karaf_tests71: OK ✔ in 1 minute 12.66 seconds 08:05:47 build_karaf_tests190: OK ✔ in 1 minute 12.7 seconds 08:05:47 build_karaf_tests221: OK ✔ in 1 minute 13.04 seconds 08:05:47 build_karaf_tests121: OK ✔ in 1 minute 13.05 seconds 08:05:47 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 08:05:47 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 08:05:47 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 08:05:57 sims: freeze> python -m pip freeze --all 08:05:57 buildlighty: freeze> python -m pip freeze --all 08:05:58 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==25.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==2.23,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 08:05:58 sims: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./install_lightynode.sh 08:05:58 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==25.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==2.23,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 08:05:58 buildlighty: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/lighty> ./build.sh 08:05:58 Using lighynode version 22.1.0.1 08:05:58 Installing lightynode device to ./lightynode/lightynode-openroadm-device directory 08:05:58 NOTE: Picked up JDK_JAVA_OPTIONS: --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.nio=ALL-UNNAMED 08:06:40 sims: OK ✔ in 14.02 seconds 08:06:40 buildlighty: OK ✔ in 35.5 seconds 08:06:40 testsPCE: freeze> python -m pip freeze --all 08:06:40 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==25.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==2.23,Pygments==2.19.2,PyNaCl==1.6.2,pyparsing==3.3.1,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 08:06:40 testsPCE: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh pce 08:06:40 pytest -q transportpce_tests/pce/test01_pce.py 08:07:27 .................... [100%] 08:08:30 20 passed in 110.07s (0:01:50) 08:08:30 pytest -q transportpce_tests/pce/test02_pce_400G.py 08:08:47 ............ [100%] 08:09:17 12 passed in 46.74s 08:09:17 pytest -q transportpce_tests/pce/test03_gnpy.py 08:09:34 ........ [100%] 08:09:55 8 passed in 37.62s 08:09:55 pytest -q transportpce_tests/pce/test04_pce_bug_fix.py 08:10:27 ... [100%] 08:10:32 3 passed in 36.10s 08:10:33 testsPCE: OK ✔ in 4 minutes 44.64 seconds 08:10:33 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 08:10:33 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 08:10:33 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 08:10:39 tests190: freeze> python -m pip freeze --all 08:10:39 tests_tapi: freeze> python -m pip freeze --all 08:10:39 tests121: freeze> python -m pip freeze --all 08:10:39 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==25.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==2.23,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 08:10:39 tests190: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh oc 08:10:39 using environment variables from ./karafoc.env 08:10:39 pytest -q transportpce_tests/oc/test01_portmapping.py 08:10:40 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==25.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==2.23,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 08:10:40 tests_tapi: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh tapi 08:10:40 using environment variables from ./karaf221.env 08:10:40 pytest -q transportpce_tests/tapi/test01_abstracted_topology.py 08:10:40 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==25.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==2.23,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 08:10:40 tests121: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh 1.2.1 08:10:40 using environment variables from ./karaf121.env 08:10:40 pytest -q transportpce_tests/1.2.1/test01_portmapping.py 08:11:43 ........... [100%] 08:11:59 10 passed in 79.72s (0:01:19) 08:12:00 pytest -q transportpce_tests/oc/test02_topology.py 08:12:07 ................................... [100%] 08:12:47 21 passed in 126.97s (0:02:06) 08:12:47 pytest -q transportpce_tests/1.2.1/test02_topo_portmapping.py 08:12:48 ........................ [100%] 08:13:06 14 passed in 65.88s (0:01:05) 08:13:06 pytest -q transportpce_tests/oc/test03_renderer.py 08:13:07 .................. [100%] 08:13:48 6 passed in 60.82s (0:01:00) 08:13:48 pytest -q transportpce_tests/1.2.1/test03_topology.py 08:13:49 ...F...F......F.FF. [100%] 08:14:05 =================================== FAILURES =================================== 08:14:05 _ TestTransportPCERenderer.test_07_service_path_create_network_check_optical_channel _ 08:14:05 08:14:05 self = 08:14:05 08:14:05 def test_07_service_path_create_network_check_optical_channel(self): 08:14:05 response = test_utils_oc.check_node_attribute2_request("XPDR-OC", "component", "cfp2-opt-1-1", 08:14:05 "openconfig-terminal-device:optical-channel") 08:14:05 self.assertEqual(response['status_code'], requests.codes.ok) 08:14:05 optchannel = response['openconfig-terminal-device:optical-channel'] 08:14:05 expected_optchannel = {'frequency': '194100000', 08:14:05 'target-output-power': '0.0', 08:14:05 'operational-mode': 4308 08:14:05 } 08:14:05 self.assertDictEqual( 08:14:05 dict(expected_optchannel, **optchannel['config']), optchannel['config']) 08:14:05 for key, value in expected_optchannel.items(): 08:14:05 self.assertIn(key, optchannel['state']) 08:14:05 > self.assertEqual(optchannel['state'][key], value) 08:14:05 E AssertionError: '192499999' != '194100000' 08:14:05 E - 192499999 08:14:05 E + 194100000 08:14:05 08:14:05 transportpce_tests/oc/test03_renderer.py:128: AssertionError 08:14:05 ----------------------------- Captured stdout call ----------------------------- 08:14:05 execution of test_07_service_path_create_network_check_optical_channel 08:14:05 _ TestTransportPCERenderer.test_10_service_path_delete_network_check_optical_port _ 08:14:05 08:14:05 self = 08:14:05 08:14:05 def test_10_service_path_delete_network_check_optical_port(self): 08:14:05 response = test_utils_oc.check_node_attribute3_request("XPDR-OC", "component", "line-cfp2-1", "port", 08:14:05 "openconfig-transport-line-common:optical-port") 08:14:05 self.assertEqual(response['status_code'], requests.codes.ok) 08:14:05 > self.assertEqual(response['port']['config']['admin-state'], 'DISABLED') 08:14:05 E AssertionError: 'ENABLED' != 'DISABLED' 08:14:05 E - ENABLED 08:14:05 E + DISABLED 08:14:05 08:14:05 transportpce_tests/oc/test03_renderer.py:154: AssertionError 08:14:05 ----------------------------- Captured stdout call ----------------------------- 08:14:05 execution of test_10_service_path_delete_network_check_optical_port 08:14:05 _ TestTransportPCERenderer.test_15_service_path_create_client_check_interfaces _ 08:14:05 08:14:05 self = 08:14:05 08:14:05 def test_15_service_path_create_client_check_interfaces(self): 08:14:05 for interfaceid in TestTransportPCERenderer.interface_id: 08:14:05 response = test_utils_oc.check_interface_attribute_request("XPDR-OC", "interface", interfaceid) 08:14:05 > self.assertEqual(response['interface'][0]['name'], interfaceid) 08:14:05 ^^^^^^^^^^^^^^^^^^^^^^^^ 08:14:05 E KeyError: 0 08:14:05 08:14:05 transportpce_tests/oc/test03_renderer.py:245: KeyError 08:14:05 ----------------------------- Captured stdout call ----------------------------- 08:14:05 execution of test_15_service_path_create_client_check_interfaces 08:14:05 _ TestTransportPCERenderer.test_17_service_path_delete_client_check_optical_port _ 08:14:05 08:14:05 self = 08:14:05 08:14:05 def test_17_service_path_delete_client_check_optical_port(self): 08:14:05 response = test_utils_oc.check_node_attribute3_request("XPDR-OC", "component", 08:14:05 TestTransportPCERenderer.port_id[0], "port", 08:14:05 "openconfig-transport-line-common:optical-port") 08:14:05 self.assertEqual(response['status_code'], requests.codes.ok) 08:14:05 > self.assertEqual(response['port']['config']['admin-state'], 'DISABLED') 08:14:05 E AssertionError: 'ENABLED' != 'DISABLED' 08:14:05 E - ENABLED 08:14:05 E + DISABLED 08:14:05 08:14:05 transportpce_tests/oc/test03_renderer.py:274: AssertionError 08:14:05 ----------------------------- Captured stdout call ----------------------------- 08:14:05 execution of test_17_service_path_delete_client_check_optical_port 08:14:05 _ TestTransportPCERenderer.test_18_service_path_delete_client_check_properties _ 08:14:05 08:14:05 self = 08:14:05 08:14:05 def test_18_service_path_delete_client_check_properties(self): 08:14:05 response = test_utils_oc.check_node_attribute2_request("XPDR-OC", "component", "qsfp-opt-1-4", 08:14:05 "openconfig-platform:properties") 08:14:05 self.assertEqual(response['status_code'], requests.codes.ok) 08:14:05 for prop in response['openconfig-platform:properties']['property']: 08:14:05 self.assertEqual(prop['name'], 'tx-dis') 08:14:05 > self.assertEqual(prop['config'], {'name': 'tx-dis', 'value': 'TRUE'}) 08:14:05 E AssertionError: {'name': 'tx-dis', 'value': 'FALSE'} != {'name': 'tx-dis', 'value': 'TRUE'} 08:14:05 E - {'name': 'tx-dis', 'value': 'FALSE'} 08:14:05 E ? ^^^^ 08:14:05 E 08:14:05 E + {'name': 'tx-dis', 'value': 'TRUE'} 08:14:05 E ? ^^^ 08:14:05 08:14:05 transportpce_tests/oc/test03_renderer.py:284: AssertionError 08:14:05 ----------------------------- Captured stdout call ----------------------------- 08:14:05 execution of test_18_service_path_delete_client_check_properties 08:14:05 =========================== short test summary info ============================ 08:14:05 FAILED transportpce_tests/oc/test03_renderer.py::TestTransportPCERenderer::test_07_service_path_create_network_check_optical_channel 08:14:05 FAILED transportpce_tests/oc/test03_renderer.py::TestTransportPCERenderer::test_10_service_path_delete_network_check_optical_port 08:14:05 FAILED transportpce_tests/oc/test03_renderer.py::TestTransportPCERenderer::test_15_service_path_create_client_check_interfaces 08:14:05 FAILED transportpce_tests/oc/test03_renderer.py::TestTransportPCERenderer::test_17_service_path_delete_client_check_optical_port 08:14:05 FAILED transportpce_tests/oc/test03_renderer.py::TestTransportPCERenderer::test_18_service_path_delete_client_check_properties 08:14:05 5 failed, 14 passed in 59.16s 08:14:05 tests190: exit 1 (205.97 seconds) /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh oc pid=7149 08:14:06 tests190: FAIL ✖ in 3 minutes 33.76 seconds 08:14:06 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 08:14:14 .tests71: freeze> python -m pip freeze --all 08:14:14 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==25.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==2.23,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 08:14:14 tests71: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh 7.1 08:14:14 using environment variables from ./karaf71.env 08:14:14 pytest -q transportpce_tests/7.1/test01_portmapping.py 08:14:34 ................................ [100%] 08:15:09 12 passed in 54.51s 08:15:09 pytest -q transportpce_tests/7.1/test02_otn_renderer.py 08:15:12 ............................F.F.F.F.F. [100%] 08:16:20 44 passed in 151.81s (0:02:31) 08:16:20 pytest -q transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py 08:16:50 FFF....FFFFF..F..F..F..F.F.F.F.FF................ [100%] 08:18:18 =================================== FAILURES =================================== 08:18:18 _____________ TestTransportPCERenderer.test_05_service_path_create _____________ 08:18:18 08:18:18 self = 08:18:18 conn = 08:18:18 method = 'POST' 08:18:18 url = '/rests/operations/transportpce-device-renderer:service-path' 08:18:18 body = '{"input": {"service-name": "service_test", "wave-number": "7", "modulation-format": "dp-qpsk", "operation": "create",... 40, "min-freq": 195.775, "max-freq": 195.825, "lower-spectral-slot-number": 713, "higher-spectral-slot-number": 720}}' 08:18:18 headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/json', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '441', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 08:18:18 retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) 08:18:18 timeout = Timeout(connect=30, read=30, total=None), chunked = False 08:18:18 response_conn = 08:18:18 preload_content = False, decode_content = False, enforce_content_length = True 08:18:18 08:18:18 def _make_request( 08:18:18 self, 08:18:18 conn: BaseHTTPConnection, 08:18:18 method: str, 08:18:18 url: str, 08:18:18 body: _TYPE_BODY | None = None, 08:18:18 headers: typing.Mapping[str, str] | None = None, 08:18:18 retries: Retry | None = None, 08:18:18 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 08:18:18 chunked: bool = False, 08:18:18 response_conn: BaseHTTPConnection | None = None, 08:18:18 preload_content: bool = True, 08:18:18 decode_content: bool = True, 08:18:18 enforce_content_length: bool = True, 08:18:18 ) -> BaseHTTPResponse: 08:18:18 """ 08:18:18 Perform a request on a given urllib connection object taken from our 08:18:18 pool. 08:18:18 08:18:18 :param conn: 08:18:18 a connection from one of our connection pools 08:18:18 08:18:18 :param method: 08:18:18 HTTP request method (such as GET, POST, PUT, etc.) 08:18:18 08:18:18 :param url: 08:18:18 The URL to perform the request on. 08:18:18 08:18:18 :param body: 08:18:18 Data to send in the request body, either :class:`str`, :class:`bytes`, 08:18:18 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 08:18:18 08:18:18 :param headers: 08:18:18 Dictionary of custom headers to send, such as User-Agent, 08:18:18 If-None-Match, etc. If None, pool headers are used. If provided, 08:18:18 these headers completely replace any pool-specific headers. 08:18:18 08:18:18 :param retries: 08:18:18 Configure the number of retries to allow before raising a 08:18:18 :class:`~urllib3.exceptions.MaxRetryError` exception. 08:18:18 08:18:18 Pass ``None`` to retry until you receive a response. Pass a 08:18:18 :class:`~urllib3.util.retry.Retry` object for fine-grained control 08:18:18 over different types of retries. 08:18:18 Pass an integer number to retry connection errors that many times, 08:18:18 but no other types of errors. Pass zero to never retry. 08:18:18 08:18:18 If ``False``, then retries are disabled and any exception is raised 08:18:18 immediately. Also, instead of raising a MaxRetryError on redirects, 08:18:18 the redirect response will be returned. 08:18:18 08:18:18 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 08:18:18 08:18:18 :param timeout: 08:18:18 If specified, overrides the default timeout for this one 08:18:18 request. It may be a float (in seconds) or an instance of 08:18:18 :class:`urllib3.util.Timeout`. 08:18:18 08:18:18 :param chunked: 08:18:18 If True, urllib3 will send the body using chunked transfer 08:18:18 encoding. Otherwise, urllib3 will send the body using the standard 08:18:18 content-length form. Defaults to False. 08:18:18 08:18:18 :param response_conn: 08:18:18 Set this to ``None`` if you will handle releasing the connection or 08:18:18 set the connection to have the response release it. 08:18:18 08:18:18 :param preload_content: 08:18:18 If True, the response's body will be preloaded during construction. 08:18:18 08:18:18 :param decode_content: 08:18:18 If True, will attempt to decode the body based on the 08:18:18 'content-encoding' header. 08:18:18 08:18:18 :param enforce_content_length: 08:18:18 Enforce content length checking. Body returned by server must match 08:18:18 value of Content-Length header, if present. Otherwise, raise error. 08:18:18 """ 08:18:18 self.num_requests += 1 08:18:18 08:18:18 timeout_obj = self._get_timeout(timeout) 08:18:18 timeout_obj.start_connect() 08:18:18 conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) 08:18:18 08:18:18 try: 08:18:18 # Trigger any extra validation we need to do. 08:18:18 try: 08:18:18 self._validate_conn(conn) 08:18:18 except (SocketTimeout, BaseSSLError) as e: 08:18:18 self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) 08:18:18 raise 08:18:18 08:18:18 # _validate_conn() starts the connection to an HTTPS proxy 08:18:18 # so we need to wrap errors with 'ProxyError' here too. 08:18:18 except ( 08:18:18 OSError, 08:18:18 NewConnectionError, 08:18:18 TimeoutError, 08:18:18 BaseSSLError, 08:18:18 CertificateError, 08:18:18 SSLError, 08:18:18 ) as e: 08:18:18 new_e: Exception = e 08:18:18 if isinstance(e, (BaseSSLError, CertificateError)): 08:18:18 new_e = SSLError(e) 08:18:18 # If the connection didn't successfully connect to it's proxy 08:18:18 # then there 08:18:18 if isinstance( 08:18:18 new_e, (OSError, NewConnectionError, TimeoutError, SSLError) 08:18:18 ) and (conn and conn.proxy and not conn.has_connected_to_proxy): 08:18:18 new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) 08:18:18 raise new_e 08:18:18 08:18:18 # conn.request() calls http.client.*.request, not the method in 08:18:18 # urllib3.request. It also calls makefile (recv) on the socket. 08:18:18 try: 08:18:18 conn.request( 08:18:18 method, 08:18:18 url, 08:18:18 body=body, 08:18:18 headers=headers, 08:18:18 chunked=chunked, 08:18:18 preload_content=preload_content, 08:18:18 decode_content=decode_content, 08:18:18 enforce_content_length=enforce_content_length, 08:18:18 ) 08:18:18 08:18:18 # We are swallowing BrokenPipeError (errno.EPIPE) since the server is 08:18:18 # legitimately able to close the connection after sending a valid response. 08:18:18 # With this behaviour, the received response is still readable. 08:18:18 except BrokenPipeError: 08:18:18 pass 08:18:18 except OSError as e: 08:18:18 # MacOS/Linux 08:18:18 # EPROTOTYPE and ECONNRESET are needed on macOS 08:18:18 # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ 08:18:18 # Condition changed later to emit ECONNRESET instead of only EPROTOTYPE. 08:18:18 if e.errno != errno.EPROTOTYPE and e.errno != errno.ECONNRESET: 08:18:18 raise 08:18:18 08:18:18 # Reset the timeout for the recv() on the socket 08:18:18 read_timeout = timeout_obj.read_timeout 08:18:18 08:18:18 if not conn.is_closed: 08:18:18 # In Python 3 socket.py will catch EAGAIN and return None when you 08:18:18 # try and read into the file pointer created by http.client, which 08:18:18 # instead raises a BadStatusLine exception. Instead of catching 08:18:18 # the exception and assuming all BadStatusLine exceptions are read 08:18:18 # timeouts, check for a zero timeout before making the request. 08:18:18 if read_timeout == 0: 08:18:18 raise ReadTimeoutError( 08:18:18 self, url, f"Read timed out. (read timeout={read_timeout})" 08:18:18 ) 08:18:18 conn.timeout = read_timeout 08:18:18 08:18:18 # Receive the response from the server 08:18:18 try: 08:18:18 > response = conn.getresponse() 08:18:18 ^^^^^^^^^^^^^^^^^^ 08:18:18 08:18:18 ../.tox/tests121/lib/python3.11/site-packages/urllib3/connectionpool.py:534: 08:18:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:18:18 ../.tox/tests121/lib/python3.11/site-packages/urllib3/connection.py:571: in getresponse 08:18:18 httplib_response = super().getresponse() 08:18:18 ^^^^^^^^^^^^^^^^^^^^^ 08:18:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:1395: in getresponse 08:18:18 response.begin() 08:18:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:325: in begin 08:18:18 version, status, reason = self._read_status() 08:18:18 ^^^^^^^^^^^^^^^^^^^ 08:18:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:286: in _read_status 08:18:18 line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 08:18:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:18:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:18:18 08:18:18 self = 08:18:18 b = 08:18:18 08:18:18 def readinto(self, b): 08:18:18 """Read up to len(b) bytes into the writable buffer *b* and return 08:18:18 the number of bytes read. If the socket is non-blocking and no bytes 08:18:18 are available, None is returned. 08:18:18 08:18:18 If *b* is non-empty, a 0 return value indicates that the connection 08:18:18 was shutdown at the other end. 08:18:18 """ 08:18:18 self._checkClosed() 08:18:18 self._checkReadable() 08:18:18 if self._timeout_occurred: 08:18:18 raise OSError("cannot read from timed out object") 08:18:18 while True: 08:18:18 try: 08:18:18 > return self._sock.recv_into(b) 08:18:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:18:18 E TimeoutError: timed out 08:18:18 08:18:18 /opt/pyenv/versions/3.11.10/lib/python3.11/socket.py:718: TimeoutError 08:18:18 08:18:18 The above exception was the direct cause of the following exception: 08:18:18 08:18:18 self = 08:18:18 request = , stream = False 08:18:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:18:18 proxies = OrderedDict() 08:18:18 08:18:18 def send( 08:18:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:18:18 ): 08:18:18 """Sends PreparedRequest object. Returns Response object. 08:18:18 08:18:18 :param request: The :class:`PreparedRequest ` being sent. 08:18:18 :param stream: (optional) Whether to stream the request content. 08:18:18 :param timeout: (optional) How long to wait for the server to send 08:18:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:18:18 read timeout) ` tuple. 08:18:18 :type timeout: float or tuple or urllib3 Timeout object 08:18:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:18:18 we verify the server's TLS certificate, or a string, in which case it 08:18:18 must be a path to a CA bundle to use 08:18:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:18:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:18:18 :rtype: requests.Response 08:18:18 """ 08:18:18 08:18:18 try: 08:18:18 conn = self.get_connection_with_tls_context( 08:18:18 request, verify, proxies=proxies, cert=cert 08:18:18 ) 08:18:18 except LocationValueError as e: 08:18:18 raise InvalidURL(e, request=request) 08:18:18 08:18:18 self.cert_verify(conn, request.url, verify, cert) 08:18:18 url = self.request_url(request, proxies) 08:18:18 self.add_headers( 08:18:18 request, 08:18:18 stream=stream, 08:18:18 timeout=timeout, 08:18:18 verify=verify, 08:18:18 cert=cert, 08:18:18 proxies=proxies, 08:18:18 ) 08:18:18 08:18:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:18:18 08:18:18 if isinstance(timeout, tuple): 08:18:18 try: 08:18:18 connect, read = timeout 08:18:18 timeout = TimeoutSauce(connect=connect, read=read) 08:18:18 except ValueError: 08:18:18 raise ValueError( 08:18:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:18:18 f"or a single float to set both timeouts to the same value." 08:18:18 ) 08:18:18 elif isinstance(timeout, TimeoutSauce): 08:18:18 pass 08:18:18 else: 08:18:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:18:18 08:18:18 try: 08:18:18 > resp = conn.urlopen( 08:18:18 method=request.method, 08:18:18 url=url, 08:18:18 body=request.body, 08:18:18 headers=request.headers, 08:18:18 redirect=False, 08:18:18 assert_same_host=False, 08:18:18 preload_content=False, 08:18:18 decode_content=False, 08:18:18 retries=self.max_retries, 08:18:18 timeout=timeout, 08:18:18 chunked=chunked, 08:18:18 ) 08:18:18 08:18:18 ../.tox/tests121/lib/python3.11/site-packages/requests/adapters.py:644: 08:18:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:18:18 ../.tox/tests121/lib/python3.11/site-packages/urllib3/connectionpool.py:841: in urlopen 08:18:18 retries = retries.increment( 08:18:18 ../.tox/tests121/lib/python3.11/site-packages/urllib3/util/retry.py:490: in increment 08:18:18 raise reraise(type(error), error, _stacktrace) 08:18:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:18:18 ../.tox/tests121/lib/python3.11/site-packages/urllib3/util/util.py:39: in reraise 08:18:18 raise value 08:18:18 ../.tox/tests121/lib/python3.11/site-packages/urllib3/connectionpool.py:787: in urlopen 08:18:18 response = self._make_request( 08:18:18 ../.tox/tests121/lib/python3.11/site-packages/urllib3/connectionpool.py:536: in _make_request 08:18:18 self._raise_timeout(err=e, url=url, timeout_value=read_timeout) 08:18:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:18:18 08:18:18 self = 08:18:18 err = TimeoutError('timed out') 08:18:18 url = '/rests/operations/transportpce-device-renderer:service-path' 08:18:18 timeout_value = 30 08:18:18 08:18:18 def _raise_timeout( 08:18:18 self, 08:18:18 err: BaseSSLError | OSError | SocketTimeout, 08:18:18 url: str, 08:18:18 timeout_value: _TYPE_TIMEOUT | None, 08:18:18 ) -> None: 08:18:18 """Is the error actually a timeout? Will raise a ReadTimeout or pass""" 08:18:18 08:18:18 if isinstance(err, SocketTimeout): 08:18:18 > raise ReadTimeoutError( 08:18:18 self, url, f"Read timed out. (read timeout={timeout_value})" 08:18:18 ) from err 08:18:18 E urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=8191): Read timed out. (read timeout=30) 08:18:18 08:18:18 ../.tox/tests121/lib/python3.11/site-packages/urllib3/connectionpool.py:367: ReadTimeoutError 08:18:18 08:18:18 During handling of the above exception, another exception occurred: 08:18:18 08:18:18 self = 08:18:18 08:18:18 def test_05_service_path_create(self): 08:18:18 > response = test_utils.transportpce_api_rpc_request( 08:18:18 'transportpce-device-renderer', 'service-path', 08:18:18 { 08:18:18 'service-name': 'service_test', 08:18:18 'wave-number': '7', 08:18:18 'modulation-format': 'dp-qpsk', 08:18:18 'operation': 'create', 08:18:18 'nodes': [{'node-id': 'ROADMA01', 'src-tp': 'SRG1-PP7-TXRX', 'dest-tp': 'DEG1-TTP-TXRX'}, 08:18:18 {'node-id': 'XPDRA01', 'src-tp': 'XPDR1-CLIENT1', 'dest-tp': 'XPDR1-NETWORK1'}], 08:18:18 'center-freq': 195.8, 08:18:18 'nmc-width': 40, 08:18:18 'min-freq': 195.775, 08:18:18 'max-freq': 195.825, 08:18:18 'lower-spectral-slot-number': 713, 08:18:18 'higher-spectral-slot-number': 720 08:18:18 }) 08:18:18 08:18:18 transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py:92: 08:18:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:18:18 transportpce_tests/common/test_utils.py:751: in transportpce_api_rpc_request 08:18:18 response = post_request(url, data) 08:18:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:18:18 transportpce_tests/common/test_utils.py:143: in post_request 08:18:18 return requests.request( 08:18:18 ../.tox/tests121/lib/python3.11/site-packages/requests/api.py:59: in request 08:18:18 return session.request(method=method, url=url, **kwargs) 08:18:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:18:18 ../.tox/tests121/lib/python3.11/site-packages/requests/sessions.py:589: in request 08:18:18 resp = self.send(prep, **send_kwargs) 08:18:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:18:18 ../.tox/tests121/lib/python3.11/site-packages/requests/sessions.py:703: in send 08:18:18 r = adapter.send(request, **kwargs) 08:18:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:18:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:18:18 08:18:18 self = 08:18:18 request = , stream = False 08:18:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:18:18 proxies = OrderedDict() 08:18:18 08:18:18 def send( 08:18:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:18:18 ): 08:18:18 """Sends PreparedRequest object. Returns Response object. 08:18:18 08:18:18 :param request: The :class:`PreparedRequest ` being sent. 08:18:18 :param stream: (optional) Whether to stream the request content. 08:18:18 :param timeout: (optional) How long to wait for the server to send 08:18:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:18:18 read timeout) ` tuple. 08:18:18 :type timeout: float or tuple or urllib3 Timeout object 08:18:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:18:18 we verify the server's TLS certificate, or a string, in which case it 08:18:18 must be a path to a CA bundle to use 08:18:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:18:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:18:18 :rtype: requests.Response 08:18:18 """ 08:18:18 08:18:18 try: 08:18:18 conn = self.get_connection_with_tls_context( 08:18:18 request, verify, proxies=proxies, cert=cert 08:18:18 ) 08:18:18 except LocationValueError as e: 08:18:18 raise InvalidURL(e, request=request) 08:18:18 08:18:18 self.cert_verify(conn, request.url, verify, cert) 08:18:18 url = self.request_url(request, proxies) 08:18:18 self.add_headers( 08:18:18 request, 08:18:18 stream=stream, 08:18:18 timeout=timeout, 08:18:18 verify=verify, 08:18:18 cert=cert, 08:18:18 proxies=proxies, 08:18:18 ) 08:18:18 08:18:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:18:18 08:18:18 if isinstance(timeout, tuple): 08:18:18 try: 08:18:18 connect, read = timeout 08:18:18 timeout = TimeoutSauce(connect=connect, read=read) 08:18:18 except ValueError: 08:18:18 raise ValueError( 08:18:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:18:18 f"or a single float to set both timeouts to the same value." 08:18:18 ) 08:18:18 elif isinstance(timeout, TimeoutSauce): 08:18:18 pass 08:18:18 else: 08:18:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:18:18 08:18:18 try: 08:18:18 resp = conn.urlopen( 08:18:18 method=request.method, 08:18:18 url=url, 08:18:18 body=request.body, 08:18:18 headers=request.headers, 08:18:18 redirect=False, 08:18:18 assert_same_host=False, 08:18:18 preload_content=False, 08:18:18 decode_content=False, 08:18:18 retries=self.max_retries, 08:18:18 timeout=timeout, 08:18:18 chunked=chunked, 08:18:18 ) 08:18:18 08:18:18 except (ProtocolError, OSError) as err: 08:18:18 raise ConnectionError(err, request=request) 08:18:18 08:18:18 except MaxRetryError as e: 08:18:18 if isinstance(e.reason, ConnectTimeoutError): 08:18:18 # TODO: Remove this in 3.0.0: see #2811 08:18:18 if not isinstance(e.reason, NewConnectionError): 08:18:18 raise ConnectTimeout(e, request=request) 08:18:18 08:18:18 if isinstance(e.reason, ResponseError): 08:18:18 raise RetryError(e, request=request) 08:18:18 08:18:18 if isinstance(e.reason, _ProxyError): 08:18:18 raise ProxyError(e, request=request) 08:18:18 08:18:18 if isinstance(e.reason, _SSLError): 08:18:18 # This branch is for urllib3 v1.22 and later. 08:18:18 raise SSLError(e, request=request) 08:18:18 08:18:18 raise ConnectionError(e, request=request) 08:18:18 08:18:18 except ClosedPoolError as e: 08:18:18 raise ConnectionError(e, request=request) 08:18:18 08:18:18 except _ProxyError as e: 08:18:18 raise ProxyError(e) 08:18:18 08:18:18 except (_SSLError, _HTTPError) as e: 08:18:18 if isinstance(e, _SSLError): 08:18:18 # This branch is for urllib3 versions earlier than v1.22 08:18:18 raise SSLError(e, request=request) 08:18:18 elif isinstance(e, ReadTimeoutError): 08:18:18 > raise ReadTimeout(e, request=request) 08:18:18 E requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=8191): Read timed out. (read timeout=30) 08:18:18 08:18:18 ../.tox/tests121/lib/python3.11/site-packages/requests/adapters.py:690: ReadTimeout 08:18:18 ----------------------------- Captured stdout call ----------------------------- 08:18:18 execution of test_05_service_path_create 08:18:18 ________ TestTransportPCERenderer.test_06_service_path_create_rdm_check ________ 08:18:18 08:18:18 self = 08:18:18 08:18:18 def test_06_service_path_create_rdm_check(self): 08:18:18 response = test_utils.check_node_attribute_request("ROADMA01", "interface", "DEG1-TTP-TXRX-713:720") 08:18:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:18:18 E AssertionError: 409 != 200 08:18:18 08:18:18 transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py:113: AssertionError 08:18:18 ----------------------------- Captured stdout call ----------------------------- 08:18:18 execution of test_06_service_path_create_rdm_check 08:18:18 ________ TestTransportPCERenderer.test_07_service_path_create_rdm_check ________ 08:18:18 08:18:18 self = 08:18:18 08:18:18 def test_07_service_path_create_rdm_check(self): 08:18:18 response = test_utils.check_node_attribute_request("ROADMA01", "interface", "SRG1-PP7-TXRX-713:720") 08:18:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:18:18 E AssertionError: 409 != 200 08:18:18 08:18:18 transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py:129: AssertionError 08:18:18 ----------------------------- Captured stdout call ----------------------------- 08:18:18 execution of test_07_service_path_create_rdm_check 08:18:18 ________ TestTransportPCERenderer.test_08_service_path_create_rdm_check ________ 08:18:18 08:18:18 self = 08:18:18 08:18:18 def test_08_service_path_create_rdm_check(self): 08:18:18 response = test_utils.check_node_attribute_request( 08:18:18 "ROADMA01", "roadm-connections", "SRG1-PP7-TXRX-DEG1-TTP-TXRX-713:720") 08:18:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:18:18 E AssertionError: 409 != 200 08:18:18 08:18:18 transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py:146: AssertionError 08:18:18 ----------------------------- Captured stdout call ----------------------------- 08:18:18 execution of test_08_service_path_create_rdm_check 08:18:18 _______ TestTransportPCERenderer.test_09_service_path_create_xpdr_check ________ 08:18:18 08:18:18 self = 08:18:18 08:18:18 def test_09_service_path_create_xpdr_check(self): 08:18:18 response = test_utils.check_node_attribute_request("XPDRA01", "interface", "XPDR1-NETWORK1-713:720") 08:18:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:18:18 E AssertionError: 409 != 200 08:18:18 08:18:18 transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py:159: AssertionError 08:18:18 ----------------------------- Captured stdout call ----------------------------- 08:18:18 execution of test_09_service_path_create_xpdr_check 08:18:18 _______ TestTransportPCERenderer.test_10_service_path_create_xpdr_check ________ 08:18:18 08:18:18 self = 08:18:18 08:18:18 def test_10_service_path_create_xpdr_check(self): 08:18:18 response = test_utils.check_node_attribute_request("XPDRA01", "interface", "XPDR1-NETWORK1-OTU") 08:18:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:18:18 E AssertionError: 409 != 200 08:18:18 08:18:18 transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py:177: AssertionError 08:18:18 ----------------------------- Captured stdout call ----------------------------- 08:18:18 execution of test_10_service_path_create_xpdr_check 08:18:18 _______ TestTransportPCERenderer.test_11_service_path_create_xpdr_check ________ 08:18:18 08:18:18 self = 08:18:18 08:18:18 def test_11_service_path_create_xpdr_check(self): 08:18:18 response = test_utils.check_node_attribute_request("XPDRA01", "interface", "XPDR1-NETWORK1-ODU") 08:18:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:18:18 E AssertionError: 409 != 200 08:18:18 08:18:18 transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py:194: AssertionError 08:18:18 ----------------------------- Captured stdout call ----------------------------- 08:18:18 execution of test_11_service_path_create_xpdr_check 08:18:18 _______ TestTransportPCERenderer.test_12_service_path_create_xpdr_check ________ 08:18:18 08:18:18 self = 08:18:18 08:18:18 def test_12_service_path_create_xpdr_check(self): 08:18:18 response = test_utils.check_node_attribute_request("XPDRA01", "interface", "XPDR1-CLIENT1-ETHERNET") 08:18:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:18:18 E AssertionError: 409 != 200 08:18:18 08:18:18 transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py:217: AssertionError 08:18:18 ----------------------------- Captured stdout call ----------------------------- 08:18:18 execution of test_12_service_path_create_xpdr_check 08:18:18 _______ TestTransportPCERenderer.test_13_service_path_create_xpdr_check ________ 08:18:18 08:18:18 self = 08:18:18 08:18:18 def test_13_service_path_create_xpdr_check(self): 08:18:18 response = test_utils.check_node_attribute_request("XPDRA01", "circuit-packs", "1%2F0%2F1-PLUG-NET") 08:18:18 # FIXME: https://jira.opendaylight.org/browse/TRNSPRTPCE-591 08:18:18 self.assertEqual(response['status_code'], requests.codes.ok) 08:18:18 > self.assertIn('not-reserved-inuse', response['circuit-packs'][0]["equipment-state"]) 08:18:18 E AssertionError: 'not-reserved-inuse' not found in 'not-reserved-available' 08:18:18 08:18:18 transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py:239: AssertionError 08:18:18 ----------------------------- Captured stdout call ----------------------------- 08:18:18 execution of test_13_service_path_create_xpdr_check 08:18:18 =========================== short test summary info ============================ 08:18:18 FAILED transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py::TestTransportPCERenderer::test_05_service_path_create 08:18:18 FAILED transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py::TestTransportPCERenderer::test_06_service_path_create_rdm_check 08:18:18 FAILED transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py::TestTransportPCERenderer::test_07_service_path_create_rdm_check 08:18:18 FAILED transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py::TestTransportPCERenderer::test_08_service_path_create_rdm_check 08:18:18 FAILED transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py::TestTransportPCERenderer::test_09_service_path_create_xpdr_check 08:18:18 FAILED transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py::TestTransportPCERenderer::test_10_service_path_create_xpdr_check 08:18:18 FAILED transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py::TestTransportPCERenderer::test_11_service_path_create_xpdr_check 08:18:18 FAILED transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py::TestTransportPCERenderer::test_12_service_path_create_xpdr_check 08:18:18 FAILED transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py::TestTransportPCERenderer::test_13_service_path_create_xpdr_check 08:18:18 9 failed, 15 passed in 117.62s (0:01:57) 08:18:18 tests121: exit 1 (458.45 seconds) /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh 1.2.1 pid=7171 08:18:34 FFFFF. [100%] 08:18:56 51 passed in 496.37s (0:08:16) 08:18:56 pytest -q transportpce_tests/tapi/test02_full_topology.py 08:19:14 FFF..........F.FF.FF...........FFF............. [100%] 08:21:18 =================================== FAILURES =================================== 08:21:18 ________ TestTransportPCEOtnRenderer.test_02_service_path_create_otuc2 _________ 08:21:18 08:21:18 self = 08:21:18 conn = 08:21:18 method = 'POST' 08:21:18 url = '/rests/operations/transportpce-device-renderer:service-path' 08:21:18 body = '{"input": {"service-name": "service_OTUC2", "wave-number": "0", "modulation-format": "dp-qpsk", "operation": "create"...75, "min-freq": 196.0375, "max-freq": 196.125, "lower-spectral-slot-number": 755, "higher-spectral-slot-number": 768}}' 08:21:18 headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/json', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '336', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 08:21:18 retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) 08:21:18 timeout = Timeout(connect=30, read=30, total=None), chunked = False 08:21:18 response_conn = 08:21:18 preload_content = False, decode_content = False, enforce_content_length = True 08:21:18 08:21:18 def _make_request( 08:21:18 self, 08:21:18 conn: BaseHTTPConnection, 08:21:18 method: str, 08:21:18 url: str, 08:21:18 body: _TYPE_BODY | None = None, 08:21:18 headers: typing.Mapping[str, str] | None = None, 08:21:18 retries: Retry | None = None, 08:21:18 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 08:21:18 chunked: bool = False, 08:21:18 response_conn: BaseHTTPConnection | None = None, 08:21:18 preload_content: bool = True, 08:21:18 decode_content: bool = True, 08:21:18 enforce_content_length: bool = True, 08:21:18 ) -> BaseHTTPResponse: 08:21:18 """ 08:21:18 Perform a request on a given urllib connection object taken from our 08:21:18 pool. 08:21:18 08:21:18 :param conn: 08:21:18 a connection from one of our connection pools 08:21:18 08:21:18 :param method: 08:21:18 HTTP request method (such as GET, POST, PUT, etc.) 08:21:18 08:21:18 :param url: 08:21:18 The URL to perform the request on. 08:21:18 08:21:18 :param body: 08:21:18 Data to send in the request body, either :class:`str`, :class:`bytes`, 08:21:18 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 08:21:18 08:21:18 :param headers: 08:21:18 Dictionary of custom headers to send, such as User-Agent, 08:21:18 If-None-Match, etc. If None, pool headers are used. If provided, 08:21:18 these headers completely replace any pool-specific headers. 08:21:18 08:21:18 :param retries: 08:21:18 Configure the number of retries to allow before raising a 08:21:18 :class:`~urllib3.exceptions.MaxRetryError` exception. 08:21:18 08:21:18 Pass ``None`` to retry until you receive a response. Pass a 08:21:18 :class:`~urllib3.util.retry.Retry` object for fine-grained control 08:21:18 over different types of retries. 08:21:18 Pass an integer number to retry connection errors that many times, 08:21:18 but no other types of errors. Pass zero to never retry. 08:21:18 08:21:18 If ``False``, then retries are disabled and any exception is raised 08:21:18 immediately. Also, instead of raising a MaxRetryError on redirects, 08:21:18 the redirect response will be returned. 08:21:18 08:21:18 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 08:21:18 08:21:18 :param timeout: 08:21:18 If specified, overrides the default timeout for this one 08:21:18 request. It may be a float (in seconds) or an instance of 08:21:18 :class:`urllib3.util.Timeout`. 08:21:18 08:21:18 :param chunked: 08:21:18 If True, urllib3 will send the body using chunked transfer 08:21:18 encoding. Otherwise, urllib3 will send the body using the standard 08:21:18 content-length form. Defaults to False. 08:21:18 08:21:18 :param response_conn: 08:21:18 Set this to ``None`` if you will handle releasing the connection or 08:21:18 set the connection to have the response release it. 08:21:18 08:21:18 :param preload_content: 08:21:18 If True, the response's body will be preloaded during construction. 08:21:18 08:21:18 :param decode_content: 08:21:18 If True, will attempt to decode the body based on the 08:21:18 'content-encoding' header. 08:21:18 08:21:18 :param enforce_content_length: 08:21:18 Enforce content length checking. Body returned by server must match 08:21:18 value of Content-Length header, if present. Otherwise, raise error. 08:21:18 """ 08:21:18 self.num_requests += 1 08:21:18 08:21:18 timeout_obj = self._get_timeout(timeout) 08:21:18 timeout_obj.start_connect() 08:21:18 conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) 08:21:18 08:21:18 try: 08:21:18 # Trigger any extra validation we need to do. 08:21:18 try: 08:21:18 self._validate_conn(conn) 08:21:18 except (SocketTimeout, BaseSSLError) as e: 08:21:18 self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) 08:21:18 raise 08:21:18 08:21:18 # _validate_conn() starts the connection to an HTTPS proxy 08:21:18 # so we need to wrap errors with 'ProxyError' here too. 08:21:18 except ( 08:21:18 OSError, 08:21:18 NewConnectionError, 08:21:18 TimeoutError, 08:21:18 BaseSSLError, 08:21:18 CertificateError, 08:21:18 SSLError, 08:21:18 ) as e: 08:21:18 new_e: Exception = e 08:21:18 if isinstance(e, (BaseSSLError, CertificateError)): 08:21:18 new_e = SSLError(e) 08:21:18 # If the connection didn't successfully connect to it's proxy 08:21:18 # then there 08:21:18 if isinstance( 08:21:18 new_e, (OSError, NewConnectionError, TimeoutError, SSLError) 08:21:18 ) and (conn and conn.proxy and not conn.has_connected_to_proxy): 08:21:18 new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) 08:21:18 raise new_e 08:21:18 08:21:18 # conn.request() calls http.client.*.request, not the method in 08:21:18 # urllib3.request. It also calls makefile (recv) on the socket. 08:21:18 try: 08:21:18 conn.request( 08:21:18 method, 08:21:18 url, 08:21:18 body=body, 08:21:18 headers=headers, 08:21:18 chunked=chunked, 08:21:18 preload_content=preload_content, 08:21:18 decode_content=decode_content, 08:21:18 enforce_content_length=enforce_content_length, 08:21:18 ) 08:21:18 08:21:18 # We are swallowing BrokenPipeError (errno.EPIPE) since the server is 08:21:18 # legitimately able to close the connection after sending a valid response. 08:21:18 # With this behaviour, the received response is still readable. 08:21:18 except BrokenPipeError: 08:21:18 pass 08:21:18 except OSError as e: 08:21:18 # MacOS/Linux 08:21:18 # EPROTOTYPE and ECONNRESET are needed on macOS 08:21:18 # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ 08:21:18 # Condition changed later to emit ECONNRESET instead of only EPROTOTYPE. 08:21:18 if e.errno != errno.EPROTOTYPE and e.errno != errno.ECONNRESET: 08:21:18 raise 08:21:18 08:21:18 # Reset the timeout for the recv() on the socket 08:21:18 read_timeout = timeout_obj.read_timeout 08:21:18 08:21:18 if not conn.is_closed: 08:21:18 # In Python 3 socket.py will catch EAGAIN and return None when you 08:21:18 # try and read into the file pointer created by http.client, which 08:21:18 # instead raises a BadStatusLine exception. Instead of catching 08:21:18 # the exception and assuming all BadStatusLine exceptions are read 08:21:18 # timeouts, check for a zero timeout before making the request. 08:21:18 if read_timeout == 0: 08:21:18 raise ReadTimeoutError( 08:21:18 self, url, f"Read timed out. (read timeout={read_timeout})" 08:21:18 ) 08:21:18 conn.timeout = read_timeout 08:21:18 08:21:18 # Receive the response from the server 08:21:18 try: 08:21:18 > response = conn.getresponse() 08:21:18 ^^^^^^^^^^^^^^^^^^ 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:534: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connection.py:571: in getresponse 08:21:18 httplib_response = super().getresponse() 08:21:18 ^^^^^^^^^^^^^^^^^^^^^ 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:1395: in getresponse 08:21:18 response.begin() 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:325: in begin 08:21:18 version, status, reason = self._read_status() 08:21:18 ^^^^^^^^^^^^^^^^^^^ 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:286: in _read_status 08:21:18 line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 b = 08:21:18 08:21:18 def readinto(self, b): 08:21:18 """Read up to len(b) bytes into the writable buffer *b* and return 08:21:18 the number of bytes read. If the socket is non-blocking and no bytes 08:21:18 are available, None is returned. 08:21:18 08:21:18 If *b* is non-empty, a 0 return value indicates that the connection 08:21:18 was shutdown at the other end. 08:21:18 """ 08:21:18 self._checkClosed() 08:21:18 self._checkReadable() 08:21:18 if self._timeout_occurred: 08:21:18 raise OSError("cannot read from timed out object") 08:21:18 while True: 08:21:18 try: 08:21:18 > return self._sock.recv_into(b) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 E TimeoutError: timed out 08:21:18 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/socket.py:718: TimeoutError 08:21:18 08:21:18 The above exception was the direct cause of the following exception: 08:21:18 08:21:18 self = 08:21:18 request = , stream = False 08:21:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:21:18 proxies = OrderedDict() 08:21:18 08:21:18 def send( 08:21:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:21:18 ): 08:21:18 """Sends PreparedRequest object. Returns Response object. 08:21:18 08:21:18 :param request: The :class:`PreparedRequest ` being sent. 08:21:18 :param stream: (optional) Whether to stream the request content. 08:21:18 :param timeout: (optional) How long to wait for the server to send 08:21:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:21:18 read timeout) ` tuple. 08:21:18 :type timeout: float or tuple or urllib3 Timeout object 08:21:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:21:18 we verify the server's TLS certificate, or a string, in which case it 08:21:18 must be a path to a CA bundle to use 08:21:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:21:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:21:18 :rtype: requests.Response 08:21:18 """ 08:21:18 08:21:18 try: 08:21:18 conn = self.get_connection_with_tls_context( 08:21:18 request, verify, proxies=proxies, cert=cert 08:21:18 ) 08:21:18 except LocationValueError as e: 08:21:18 raise InvalidURL(e, request=request) 08:21:18 08:21:18 self.cert_verify(conn, request.url, verify, cert) 08:21:18 url = self.request_url(request, proxies) 08:21:18 self.add_headers( 08:21:18 request, 08:21:18 stream=stream, 08:21:18 timeout=timeout, 08:21:18 verify=verify, 08:21:18 cert=cert, 08:21:18 proxies=proxies, 08:21:18 ) 08:21:18 08:21:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:21:18 08:21:18 if isinstance(timeout, tuple): 08:21:18 try: 08:21:18 connect, read = timeout 08:21:18 timeout = TimeoutSauce(connect=connect, read=read) 08:21:18 except ValueError: 08:21:18 raise ValueError( 08:21:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:21:18 f"or a single float to set both timeouts to the same value." 08:21:18 ) 08:21:18 elif isinstance(timeout, TimeoutSauce): 08:21:18 pass 08:21:18 else: 08:21:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:21:18 08:21:18 try: 08:21:18 > resp = conn.urlopen( 08:21:18 method=request.method, 08:21:18 url=url, 08:21:18 body=request.body, 08:21:18 headers=request.headers, 08:21:18 redirect=False, 08:21:18 assert_same_host=False, 08:21:18 preload_content=False, 08:21:18 decode_content=False, 08:21:18 retries=self.max_retries, 08:21:18 timeout=timeout, 08:21:18 chunked=chunked, 08:21:18 ) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/adapters.py:644: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:841: in urlopen 08:21:18 retries = retries.increment( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/util/retry.py:490: in increment 08:21:18 raise reraise(type(error), error, _stacktrace) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/util/util.py:39: in reraise 08:21:18 raise value 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:787: in urlopen 08:21:18 response = self._make_request( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:536: in _make_request 08:21:18 self._raise_timeout(err=e, url=url, timeout_value=read_timeout) 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 err = TimeoutError('timed out') 08:21:18 url = '/rests/operations/transportpce-device-renderer:service-path' 08:21:18 timeout_value = 30 08:21:18 08:21:18 def _raise_timeout( 08:21:18 self, 08:21:18 err: BaseSSLError | OSError | SocketTimeout, 08:21:18 url: str, 08:21:18 timeout_value: _TYPE_TIMEOUT | None, 08:21:18 ) -> None: 08:21:18 """Is the error actually a timeout? Will raise a ReadTimeout or pass""" 08:21:18 08:21:18 if isinstance(err, SocketTimeout): 08:21:18 > raise ReadTimeoutError( 08:21:18 self, url, f"Read timed out. (read timeout={timeout_value})" 08:21:18 ) from err 08:21:18 E urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=8184): Read timed out. (read timeout=30) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:367: ReadTimeoutError 08:21:18 08:21:18 During handling of the above exception, another exception occurred: 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_02_service_path_create_otuc2(self): 08:21:18 > response = test_utils.transportpce_api_rpc_request( 08:21:18 'transportpce-device-renderer', 'service-path', 08:21:18 { 08:21:18 'service-name': 'service_OTUC2', 08:21:18 'wave-number': '0', 08:21:18 'modulation-format': 'dp-qpsk', 08:21:18 'operation': 'create', 08:21:18 'nodes': [{'node-id': 'XPDR-A2', 'dest-tp': 'XPDR2-NETWORK1'}], 08:21:18 'center-freq': 196.1, 08:21:18 'nmc-width': 75, 08:21:18 'min-freq': 196.0375, 08:21:18 'max-freq': 196.125, 08:21:18 'lower-spectral-slot-number': 755, 08:21:18 'higher-spectral-slot-number': 768 08:21:18 }) 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:74: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 transportpce_tests/common/test_utils.py:751: in transportpce_api_rpc_request 08:21:18 response = post_request(url, data) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 transportpce_tests/common/test_utils.py:143: in post_request 08:21:18 return requests.request( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/api.py:59: in request 08:21:18 return session.request(method=method, url=url, **kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/sessions.py:589: in request 08:21:18 resp = self.send(prep, **send_kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/sessions.py:703: in send 08:21:18 r = adapter.send(request, **kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 request = , stream = False 08:21:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:21:18 proxies = OrderedDict() 08:21:18 08:21:18 def send( 08:21:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:21:18 ): 08:21:18 """Sends PreparedRequest object. Returns Response object. 08:21:18 08:21:18 :param request: The :class:`PreparedRequest ` being sent. 08:21:18 :param stream: (optional) Whether to stream the request content. 08:21:18 :param timeout: (optional) How long to wait for the server to send 08:21:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:21:18 read timeout) ` tuple. 08:21:18 :type timeout: float or tuple or urllib3 Timeout object 08:21:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:21:18 we verify the server's TLS certificate, or a string, in which case it 08:21:18 must be a path to a CA bundle to use 08:21:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:21:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:21:18 :rtype: requests.Response 08:21:18 """ 08:21:18 08:21:18 try: 08:21:18 conn = self.get_connection_with_tls_context( 08:21:18 request, verify, proxies=proxies, cert=cert 08:21:18 ) 08:21:18 except LocationValueError as e: 08:21:18 raise InvalidURL(e, request=request) 08:21:18 08:21:18 self.cert_verify(conn, request.url, verify, cert) 08:21:18 url = self.request_url(request, proxies) 08:21:18 self.add_headers( 08:21:18 request, 08:21:18 stream=stream, 08:21:18 timeout=timeout, 08:21:18 verify=verify, 08:21:18 cert=cert, 08:21:18 proxies=proxies, 08:21:18 ) 08:21:18 08:21:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:21:18 08:21:18 if isinstance(timeout, tuple): 08:21:18 try: 08:21:18 connect, read = timeout 08:21:18 timeout = TimeoutSauce(connect=connect, read=read) 08:21:18 except ValueError: 08:21:18 raise ValueError( 08:21:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:21:18 f"or a single float to set both timeouts to the same value." 08:21:18 ) 08:21:18 elif isinstance(timeout, TimeoutSauce): 08:21:18 pass 08:21:18 else: 08:21:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:21:18 08:21:18 try: 08:21:18 resp = conn.urlopen( 08:21:18 method=request.method, 08:21:18 url=url, 08:21:18 body=request.body, 08:21:18 headers=request.headers, 08:21:18 redirect=False, 08:21:18 assert_same_host=False, 08:21:18 preload_content=False, 08:21:18 decode_content=False, 08:21:18 retries=self.max_retries, 08:21:18 timeout=timeout, 08:21:18 chunked=chunked, 08:21:18 ) 08:21:18 08:21:18 except (ProtocolError, OSError) as err: 08:21:18 raise ConnectionError(err, request=request) 08:21:18 08:21:18 except MaxRetryError as e: 08:21:18 if isinstance(e.reason, ConnectTimeoutError): 08:21:18 # TODO: Remove this in 3.0.0: see #2811 08:21:18 if not isinstance(e.reason, NewConnectionError): 08:21:18 raise ConnectTimeout(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, ResponseError): 08:21:18 raise RetryError(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, _ProxyError): 08:21:18 raise ProxyError(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, _SSLError): 08:21:18 # This branch is for urllib3 v1.22 and later. 08:21:18 raise SSLError(e, request=request) 08:21:18 08:21:18 raise ConnectionError(e, request=request) 08:21:18 08:21:18 except ClosedPoolError as e: 08:21:18 raise ConnectionError(e, request=request) 08:21:18 08:21:18 except _ProxyError as e: 08:21:18 raise ProxyError(e) 08:21:18 08:21:18 except (_SSLError, _HTTPError) as e: 08:21:18 if isinstance(e, _SSLError): 08:21:18 # This branch is for urllib3 versions earlier than v1.22 08:21:18 raise SSLError(e, request=request) 08:21:18 elif isinstance(e, ReadTimeoutError): 08:21:18 > raise ReadTimeout(e, request=request) 08:21:18 E requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=8184): Read timed out. (read timeout=30) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/adapters.py:690: ReadTimeout 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_02_service_path_create_otuc2 08:21:18 _________ TestTransportPCEOtnRenderer.test_03_get_portmapping_network1 _________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_03_get_portmapping_network1(self): 08:21:18 response = test_utils.get_portmapping_node_attr("XPDR-A2", "mapping", "XPDR2-NETWORK1") 08:21:18 self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 self.NETWORK2_CHECK_DICT["supporting-otucn"] = "XPDR2-NETWORK1-OTUC2" 08:21:18 expected_sorted = test_utils.recursive_sort(self.NETWORK2_CHECK_DICT) 08:21:18 response_sorted = [ 08:21:18 test_utils.recursive_sort(item) for item in response['mapping'] 08:21:18 ] 08:21:18 > self.assertIn(expected_sorted, response_sorted) 08:21:18 E AssertionError: {'lcp-hash-val': 'LY9PxYJqUbw=', 'logical-connection-point': 'XPDR2-NETWORK1', 'port-admin-state': 'InService', 'port-direction': 'bidirectional', 'port-oper-state': 'InService', 'port-qual': 'switch-network', 'rate': '200', 'supported-interface-capability': ['org-openroadm-port-types:if-otsi-otsigroup'], 'supported-operational-mode': ['OR-W-100G-oFEC-31.6Gbd', 'OR-W-200G-oFEC-31.6Gbd'], 'supporting-circuit-pack-name': '1/2/2-PLUG-NET', 'supporting-otucn': 'XPDR2-NETWORK1-OTUC2', 'supporting-port': 'L1', 'xpdr-type': 'mpdr'} not found in [{'lcp-hash-val': 'LY9PxYJqUbw=', 'logical-connection-point': 'XPDR2-NETWORK1', 'port-admin-state': 'InService', 'port-direction': 'bidirectional', 'port-oper-state': 'InService', 'port-qual': 'switch-network', 'rate': '200', 'supported-interface-capability': ['org-openroadm-port-types:if-otsi-otsigroup'], 'supported-operational-mode': ['OR-W-100G-oFEC-31.6Gbd', 'OR-W-200G-oFEC-31.6Gbd'], 'supporting-circuit-pack-name': '1/2/2-PLUG-NET', 'supporting-port': 'L1', 'xpdr-type': 'mpdr'}] 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:105: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_03_get_portmapping_network1 08:21:18 ___________ TestTransportPCEOtnRenderer.test_04_check_interface_otsi ___________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_04_check_interface_otsi(self): 08:21:18 # pylint: disable=line-too-long 08:21:18 response = test_utils.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-755:768") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:110: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_04_check_interface_otsi 08:21:18 __________ TestTransportPCEOtnRenderer.test_05_check_interface_otsig ___________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_05_check_interface_otsig(self): 08:21:18 response = test_utils.check_node_attribute_request( 08:21:18 "XPDR-A2", "interface", "XPDR2-NETWORK1-OTSIGROUP-200G") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:135: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_05_check_interface_otsig 08:21:18 __________ TestTransportPCEOtnRenderer.test_06_check_interface_otuc2 ___________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_06_check_interface_otuc2(self): 08:21:18 response = test_utils.check_node_attribute_request( 08:21:18 "XPDR-A2", "interface", "XPDR2-NETWORK1-OTUC2") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:154: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_06_check_interface_otuc2 08:21:18 ______ TestTransportPCEOtnRenderer.test_07_otn_service_path_create_oduc2 _______ 08:21:18 08:21:18 self = 08:21:18 conn = 08:21:18 method = 'POST' 08:21:18 url = '/rests/operations/transportpce-device-renderer:otn-service-path' 08:21:18 body = '{"input": {"service-name": "service_ODUC2", "operation": "create", "service-rate": "200", "service-format": "ODU", "nodes": [{"node-id": "XPDR-A2", "network-tp": "XPDR2-NETWORK1"}]}}' 08:21:18 headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/json', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '182', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 08:21:18 retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) 08:21:18 timeout = Timeout(connect=30, read=30, total=None), chunked = False 08:21:18 response_conn = 08:21:18 preload_content = False, decode_content = False, enforce_content_length = True 08:21:18 08:21:18 def _make_request( 08:21:18 self, 08:21:18 conn: BaseHTTPConnection, 08:21:18 method: str, 08:21:18 url: str, 08:21:18 body: _TYPE_BODY | None = None, 08:21:18 headers: typing.Mapping[str, str] | None = None, 08:21:18 retries: Retry | None = None, 08:21:18 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 08:21:18 chunked: bool = False, 08:21:18 response_conn: BaseHTTPConnection | None = None, 08:21:18 preload_content: bool = True, 08:21:18 decode_content: bool = True, 08:21:18 enforce_content_length: bool = True, 08:21:18 ) -> BaseHTTPResponse: 08:21:18 """ 08:21:18 Perform a request on a given urllib connection object taken from our 08:21:18 pool. 08:21:18 08:21:18 :param conn: 08:21:18 a connection from one of our connection pools 08:21:18 08:21:18 :param method: 08:21:18 HTTP request method (such as GET, POST, PUT, etc.) 08:21:18 08:21:18 :param url: 08:21:18 The URL to perform the request on. 08:21:18 08:21:18 :param body: 08:21:18 Data to send in the request body, either :class:`str`, :class:`bytes`, 08:21:18 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 08:21:18 08:21:18 :param headers: 08:21:18 Dictionary of custom headers to send, such as User-Agent, 08:21:18 If-None-Match, etc. If None, pool headers are used. If provided, 08:21:18 these headers completely replace any pool-specific headers. 08:21:18 08:21:18 :param retries: 08:21:18 Configure the number of retries to allow before raising a 08:21:18 :class:`~urllib3.exceptions.MaxRetryError` exception. 08:21:18 08:21:18 Pass ``None`` to retry until you receive a response. Pass a 08:21:18 :class:`~urllib3.util.retry.Retry` object for fine-grained control 08:21:18 over different types of retries. 08:21:18 Pass an integer number to retry connection errors that many times, 08:21:18 but no other types of errors. Pass zero to never retry. 08:21:18 08:21:18 If ``False``, then retries are disabled and any exception is raised 08:21:18 immediately. Also, instead of raising a MaxRetryError on redirects, 08:21:18 the redirect response will be returned. 08:21:18 08:21:18 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 08:21:18 08:21:18 :param timeout: 08:21:18 If specified, overrides the default timeout for this one 08:21:18 request. It may be a float (in seconds) or an instance of 08:21:18 :class:`urllib3.util.Timeout`. 08:21:18 08:21:18 :param chunked: 08:21:18 If True, urllib3 will send the body using chunked transfer 08:21:18 encoding. Otherwise, urllib3 will send the body using the standard 08:21:18 content-length form. Defaults to False. 08:21:18 08:21:18 :param response_conn: 08:21:18 Set this to ``None`` if you will handle releasing the connection or 08:21:18 set the connection to have the response release it. 08:21:18 08:21:18 :param preload_content: 08:21:18 If True, the response's body will be preloaded during construction. 08:21:18 08:21:18 :param decode_content: 08:21:18 If True, will attempt to decode the body based on the 08:21:18 'content-encoding' header. 08:21:18 08:21:18 :param enforce_content_length: 08:21:18 Enforce content length checking. Body returned by server must match 08:21:18 value of Content-Length header, if present. Otherwise, raise error. 08:21:18 """ 08:21:18 self.num_requests += 1 08:21:18 08:21:18 timeout_obj = self._get_timeout(timeout) 08:21:18 timeout_obj.start_connect() 08:21:18 conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) 08:21:18 08:21:18 try: 08:21:18 # Trigger any extra validation we need to do. 08:21:18 try: 08:21:18 self._validate_conn(conn) 08:21:18 except (SocketTimeout, BaseSSLError) as e: 08:21:18 self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) 08:21:18 raise 08:21:18 08:21:18 # _validate_conn() starts the connection to an HTTPS proxy 08:21:18 # so we need to wrap errors with 'ProxyError' here too. 08:21:18 except ( 08:21:18 OSError, 08:21:18 NewConnectionError, 08:21:18 TimeoutError, 08:21:18 BaseSSLError, 08:21:18 CertificateError, 08:21:18 SSLError, 08:21:18 ) as e: 08:21:18 new_e: Exception = e 08:21:18 if isinstance(e, (BaseSSLError, CertificateError)): 08:21:18 new_e = SSLError(e) 08:21:18 # If the connection didn't successfully connect to it's proxy 08:21:18 # then there 08:21:18 if isinstance( 08:21:18 new_e, (OSError, NewConnectionError, TimeoutError, SSLError) 08:21:18 ) and (conn and conn.proxy and not conn.has_connected_to_proxy): 08:21:18 new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) 08:21:18 raise new_e 08:21:18 08:21:18 # conn.request() calls http.client.*.request, not the method in 08:21:18 # urllib3.request. It also calls makefile (recv) on the socket. 08:21:18 try: 08:21:18 conn.request( 08:21:18 method, 08:21:18 url, 08:21:18 body=body, 08:21:18 headers=headers, 08:21:18 chunked=chunked, 08:21:18 preload_content=preload_content, 08:21:18 decode_content=decode_content, 08:21:18 enforce_content_length=enforce_content_length, 08:21:18 ) 08:21:18 08:21:18 # We are swallowing BrokenPipeError (errno.EPIPE) since the server is 08:21:18 # legitimately able to close the connection after sending a valid response. 08:21:18 # With this behaviour, the received response is still readable. 08:21:18 except BrokenPipeError: 08:21:18 pass 08:21:18 except OSError as e: 08:21:18 # MacOS/Linux 08:21:18 # EPROTOTYPE and ECONNRESET are needed on macOS 08:21:18 # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ 08:21:18 # Condition changed later to emit ECONNRESET instead of only EPROTOTYPE. 08:21:18 if e.errno != errno.EPROTOTYPE and e.errno != errno.ECONNRESET: 08:21:18 raise 08:21:18 08:21:18 # Reset the timeout for the recv() on the socket 08:21:18 read_timeout = timeout_obj.read_timeout 08:21:18 08:21:18 if not conn.is_closed: 08:21:18 # In Python 3 socket.py will catch EAGAIN and return None when you 08:21:18 # try and read into the file pointer created by http.client, which 08:21:18 # instead raises a BadStatusLine exception. Instead of catching 08:21:18 # the exception and assuming all BadStatusLine exceptions are read 08:21:18 # timeouts, check for a zero timeout before making the request. 08:21:18 if read_timeout == 0: 08:21:18 raise ReadTimeoutError( 08:21:18 self, url, f"Read timed out. (read timeout={read_timeout})" 08:21:18 ) 08:21:18 conn.timeout = read_timeout 08:21:18 08:21:18 # Receive the response from the server 08:21:18 try: 08:21:18 > response = conn.getresponse() 08:21:18 ^^^^^^^^^^^^^^^^^^ 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:534: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connection.py:571: in getresponse 08:21:18 httplib_response = super().getresponse() 08:21:18 ^^^^^^^^^^^^^^^^^^^^^ 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:1395: in getresponse 08:21:18 response.begin() 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:325: in begin 08:21:18 version, status, reason = self._read_status() 08:21:18 ^^^^^^^^^^^^^^^^^^^ 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:286: in _read_status 08:21:18 line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 b = 08:21:18 08:21:18 def readinto(self, b): 08:21:18 """Read up to len(b) bytes into the writable buffer *b* and return 08:21:18 the number of bytes read. If the socket is non-blocking and no bytes 08:21:18 are available, None is returned. 08:21:18 08:21:18 If *b* is non-empty, a 0 return value indicates that the connection 08:21:18 was shutdown at the other end. 08:21:18 """ 08:21:18 self._checkClosed() 08:21:18 self._checkReadable() 08:21:18 if self._timeout_occurred: 08:21:18 raise OSError("cannot read from timed out object") 08:21:18 while True: 08:21:18 try: 08:21:18 > return self._sock.recv_into(b) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 E TimeoutError: timed out 08:21:18 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/socket.py:718: TimeoutError 08:21:18 08:21:18 The above exception was the direct cause of the following exception: 08:21:18 08:21:18 self = 08:21:18 request = , stream = False 08:21:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:21:18 proxies = OrderedDict() 08:21:18 08:21:18 def send( 08:21:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:21:18 ): 08:21:18 """Sends PreparedRequest object. Returns Response object. 08:21:18 08:21:18 :param request: The :class:`PreparedRequest ` being sent. 08:21:18 :param stream: (optional) Whether to stream the request content. 08:21:18 :param timeout: (optional) How long to wait for the server to send 08:21:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:21:18 read timeout) ` tuple. 08:21:18 :type timeout: float or tuple or urllib3 Timeout object 08:21:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:21:18 we verify the server's TLS certificate, or a string, in which case it 08:21:18 must be a path to a CA bundle to use 08:21:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:21:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:21:18 :rtype: requests.Response 08:21:18 """ 08:21:18 08:21:18 try: 08:21:18 conn = self.get_connection_with_tls_context( 08:21:18 request, verify, proxies=proxies, cert=cert 08:21:18 ) 08:21:18 except LocationValueError as e: 08:21:18 raise InvalidURL(e, request=request) 08:21:18 08:21:18 self.cert_verify(conn, request.url, verify, cert) 08:21:18 url = self.request_url(request, proxies) 08:21:18 self.add_headers( 08:21:18 request, 08:21:18 stream=stream, 08:21:18 timeout=timeout, 08:21:18 verify=verify, 08:21:18 cert=cert, 08:21:18 proxies=proxies, 08:21:18 ) 08:21:18 08:21:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:21:18 08:21:18 if isinstance(timeout, tuple): 08:21:18 try: 08:21:18 connect, read = timeout 08:21:18 timeout = TimeoutSauce(connect=connect, read=read) 08:21:18 except ValueError: 08:21:18 raise ValueError( 08:21:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:21:18 f"or a single float to set both timeouts to the same value." 08:21:18 ) 08:21:18 elif isinstance(timeout, TimeoutSauce): 08:21:18 pass 08:21:18 else: 08:21:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:21:18 08:21:18 try: 08:21:18 > resp = conn.urlopen( 08:21:18 method=request.method, 08:21:18 url=url, 08:21:18 body=request.body, 08:21:18 headers=request.headers, 08:21:18 redirect=False, 08:21:18 assert_same_host=False, 08:21:18 preload_content=False, 08:21:18 decode_content=False, 08:21:18 retries=self.max_retries, 08:21:18 timeout=timeout, 08:21:18 chunked=chunked, 08:21:18 ) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/adapters.py:644: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:841: in urlopen 08:21:18 retries = retries.increment( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/util/retry.py:490: in increment 08:21:18 raise reraise(type(error), error, _stacktrace) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/util/util.py:39: in reraise 08:21:18 raise value 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:787: in urlopen 08:21:18 response = self._make_request( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:536: in _make_request 08:21:18 self._raise_timeout(err=e, url=url, timeout_value=read_timeout) 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 err = TimeoutError('timed out') 08:21:18 url = '/rests/operations/transportpce-device-renderer:otn-service-path' 08:21:18 timeout_value = 30 08:21:18 08:21:18 def _raise_timeout( 08:21:18 self, 08:21:18 err: BaseSSLError | OSError | SocketTimeout, 08:21:18 url: str, 08:21:18 timeout_value: _TYPE_TIMEOUT | None, 08:21:18 ) -> None: 08:21:18 """Is the error actually a timeout? Will raise a ReadTimeout or pass""" 08:21:18 08:21:18 if isinstance(err, SocketTimeout): 08:21:18 > raise ReadTimeoutError( 08:21:18 self, url, f"Read timed out. (read timeout={timeout_value})" 08:21:18 ) from err 08:21:18 E urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=8184): Read timed out. (read timeout=30) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:367: ReadTimeoutError 08:21:18 08:21:18 During handling of the above exception, another exception occurred: 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_07_otn_service_path_create_oduc2(self): 08:21:18 > response = test_utils.transportpce_api_rpc_request( 08:21:18 'transportpce-device-renderer', 'otn-service-path', 08:21:18 { 08:21:18 'service-name': 'service_ODUC2', 08:21:18 'operation': 'create', 08:21:18 'service-rate': '200', 08:21:18 'service-format': 'ODU', 08:21:18 'nodes': [{'node-id': 'XPDR-A2', 'network-tp': 'XPDR2-NETWORK1'}] 08:21:18 }) 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:175: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 transportpce_tests/common/test_utils.py:751: in transportpce_api_rpc_request 08:21:18 response = post_request(url, data) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 transportpce_tests/common/test_utils.py:143: in post_request 08:21:18 return requests.request( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/api.py:59: in request 08:21:18 return session.request(method=method, url=url, **kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/sessions.py:589: in request 08:21:18 resp = self.send(prep, **send_kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/sessions.py:703: in send 08:21:18 r = adapter.send(request, **kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 request = , stream = False 08:21:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:21:18 proxies = OrderedDict() 08:21:18 08:21:18 def send( 08:21:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:21:18 ): 08:21:18 """Sends PreparedRequest object. Returns Response object. 08:21:18 08:21:18 :param request: The :class:`PreparedRequest ` being sent. 08:21:18 :param stream: (optional) Whether to stream the request content. 08:21:18 :param timeout: (optional) How long to wait for the server to send 08:21:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:21:18 read timeout) ` tuple. 08:21:18 :type timeout: float or tuple or urllib3 Timeout object 08:21:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:21:18 we verify the server's TLS certificate, or a string, in which case it 08:21:18 must be a path to a CA bundle to use 08:21:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:21:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:21:18 :rtype: requests.Response 08:21:18 """ 08:21:18 08:21:18 try: 08:21:18 conn = self.get_connection_with_tls_context( 08:21:18 request, verify, proxies=proxies, cert=cert 08:21:18 ) 08:21:18 except LocationValueError as e: 08:21:18 raise InvalidURL(e, request=request) 08:21:18 08:21:18 self.cert_verify(conn, request.url, verify, cert) 08:21:18 url = self.request_url(request, proxies) 08:21:18 self.add_headers( 08:21:18 request, 08:21:18 stream=stream, 08:21:18 timeout=timeout, 08:21:18 verify=verify, 08:21:18 cert=cert, 08:21:18 proxies=proxies, 08:21:18 ) 08:21:18 08:21:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:21:18 08:21:18 if isinstance(timeout, tuple): 08:21:18 try: 08:21:18 connect, read = timeout 08:21:18 timeout = TimeoutSauce(connect=connect, read=read) 08:21:18 except ValueError: 08:21:18 raise ValueError( 08:21:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:21:18 f"or a single float to set both timeouts to the same value." 08:21:18 ) 08:21:18 elif isinstance(timeout, TimeoutSauce): 08:21:18 pass 08:21:18 else: 08:21:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:21:18 08:21:18 try: 08:21:18 resp = conn.urlopen( 08:21:18 method=request.method, 08:21:18 url=url, 08:21:18 body=request.body, 08:21:18 headers=request.headers, 08:21:18 redirect=False, 08:21:18 assert_same_host=False, 08:21:18 preload_content=False, 08:21:18 decode_content=False, 08:21:18 retries=self.max_retries, 08:21:18 timeout=timeout, 08:21:18 chunked=chunked, 08:21:18 ) 08:21:18 08:21:18 except (ProtocolError, OSError) as err: 08:21:18 raise ConnectionError(err, request=request) 08:21:18 08:21:18 except MaxRetryError as e: 08:21:18 if isinstance(e.reason, ConnectTimeoutError): 08:21:18 # TODO: Remove this in 3.0.0: see #2811 08:21:18 if not isinstance(e.reason, NewConnectionError): 08:21:18 raise ConnectTimeout(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, ResponseError): 08:21:18 raise RetryError(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, _ProxyError): 08:21:18 raise ProxyError(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, _SSLError): 08:21:18 # This branch is for urllib3 v1.22 and later. 08:21:18 raise SSLError(e, request=request) 08:21:18 08:21:18 raise ConnectionError(e, request=request) 08:21:18 08:21:18 except ClosedPoolError as e: 08:21:18 raise ConnectionError(e, request=request) 08:21:18 08:21:18 except _ProxyError as e: 08:21:18 raise ProxyError(e) 08:21:18 08:21:18 except (_SSLError, _HTTPError) as e: 08:21:18 if isinstance(e, _SSLError): 08:21:18 # This branch is for urllib3 versions earlier than v1.22 08:21:18 raise SSLError(e, request=request) 08:21:18 elif isinstance(e, ReadTimeoutError): 08:21:18 > raise ReadTimeout(e, request=request) 08:21:18 E requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=8184): Read timed out. (read timeout=30) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/adapters.py:690: ReadTimeout 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_07_otn_service_path_create_oduc2 08:21:18 _________ TestTransportPCEOtnRenderer.test_08_get_portmapping_network1 _________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_08_get_portmapping_network1(self): 08:21:18 response = test_utils.get_portmapping_node_attr("XPDR-A2", "mapping", "XPDR2-NETWORK1") 08:21:18 self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 self.NETWORK2_CHECK_DICT["supporting-oducn"] = "XPDR2-NETWORK1-ODUC2" 08:21:18 expected_sorted = test_utils.recursive_sort(self.NETWORK2_CHECK_DICT) 08:21:18 response_sorted = [ 08:21:18 test_utils.recursive_sort(item) for item in response['mapping'] 08:21:18 ] 08:21:18 > self.assertIn(expected_sorted, response_sorted) 08:21:18 E AssertionError: {'lcp-hash-val': 'LY9PxYJqUbw=', 'logical-connection-point': 'XPDR2-NETWORK1', 'port-admin-state': 'InService', 'port-direction': 'bidirectional', 'port-oper-state': 'InService', 'port-qual': 'switch-network', 'rate': '200', 'supported-interface-capability': ['org-openroadm-port-types:if-otsi-otsigroup'], 'supported-operational-mode': ['OR-W-100G-oFEC-31.6Gbd', 'OR-W-200G-oFEC-31.6Gbd'], 'supporting-circuit-pack-name': '1/2/2-PLUG-NET', 'supporting-oducn': 'XPDR2-NETWORK1-ODUC2', 'supporting-otucn': 'XPDR2-NETWORK1-OTUC2', 'supporting-port': 'L1', 'xpdr-type': 'mpdr'} not found in [{'lcp-hash-val': 'LY9PxYJqUbw=', 'logical-connection-point': 'XPDR2-NETWORK1', 'port-admin-state': 'InService', 'port-direction': 'bidirectional', 'port-oper-state': 'InService', 'port-qual': 'switch-network', 'rate': '200', 'supported-interface-capability': ['org-openroadm-port-types:if-otsi-otsigroup'], 'supported-operational-mode': ['OR-W-100G-oFEC-31.6Gbd', 'OR-W-200G-oFEC-31.6Gbd'], 'supporting-circuit-pack-name': '1/2/2-PLUG-NET', 'supporting-port': 'L1', 'xpdr-type': 'mpdr'}] 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:198: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_08_get_portmapping_network1 08:21:18 __________ TestTransportPCEOtnRenderer.test_09_check_interface_oduc2 ___________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_09_check_interface_oduc2(self): 08:21:18 response = test_utils.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-ODUC2") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:202: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_09_check_interface_oduc2 08:21:18 ______ TestTransportPCEOtnRenderer.test_10_otn_service_path_create_100ge _______ 08:21:18 08:21:18 self = 08:21:18 conn = 08:21:18 method = 'POST' 08:21:18 url = '/rests/operations/transportpce-device-renderer:otn-service-path' 08:21:18 body = '{"input": {"service-name": "service_Ethernet", "operation": "create", "service-rate": "100", "service-format": "Ether...2-CLIENT1", "network-tp": "XPDR2-NETWORK1"}], "ethernet-encoding": "eth encode", "opucn-trib-slots": ["1.1", "1.20"]}}' 08:21:18 headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/json', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '292', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 08:21:18 retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) 08:21:18 timeout = Timeout(connect=30, read=30, total=None), chunked = False 08:21:18 response_conn = 08:21:18 preload_content = False, decode_content = False, enforce_content_length = True 08:21:18 08:21:18 def _make_request( 08:21:18 self, 08:21:18 conn: BaseHTTPConnection, 08:21:18 method: str, 08:21:18 url: str, 08:21:18 body: _TYPE_BODY | None = None, 08:21:18 headers: typing.Mapping[str, str] | None = None, 08:21:18 retries: Retry | None = None, 08:21:18 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 08:21:18 chunked: bool = False, 08:21:18 response_conn: BaseHTTPConnection | None = None, 08:21:18 preload_content: bool = True, 08:21:18 decode_content: bool = True, 08:21:18 enforce_content_length: bool = True, 08:21:18 ) -> BaseHTTPResponse: 08:21:18 """ 08:21:18 Perform a request on a given urllib connection object taken from our 08:21:18 pool. 08:21:18 08:21:18 :param conn: 08:21:18 a connection from one of our connection pools 08:21:18 08:21:18 :param method: 08:21:18 HTTP request method (such as GET, POST, PUT, etc.) 08:21:18 08:21:18 :param url: 08:21:18 The URL to perform the request on. 08:21:18 08:21:18 :param body: 08:21:18 Data to send in the request body, either :class:`str`, :class:`bytes`, 08:21:18 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 08:21:18 08:21:18 :param headers: 08:21:18 Dictionary of custom headers to send, such as User-Agent, 08:21:18 If-None-Match, etc. If None, pool headers are used. If provided, 08:21:18 these headers completely replace any pool-specific headers. 08:21:18 08:21:18 :param retries: 08:21:18 Configure the number of retries to allow before raising a 08:21:18 :class:`~urllib3.exceptions.MaxRetryError` exception. 08:21:18 08:21:18 Pass ``None`` to retry until you receive a response. Pass a 08:21:18 :class:`~urllib3.util.retry.Retry` object for fine-grained control 08:21:18 over different types of retries. 08:21:18 Pass an integer number to retry connection errors that many times, 08:21:18 but no other types of errors. Pass zero to never retry. 08:21:18 08:21:18 If ``False``, then retries are disabled and any exception is raised 08:21:18 immediately. Also, instead of raising a MaxRetryError on redirects, 08:21:18 the redirect response will be returned. 08:21:18 08:21:18 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 08:21:18 08:21:18 :param timeout: 08:21:18 If specified, overrides the default timeout for this one 08:21:18 request. It may be a float (in seconds) or an instance of 08:21:18 :class:`urllib3.util.Timeout`. 08:21:18 08:21:18 :param chunked: 08:21:18 If True, urllib3 will send the body using chunked transfer 08:21:18 encoding. Otherwise, urllib3 will send the body using the standard 08:21:18 content-length form. Defaults to False. 08:21:18 08:21:18 :param response_conn: 08:21:18 Set this to ``None`` if you will handle releasing the connection or 08:21:18 set the connection to have the response release it. 08:21:18 08:21:18 :param preload_content: 08:21:18 If True, the response's body will be preloaded during construction. 08:21:18 08:21:18 :param decode_content: 08:21:18 If True, will attempt to decode the body based on the 08:21:18 'content-encoding' header. 08:21:18 08:21:18 :param enforce_content_length: 08:21:18 Enforce content length checking. Body returned by server must match 08:21:18 value of Content-Length header, if present. Otherwise, raise error. 08:21:18 """ 08:21:18 self.num_requests += 1 08:21:18 08:21:18 timeout_obj = self._get_timeout(timeout) 08:21:18 timeout_obj.start_connect() 08:21:18 conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) 08:21:18 08:21:18 try: 08:21:18 # Trigger any extra validation we need to do. 08:21:18 try: 08:21:18 self._validate_conn(conn) 08:21:18 except (SocketTimeout, BaseSSLError) as e: 08:21:18 self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) 08:21:18 raise 08:21:18 08:21:18 # _validate_conn() starts the connection to an HTTPS proxy 08:21:18 # so we need to wrap errors with 'ProxyError' here too. 08:21:18 except ( 08:21:18 OSError, 08:21:18 NewConnectionError, 08:21:18 TimeoutError, 08:21:18 BaseSSLError, 08:21:18 CertificateError, 08:21:18 SSLError, 08:21:18 ) as e: 08:21:18 new_e: Exception = e 08:21:18 if isinstance(e, (BaseSSLError, CertificateError)): 08:21:18 new_e = SSLError(e) 08:21:18 # If the connection didn't successfully connect to it's proxy 08:21:18 # then there 08:21:18 if isinstance( 08:21:18 new_e, (OSError, NewConnectionError, TimeoutError, SSLError) 08:21:18 ) and (conn and conn.proxy and not conn.has_connected_to_proxy): 08:21:18 new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) 08:21:18 raise new_e 08:21:18 08:21:18 # conn.request() calls http.client.*.request, not the method in 08:21:18 # urllib3.request. It also calls makefile (recv) on the socket. 08:21:18 try: 08:21:18 conn.request( 08:21:18 method, 08:21:18 url, 08:21:18 body=body, 08:21:18 headers=headers, 08:21:18 chunked=chunked, 08:21:18 preload_content=preload_content, 08:21:18 decode_content=decode_content, 08:21:18 enforce_content_length=enforce_content_length, 08:21:18 ) 08:21:18 08:21:18 # We are swallowing BrokenPipeError (errno.EPIPE) since the server is 08:21:18 # legitimately able to close the connection after sending a valid response. 08:21:18 # With this behaviour, the received response is still readable. 08:21:18 except BrokenPipeError: 08:21:18 pass 08:21:18 except OSError as e: 08:21:18 # MacOS/Linux 08:21:18 # EPROTOTYPE and ECONNRESET are needed on macOS 08:21:18 # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ 08:21:18 # Condition changed later to emit ECONNRESET instead of only EPROTOTYPE. 08:21:18 if e.errno != errno.EPROTOTYPE and e.errno != errno.ECONNRESET: 08:21:18 raise 08:21:18 08:21:18 # Reset the timeout for the recv() on the socket 08:21:18 read_timeout = timeout_obj.read_timeout 08:21:18 08:21:18 if not conn.is_closed: 08:21:18 # In Python 3 socket.py will catch EAGAIN and return None when you 08:21:18 # try and read into the file pointer created by http.client, which 08:21:18 # instead raises a BadStatusLine exception. Instead of catching 08:21:18 # the exception and assuming all BadStatusLine exceptions are read 08:21:18 # timeouts, check for a zero timeout before making the request. 08:21:18 if read_timeout == 0: 08:21:18 raise ReadTimeoutError( 08:21:18 self, url, f"Read timed out. (read timeout={read_timeout})" 08:21:18 ) 08:21:18 conn.timeout = read_timeout 08:21:18 08:21:18 # Receive the response from the server 08:21:18 try: 08:21:18 > response = conn.getresponse() 08:21:18 ^^^^^^^^^^^^^^^^^^ 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:534: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connection.py:571: in getresponse 08:21:18 httplib_response = super().getresponse() 08:21:18 ^^^^^^^^^^^^^^^^^^^^^ 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:1395: in getresponse 08:21:18 response.begin() 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:325: in begin 08:21:18 version, status, reason = self._read_status() 08:21:18 ^^^^^^^^^^^^^^^^^^^ 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:286: in _read_status 08:21:18 line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 b = 08:21:18 08:21:18 def readinto(self, b): 08:21:18 """Read up to len(b) bytes into the writable buffer *b* and return 08:21:18 the number of bytes read. If the socket is non-blocking and no bytes 08:21:18 are available, None is returned. 08:21:18 08:21:18 If *b* is non-empty, a 0 return value indicates that the connection 08:21:18 was shutdown at the other end. 08:21:18 """ 08:21:18 self._checkClosed() 08:21:18 self._checkReadable() 08:21:18 if self._timeout_occurred: 08:21:18 raise OSError("cannot read from timed out object") 08:21:18 while True: 08:21:18 try: 08:21:18 > return self._sock.recv_into(b) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 E TimeoutError: timed out 08:21:18 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/socket.py:718: TimeoutError 08:21:18 08:21:18 The above exception was the direct cause of the following exception: 08:21:18 08:21:18 self = 08:21:18 request = , stream = False 08:21:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:21:18 proxies = OrderedDict() 08:21:18 08:21:18 def send( 08:21:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:21:18 ): 08:21:18 """Sends PreparedRequest object. Returns Response object. 08:21:18 08:21:18 :param request: The :class:`PreparedRequest ` being sent. 08:21:18 :param stream: (optional) Whether to stream the request content. 08:21:18 :param timeout: (optional) How long to wait for the server to send 08:21:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:21:18 read timeout) ` tuple. 08:21:18 :type timeout: float or tuple or urllib3 Timeout object 08:21:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:21:18 we verify the server's TLS certificate, or a string, in which case it 08:21:18 must be a path to a CA bundle to use 08:21:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:21:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:21:18 :rtype: requests.Response 08:21:18 """ 08:21:18 08:21:18 try: 08:21:18 conn = self.get_connection_with_tls_context( 08:21:18 request, verify, proxies=proxies, cert=cert 08:21:18 ) 08:21:18 except LocationValueError as e: 08:21:18 raise InvalidURL(e, request=request) 08:21:18 08:21:18 self.cert_verify(conn, request.url, verify, cert) 08:21:18 url = self.request_url(request, proxies) 08:21:18 self.add_headers( 08:21:18 request, 08:21:18 stream=stream, 08:21:18 timeout=timeout, 08:21:18 verify=verify, 08:21:18 cert=cert, 08:21:18 proxies=proxies, 08:21:18 ) 08:21:18 08:21:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:21:18 08:21:18 if isinstance(timeout, tuple): 08:21:18 try: 08:21:18 connect, read = timeout 08:21:18 timeout = TimeoutSauce(connect=connect, read=read) 08:21:18 except ValueError: 08:21:18 raise ValueError( 08:21:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:21:18 f"or a single float to set both timeouts to the same value." 08:21:18 ) 08:21:18 elif isinstance(timeout, TimeoutSauce): 08:21:18 pass 08:21:18 else: 08:21:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:21:18 08:21:18 try: 08:21:18 > resp = conn.urlopen( 08:21:18 method=request.method, 08:21:18 url=url, 08:21:18 body=request.body, 08:21:18 headers=request.headers, 08:21:18 redirect=False, 08:21:18 assert_same_host=False, 08:21:18 preload_content=False, 08:21:18 decode_content=False, 08:21:18 retries=self.max_retries, 08:21:18 timeout=timeout, 08:21:18 chunked=chunked, 08:21:18 ) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/adapters.py:644: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:841: in urlopen 08:21:18 retries = retries.increment( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/util/retry.py:490: in increment 08:21:18 raise reraise(type(error), error, _stacktrace) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/util/util.py:39: in reraise 08:21:18 raise value 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:787: in urlopen 08:21:18 response = self._make_request( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:536: in _make_request 08:21:18 self._raise_timeout(err=e, url=url, timeout_value=read_timeout) 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 err = TimeoutError('timed out') 08:21:18 url = '/rests/operations/transportpce-device-renderer:otn-service-path' 08:21:18 timeout_value = 30 08:21:18 08:21:18 def _raise_timeout( 08:21:18 self, 08:21:18 err: BaseSSLError | OSError | SocketTimeout, 08:21:18 url: str, 08:21:18 timeout_value: _TYPE_TIMEOUT | None, 08:21:18 ) -> None: 08:21:18 """Is the error actually a timeout? Will raise a ReadTimeout or pass""" 08:21:18 08:21:18 if isinstance(err, SocketTimeout): 08:21:18 > raise ReadTimeoutError( 08:21:18 self, url, f"Read timed out. (read timeout={timeout_value})" 08:21:18 ) from err 08:21:18 E urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=8184): Read timed out. (read timeout=30) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:367: ReadTimeoutError 08:21:18 08:21:18 During handling of the above exception, another exception occurred: 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_10_otn_service_path_create_100ge(self): 08:21:18 > response = test_utils.transportpce_api_rpc_request( 08:21:18 'transportpce-device-renderer', 'otn-service-path', 08:21:18 { 08:21:18 'service-name': 'service_Ethernet', 08:21:18 'operation': 'create', 08:21:18 'service-rate': '100', 08:21:18 'service-format': 'Ethernet', 08:21:18 'nodes': [{'node-id': 'XPDR-A2', 'client-tp': 'XPDR2-CLIENT1', 'network-tp': 'XPDR2-NETWORK1'}], 08:21:18 'ethernet-encoding': 'eth encode', 08:21:18 'opucn-trib-slots': ['1.1', '1.20'] 08:21:18 }) 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:232: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 transportpce_tests/common/test_utils.py:751: in transportpce_api_rpc_request 08:21:18 response = post_request(url, data) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 transportpce_tests/common/test_utils.py:143: in post_request 08:21:18 return requests.request( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/api.py:59: in request 08:21:18 return session.request(method=method, url=url, **kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/sessions.py:589: in request 08:21:18 resp = self.send(prep, **send_kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/sessions.py:703: in send 08:21:18 r = adapter.send(request, **kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 request = , stream = False 08:21:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:21:18 proxies = OrderedDict() 08:21:18 08:21:18 def send( 08:21:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:21:18 ): 08:21:18 """Sends PreparedRequest object. Returns Response object. 08:21:18 08:21:18 :param request: The :class:`PreparedRequest ` being sent. 08:21:18 :param stream: (optional) Whether to stream the request content. 08:21:18 :param timeout: (optional) How long to wait for the server to send 08:21:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:21:18 read timeout) ` tuple. 08:21:18 :type timeout: float or tuple or urllib3 Timeout object 08:21:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:21:18 we verify the server's TLS certificate, or a string, in which case it 08:21:18 must be a path to a CA bundle to use 08:21:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:21:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:21:18 :rtype: requests.Response 08:21:18 """ 08:21:18 08:21:18 try: 08:21:18 conn = self.get_connection_with_tls_context( 08:21:18 request, verify, proxies=proxies, cert=cert 08:21:18 ) 08:21:18 except LocationValueError as e: 08:21:18 raise InvalidURL(e, request=request) 08:21:18 08:21:18 self.cert_verify(conn, request.url, verify, cert) 08:21:18 url = self.request_url(request, proxies) 08:21:18 self.add_headers( 08:21:18 request, 08:21:18 stream=stream, 08:21:18 timeout=timeout, 08:21:18 verify=verify, 08:21:18 cert=cert, 08:21:18 proxies=proxies, 08:21:18 ) 08:21:18 08:21:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:21:18 08:21:18 if isinstance(timeout, tuple): 08:21:18 try: 08:21:18 connect, read = timeout 08:21:18 timeout = TimeoutSauce(connect=connect, read=read) 08:21:18 except ValueError: 08:21:18 raise ValueError( 08:21:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:21:18 f"or a single float to set both timeouts to the same value." 08:21:18 ) 08:21:18 elif isinstance(timeout, TimeoutSauce): 08:21:18 pass 08:21:18 else: 08:21:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:21:18 08:21:18 try: 08:21:18 resp = conn.urlopen( 08:21:18 method=request.method, 08:21:18 url=url, 08:21:18 body=request.body, 08:21:18 headers=request.headers, 08:21:18 redirect=False, 08:21:18 assert_same_host=False, 08:21:18 preload_content=False, 08:21:18 decode_content=False, 08:21:18 retries=self.max_retries, 08:21:18 timeout=timeout, 08:21:18 chunked=chunked, 08:21:18 ) 08:21:18 08:21:18 except (ProtocolError, OSError) as err: 08:21:18 raise ConnectionError(err, request=request) 08:21:18 08:21:18 except MaxRetryError as e: 08:21:18 if isinstance(e.reason, ConnectTimeoutError): 08:21:18 # TODO: Remove this in 3.0.0: see #2811 08:21:18 if not isinstance(e.reason, NewConnectionError): 08:21:18 raise ConnectTimeout(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, ResponseError): 08:21:18 raise RetryError(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, _ProxyError): 08:21:18 raise ProxyError(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, _SSLError): 08:21:18 # This branch is for urllib3 v1.22 and later. 08:21:18 raise SSLError(e, request=request) 08:21:18 08:21:18 raise ConnectionError(e, request=request) 08:21:18 08:21:18 except ClosedPoolError as e: 08:21:18 raise ConnectionError(e, request=request) 08:21:18 08:21:18 except _ProxyError as e: 08:21:18 raise ProxyError(e) 08:21:18 08:21:18 except (_SSLError, _HTTPError) as e: 08:21:18 if isinstance(e, _SSLError): 08:21:18 # This branch is for urllib3 versions earlier than v1.22 08:21:18 raise SSLError(e, request=request) 08:21:18 elif isinstance(e, ReadTimeoutError): 08:21:18 > raise ReadTimeout(e, request=request) 08:21:18 E requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=8184): Read timed out. (read timeout=30) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/adapters.py:690: ReadTimeout 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_10_otn_service_path_create_100ge 08:21:18 _______ TestTransportPCEOtnRenderer.test_11_check_interface_100ge_client _______ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_11_check_interface_100ge_client(self): 08:21:18 response = test_utils.check_node_attribute_request( 08:21:18 "XPDR-A2", "interface", "XPDR2-CLIENT1-ETHERNET-100G") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:257: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_11_check_interface_100ge_client 08:21:18 _______ TestTransportPCEOtnRenderer.test_12_check_interface_odu4_client ________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_12_check_interface_odu4_client(self): 08:21:18 response = test_utils.check_node_attribute_request( 08:21:18 "XPDR-A2", "interface", "XPDR2-CLIENT1-ODU4:service_Ethernet") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:274: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_12_check_interface_odu4_client 08:21:18 _______ TestTransportPCEOtnRenderer.test_13_check_interface_odu4_network _______ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_13_check_interface_odu4_network(self): 08:21:18 response = test_utils.check_node_attribute_request( 08:21:18 "XPDR-A2", "interface", "XPDR2-NETWORK1-ODU4:service_Ethernet") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:298: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_13_check_interface_odu4_network 08:21:18 _______ TestTransportPCEOtnRenderer.test_14_check_odu_connection_xpdra2 ________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_14_check_odu_connection_xpdra2(self): 08:21:18 response = test_utils.check_node_attribute_request( 08:21:18 "XPDR-A2", 08:21:18 "odu-connection", "XPDR2-CLIENT1-ODU4-x-XPDR2-NETWORK1-ODU4") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:329: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_14_check_odu_connection_xpdra2 08:21:18 ________ TestTransportPCEOtnRenderer.test_26_service_path_create_otuc3 _________ 08:21:18 08:21:18 self = 08:21:18 conn = 08:21:18 method = 'POST' 08:21:18 url = '/rests/operations/transportpce-device-renderer:service-path' 08:21:18 body = '{"input": {"service-name": "service_OTUC3", "wave-number": "0", "modulation-format": "dp-qam8", "operation": "create"...75, "min-freq": 196.0375, "max-freq": 196.125, "lower-spectral-slot-number": 755, "higher-spectral-slot-number": 768}}' 08:21:18 headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/json', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '336', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 08:21:18 retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) 08:21:18 timeout = Timeout(connect=30, read=30, total=None), chunked = False 08:21:18 response_conn = 08:21:18 preload_content = False, decode_content = False, enforce_content_length = True 08:21:18 08:21:18 def _make_request( 08:21:18 self, 08:21:18 conn: BaseHTTPConnection, 08:21:18 method: str, 08:21:18 url: str, 08:21:18 body: _TYPE_BODY | None = None, 08:21:18 headers: typing.Mapping[str, str] | None = None, 08:21:18 retries: Retry | None = None, 08:21:18 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 08:21:18 chunked: bool = False, 08:21:18 response_conn: BaseHTTPConnection | None = None, 08:21:18 preload_content: bool = True, 08:21:18 decode_content: bool = True, 08:21:18 enforce_content_length: bool = True, 08:21:18 ) -> BaseHTTPResponse: 08:21:18 """ 08:21:18 Perform a request on a given urllib connection object taken from our 08:21:18 pool. 08:21:18 08:21:18 :param conn: 08:21:18 a connection from one of our connection pools 08:21:18 08:21:18 :param method: 08:21:18 HTTP request method (such as GET, POST, PUT, etc.) 08:21:18 08:21:18 :param url: 08:21:18 The URL to perform the request on. 08:21:18 08:21:18 :param body: 08:21:18 Data to send in the request body, either :class:`str`, :class:`bytes`, 08:21:18 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 08:21:18 08:21:18 :param headers: 08:21:18 Dictionary of custom headers to send, such as User-Agent, 08:21:18 If-None-Match, etc. If None, pool headers are used. If provided, 08:21:18 these headers completely replace any pool-specific headers. 08:21:18 08:21:18 :param retries: 08:21:18 Configure the number of retries to allow before raising a 08:21:18 :class:`~urllib3.exceptions.MaxRetryError` exception. 08:21:18 08:21:18 Pass ``None`` to retry until you receive a response. Pass a 08:21:18 :class:`~urllib3.util.retry.Retry` object for fine-grained control 08:21:18 over different types of retries. 08:21:18 Pass an integer number to retry connection errors that many times, 08:21:18 but no other types of errors. Pass zero to never retry. 08:21:18 08:21:18 If ``False``, then retries are disabled and any exception is raised 08:21:18 immediately. Also, instead of raising a MaxRetryError on redirects, 08:21:18 the redirect response will be returned. 08:21:18 08:21:18 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 08:21:18 08:21:18 :param timeout: 08:21:18 If specified, overrides the default timeout for this one 08:21:18 request. It may be a float (in seconds) or an instance of 08:21:18 :class:`urllib3.util.Timeout`. 08:21:18 08:21:18 :param chunked: 08:21:18 If True, urllib3 will send the body using chunked transfer 08:21:18 encoding. Otherwise, urllib3 will send the body using the standard 08:21:18 content-length form. Defaults to False. 08:21:18 08:21:18 :param response_conn: 08:21:18 Set this to ``None`` if you will handle releasing the connection or 08:21:18 set the connection to have the response release it. 08:21:18 08:21:18 :param preload_content: 08:21:18 If True, the response's body will be preloaded during construction. 08:21:18 08:21:18 :param decode_content: 08:21:18 If True, will attempt to decode the body based on the 08:21:18 'content-encoding' header. 08:21:18 08:21:18 :param enforce_content_length: 08:21:18 Enforce content length checking. Body returned by server must match 08:21:18 value of Content-Length header, if present. Otherwise, raise error. 08:21:18 """ 08:21:18 self.num_requests += 1 08:21:18 08:21:18 timeout_obj = self._get_timeout(timeout) 08:21:18 timeout_obj.start_connect() 08:21:18 conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) 08:21:18 08:21:18 try: 08:21:18 # Trigger any extra validation we need to do. 08:21:18 try: 08:21:18 self._validate_conn(conn) 08:21:18 except (SocketTimeout, BaseSSLError) as e: 08:21:18 self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) 08:21:18 raise 08:21:18 08:21:18 # _validate_conn() starts the connection to an HTTPS proxy 08:21:18 # so we need to wrap errors with 'ProxyError' here too. 08:21:18 except ( 08:21:18 OSError, 08:21:18 NewConnectionError, 08:21:18 TimeoutError, 08:21:18 BaseSSLError, 08:21:18 CertificateError, 08:21:18 SSLError, 08:21:18 ) as e: 08:21:18 new_e: Exception = e 08:21:18 if isinstance(e, (BaseSSLError, CertificateError)): 08:21:18 new_e = SSLError(e) 08:21:18 # If the connection didn't successfully connect to it's proxy 08:21:18 # then there 08:21:18 if isinstance( 08:21:18 new_e, (OSError, NewConnectionError, TimeoutError, SSLError) 08:21:18 ) and (conn and conn.proxy and not conn.has_connected_to_proxy): 08:21:18 new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) 08:21:18 raise new_e 08:21:18 08:21:18 # conn.request() calls http.client.*.request, not the method in 08:21:18 # urllib3.request. It also calls makefile (recv) on the socket. 08:21:18 try: 08:21:18 conn.request( 08:21:18 method, 08:21:18 url, 08:21:18 body=body, 08:21:18 headers=headers, 08:21:18 chunked=chunked, 08:21:18 preload_content=preload_content, 08:21:18 decode_content=decode_content, 08:21:18 enforce_content_length=enforce_content_length, 08:21:18 ) 08:21:18 08:21:18 # We are swallowing BrokenPipeError (errno.EPIPE) since the server is 08:21:18 # legitimately able to close the connection after sending a valid response. 08:21:18 # With this behaviour, the received response is still readable. 08:21:18 except BrokenPipeError: 08:21:18 pass 08:21:18 except OSError as e: 08:21:18 # MacOS/Linux 08:21:18 # EPROTOTYPE and ECONNRESET are needed on macOS 08:21:18 # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ 08:21:18 # Condition changed later to emit ECONNRESET instead of only EPROTOTYPE. 08:21:18 if e.errno != errno.EPROTOTYPE and e.errno != errno.ECONNRESET: 08:21:18 raise 08:21:18 08:21:18 # Reset the timeout for the recv() on the socket 08:21:18 read_timeout = timeout_obj.read_timeout 08:21:18 08:21:18 if not conn.is_closed: 08:21:18 # In Python 3 socket.py will catch EAGAIN and return None when you 08:21:18 # try and read into the file pointer created by http.client, which 08:21:18 # instead raises a BadStatusLine exception. Instead of catching 08:21:18 # the exception and assuming all BadStatusLine exceptions are read 08:21:18 # timeouts, check for a zero timeout before making the request. 08:21:18 if read_timeout == 0: 08:21:18 raise ReadTimeoutError( 08:21:18 self, url, f"Read timed out. (read timeout={read_timeout})" 08:21:18 ) 08:21:18 conn.timeout = read_timeout 08:21:18 08:21:18 # Receive the response from the server 08:21:18 try: 08:21:18 > response = conn.getresponse() 08:21:18 ^^^^^^^^^^^^^^^^^^ 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:534: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connection.py:571: in getresponse 08:21:18 httplib_response = super().getresponse() 08:21:18 ^^^^^^^^^^^^^^^^^^^^^ 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:1395: in getresponse 08:21:18 response.begin() 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:325: in begin 08:21:18 version, status, reason = self._read_status() 08:21:18 ^^^^^^^^^^^^^^^^^^^ 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:286: in _read_status 08:21:18 line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 b = 08:21:18 08:21:18 def readinto(self, b): 08:21:18 """Read up to len(b) bytes into the writable buffer *b* and return 08:21:18 the number of bytes read. If the socket is non-blocking and no bytes 08:21:18 are available, None is returned. 08:21:18 08:21:18 If *b* is non-empty, a 0 return value indicates that the connection 08:21:18 was shutdown at the other end. 08:21:18 """ 08:21:18 self._checkClosed() 08:21:18 self._checkReadable() 08:21:18 if self._timeout_occurred: 08:21:18 raise OSError("cannot read from timed out object") 08:21:18 while True: 08:21:18 try: 08:21:18 > return self._sock.recv_into(b) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 E TimeoutError: timed out 08:21:18 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/socket.py:718: TimeoutError 08:21:18 08:21:18 The above exception was the direct cause of the following exception: 08:21:18 08:21:18 self = 08:21:18 request = , stream = False 08:21:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:21:18 proxies = OrderedDict() 08:21:18 08:21:18 def send( 08:21:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:21:18 ): 08:21:18 """Sends PreparedRequest object. Returns Response object. 08:21:18 08:21:18 :param request: The :class:`PreparedRequest ` being sent. 08:21:18 :param stream: (optional) Whether to stream the request content. 08:21:18 :param timeout: (optional) How long to wait for the server to send 08:21:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:21:18 read timeout) ` tuple. 08:21:18 :type timeout: float or tuple or urllib3 Timeout object 08:21:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:21:18 we verify the server's TLS certificate, or a string, in which case it 08:21:18 must be a path to a CA bundle to use 08:21:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:21:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:21:18 :rtype: requests.Response 08:21:18 """ 08:21:18 08:21:18 try: 08:21:18 conn = self.get_connection_with_tls_context( 08:21:18 request, verify, proxies=proxies, cert=cert 08:21:18 ) 08:21:18 except LocationValueError as e: 08:21:18 raise InvalidURL(e, request=request) 08:21:18 08:21:18 self.cert_verify(conn, request.url, verify, cert) 08:21:18 url = self.request_url(request, proxies) 08:21:18 self.add_headers( 08:21:18 request, 08:21:18 stream=stream, 08:21:18 timeout=timeout, 08:21:18 verify=verify, 08:21:18 cert=cert, 08:21:18 proxies=proxies, 08:21:18 ) 08:21:18 08:21:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:21:18 08:21:18 if isinstance(timeout, tuple): 08:21:18 try: 08:21:18 connect, read = timeout 08:21:18 timeout = TimeoutSauce(connect=connect, read=read) 08:21:18 except ValueError: 08:21:18 raise ValueError( 08:21:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:21:18 f"or a single float to set both timeouts to the same value." 08:21:18 ) 08:21:18 elif isinstance(timeout, TimeoutSauce): 08:21:18 pass 08:21:18 else: 08:21:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:21:18 08:21:18 try: 08:21:18 > resp = conn.urlopen( 08:21:18 method=request.method, 08:21:18 url=url, 08:21:18 body=request.body, 08:21:18 headers=request.headers, 08:21:18 redirect=False, 08:21:18 assert_same_host=False, 08:21:18 preload_content=False, 08:21:18 decode_content=False, 08:21:18 retries=self.max_retries, 08:21:18 timeout=timeout, 08:21:18 chunked=chunked, 08:21:18 ) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/adapters.py:644: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:841: in urlopen 08:21:18 retries = retries.increment( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/util/retry.py:490: in increment 08:21:18 raise reraise(type(error), error, _stacktrace) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/util/util.py:39: in reraise 08:21:18 raise value 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:787: in urlopen 08:21:18 response = self._make_request( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:536: in _make_request 08:21:18 self._raise_timeout(err=e, url=url, timeout_value=read_timeout) 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 err = TimeoutError('timed out') 08:21:18 url = '/rests/operations/transportpce-device-renderer:service-path' 08:21:18 timeout_value = 30 08:21:18 08:21:18 def _raise_timeout( 08:21:18 self, 08:21:18 err: BaseSSLError | OSError | SocketTimeout, 08:21:18 url: str, 08:21:18 timeout_value: _TYPE_TIMEOUT | None, 08:21:18 ) -> None: 08:21:18 """Is the error actually a timeout? Will raise a ReadTimeout or pass""" 08:21:18 08:21:18 if isinstance(err, SocketTimeout): 08:21:18 > raise ReadTimeoutError( 08:21:18 self, url, f"Read timed out. (read timeout={timeout_value})" 08:21:18 ) from err 08:21:18 E urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=8184): Read timed out. (read timeout=30) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:367: ReadTimeoutError 08:21:18 08:21:18 During handling of the above exception, another exception occurred: 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_26_service_path_create_otuc3(self): 08:21:18 > response = test_utils.transportpce_api_rpc_request( 08:21:18 'transportpce-device-renderer', 'service-path', 08:21:18 { 08:21:18 'service-name': 'service_OTUC3', 08:21:18 'wave-number': '0', 08:21:18 'modulation-format': 'dp-qam8', 08:21:18 'operation': 'create', 08:21:18 'nodes': [{'node-id': 'XPDR-A2', 'dest-tp': 'XPDR2-NETWORK1'}], 08:21:18 'center-freq': 196.1, 08:21:18 'nmc-width': 75, 08:21:18 'min-freq': 196.0375, 08:21:18 'max-freq': 196.125, 08:21:18 'lower-spectral-slot-number': 755, 08:21:18 'higher-spectral-slot-number': 768 08:21:18 }) 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:447: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 transportpce_tests/common/test_utils.py:751: in transportpce_api_rpc_request 08:21:18 response = post_request(url, data) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 transportpce_tests/common/test_utils.py:143: in post_request 08:21:18 return requests.request( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/api.py:59: in request 08:21:18 return session.request(method=method, url=url, **kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/sessions.py:589: in request 08:21:18 resp = self.send(prep, **send_kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/sessions.py:703: in send 08:21:18 r = adapter.send(request, **kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 request = , stream = False 08:21:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:21:18 proxies = OrderedDict() 08:21:18 08:21:18 def send( 08:21:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:21:18 ): 08:21:18 """Sends PreparedRequest object. Returns Response object. 08:21:18 08:21:18 :param request: The :class:`PreparedRequest ` being sent. 08:21:18 :param stream: (optional) Whether to stream the request content. 08:21:18 :param timeout: (optional) How long to wait for the server to send 08:21:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:21:18 read timeout) ` tuple. 08:21:18 :type timeout: float or tuple or urllib3 Timeout object 08:21:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:21:18 we verify the server's TLS certificate, or a string, in which case it 08:21:18 must be a path to a CA bundle to use 08:21:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:21:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:21:18 :rtype: requests.Response 08:21:18 """ 08:21:18 08:21:18 try: 08:21:18 conn = self.get_connection_with_tls_context( 08:21:18 request, verify, proxies=proxies, cert=cert 08:21:18 ) 08:21:18 except LocationValueError as e: 08:21:18 raise InvalidURL(e, request=request) 08:21:18 08:21:18 self.cert_verify(conn, request.url, verify, cert) 08:21:18 url = self.request_url(request, proxies) 08:21:18 self.add_headers( 08:21:18 request, 08:21:18 stream=stream, 08:21:18 timeout=timeout, 08:21:18 verify=verify, 08:21:18 cert=cert, 08:21:18 proxies=proxies, 08:21:18 ) 08:21:18 08:21:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:21:18 08:21:18 if isinstance(timeout, tuple): 08:21:18 try: 08:21:18 connect, read = timeout 08:21:18 timeout = TimeoutSauce(connect=connect, read=read) 08:21:18 except ValueError: 08:21:18 raise ValueError( 08:21:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:21:18 f"or a single float to set both timeouts to the same value." 08:21:18 ) 08:21:18 elif isinstance(timeout, TimeoutSauce): 08:21:18 pass 08:21:18 else: 08:21:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:21:18 08:21:18 try: 08:21:18 resp = conn.urlopen( 08:21:18 method=request.method, 08:21:18 url=url, 08:21:18 body=request.body, 08:21:18 headers=request.headers, 08:21:18 redirect=False, 08:21:18 assert_same_host=False, 08:21:18 preload_content=False, 08:21:18 decode_content=False, 08:21:18 retries=self.max_retries, 08:21:18 timeout=timeout, 08:21:18 chunked=chunked, 08:21:18 ) 08:21:18 08:21:18 except (ProtocolError, OSError) as err: 08:21:18 raise ConnectionError(err, request=request) 08:21:18 08:21:18 except MaxRetryError as e: 08:21:18 if isinstance(e.reason, ConnectTimeoutError): 08:21:18 # TODO: Remove this in 3.0.0: see #2811 08:21:18 if not isinstance(e.reason, NewConnectionError): 08:21:18 raise ConnectTimeout(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, ResponseError): 08:21:18 raise RetryError(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, _ProxyError): 08:21:18 raise ProxyError(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, _SSLError): 08:21:18 # This branch is for urllib3 v1.22 and later. 08:21:18 raise SSLError(e, request=request) 08:21:18 08:21:18 raise ConnectionError(e, request=request) 08:21:18 08:21:18 except ClosedPoolError as e: 08:21:18 raise ConnectionError(e, request=request) 08:21:18 08:21:18 except _ProxyError as e: 08:21:18 raise ProxyError(e) 08:21:18 08:21:18 except (_SSLError, _HTTPError) as e: 08:21:18 if isinstance(e, _SSLError): 08:21:18 # This branch is for urllib3 versions earlier than v1.22 08:21:18 raise SSLError(e, request=request) 08:21:18 elif isinstance(e, ReadTimeoutError): 08:21:18 > raise ReadTimeout(e, request=request) 08:21:18 E requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=8184): Read timed out. (read timeout=30) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/adapters.py:690: ReadTimeout 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_26_service_path_create_otuc3 08:21:18 _________ TestTransportPCEOtnRenderer.test_27_get_portmapping_network1 _________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_27_get_portmapping_network1(self): 08:21:18 response = test_utils.get_portmapping_node_attr("XPDR-A2", "mapping", "XPDR2-NETWORK1") 08:21:18 self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 self.NETWORK2_CHECK_DICT["supporting-otucn"] = "XPDR2-NETWORK1-OTUC3" 08:21:18 expected_sorted = test_utils.recursive_sort(self.NETWORK2_CHECK_DICT) 08:21:18 response_sorted = [ 08:21:18 test_utils.recursive_sort(item) for item in response['mapping'] 08:21:18 ] 08:21:18 > self.assertIn(expected_sorted, response_sorted) 08:21:18 E AssertionError: {'lcp-hash-val': 'LY9PxYJqUbw=', 'logical-connection-point': 'XPDR2-NETWORK1', 'port-admin-state': 'InService', 'port-direction': 'bidirectional', 'port-oper-state': 'InService', 'port-qual': 'switch-network', 'rate': '200', 'supported-interface-capability': ['org-openroadm-port-types:if-otsi-otsigroup'], 'supported-operational-mode': ['OR-W-100G-oFEC-31.6Gbd', 'OR-W-200G-oFEC-31.6Gbd'], 'supporting-circuit-pack-name': '1/2/2-PLUG-NET', 'supporting-otucn': 'XPDR2-NETWORK1-OTUC3', 'supporting-port': 'L1', 'xpdr-type': 'mpdr'} not found in [{'lcp-hash-val': 'LY9PxYJqUbw=', 'logical-connection-point': 'XPDR2-NETWORK1', 'port-admin-state': 'InService', 'port-direction': 'bidirectional', 'port-oper-state': 'InService', 'port-qual': 'switch-network', 'rate': '200', 'supported-interface-capability': ['org-openroadm-port-types:if-otsi-otsigroup'], 'supported-operational-mode': ['OR-W-100G-oFEC-31.6Gbd', 'OR-W-200G-oFEC-31.6Gbd'], 'supporting-circuit-pack-name': '1/2/2-PLUG-NET', 'supporting-port': 'L1', 'xpdr-type': 'mpdr'}] 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:481: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_27_get_portmapping_network1 08:21:18 ___________ TestTransportPCEOtnRenderer.test_28_check_interface_otsi ___________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_28_check_interface_otsi(self): 08:21:18 # pylint: disable=line-too-long 08:21:18 response = test_utils.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-755:768") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:486: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_28_check_interface_otsi 08:21:18 __________ TestTransportPCEOtnRenderer.test_29_check_interface_otsig ___________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_29_check_interface_otsig(self): 08:21:18 response = test_utils.check_node_attribute_request( 08:21:18 "XPDR-A2", "interface", "XPDR2-NETWORK1-OTSIGROUP-300G") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:512: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_29_check_interface_otsig 08:21:18 __________ TestTransportPCEOtnRenderer.test_30_check_interface_otuc3 ___________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_30_check_interface_otuc3(self): 08:21:18 response = test_utils.check_node_attribute_request( 08:21:18 "XPDR-A2", "interface", "XPDR2-NETWORK1-OTUC3") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:531: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_30_check_interface_otuc3 08:21:18 ______ TestTransportPCEOtnRenderer.test_31_otn_service_path_create_oduc3 _______ 08:21:18 08:21:18 self = 08:21:18 conn = 08:21:18 method = 'POST' 08:21:18 url = '/rests/operations/transportpce-device-renderer:otn-service-path' 08:21:18 body = '{"input": {"service-name": "service_ODUC3", "operation": "create", "service-rate": "300", "service-format": "ODU", "nodes": [{"node-id": "XPDR-A2", "network-tp": "XPDR2-NETWORK1"}]}}' 08:21:18 headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/json', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '182', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 08:21:18 retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) 08:21:18 timeout = Timeout(connect=30, read=30, total=None), chunked = False 08:21:18 response_conn = 08:21:18 preload_content = False, decode_content = False, enforce_content_length = True 08:21:18 08:21:18 def _make_request( 08:21:18 self, 08:21:18 conn: BaseHTTPConnection, 08:21:18 method: str, 08:21:18 url: str, 08:21:18 body: _TYPE_BODY | None = None, 08:21:18 headers: typing.Mapping[str, str] | None = None, 08:21:18 retries: Retry | None = None, 08:21:18 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 08:21:18 chunked: bool = False, 08:21:18 response_conn: BaseHTTPConnection | None = None, 08:21:18 preload_content: bool = True, 08:21:18 decode_content: bool = True, 08:21:18 enforce_content_length: bool = True, 08:21:18 ) -> BaseHTTPResponse: 08:21:18 """ 08:21:18 Perform a request on a given urllib connection object taken from our 08:21:18 pool. 08:21:18 08:21:18 :param conn: 08:21:18 a connection from one of our connection pools 08:21:18 08:21:18 :param method: 08:21:18 HTTP request method (such as GET, POST, PUT, etc.) 08:21:18 08:21:18 :param url: 08:21:18 The URL to perform the request on. 08:21:18 08:21:18 :param body: 08:21:18 Data to send in the request body, either :class:`str`, :class:`bytes`, 08:21:18 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 08:21:18 08:21:18 :param headers: 08:21:18 Dictionary of custom headers to send, such as User-Agent, 08:21:18 If-None-Match, etc. If None, pool headers are used. If provided, 08:21:18 these headers completely replace any pool-specific headers. 08:21:18 08:21:18 :param retries: 08:21:18 Configure the number of retries to allow before raising a 08:21:18 :class:`~urllib3.exceptions.MaxRetryError` exception. 08:21:18 08:21:18 Pass ``None`` to retry until you receive a response. Pass a 08:21:18 :class:`~urllib3.util.retry.Retry` object for fine-grained control 08:21:18 over different types of retries. 08:21:18 Pass an integer number to retry connection errors that many times, 08:21:18 but no other types of errors. Pass zero to never retry. 08:21:18 08:21:18 If ``False``, then retries are disabled and any exception is raised 08:21:18 immediately. Also, instead of raising a MaxRetryError on redirects, 08:21:18 the redirect response will be returned. 08:21:18 08:21:18 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 08:21:18 08:21:18 :param timeout: 08:21:18 If specified, overrides the default timeout for this one 08:21:18 request. It may be a float (in seconds) or an instance of 08:21:18 :class:`urllib3.util.Timeout`. 08:21:18 08:21:18 :param chunked: 08:21:18 If True, urllib3 will send the body using chunked transfer 08:21:18 encoding. Otherwise, urllib3 will send the body using the standard 08:21:18 content-length form. Defaults to False. 08:21:18 08:21:18 :param response_conn: 08:21:18 Set this to ``None`` if you will handle releasing the connection or 08:21:18 set the connection to have the response release it. 08:21:18 08:21:18 :param preload_content: 08:21:18 If True, the response's body will be preloaded during construction. 08:21:18 08:21:18 :param decode_content: 08:21:18 If True, will attempt to decode the body based on the 08:21:18 'content-encoding' header. 08:21:18 08:21:18 :param enforce_content_length: 08:21:18 Enforce content length checking. Body returned by server must match 08:21:18 value of Content-Length header, if present. Otherwise, raise error. 08:21:18 """ 08:21:18 self.num_requests += 1 08:21:18 08:21:18 timeout_obj = self._get_timeout(timeout) 08:21:18 timeout_obj.start_connect() 08:21:18 conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) 08:21:18 08:21:18 try: 08:21:18 # Trigger any extra validation we need to do. 08:21:18 try: 08:21:18 self._validate_conn(conn) 08:21:18 except (SocketTimeout, BaseSSLError) as e: 08:21:18 self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) 08:21:18 raise 08:21:18 08:21:18 # _validate_conn() starts the connection to an HTTPS proxy 08:21:18 # so we need to wrap errors with 'ProxyError' here too. 08:21:18 except ( 08:21:18 OSError, 08:21:18 NewConnectionError, 08:21:18 TimeoutError, 08:21:18 BaseSSLError, 08:21:18 CertificateError, 08:21:18 SSLError, 08:21:18 ) as e: 08:21:18 new_e: Exception = e 08:21:18 if isinstance(e, (BaseSSLError, CertificateError)): 08:21:18 new_e = SSLError(e) 08:21:18 # If the connection didn't successfully connect to it's proxy 08:21:18 # then there 08:21:18 if isinstance( 08:21:18 new_e, (OSError, NewConnectionError, TimeoutError, SSLError) 08:21:18 ) and (conn and conn.proxy and not conn.has_connected_to_proxy): 08:21:18 new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) 08:21:18 raise new_e 08:21:18 08:21:18 # conn.request() calls http.client.*.request, not the method in 08:21:18 # urllib3.request. It also calls makefile (recv) on the socket. 08:21:18 try: 08:21:18 conn.request( 08:21:18 method, 08:21:18 url, 08:21:18 body=body, 08:21:18 headers=headers, 08:21:18 chunked=chunked, 08:21:18 preload_content=preload_content, 08:21:18 decode_content=decode_content, 08:21:18 enforce_content_length=enforce_content_length, 08:21:18 ) 08:21:18 08:21:18 # We are swallowing BrokenPipeError (errno.EPIPE) since the server is 08:21:18 # legitimately able to close the connection after sending a valid response. 08:21:18 # With this behaviour, the received response is still readable. 08:21:18 except BrokenPipeError: 08:21:18 pass 08:21:18 except OSError as e: 08:21:18 # MacOS/Linux 08:21:18 # EPROTOTYPE and ECONNRESET are needed on macOS 08:21:18 # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ 08:21:18 # Condition changed later to emit ECONNRESET instead of only EPROTOTYPE. 08:21:18 if e.errno != errno.EPROTOTYPE and e.errno != errno.ECONNRESET: 08:21:18 raise 08:21:18 08:21:18 # Reset the timeout for the recv() on the socket 08:21:18 read_timeout = timeout_obj.read_timeout 08:21:18 08:21:18 if not conn.is_closed: 08:21:18 # In Python 3 socket.py will catch EAGAIN and return None when you 08:21:18 # try and read into the file pointer created by http.client, which 08:21:18 # instead raises a BadStatusLine exception. Instead of catching 08:21:18 # the exception and assuming all BadStatusLine exceptions are read 08:21:18 # timeouts, check for a zero timeout before making the request. 08:21:18 if read_timeout == 0: 08:21:18 raise ReadTimeoutError( 08:21:18 self, url, f"Read timed out. (read timeout={read_timeout})" 08:21:18 ) 08:21:18 conn.timeout = read_timeout 08:21:18 08:21:18 # Receive the response from the server 08:21:18 try: 08:21:18 > response = conn.getresponse() 08:21:18 ^^^^^^^^^^^^^^^^^^ 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:534: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connection.py:571: in getresponse 08:21:18 httplib_response = super().getresponse() 08:21:18 ^^^^^^^^^^^^^^^^^^^^^ 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:1395: in getresponse 08:21:18 response.begin() 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:325: in begin 08:21:18 version, status, reason = self._read_status() 08:21:18 ^^^^^^^^^^^^^^^^^^^ 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:286: in _read_status 08:21:18 line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 b = 08:21:18 08:21:18 def readinto(self, b): 08:21:18 """Read up to len(b) bytes into the writable buffer *b* and return 08:21:18 the number of bytes read. If the socket is non-blocking and no bytes 08:21:18 are available, None is returned. 08:21:18 08:21:18 If *b* is non-empty, a 0 return value indicates that the connection 08:21:18 was shutdown at the other end. 08:21:18 """ 08:21:18 self._checkClosed() 08:21:18 self._checkReadable() 08:21:18 if self._timeout_occurred: 08:21:18 raise OSError("cannot read from timed out object") 08:21:18 while True: 08:21:18 try: 08:21:18 > return self._sock.recv_into(b) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 E TimeoutError: timed out 08:21:18 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/socket.py:718: TimeoutError 08:21:18 08:21:18 The above exception was the direct cause of the following exception: 08:21:18 08:21:18 self = 08:21:18 request = , stream = False 08:21:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:21:18 proxies = OrderedDict() 08:21:18 08:21:18 def send( 08:21:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:21:18 ): 08:21:18 """Sends PreparedRequest object. Returns Response object. 08:21:18 08:21:18 :param request: The :class:`PreparedRequest ` being sent. 08:21:18 :param stream: (optional) Whether to stream the request content. 08:21:18 :param timeout: (optional) How long to wait for the server to send 08:21:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:21:18 read timeout) ` tuple. 08:21:18 :type timeout: float or tuple or urllib3 Timeout object 08:21:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:21:18 we verify the server's TLS certificate, or a string, in which case it 08:21:18 must be a path to a CA bundle to use 08:21:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:21:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:21:18 :rtype: requests.Response 08:21:18 """ 08:21:18 08:21:18 try: 08:21:18 conn = self.get_connection_with_tls_context( 08:21:18 request, verify, proxies=proxies, cert=cert 08:21:18 ) 08:21:18 except LocationValueError as e: 08:21:18 raise InvalidURL(e, request=request) 08:21:18 08:21:18 self.cert_verify(conn, request.url, verify, cert) 08:21:18 url = self.request_url(request, proxies) 08:21:18 self.add_headers( 08:21:18 request, 08:21:18 stream=stream, 08:21:18 timeout=timeout, 08:21:18 verify=verify, 08:21:18 cert=cert, 08:21:18 proxies=proxies, 08:21:18 ) 08:21:18 08:21:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:21:18 08:21:18 if isinstance(timeout, tuple): 08:21:18 try: 08:21:18 connect, read = timeout 08:21:18 timeout = TimeoutSauce(connect=connect, read=read) 08:21:18 except ValueError: 08:21:18 raise ValueError( 08:21:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:21:18 f"or a single float to set both timeouts to the same value." 08:21:18 ) 08:21:18 elif isinstance(timeout, TimeoutSauce): 08:21:18 pass 08:21:18 else: 08:21:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:21:18 08:21:18 try: 08:21:18 > resp = conn.urlopen( 08:21:18 method=request.method, 08:21:18 url=url, 08:21:18 body=request.body, 08:21:18 headers=request.headers, 08:21:18 redirect=False, 08:21:18 assert_same_host=False, 08:21:18 preload_content=False, 08:21:18 decode_content=False, 08:21:18 retries=self.max_retries, 08:21:18 timeout=timeout, 08:21:18 chunked=chunked, 08:21:18 ) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/adapters.py:644: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:841: in urlopen 08:21:18 retries = retries.increment( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/util/retry.py:490: in increment 08:21:18 raise reraise(type(error), error, _stacktrace) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/util/util.py:39: in reraise 08:21:18 raise value 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:787: in urlopen 08:21:18 response = self._make_request( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:536: in _make_request 08:21:18 self._raise_timeout(err=e, url=url, timeout_value=read_timeout) 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 err = TimeoutError('timed out') 08:21:18 url = '/rests/operations/transportpce-device-renderer:otn-service-path' 08:21:18 timeout_value = 30 08:21:18 08:21:18 def _raise_timeout( 08:21:18 self, 08:21:18 err: BaseSSLError | OSError | SocketTimeout, 08:21:18 url: str, 08:21:18 timeout_value: _TYPE_TIMEOUT | None, 08:21:18 ) -> None: 08:21:18 """Is the error actually a timeout? Will raise a ReadTimeout or pass""" 08:21:18 08:21:18 if isinstance(err, SocketTimeout): 08:21:18 > raise ReadTimeoutError( 08:21:18 self, url, f"Read timed out. (read timeout={timeout_value})" 08:21:18 ) from err 08:21:18 E urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=8184): Read timed out. (read timeout=30) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:367: ReadTimeoutError 08:21:18 08:21:18 During handling of the above exception, another exception occurred: 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_31_otn_service_path_create_oduc3(self): 08:21:18 > response = test_utils.transportpce_api_rpc_request( 08:21:18 'transportpce-device-renderer', 'otn-service-path', 08:21:18 { 08:21:18 'service-name': 'service_ODUC3', 08:21:18 'operation': 'create', 08:21:18 'service-rate': '300', 08:21:18 'service-format': 'ODU', 08:21:18 'nodes': [{'node-id': 'XPDR-A2', 'network-tp': 'XPDR2-NETWORK1'}] 08:21:18 }) 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:552: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 transportpce_tests/common/test_utils.py:751: in transportpce_api_rpc_request 08:21:18 response = post_request(url, data) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 transportpce_tests/common/test_utils.py:143: in post_request 08:21:18 return requests.request( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/api.py:59: in request 08:21:18 return session.request(method=method, url=url, **kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/sessions.py:589: in request 08:21:18 resp = self.send(prep, **send_kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/sessions.py:703: in send 08:21:18 r = adapter.send(request, **kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 request = , stream = False 08:21:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:21:18 proxies = OrderedDict() 08:21:18 08:21:18 def send( 08:21:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:21:18 ): 08:21:18 """Sends PreparedRequest object. Returns Response object. 08:21:18 08:21:18 :param request: The :class:`PreparedRequest ` being sent. 08:21:18 :param stream: (optional) Whether to stream the request content. 08:21:18 :param timeout: (optional) How long to wait for the server to send 08:21:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:21:18 read timeout) ` tuple. 08:21:18 :type timeout: float or tuple or urllib3 Timeout object 08:21:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:21:18 we verify the server's TLS certificate, or a string, in which case it 08:21:18 must be a path to a CA bundle to use 08:21:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:21:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:21:18 :rtype: requests.Response 08:21:18 """ 08:21:18 08:21:18 try: 08:21:18 conn = self.get_connection_with_tls_context( 08:21:18 request, verify, proxies=proxies, cert=cert 08:21:18 ) 08:21:18 except LocationValueError as e: 08:21:18 raise InvalidURL(e, request=request) 08:21:18 08:21:18 self.cert_verify(conn, request.url, verify, cert) 08:21:18 url = self.request_url(request, proxies) 08:21:18 self.add_headers( 08:21:18 request, 08:21:18 stream=stream, 08:21:18 timeout=timeout, 08:21:18 verify=verify, 08:21:18 cert=cert, 08:21:18 proxies=proxies, 08:21:18 ) 08:21:18 08:21:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:21:18 08:21:18 if isinstance(timeout, tuple): 08:21:18 try: 08:21:18 connect, read = timeout 08:21:18 timeout = TimeoutSauce(connect=connect, read=read) 08:21:18 except ValueError: 08:21:18 raise ValueError( 08:21:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:21:18 f"or a single float to set both timeouts to the same value." 08:21:18 ) 08:21:18 elif isinstance(timeout, TimeoutSauce): 08:21:18 pass 08:21:18 else: 08:21:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:21:18 08:21:18 try: 08:21:18 resp = conn.urlopen( 08:21:18 method=request.method, 08:21:18 url=url, 08:21:18 body=request.body, 08:21:18 headers=request.headers, 08:21:18 redirect=False, 08:21:18 assert_same_host=False, 08:21:18 preload_content=False, 08:21:18 decode_content=False, 08:21:18 retries=self.max_retries, 08:21:18 timeout=timeout, 08:21:18 chunked=chunked, 08:21:18 ) 08:21:18 08:21:18 except (ProtocolError, OSError) as err: 08:21:18 raise ConnectionError(err, request=request) 08:21:18 08:21:18 except MaxRetryError as e: 08:21:18 if isinstance(e.reason, ConnectTimeoutError): 08:21:18 # TODO: Remove this in 3.0.0: see #2811 08:21:18 if not isinstance(e.reason, NewConnectionError): 08:21:18 raise ConnectTimeout(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, ResponseError): 08:21:18 raise RetryError(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, _ProxyError): 08:21:18 raise ProxyError(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, _SSLError): 08:21:18 # This branch is for urllib3 v1.22 and later. 08:21:18 raise SSLError(e, request=request) 08:21:18 08:21:18 raise ConnectionError(e, request=request) 08:21:18 08:21:18 except ClosedPoolError as e: 08:21:18 raise ConnectionError(e, request=request) 08:21:18 08:21:18 except _ProxyError as e: 08:21:18 raise ProxyError(e) 08:21:18 08:21:18 except (_SSLError, _HTTPError) as e: 08:21:18 if isinstance(e, _SSLError): 08:21:18 # This branch is for urllib3 versions earlier than v1.22 08:21:18 raise SSLError(e, request=request) 08:21:18 elif isinstance(e, ReadTimeoutError): 08:21:18 > raise ReadTimeout(e, request=request) 08:21:18 E requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=8184): Read timed out. (read timeout=30) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/adapters.py:690: ReadTimeout 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_31_otn_service_path_create_oduc3 08:21:18 _________ TestTransportPCEOtnRenderer.test_32_get_portmapping_network1 _________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_32_get_portmapping_network1(self): 08:21:18 response = test_utils.get_portmapping_node_attr("XPDR-A2", "mapping", "XPDR2-NETWORK1") 08:21:18 self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 self.NETWORK2_CHECK_DICT["supporting-oducn"] = "XPDR2-NETWORK1-ODUC3" 08:21:18 expected_sorted = test_utils.recursive_sort(self.NETWORK2_CHECK_DICT) 08:21:18 response_sorted = [ 08:21:18 test_utils.recursive_sort(item) for item in response['mapping'] 08:21:18 ] 08:21:18 > self.assertIn(expected_sorted, response_sorted) 08:21:18 E AssertionError: {'lcp-hash-val': 'LY9PxYJqUbw=', 'logical-connection-point': 'XPDR2-NETWORK1', 'port-admin-state': 'InService', 'port-direction': 'bidirectional', 'port-oper-state': 'InService', 'port-qual': 'switch-network', 'rate': '200', 'supported-interface-capability': ['org-openroadm-port-types:if-otsi-otsigroup'], 'supported-operational-mode': ['OR-W-100G-oFEC-31.6Gbd', 'OR-W-200G-oFEC-31.6Gbd'], 'supporting-circuit-pack-name': '1/2/2-PLUG-NET', 'supporting-oducn': 'XPDR2-NETWORK1-ODUC3', 'supporting-otucn': 'XPDR2-NETWORK1-OTUC3', 'supporting-port': 'L1', 'xpdr-type': 'mpdr'} not found in [{'lcp-hash-val': 'LY9PxYJqUbw=', 'logical-connection-point': 'XPDR2-NETWORK1', 'port-admin-state': 'InService', 'port-direction': 'bidirectional', 'port-oper-state': 'InService', 'port-qual': 'switch-network', 'rate': '200', 'supported-interface-capability': ['org-openroadm-port-types:if-otsi-otsigroup'], 'supported-operational-mode': ['OR-W-100G-oFEC-31.6Gbd', 'OR-W-200G-oFEC-31.6Gbd'], 'supporting-circuit-pack-name': '1/2/2-PLUG-NET', 'supporting-port': 'L1', 'xpdr-type': 'mpdr'}] 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:575: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_32_get_portmapping_network1 08:21:18 __________ TestTransportPCEOtnRenderer.test_33_check_interface_oduc3 ___________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_33_check_interface_oduc3(self): 08:21:18 response = test_utils.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-ODUC3") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:579: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_33_check_interface_oduc3 08:21:18 ________ TestTransportPCEOtnRenderer.test_40_service_path_create_otuc4 _________ 08:21:18 08:21:18 self = 08:21:18 conn = 08:21:18 method = 'POST' 08:21:18 url = '/rests/operations/transportpce-device-renderer:service-path' 08:21:18 body = '{"input": {"service-name": "service_OTUC4", "wave-number": "0", "modulation-format": "dp-qam16", "operation": "create...75, "min-freq": 196.0375, "max-freq": 196.125, "lower-spectral-slot-number": 755, "higher-spectral-slot-number": 768}}' 08:21:18 headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/json', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '337', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 08:21:18 retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) 08:21:18 timeout = Timeout(connect=30, read=30, total=None), chunked = False 08:21:18 response_conn = 08:21:18 preload_content = False, decode_content = False, enforce_content_length = True 08:21:18 08:21:18 def _make_request( 08:21:18 self, 08:21:18 conn: BaseHTTPConnection, 08:21:18 method: str, 08:21:18 url: str, 08:21:18 body: _TYPE_BODY | None = None, 08:21:18 headers: typing.Mapping[str, str] | None = None, 08:21:18 retries: Retry | None = None, 08:21:18 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 08:21:18 chunked: bool = False, 08:21:18 response_conn: BaseHTTPConnection | None = None, 08:21:18 preload_content: bool = True, 08:21:18 decode_content: bool = True, 08:21:18 enforce_content_length: bool = True, 08:21:18 ) -> BaseHTTPResponse: 08:21:18 """ 08:21:18 Perform a request on a given urllib connection object taken from our 08:21:18 pool. 08:21:18 08:21:18 :param conn: 08:21:18 a connection from one of our connection pools 08:21:18 08:21:18 :param method: 08:21:18 HTTP request method (such as GET, POST, PUT, etc.) 08:21:18 08:21:18 :param url: 08:21:18 The URL to perform the request on. 08:21:18 08:21:18 :param body: 08:21:18 Data to send in the request body, either :class:`str`, :class:`bytes`, 08:21:18 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 08:21:18 08:21:18 :param headers: 08:21:18 Dictionary of custom headers to send, such as User-Agent, 08:21:18 If-None-Match, etc. If None, pool headers are used. If provided, 08:21:18 these headers completely replace any pool-specific headers. 08:21:18 08:21:18 :param retries: 08:21:18 Configure the number of retries to allow before raising a 08:21:18 :class:`~urllib3.exceptions.MaxRetryError` exception. 08:21:18 08:21:18 Pass ``None`` to retry until you receive a response. Pass a 08:21:18 :class:`~urllib3.util.retry.Retry` object for fine-grained control 08:21:18 over different types of retries. 08:21:18 Pass an integer number to retry connection errors that many times, 08:21:18 but no other types of errors. Pass zero to never retry. 08:21:18 08:21:18 If ``False``, then retries are disabled and any exception is raised 08:21:18 immediately. Also, instead of raising a MaxRetryError on redirects, 08:21:18 the redirect response will be returned. 08:21:18 08:21:18 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 08:21:18 08:21:18 :param timeout: 08:21:18 If specified, overrides the default timeout for this one 08:21:18 request. It may be a float (in seconds) or an instance of 08:21:18 :class:`urllib3.util.Timeout`. 08:21:18 08:21:18 :param chunked: 08:21:18 If True, urllib3 will send the body using chunked transfer 08:21:18 encoding. Otherwise, urllib3 will send the body using the standard 08:21:18 content-length form. Defaults to False. 08:21:18 08:21:18 :param response_conn: 08:21:18 Set this to ``None`` if you will handle releasing the connection or 08:21:18 set the connection to have the response release it. 08:21:18 08:21:18 :param preload_content: 08:21:18 If True, the response's body will be preloaded during construction. 08:21:18 08:21:18 :param decode_content: 08:21:18 If True, will attempt to decode the body based on the 08:21:18 'content-encoding' header. 08:21:18 08:21:18 :param enforce_content_length: 08:21:18 Enforce content length checking. Body returned by server must match 08:21:18 value of Content-Length header, if present. Otherwise, raise error. 08:21:18 """ 08:21:18 self.num_requests += 1 08:21:18 08:21:18 timeout_obj = self._get_timeout(timeout) 08:21:18 timeout_obj.start_connect() 08:21:18 conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) 08:21:18 08:21:18 try: 08:21:18 # Trigger any extra validation we need to do. 08:21:18 try: 08:21:18 self._validate_conn(conn) 08:21:18 except (SocketTimeout, BaseSSLError) as e: 08:21:18 self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) 08:21:18 raise 08:21:18 08:21:18 # _validate_conn() starts the connection to an HTTPS proxy 08:21:18 # so we need to wrap errors with 'ProxyError' here too. 08:21:18 except ( 08:21:18 OSError, 08:21:18 NewConnectionError, 08:21:18 TimeoutError, 08:21:18 BaseSSLError, 08:21:18 CertificateError, 08:21:18 SSLError, 08:21:18 ) as e: 08:21:18 new_e: Exception = e 08:21:18 if isinstance(e, (BaseSSLError, CertificateError)): 08:21:18 new_e = SSLError(e) 08:21:18 # If the connection didn't successfully connect to it's proxy 08:21:18 # then there 08:21:18 if isinstance( 08:21:18 new_e, (OSError, NewConnectionError, TimeoutError, SSLError) 08:21:18 ) and (conn and conn.proxy and not conn.has_connected_to_proxy): 08:21:18 new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) 08:21:18 raise new_e 08:21:18 08:21:18 # conn.request() calls http.client.*.request, not the method in 08:21:18 # urllib3.request. It also calls makefile (recv) on the socket. 08:21:18 try: 08:21:18 conn.request( 08:21:18 method, 08:21:18 url, 08:21:18 body=body, 08:21:18 headers=headers, 08:21:18 chunked=chunked, 08:21:18 preload_content=preload_content, 08:21:18 decode_content=decode_content, 08:21:18 enforce_content_length=enforce_content_length, 08:21:18 ) 08:21:18 08:21:18 # We are swallowing BrokenPipeError (errno.EPIPE) since the server is 08:21:18 # legitimately able to close the connection after sending a valid response. 08:21:18 # With this behaviour, the received response is still readable. 08:21:18 except BrokenPipeError: 08:21:18 pass 08:21:18 except OSError as e: 08:21:18 # MacOS/Linux 08:21:18 # EPROTOTYPE and ECONNRESET are needed on macOS 08:21:18 # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ 08:21:18 # Condition changed later to emit ECONNRESET instead of only EPROTOTYPE. 08:21:18 if e.errno != errno.EPROTOTYPE and e.errno != errno.ECONNRESET: 08:21:18 raise 08:21:18 08:21:18 # Reset the timeout for the recv() on the socket 08:21:18 read_timeout = timeout_obj.read_timeout 08:21:18 08:21:18 if not conn.is_closed: 08:21:18 # In Python 3 socket.py will catch EAGAIN and return None when you 08:21:18 # try and read into the file pointer created by http.client, which 08:21:18 # instead raises a BadStatusLine exception. Instead of catching 08:21:18 # the exception and assuming all BadStatusLine exceptions are read 08:21:18 # timeouts, check for a zero timeout before making the request. 08:21:18 if read_timeout == 0: 08:21:18 raise ReadTimeoutError( 08:21:18 self, url, f"Read timed out. (read timeout={read_timeout})" 08:21:18 ) 08:21:18 conn.timeout = read_timeout 08:21:18 08:21:18 # Receive the response from the server 08:21:18 try: 08:21:18 > response = conn.getresponse() 08:21:18 ^^^^^^^^^^^^^^^^^^ 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:534: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connection.py:571: in getresponse 08:21:18 httplib_response = super().getresponse() 08:21:18 ^^^^^^^^^^^^^^^^^^^^^ 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:1395: in getresponse 08:21:18 response.begin() 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:325: in begin 08:21:18 version, status, reason = self._read_status() 08:21:18 ^^^^^^^^^^^^^^^^^^^ 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:286: in _read_status 08:21:18 line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 b = 08:21:18 08:21:18 def readinto(self, b): 08:21:18 """Read up to len(b) bytes into the writable buffer *b* and return 08:21:18 the number of bytes read. If the socket is non-blocking and no bytes 08:21:18 are available, None is returned. 08:21:18 08:21:18 If *b* is non-empty, a 0 return value indicates that the connection 08:21:18 was shutdown at the other end. 08:21:18 """ 08:21:18 self._checkClosed() 08:21:18 self._checkReadable() 08:21:18 if self._timeout_occurred: 08:21:18 raise OSError("cannot read from timed out object") 08:21:18 while True: 08:21:18 try: 08:21:18 > return self._sock.recv_into(b) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 E TimeoutError: timed out 08:21:18 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/socket.py:718: TimeoutError 08:21:18 08:21:18 The above exception was the direct cause of the following exception: 08:21:18 08:21:18 self = 08:21:18 request = , stream = False 08:21:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:21:18 proxies = OrderedDict() 08:21:18 08:21:18 def send( 08:21:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:21:18 ): 08:21:18 """Sends PreparedRequest object. Returns Response object. 08:21:18 08:21:18 :param request: The :class:`PreparedRequest ` being sent. 08:21:18 :param stream: (optional) Whether to stream the request content. 08:21:18 :param timeout: (optional) How long to wait for the server to send 08:21:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:21:18 read timeout) ` tuple. 08:21:18 :type timeout: float or tuple or urllib3 Timeout object 08:21:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:21:18 we verify the server's TLS certificate, or a string, in which case it 08:21:18 must be a path to a CA bundle to use 08:21:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:21:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:21:18 :rtype: requests.Response 08:21:18 """ 08:21:18 08:21:18 try: 08:21:18 conn = self.get_connection_with_tls_context( 08:21:18 request, verify, proxies=proxies, cert=cert 08:21:18 ) 08:21:18 except LocationValueError as e: 08:21:18 raise InvalidURL(e, request=request) 08:21:18 08:21:18 self.cert_verify(conn, request.url, verify, cert) 08:21:18 url = self.request_url(request, proxies) 08:21:18 self.add_headers( 08:21:18 request, 08:21:18 stream=stream, 08:21:18 timeout=timeout, 08:21:18 verify=verify, 08:21:18 cert=cert, 08:21:18 proxies=proxies, 08:21:18 ) 08:21:18 08:21:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:21:18 08:21:18 if isinstance(timeout, tuple): 08:21:18 try: 08:21:18 connect, read = timeout 08:21:18 timeout = TimeoutSauce(connect=connect, read=read) 08:21:18 except ValueError: 08:21:18 raise ValueError( 08:21:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:21:18 f"or a single float to set both timeouts to the same value." 08:21:18 ) 08:21:18 elif isinstance(timeout, TimeoutSauce): 08:21:18 pass 08:21:18 else: 08:21:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:21:18 08:21:18 try: 08:21:18 > resp = conn.urlopen( 08:21:18 method=request.method, 08:21:18 url=url, 08:21:18 body=request.body, 08:21:18 headers=request.headers, 08:21:18 redirect=False, 08:21:18 assert_same_host=False, 08:21:18 preload_content=False, 08:21:18 decode_content=False, 08:21:18 retries=self.max_retries, 08:21:18 timeout=timeout, 08:21:18 chunked=chunked, 08:21:18 ) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/adapters.py:644: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:841: in urlopen 08:21:18 retries = retries.increment( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/util/retry.py:490: in increment 08:21:18 raise reraise(type(error), error, _stacktrace) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/util/util.py:39: in reraise 08:21:18 raise value 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:787: in urlopen 08:21:18 response = self._make_request( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:536: in _make_request 08:21:18 self._raise_timeout(err=e, url=url, timeout_value=read_timeout) 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 err = TimeoutError('timed out') 08:21:18 url = '/rests/operations/transportpce-device-renderer:service-path' 08:21:18 timeout_value = 30 08:21:18 08:21:18 def _raise_timeout( 08:21:18 self, 08:21:18 err: BaseSSLError | OSError | SocketTimeout, 08:21:18 url: str, 08:21:18 timeout_value: _TYPE_TIMEOUT | None, 08:21:18 ) -> None: 08:21:18 """Is the error actually a timeout? Will raise a ReadTimeout or pass""" 08:21:18 08:21:18 if isinstance(err, SocketTimeout): 08:21:18 > raise ReadTimeoutError( 08:21:18 self, url, f"Read timed out. (read timeout={timeout_value})" 08:21:18 ) from err 08:21:18 E urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=8184): Read timed out. (read timeout=30) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:367: ReadTimeoutError 08:21:18 08:21:18 During handling of the above exception, another exception occurred: 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_40_service_path_create_otuc4(self): 08:21:18 > response = test_utils.transportpce_api_rpc_request( 08:21:18 'transportpce-device-renderer', 'service-path', 08:21:18 { 08:21:18 'service-name': 'service_OTUC4', 08:21:18 'wave-number': '0', 08:21:18 'modulation-format': 'dp-qam16', 08:21:18 'operation': 'create', 08:21:18 'nodes': [{'node-id': 'XPDR-A2', 'dest-tp': 'XPDR2-NETWORK1'}], 08:21:18 'center-freq': 196.1, 08:21:18 'nmc-width': 75, 08:21:18 'min-freq': 196.0375, 08:21:18 'max-freq': 196.125, 08:21:18 'lower-spectral-slot-number': 755, 08:21:18 'higher-spectral-slot-number': 768 08:21:18 }) 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:675: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 transportpce_tests/common/test_utils.py:751: in transportpce_api_rpc_request 08:21:18 response = post_request(url, data) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 transportpce_tests/common/test_utils.py:143: in post_request 08:21:18 return requests.request( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/api.py:59: in request 08:21:18 return session.request(method=method, url=url, **kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/sessions.py:589: in request 08:21:18 resp = self.send(prep, **send_kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/sessions.py:703: in send 08:21:18 r = adapter.send(request, **kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 request = , stream = False 08:21:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:21:18 proxies = OrderedDict() 08:21:18 08:21:18 def send( 08:21:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:21:18 ): 08:21:18 """Sends PreparedRequest object. Returns Response object. 08:21:18 08:21:18 :param request: The :class:`PreparedRequest ` being sent. 08:21:18 :param stream: (optional) Whether to stream the request content. 08:21:18 :param timeout: (optional) How long to wait for the server to send 08:21:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:21:18 read timeout) ` tuple. 08:21:18 :type timeout: float or tuple or urllib3 Timeout object 08:21:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:21:18 we verify the server's TLS certificate, or a string, in which case it 08:21:18 must be a path to a CA bundle to use 08:21:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:21:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:21:18 :rtype: requests.Response 08:21:18 """ 08:21:18 08:21:18 try: 08:21:18 conn = self.get_connection_with_tls_context( 08:21:18 request, verify, proxies=proxies, cert=cert 08:21:18 ) 08:21:18 except LocationValueError as e: 08:21:18 raise InvalidURL(e, request=request) 08:21:18 08:21:18 self.cert_verify(conn, request.url, verify, cert) 08:21:18 url = self.request_url(request, proxies) 08:21:18 self.add_headers( 08:21:18 request, 08:21:18 stream=stream, 08:21:18 timeout=timeout, 08:21:18 verify=verify, 08:21:18 cert=cert, 08:21:18 proxies=proxies, 08:21:18 ) 08:21:18 08:21:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:21:18 08:21:18 if isinstance(timeout, tuple): 08:21:18 try: 08:21:18 connect, read = timeout 08:21:18 timeout = TimeoutSauce(connect=connect, read=read) 08:21:18 except ValueError: 08:21:18 raise ValueError( 08:21:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:21:18 f"or a single float to set both timeouts to the same value." 08:21:18 ) 08:21:18 elif isinstance(timeout, TimeoutSauce): 08:21:18 pass 08:21:18 else: 08:21:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:21:18 08:21:18 try: 08:21:18 resp = conn.urlopen( 08:21:18 method=request.method, 08:21:18 url=url, 08:21:18 body=request.body, 08:21:18 headers=request.headers, 08:21:18 redirect=False, 08:21:18 assert_same_host=False, 08:21:18 preload_content=False, 08:21:18 decode_content=False, 08:21:18 retries=self.max_retries, 08:21:18 timeout=timeout, 08:21:18 chunked=chunked, 08:21:18 ) 08:21:18 08:21:18 except (ProtocolError, OSError) as err: 08:21:18 raise ConnectionError(err, request=request) 08:21:18 08:21:18 except MaxRetryError as e: 08:21:18 if isinstance(e.reason, ConnectTimeoutError): 08:21:18 # TODO: Remove this in 3.0.0: see #2811 08:21:18 if not isinstance(e.reason, NewConnectionError): 08:21:18 raise ConnectTimeout(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, ResponseError): 08:21:18 raise RetryError(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, _ProxyError): 08:21:18 raise ProxyError(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, _SSLError): 08:21:18 # This branch is for urllib3 v1.22 and later. 08:21:18 raise SSLError(e, request=request) 08:21:18 08:21:18 raise ConnectionError(e, request=request) 08:21:18 08:21:18 except ClosedPoolError as e: 08:21:18 raise ConnectionError(e, request=request) 08:21:18 08:21:18 except _ProxyError as e: 08:21:18 raise ProxyError(e) 08:21:18 08:21:18 except (_SSLError, _HTTPError) as e: 08:21:18 if isinstance(e, _SSLError): 08:21:18 # This branch is for urllib3 versions earlier than v1.22 08:21:18 raise SSLError(e, request=request) 08:21:18 elif isinstance(e, ReadTimeoutError): 08:21:18 > raise ReadTimeout(e, request=request) 08:21:18 E requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=8184): Read timed out. (read timeout=30) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/adapters.py:690: ReadTimeout 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_40_service_path_create_otuc4 08:21:18 _________ TestTransportPCEOtnRenderer.test_41_get_portmapping_network1 _________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_41_get_portmapping_network1(self): 08:21:18 response = test_utils.get_portmapping_node_attr("XPDR-A2", "mapping", "XPDR2-NETWORK1") 08:21:18 self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 self.NETWORK2_CHECK_DICT["supporting-otucn"] = "XPDR2-NETWORK1-OTUC4" 08:21:18 expected_sorted = test_utils.recursive_sort(self.NETWORK2_CHECK_DICT) 08:21:18 response_sorted = [ 08:21:18 test_utils.recursive_sort(item) for item in response['mapping'] 08:21:18 ] 08:21:18 > self.assertIn(expected_sorted, response_sorted) 08:21:18 E AssertionError: {'lcp-hash-val': 'LY9PxYJqUbw=', 'logical-connection-point': 'XPDR2-NETWORK1', 'port-admin-state': 'InService', 'port-direction': 'bidirectional', 'port-oper-state': 'InService', 'port-qual': 'switch-network', 'rate': '200', 'supported-interface-capability': ['org-openroadm-port-types:if-otsi-otsigroup'], 'supported-operational-mode': ['OR-W-100G-oFEC-31.6Gbd', 'OR-W-200G-oFEC-31.6Gbd'], 'supporting-circuit-pack-name': '1/2/2-PLUG-NET', 'supporting-otucn': 'XPDR2-NETWORK1-OTUC4', 'supporting-port': 'L1', 'xpdr-type': 'mpdr'} not found in [{'lcp-hash-val': 'LY9PxYJqUbw=', 'logical-connection-point': 'XPDR2-NETWORK1', 'port-admin-state': 'InService', 'port-direction': 'bidirectional', 'port-oper-state': 'InService', 'port-qual': 'switch-network', 'rate': '200', 'supported-interface-capability': ['org-openroadm-port-types:if-otsi-otsigroup'], 'supported-operational-mode': ['OR-W-100G-oFEC-31.6Gbd', 'OR-W-200G-oFEC-31.6Gbd'], 'supporting-circuit-pack-name': '1/2/2-PLUG-NET', 'supporting-port': 'L1', 'xpdr-type': 'mpdr'}] 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:709: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_41_get_portmapping_network1 08:21:18 ___________ TestTransportPCEOtnRenderer.test_42_check_interface_otsi ___________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_42_check_interface_otsi(self): 08:21:18 # pylint: disable=line-too-long 08:21:18 response = test_utils.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-755:768") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:714: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_42_check_interface_otsi 08:21:18 __________ TestTransportPCEOtnRenderer.test_43_check_interface_otsig ___________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_43_check_interface_otsig(self): 08:21:18 response = test_utils.check_node_attribute_request( 08:21:18 "XPDR-A2", "interface", "XPDR2-NETWORK1-OTSIGROUP-400G") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:740: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_43_check_interface_otsig 08:21:18 __________ TestTransportPCEOtnRenderer.test_44_check_interface_otuc4 ___________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_44_check_interface_otuc4(self): 08:21:18 response = test_utils.check_node_attribute_request( 08:21:18 "XPDR-A2", "interface", "XPDR2-NETWORK1-OTUC4") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:759: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_44_check_interface_otuc4 08:21:18 ______ TestTransportPCEOtnRenderer.test_45_otn_service_path_create_oduc3 _______ 08:21:18 08:21:18 self = 08:21:18 conn = 08:21:18 method = 'POST' 08:21:18 url = '/rests/operations/transportpce-device-renderer:otn-service-path' 08:21:18 body = '{"input": {"service-name": "service_ODUC4", "operation": "create", "service-rate": "400", "service-format": "ODU", "nodes": [{"node-id": "XPDR-A2", "network-tp": "XPDR2-NETWORK1"}]}}' 08:21:18 headers = {'User-Agent': 'python-requests/2.32.5', 'Accept-Encoding': 'gzip, deflate', 'Accept': 'application/json', 'Connection': 'keep-alive', 'Content-Type': 'application/json', 'Content-Length': '182', 'Authorization': 'Basic YWRtaW46YWRtaW4='} 08:21:18 retries = Retry(total=0, connect=None, read=False, redirect=None, status=None) 08:21:18 timeout = Timeout(connect=30, read=30, total=None), chunked = False 08:21:18 response_conn = 08:21:18 preload_content = False, decode_content = False, enforce_content_length = True 08:21:18 08:21:18 def _make_request( 08:21:18 self, 08:21:18 conn: BaseHTTPConnection, 08:21:18 method: str, 08:21:18 url: str, 08:21:18 body: _TYPE_BODY | None = None, 08:21:18 headers: typing.Mapping[str, str] | None = None, 08:21:18 retries: Retry | None = None, 08:21:18 timeout: _TYPE_TIMEOUT = _DEFAULT_TIMEOUT, 08:21:18 chunked: bool = False, 08:21:18 response_conn: BaseHTTPConnection | None = None, 08:21:18 preload_content: bool = True, 08:21:18 decode_content: bool = True, 08:21:18 enforce_content_length: bool = True, 08:21:18 ) -> BaseHTTPResponse: 08:21:18 """ 08:21:18 Perform a request on a given urllib connection object taken from our 08:21:18 pool. 08:21:18 08:21:18 :param conn: 08:21:18 a connection from one of our connection pools 08:21:18 08:21:18 :param method: 08:21:18 HTTP request method (such as GET, POST, PUT, etc.) 08:21:18 08:21:18 :param url: 08:21:18 The URL to perform the request on. 08:21:18 08:21:18 :param body: 08:21:18 Data to send in the request body, either :class:`str`, :class:`bytes`, 08:21:18 an iterable of :class:`str`/:class:`bytes`, or a file-like object. 08:21:18 08:21:18 :param headers: 08:21:18 Dictionary of custom headers to send, such as User-Agent, 08:21:18 If-None-Match, etc. If None, pool headers are used. If provided, 08:21:18 these headers completely replace any pool-specific headers. 08:21:18 08:21:18 :param retries: 08:21:18 Configure the number of retries to allow before raising a 08:21:18 :class:`~urllib3.exceptions.MaxRetryError` exception. 08:21:18 08:21:18 Pass ``None`` to retry until you receive a response. Pass a 08:21:18 :class:`~urllib3.util.retry.Retry` object for fine-grained control 08:21:18 over different types of retries. 08:21:18 Pass an integer number to retry connection errors that many times, 08:21:18 but no other types of errors. Pass zero to never retry. 08:21:18 08:21:18 If ``False``, then retries are disabled and any exception is raised 08:21:18 immediately. Also, instead of raising a MaxRetryError on redirects, 08:21:18 the redirect response will be returned. 08:21:18 08:21:18 :type retries: :class:`~urllib3.util.retry.Retry`, False, or an int. 08:21:18 08:21:18 :param timeout: 08:21:18 If specified, overrides the default timeout for this one 08:21:18 request. It may be a float (in seconds) or an instance of 08:21:18 :class:`urllib3.util.Timeout`. 08:21:18 08:21:18 :param chunked: 08:21:18 If True, urllib3 will send the body using chunked transfer 08:21:18 encoding. Otherwise, urllib3 will send the body using the standard 08:21:18 content-length form. Defaults to False. 08:21:18 08:21:18 :param response_conn: 08:21:18 Set this to ``None`` if you will handle releasing the connection or 08:21:18 set the connection to have the response release it. 08:21:18 08:21:18 :param preload_content: 08:21:18 If True, the response's body will be preloaded during construction. 08:21:18 08:21:18 :param decode_content: 08:21:18 If True, will attempt to decode the body based on the 08:21:18 'content-encoding' header. 08:21:18 08:21:18 :param enforce_content_length: 08:21:18 Enforce content length checking. Body returned by server must match 08:21:18 value of Content-Length header, if present. Otherwise, raise error. 08:21:18 """ 08:21:18 self.num_requests += 1 08:21:18 08:21:18 timeout_obj = self._get_timeout(timeout) 08:21:18 timeout_obj.start_connect() 08:21:18 conn.timeout = Timeout.resolve_default_timeout(timeout_obj.connect_timeout) 08:21:18 08:21:18 try: 08:21:18 # Trigger any extra validation we need to do. 08:21:18 try: 08:21:18 self._validate_conn(conn) 08:21:18 except (SocketTimeout, BaseSSLError) as e: 08:21:18 self._raise_timeout(err=e, url=url, timeout_value=conn.timeout) 08:21:18 raise 08:21:18 08:21:18 # _validate_conn() starts the connection to an HTTPS proxy 08:21:18 # so we need to wrap errors with 'ProxyError' here too. 08:21:18 except ( 08:21:18 OSError, 08:21:18 NewConnectionError, 08:21:18 TimeoutError, 08:21:18 BaseSSLError, 08:21:18 CertificateError, 08:21:18 SSLError, 08:21:18 ) as e: 08:21:18 new_e: Exception = e 08:21:18 if isinstance(e, (BaseSSLError, CertificateError)): 08:21:18 new_e = SSLError(e) 08:21:18 # If the connection didn't successfully connect to it's proxy 08:21:18 # then there 08:21:18 if isinstance( 08:21:18 new_e, (OSError, NewConnectionError, TimeoutError, SSLError) 08:21:18 ) and (conn and conn.proxy and not conn.has_connected_to_proxy): 08:21:18 new_e = _wrap_proxy_error(new_e, conn.proxy.scheme) 08:21:18 raise new_e 08:21:18 08:21:18 # conn.request() calls http.client.*.request, not the method in 08:21:18 # urllib3.request. It also calls makefile (recv) on the socket. 08:21:18 try: 08:21:18 conn.request( 08:21:18 method, 08:21:18 url, 08:21:18 body=body, 08:21:18 headers=headers, 08:21:18 chunked=chunked, 08:21:18 preload_content=preload_content, 08:21:18 decode_content=decode_content, 08:21:18 enforce_content_length=enforce_content_length, 08:21:18 ) 08:21:18 08:21:18 # We are swallowing BrokenPipeError (errno.EPIPE) since the server is 08:21:18 # legitimately able to close the connection after sending a valid response. 08:21:18 # With this behaviour, the received response is still readable. 08:21:18 except BrokenPipeError: 08:21:18 pass 08:21:18 except OSError as e: 08:21:18 # MacOS/Linux 08:21:18 # EPROTOTYPE and ECONNRESET are needed on macOS 08:21:18 # https://erickt.github.io/blog/2014/11/19/adventures-in-debugging-a-potential-osx-kernel-bug/ 08:21:18 # Condition changed later to emit ECONNRESET instead of only EPROTOTYPE. 08:21:18 if e.errno != errno.EPROTOTYPE and e.errno != errno.ECONNRESET: 08:21:18 raise 08:21:18 08:21:18 # Reset the timeout for the recv() on the socket 08:21:18 read_timeout = timeout_obj.read_timeout 08:21:18 08:21:18 if not conn.is_closed: 08:21:18 # In Python 3 socket.py will catch EAGAIN and return None when you 08:21:18 # try and read into the file pointer created by http.client, which 08:21:18 # instead raises a BadStatusLine exception. Instead of catching 08:21:18 # the exception and assuming all BadStatusLine exceptions are read 08:21:18 # timeouts, check for a zero timeout before making the request. 08:21:18 if read_timeout == 0: 08:21:18 raise ReadTimeoutError( 08:21:18 self, url, f"Read timed out. (read timeout={read_timeout})" 08:21:18 ) 08:21:18 conn.timeout = read_timeout 08:21:18 08:21:18 # Receive the response from the server 08:21:18 try: 08:21:18 > response = conn.getresponse() 08:21:18 ^^^^^^^^^^^^^^^^^^ 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:534: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connection.py:571: in getresponse 08:21:18 httplib_response = super().getresponse() 08:21:18 ^^^^^^^^^^^^^^^^^^^^^ 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:1395: in getresponse 08:21:18 response.begin() 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:325: in begin 08:21:18 version, status, reason = self._read_status() 08:21:18 ^^^^^^^^^^^^^^^^^^^ 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/http/client.py:286: in _read_status 08:21:18 line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1") 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 b = 08:21:18 08:21:18 def readinto(self, b): 08:21:18 """Read up to len(b) bytes into the writable buffer *b* and return 08:21:18 the number of bytes read. If the socket is non-blocking and no bytes 08:21:18 are available, None is returned. 08:21:18 08:21:18 If *b* is non-empty, a 0 return value indicates that the connection 08:21:18 was shutdown at the other end. 08:21:18 """ 08:21:18 self._checkClosed() 08:21:18 self._checkReadable() 08:21:18 if self._timeout_occurred: 08:21:18 raise OSError("cannot read from timed out object") 08:21:18 while True: 08:21:18 try: 08:21:18 > return self._sock.recv_into(b) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 E TimeoutError: timed out 08:21:18 08:21:18 /opt/pyenv/versions/3.11.10/lib/python3.11/socket.py:718: TimeoutError 08:21:18 08:21:18 The above exception was the direct cause of the following exception: 08:21:18 08:21:18 self = 08:21:18 request = , stream = False 08:21:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:21:18 proxies = OrderedDict() 08:21:18 08:21:18 def send( 08:21:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:21:18 ): 08:21:18 """Sends PreparedRequest object. Returns Response object. 08:21:18 08:21:18 :param request: The :class:`PreparedRequest ` being sent. 08:21:18 :param stream: (optional) Whether to stream the request content. 08:21:18 :param timeout: (optional) How long to wait for the server to send 08:21:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:21:18 read timeout) ` tuple. 08:21:18 :type timeout: float or tuple or urllib3 Timeout object 08:21:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:21:18 we verify the server's TLS certificate, or a string, in which case it 08:21:18 must be a path to a CA bundle to use 08:21:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:21:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:21:18 :rtype: requests.Response 08:21:18 """ 08:21:18 08:21:18 try: 08:21:18 conn = self.get_connection_with_tls_context( 08:21:18 request, verify, proxies=proxies, cert=cert 08:21:18 ) 08:21:18 except LocationValueError as e: 08:21:18 raise InvalidURL(e, request=request) 08:21:18 08:21:18 self.cert_verify(conn, request.url, verify, cert) 08:21:18 url = self.request_url(request, proxies) 08:21:18 self.add_headers( 08:21:18 request, 08:21:18 stream=stream, 08:21:18 timeout=timeout, 08:21:18 verify=verify, 08:21:18 cert=cert, 08:21:18 proxies=proxies, 08:21:18 ) 08:21:18 08:21:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:21:18 08:21:18 if isinstance(timeout, tuple): 08:21:18 try: 08:21:18 connect, read = timeout 08:21:18 timeout = TimeoutSauce(connect=connect, read=read) 08:21:18 except ValueError: 08:21:18 raise ValueError( 08:21:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:21:18 f"or a single float to set both timeouts to the same value." 08:21:18 ) 08:21:18 elif isinstance(timeout, TimeoutSauce): 08:21:18 pass 08:21:18 else: 08:21:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:21:18 08:21:18 try: 08:21:18 > resp = conn.urlopen( 08:21:18 method=request.method, 08:21:18 url=url, 08:21:18 body=request.body, 08:21:18 headers=request.headers, 08:21:18 redirect=False, 08:21:18 assert_same_host=False, 08:21:18 preload_content=False, 08:21:18 decode_content=False, 08:21:18 retries=self.max_retries, 08:21:18 timeout=timeout, 08:21:18 chunked=chunked, 08:21:18 ) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/adapters.py:644: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:841: in urlopen 08:21:18 retries = retries.increment( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/util/retry.py:490: in increment 08:21:18 raise reraise(type(error), error, _stacktrace) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/util/util.py:39: in reraise 08:21:18 raise value 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:787: in urlopen 08:21:18 response = self._make_request( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:536: in _make_request 08:21:18 self._raise_timeout(err=e, url=url, timeout_value=read_timeout) 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 err = TimeoutError('timed out') 08:21:18 url = '/rests/operations/transportpce-device-renderer:otn-service-path' 08:21:18 timeout_value = 30 08:21:18 08:21:18 def _raise_timeout( 08:21:18 self, 08:21:18 err: BaseSSLError | OSError | SocketTimeout, 08:21:18 url: str, 08:21:18 timeout_value: _TYPE_TIMEOUT | None, 08:21:18 ) -> None: 08:21:18 """Is the error actually a timeout? Will raise a ReadTimeout or pass""" 08:21:18 08:21:18 if isinstance(err, SocketTimeout): 08:21:18 > raise ReadTimeoutError( 08:21:18 self, url, f"Read timed out. (read timeout={timeout_value})" 08:21:18 ) from err 08:21:18 E urllib3.exceptions.ReadTimeoutError: HTTPConnectionPool(host='localhost', port=8184): Read timed out. (read timeout=30) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/urllib3/connectionpool.py:367: ReadTimeoutError 08:21:18 08:21:18 During handling of the above exception, another exception occurred: 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_45_otn_service_path_create_oduc3(self): 08:21:18 > response = test_utils.transportpce_api_rpc_request( 08:21:18 'transportpce-device-renderer', 'otn-service-path', 08:21:18 { 08:21:18 'service-name': 'service_ODUC4', 08:21:18 'operation': 'create', 08:21:18 'service-rate': '400', 08:21:18 'service-format': 'ODU', 08:21:18 'nodes': [{'node-id': 'XPDR-A2', 'network-tp': 'XPDR2-NETWORK1'}] 08:21:18 }) 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:780: 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 transportpce_tests/common/test_utils.py:751: in transportpce_api_rpc_request 08:21:18 response = post_request(url, data) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 transportpce_tests/common/test_utils.py:143: in post_request 08:21:18 return requests.request( 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/api.py:59: in request 08:21:18 return session.request(method=method, url=url, **kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/sessions.py:589: in request 08:21:18 resp = self.send(prep, **send_kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/sessions.py:703: in send 08:21:18 r = adapter.send(request, **kwargs) 08:21:18 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 08:21:18 _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 08:21:18 08:21:18 self = 08:21:18 request = , stream = False 08:21:18 timeout = Timeout(connect=30, read=30, total=None), verify = True, cert = None 08:21:18 proxies = OrderedDict() 08:21:18 08:21:18 def send( 08:21:18 self, request, stream=False, timeout=None, verify=True, cert=None, proxies=None 08:21:18 ): 08:21:18 """Sends PreparedRequest object. Returns Response object. 08:21:18 08:21:18 :param request: The :class:`PreparedRequest ` being sent. 08:21:18 :param stream: (optional) Whether to stream the request content. 08:21:18 :param timeout: (optional) How long to wait for the server to send 08:21:18 data before giving up, as a float, or a :ref:`(connect timeout, 08:21:18 read timeout) ` tuple. 08:21:18 :type timeout: float or tuple or urllib3 Timeout object 08:21:18 :param verify: (optional) Either a boolean, in which case it controls whether 08:21:18 we verify the server's TLS certificate, or a string, in which case it 08:21:18 must be a path to a CA bundle to use 08:21:18 :param cert: (optional) Any user-provided SSL certificate to be trusted. 08:21:18 :param proxies: (optional) The proxies dictionary to apply to the request. 08:21:18 :rtype: requests.Response 08:21:18 """ 08:21:18 08:21:18 try: 08:21:18 conn = self.get_connection_with_tls_context( 08:21:18 request, verify, proxies=proxies, cert=cert 08:21:18 ) 08:21:18 except LocationValueError as e: 08:21:18 raise InvalidURL(e, request=request) 08:21:18 08:21:18 self.cert_verify(conn, request.url, verify, cert) 08:21:18 url = self.request_url(request, proxies) 08:21:18 self.add_headers( 08:21:18 request, 08:21:18 stream=stream, 08:21:18 timeout=timeout, 08:21:18 verify=verify, 08:21:18 cert=cert, 08:21:18 proxies=proxies, 08:21:18 ) 08:21:18 08:21:18 chunked = not (request.body is None or "Content-Length" in request.headers) 08:21:18 08:21:18 if isinstance(timeout, tuple): 08:21:18 try: 08:21:18 connect, read = timeout 08:21:18 timeout = TimeoutSauce(connect=connect, read=read) 08:21:18 except ValueError: 08:21:18 raise ValueError( 08:21:18 f"Invalid timeout {timeout}. Pass a (connect, read) timeout tuple, " 08:21:18 f"or a single float to set both timeouts to the same value." 08:21:18 ) 08:21:18 elif isinstance(timeout, TimeoutSauce): 08:21:18 pass 08:21:18 else: 08:21:18 timeout = TimeoutSauce(connect=timeout, read=timeout) 08:21:18 08:21:18 try: 08:21:18 resp = conn.urlopen( 08:21:18 method=request.method, 08:21:18 url=url, 08:21:18 body=request.body, 08:21:18 headers=request.headers, 08:21:18 redirect=False, 08:21:18 assert_same_host=False, 08:21:18 preload_content=False, 08:21:18 decode_content=False, 08:21:18 retries=self.max_retries, 08:21:18 timeout=timeout, 08:21:18 chunked=chunked, 08:21:18 ) 08:21:18 08:21:18 except (ProtocolError, OSError) as err: 08:21:18 raise ConnectionError(err, request=request) 08:21:18 08:21:18 except MaxRetryError as e: 08:21:18 if isinstance(e.reason, ConnectTimeoutError): 08:21:18 # TODO: Remove this in 3.0.0: see #2811 08:21:18 if not isinstance(e.reason, NewConnectionError): 08:21:18 raise ConnectTimeout(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, ResponseError): 08:21:18 raise RetryError(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, _ProxyError): 08:21:18 raise ProxyError(e, request=request) 08:21:18 08:21:18 if isinstance(e.reason, _SSLError): 08:21:18 # This branch is for urllib3 v1.22 and later. 08:21:18 raise SSLError(e, request=request) 08:21:18 08:21:18 raise ConnectionError(e, request=request) 08:21:18 08:21:18 except ClosedPoolError as e: 08:21:18 raise ConnectionError(e, request=request) 08:21:18 08:21:18 except _ProxyError as e: 08:21:18 raise ProxyError(e) 08:21:18 08:21:18 except (_SSLError, _HTTPError) as e: 08:21:18 if isinstance(e, _SSLError): 08:21:18 # This branch is for urllib3 versions earlier than v1.22 08:21:18 raise SSLError(e, request=request) 08:21:18 elif isinstance(e, ReadTimeoutError): 08:21:18 > raise ReadTimeout(e, request=request) 08:21:18 E requests.exceptions.ReadTimeout: HTTPConnectionPool(host='localhost', port=8184): Read timed out. (read timeout=30) 08:21:18 08:21:18 ../.tox/tests71/lib/python3.11/site-packages/requests/adapters.py:690: ReadTimeout 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_45_otn_service_path_create_oduc3 08:21:18 _________ TestTransportPCEOtnRenderer.test_46_get_portmapping_network1 _________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_46_get_portmapping_network1(self): 08:21:18 response = test_utils.get_portmapping_node_attr("XPDR-A2", "mapping", "XPDR2-NETWORK1") 08:21:18 self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 self.NETWORK2_CHECK_DICT["supporting-oducn"] = "XPDR2-NETWORK1-ODUC4" 08:21:18 expected_sorted = test_utils.recursive_sort(self.NETWORK2_CHECK_DICT) 08:21:18 response_sorted = [ 08:21:18 test_utils.recursive_sort(item) for item in response['mapping'] 08:21:18 ] 08:21:18 > self.assertIn(expected_sorted, response_sorted) 08:21:18 E AssertionError: {'lcp-hash-val': 'LY9PxYJqUbw=', 'logical-connection-point': 'XPDR2-NETWORK1', 'port-admin-state': 'InService', 'port-direction': 'bidirectional', 'port-oper-state': 'InService', 'port-qual': 'switch-network', 'rate': '200', 'supported-interface-capability': ['org-openroadm-port-types:if-otsi-otsigroup'], 'supported-operational-mode': ['OR-W-100G-oFEC-31.6Gbd', 'OR-W-200G-oFEC-31.6Gbd'], 'supporting-circuit-pack-name': '1/2/2-PLUG-NET', 'supporting-oducn': 'XPDR2-NETWORK1-ODUC4', 'supporting-otucn': 'XPDR2-NETWORK1-OTUC4', 'supporting-port': 'L1', 'xpdr-type': 'mpdr'} not found in [{'lcp-hash-val': 'LY9PxYJqUbw=', 'logical-connection-point': 'XPDR2-NETWORK1', 'port-admin-state': 'InService', 'port-direction': 'bidirectional', 'port-oper-state': 'InService', 'port-qual': 'switch-network', 'rate': '200', 'supported-interface-capability': ['org-openroadm-port-types:if-otsi-otsigroup'], 'supported-operational-mode': ['OR-W-100G-oFEC-31.6Gbd', 'OR-W-200G-oFEC-31.6Gbd'], 'supporting-circuit-pack-name': '1/2/2-PLUG-NET', 'supporting-port': 'L1', 'xpdr-type': 'mpdr'}] 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:803: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_46_get_portmapping_network1 08:21:18 __________ TestTransportPCEOtnRenderer.test_47_check_interface_oduc4 ___________ 08:21:18 08:21:18 self = 08:21:18 08:21:18 def test_47_check_interface_oduc4(self): 08:21:18 response = test_utils.check_node_attribute_request("XPDR-A2", "interface", "XPDR2-NETWORK1-ODUC4") 08:21:18 > self.assertEqual(response['status_code'], requests.codes.ok) 08:21:18 E AssertionError: 409 != 200 08:21:18 08:21:18 transportpce_tests/7.1/test02_otn_renderer.py:807: AssertionError 08:21:18 ----------------------------- Captured stdout call ----------------------------- 08:21:18 execution of test_47_check_interface_oduc4 08:21:18 =========================== short test summary info ============================ 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_02_service_path_create_otuc2 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_03_get_portmapping_network1 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_04_check_interface_otsi 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_05_check_interface_otsig 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_06_check_interface_otuc2 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_07_otn_service_path_create_oduc2 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_08_get_portmapping_network1 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_09_check_interface_oduc2 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_10_otn_service_path_create_100ge 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_11_check_interface_100ge_client 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_12_check_interface_odu4_client 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_13_check_interface_odu4_network 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_14_check_odu_connection_xpdra2 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_26_service_path_create_otuc3 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_27_get_portmapping_network1 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_28_check_interface_otsi 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_29_check_interface_otsig 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_30_check_interface_otuc3 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_31_otn_service_path_create_oduc3 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_32_get_portmapping_network1 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_33_check_interface_oduc3 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_40_service_path_create_otuc4 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_41_get_portmapping_network1 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_42_check_interface_otsi 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_43_check_interface_otsig 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_44_check_interface_otuc4 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_45_otn_service_path_create_oduc3 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_46_get_portmapping_network1 08:21:18 FAILED transportpce_tests/7.1/test02_otn_renderer.py::TestTransportPCEOtnRenderer::test_47_check_interface_oduc4 08:21:18 29 failed, 33 passed in 368.55s (0:06:08) 08:21:18 tests121: FAIL ✖ in 7 minutes 46.48 seconds 08:21:18 tests71: exit 1 (423.72 seconds) /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh 7.1 pid=12296 08:21:22 ................... [100%] 08:24:33 36 passed in 336.86s (0:05:36) 08:24:33 pytest -q transportpce_tests/tapi/test03_tapi_device_change_notifications.py 08:25:22 ....................................................................... [100%] 08:29:52 71 passed in 318.40s (0:05:18) 08:29:52 pytest -q transportpce_tests/tapi/test04_topo_extension.py 08:30:44 ................... [100%] 08:32:15 19 passed in 142.96s (0:02:22) 08:32:15 pytest -q transportpce_tests/tapi/test05_pce_tapi.py 08:34:18 ...................... [100%] 08:39:54 22 passed in 458.74s (0:07:38) 08:39:55 tests71: FAIL ✖ in 7 minutes 12.74 seconds 08:39:55 tests_tapi: OK ✔ in 29 minutes 22.73 seconds 08:39:55 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 08:40:01 tests221: freeze> python -m pip freeze --all 08:40:02 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==25.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==2.23,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 08:40:02 tests221: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh 2.2.1 08:40:02 using environment variables from ./karaf221.env 08:40:02 pytest -q transportpce_tests/2.2.1/test01_portmapping.py 08:40:38 ................................... [100%] 08:41:18 35 passed in 76.10s (0:01:16) 08:41:18 pytest -q transportpce_tests/2.2.1/test02_topo_portmapping.py 08:41:50 ...... [100%] 08:42:04 6 passed in 45.66s 08:42:04 pytest -q transportpce_tests/2.2.1/test03_topology.py 08:42:48 ............................................ [100%] 08:44:23 44 passed in 138.90s (0:02:18) 08:44:23 pytest -q transportpce_tests/2.2.1/test04_otn_topology.py 08:44:59 ............ [100%] 08:45:23 12 passed in 59.97s 08:45:23 pytest -q transportpce_tests/2.2.1/test05_flex_grid.py 08:45:49 ................ [100%] 08:47:18 16 passed in 114.21s (0:01:54) 08:47:18 pytest -q transportpce_tests/2.2.1/test06_renderer_service_path_nominal.py 08:47:47 ............................... [100%] 08:47:53 31 passed in 35.10s 08:47:53 pytest -q transportpce_tests/2.2.1/test07_otn_renderer.py 08:48:29 .......................... [100%] 08:49:24 26 passed in 91.01s (0:01:31) 08:49:24 pytest -q transportpce_tests/2.2.1/test08_otn_sh_renderer.py 08:50:01 ...................... [100%] 08:51:04 22 passed in 99.74s (0:01:39) 08:51:05 pytest -q transportpce_tests/2.2.1/test09_olm.py 08:51:46 ........................................ [100%] 08:54:08 40 passed in 182.96s (0:03:02) 08:54:08 pytest -q transportpce_tests/2.2.1/test11_otn_end2end.py 08:54:51 ........................................................................ [ 74%] 09:00:27 ......................... [100%] 09:02:19 97 passed in 491.25s (0:08:11) 09:02:19 pytest -q transportpce_tests/2.2.1/test12_end2end.py 09:03:00 ...................................................... [100%] 09:09:48 54 passed in 448.22s (0:07:28) 09:09:48 pytest -q transportpce_tests/2.2.1/test14_otn_switch_end2end.py 09:10:42 ........................................................................ [ 71%] 09:15:51 ............................. [100%] 09:18:01 101 passed in 492.40s (0:08:12) 09:18:01 pytest -q transportpce_tests/2.2.1/test15_otn_end2end_with_intermediate_switch.py 09:18:56 ........................................................................ [ 67%] 09:24:43 ................................... [100%] 09:34:03 107 passed in 962.65s (0:16:02) 09:34:04 pytest -q transportpce_tests/2.2.1/test16_freq_end2end.py 09:34:48 ............................................. [100%] 09:37:26 45 passed in 201.76s (0:03:21) 09:37:26 tests221: OK ✔ in 57 minutes 31.15 seconds 09:37:26 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 09:37:33 tests_hybrid: freeze> python -m pip freeze --all 09:37:33 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==25.0,paramiko==4.0.0,pip==25.3,pluggy==1.6.0,psutil==7.2.1,pycparser==2.23,Pygments==2.19.2,PyNaCl==1.6.2,pytest==9.0.2,requests==2.32.5,setuptools==80.9.0,urllib3==2.6.3 09:37:33 tests_hybrid: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh hybrid 09:37:33 using environment variables from ./karaf221.env 09:37:33 pytest -q transportpce_tests/hybrid/test01_device_change_notifications.py 09:38:14 .............FFF...................FF.............. [100%] 09:39:57 =================================== FAILURES =================================== 09:39:57 __ TestTransportPCEDeviceChangeNotifications.test_14_check_update_portmapping __ 09:39:57 09:39:57 self = 09:39:57 09:39:57 def test_14_check_update_portmapping(self): 09:39:57 response = test_utils.get_portmapping_node_attr("XPDRA01", None, None) 09:39:57 self.assertEqual(response['status_code'], requests.codes.ok) 09:39:57 mapping_list = response['nodes'][0]['mapping'] 09:39:57 for mapping in mapping_list: 09:39:57 if mapping['logical-connection-point'] == 'XPDR1-NETWORK1': 09:39:57 > self.assertEqual(mapping['port-oper-state'], 'OutOfService', 09:39:57 "Operational State should be 'OutOfService'") 09:39:57 E AssertionError: 'InService' != 'OutOfService' 09:39:57 E - InService 09:39:57 E + OutOfService 09:39:57 E : Operational State should be 'OutOfService' 09:39:57 09:39:57 transportpce_tests/hybrid/test01_device_change_notifications.py:218: AssertionError 09:39:57 ----------------------------- Captured stdout call ----------------------------- 09:39:57 execution of test_14_check_update_portmapping 09:39:57 _ TestTransportPCEDeviceChangeNotifications.test_15_check_update_openroadm_topo _ 09:39:57 09:39:57 self = 09:39:57 09:39:57 def test_15_check_update_openroadm_topo(self): 09:39:57 response = test_utils.get_ietf_network_request('openroadm-topology', 'config') 09:39:57 self.assertEqual(response['status_code'], requests.codes.ok) 09:39:57 node_list = response['network'][0]['node'] 09:39:57 nb_updated_tp = 0 09:39:57 for node in node_list: 09:39:57 self.assertEqual(node['org-openroadm-common-network:operational-state'], 'inService') 09:39:57 self.assertEqual(node['org-openroadm-common-network:administrative-state'], 'inService') 09:39:57 tp_list = node['ietf-network-topology:termination-point'] 09:39:57 for tp in tp_list: 09:39:57 if node['node-id'] == 'XPDRA01-XPDR1' and tp['tp-id'] == 'XPDR1-NETWORK1': 09:39:57 > self.assertEqual(tp['org-openroadm-common-network:operational-state'], 'outOfService') 09:39:57 E AssertionError: 'inService' != 'outOfService' 09:39:57 E - inService 09:39:57 E + outOfService 09:39:57 09:39:57 transportpce_tests/hybrid/test01_device_change_notifications.py:240: AssertionError 09:39:57 ----------------------------- Captured stdout call ----------------------------- 09:39:57 execution of test_15_check_update_openroadm_topo 09:39:57 ___ TestTransportPCEDeviceChangeNotifications.test_16_check_update_service1 ____ 09:39:57 09:39:57 self = 09:39:57 09:39:57 def test_16_check_update_service1(self): 09:39:57 response = test_utils.get_ordm_serv_list_attr_request("services", "service1") 09:39:57 self.assertEqual(response['status_code'], requests.codes.ok) 09:39:57 > self.assertEqual(response['services'][0]['operational-state'], 'outOfService') 09:39:57 E AssertionError: 'inService' != 'outOfService' 09:39:57 E - inService 09:39:57 E + outOfService 09:39:57 09:39:57 transportpce_tests/hybrid/test01_device_change_notifications.py:266: AssertionError 09:39:57 ----------------------------- Captured stdout call ----------------------------- 09:39:57 execution of test_16_check_update_service1 09:39:57 __ TestTransportPCEDeviceChangeNotifications.test_36_check_update_portmapping __ 09:39:57 09:39:57 self = 09:39:57 09:39:57 def test_36_check_update_portmapping(self): 09:39:57 response = test_utils.get_portmapping_node_attr("XPDR-C1", None, None) 09:39:57 self.assertEqual(response['status_code'], requests.codes.ok) 09:39:57 mapping_list = response['nodes'][0]['mapping'] 09:39:57 for mapping in mapping_list: 09:39:57 if mapping['logical-connection-point'] == 'XPDR1-NETWORK1': 09:39:57 > self.assertEqual(mapping['port-oper-state'], 'OutOfService', 09:39:57 "Operational State should be 'OutOfService'") 09:39:57 E AssertionError: 'InService' != 'OutOfService' 09:39:57 E - InService 09:39:57 E + OutOfService 09:39:57 E : Operational State should be 'OutOfService' 09:39:57 09:39:57 transportpce_tests/hybrid/test01_device_change_notifications.py:498: AssertionError 09:39:57 ----------------------------- Captured stdout call ----------------------------- 09:39:57 execution of test_36_check_update_portmapping 09:39:57 _ TestTransportPCEDeviceChangeNotifications.test_37_check_update_openroadm_topo _ 09:39:57 09:39:57 self = 09:39:57 09:39:57 def test_37_check_update_openroadm_topo(self): 09:39:57 response = test_utils.get_ietf_network_request('openroadm-topology', 'config') 09:39:57 self.assertEqual(response['status_code'], requests.codes.ok) 09:39:57 node_list = response['network'][0]['node'] 09:39:57 nb_updated_tp = 0 09:39:57 for node in node_list: 09:39:57 self.assertEqual(node['org-openroadm-common-network:operational-state'], 'inService') 09:39:57 self.assertEqual(node['org-openroadm-common-network:administrative-state'], 'inService') 09:39:57 tp_list = node['ietf-network-topology:termination-point'] 09:39:57 for tp in tp_list: 09:39:57 if node['node-id'] == 'XPDR-C1-XPDR1' and tp['tp-id'] == 'XPDR1-NETWORK1': 09:39:57 > self.assertEqual(tp['org-openroadm-common-network:operational-state'], 'outOfService') 09:39:57 E AssertionError: 'inService' != 'outOfService' 09:39:57 E - inService 09:39:57 E + outOfService 09:39:57 09:39:57 transportpce_tests/hybrid/test01_device_change_notifications.py:520: AssertionError 09:39:57 ----------------------------- Captured stdout call ----------------------------- 09:39:57 execution of test_37_check_update_openroadm_topo 09:39:57 =========================== short test summary info ============================ 09:39:57 FAILED transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_14_check_update_portmapping 09:39:57 FAILED transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_15_check_update_openroadm_topo 09:39:57 FAILED transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_16_check_update_service1 09:39:57 FAILED transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_36_check_update_portmapping 09:39:57 FAILED transportpce_tests/hybrid/test01_device_change_notifications.py::TestTransportPCEDeviceChangeNotifications::test_37_check_update_openroadm_topo 09:39:57 5 failed, 46 passed in 143.12s (0:02:23) 09:39:57 tests_hybrid: exit 1 (143.41 seconds) /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh hybrid pid=92740 09:39:57 buildcontroller: OK (117.55=setup[8.83]+cmd[108.72] seconds) 09:39:57 sims: OK (14.02=setup[10.99]+cmd[3.03] seconds) 09:39:57 build_karaf_tests121: OK (73.05=setup[8.48]+cmd[64.57] seconds) 09:39:57 testsPCE: OK (284.64=setup[52.86]+cmd[231.78] seconds) 09:39:57 tests121: FAIL code 1 (466.48=setup[8.03]+cmd[458.45] seconds) 09:39:57 build_karaf_tests221: OK (73.04=setup[8.50]+cmd[64.54] seconds) 09:39:57 tests_tapi: OK (1762.73=setup[7.85]+cmd[1754.88] seconds) 09:39:57 tests221: OK (3451.15=setup[7.09]+cmd[3444.06] seconds) 09:39:57 build_karaf_tests71: OK (72.66=setup[8.43]+cmd[64.23] seconds) 09:39:57 tests71: FAIL code 1 (432.74=setup[9.02]+cmd[423.72] seconds) 09:39:57 build_karaf_tests190: OK (72.70=setup[8.47]+cmd[64.23] seconds) 09:39:57 tests190: FAIL code 1 (213.76=setup[7.79]+cmd[205.97] seconds) 09:39:57 tests_hybrid: FAIL code 1 (151.03=setup[7.62]+cmd[143.41] seconds) 09:39:57 buildlighty: OK (35.50=setup[11.04]+cmd[24.47] seconds) 09:39:57 docs: OK (28.09=setup[25.95]+cmd[2.15] seconds) 09:39:57 docs-linkcheck: OK (30.70=setup[25.98]+cmd[4.72] seconds) 09:39:57 checkbashisms: OK (3.25=setup[1.92]+cmd[0.01,0.05,1.28] seconds) 09:39:57 pre-commit: OK (45.73=setup[3.00]+cmd[0.01,0.00,34.13,8.59] seconds) 09:39:57 pylint: OK (30.71=setup[3.32]+cmd[27.39] seconds) 09:39:57 evaluation failed :( (5840.20 seconds) 09:39:57 + tox_status=255 09:39:57 + echo '---> Completed tox runs' 09:39:57 ---> Completed tox runs 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/build_karaf_tests121/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=build_karaf_tests121 09:39:57 + cp -r .tox/build_karaf_tests121/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/build_karaf_tests121 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/build_karaf_tests190/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=build_karaf_tests190 09:39:57 + cp -r .tox/build_karaf_tests190/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/build_karaf_tests190 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/build_karaf_tests221/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=build_karaf_tests221 09:39:57 + cp -r .tox/build_karaf_tests221/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/build_karaf_tests221 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/build_karaf_tests71/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=build_karaf_tests71 09:39:57 + cp -r .tox/build_karaf_tests71/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/build_karaf_tests71 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/buildcontroller/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=buildcontroller 09:39:57 + cp -r .tox/buildcontroller/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/buildcontroller 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/buildlighty/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=buildlighty 09:39:57 + cp -r .tox/buildlighty/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/buildlighty 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/checkbashisms/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=checkbashisms 09:39:57 + cp -r .tox/checkbashisms/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/checkbashisms 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/docs-linkcheck/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=docs-linkcheck 09:39:57 + cp -r .tox/docs-linkcheck/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/docs-linkcheck 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/docs/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=docs 09:39:57 + cp -r .tox/docs/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/docs 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/pre-commit/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=pre-commit 09:39:57 + cp -r .tox/pre-commit/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/pre-commit 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/pylint/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=pylint 09:39:57 + cp -r .tox/pylint/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/pylint 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/sims/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=sims 09:39:57 + cp -r .tox/sims/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/sims 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/tests121/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=tests121 09:39:57 + cp -r .tox/tests121/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/tests121 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/tests190/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=tests190 09:39:57 + cp -r .tox/tests190/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/tests190 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/tests221/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=tests221 09:39:57 + cp -r .tox/tests221/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/tests221 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/tests71/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=tests71 09:39:57 + cp -r .tox/tests71/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/tests71 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/testsPCE/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=testsPCE 09:39:57 + cp -r .tox/testsPCE/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/testsPCE 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/tests_hybrid/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=tests_hybrid 09:39:57 + cp -r .tox/tests_hybrid/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/tests_hybrid 09:39:57 + for i in .tox/*/log 09:39:57 ++ echo .tox/tests_tapi/log 09:39:57 ++ awk -F/ '{print $2}' 09:39:57 + tox_env=tests_tapi 09:39:57 + cp -r .tox/tests_tapi/log /w/workspace/transportpce-tox-verify-transportpce-master/archives/tox/tests_tapi 09:39:57 + DOC_DIR=docs/_build/html 09:39:57 + [[ -d docs/_build/html ]] 09:39:57 + echo '---> Archiving generated docs' 09:39:57 ---> Archiving generated docs 09:39:57 + mv docs/_build/html /w/workspace/transportpce-tox-verify-transportpce-master/archives/docs 09:39:57 + echo '---> tox-run.sh ends' 09:39:57 ---> tox-run.sh ends 09:39:57 + test 255 -eq 0 09:39:57 + exit 255 09:39:57 ++ '[' 1 = 1 ']' 09:39:57 ++ '[' -x /usr/bin/clear_console ']' 09:39:57 ++ /usr/bin/clear_console -q 09:39:57 Build step 'Execute shell' marked build as failure 09:39:57 $ ssh-agent -k 09:39:57 unset SSH_AUTH_SOCK; 09:39:57 unset SSH_AGENT_PID; 09:39:57 echo Agent pid 1591 killed; 09:39:57 [ssh-agent] Stopped. 09:39:57 [PostBuildScript] - [INFO] Executing post build scripts. 09:39:57 [transportpce-tox-verify-transportpce-master] $ /bin/bash /tmp/jenkins5010696766096754272.sh 09:39:57 ---> sysstat.sh 09:39:58 [transportpce-tox-verify-transportpce-master] $ /bin/bash /tmp/jenkins4413788839107419226.sh 09:39:58 ---> package-listing.sh 09:39:58 ++ facter osfamily 09:39:58 ++ tr '[:upper:]' '[:lower:]' 09:39:58 + OS_FAMILY=debian 09:39:58 + workspace=/w/workspace/transportpce-tox-verify-transportpce-master 09:39:58 + START_PACKAGES=/tmp/packages_start.txt 09:39:58 + END_PACKAGES=/tmp/packages_end.txt 09:39:58 + DIFF_PACKAGES=/tmp/packages_diff.txt 09:39:58 + PACKAGES=/tmp/packages_start.txt 09:39:58 + '[' /w/workspace/transportpce-tox-verify-transportpce-master ']' 09:39:58 + PACKAGES=/tmp/packages_end.txt 09:39:58 + case "${OS_FAMILY}" in 09:39:58 + dpkg -l 09:39:58 + grep '^ii' 09:39:58 + '[' -f /tmp/packages_start.txt ']' 09:39:58 + '[' -f /tmp/packages_end.txt ']' 09:39:58 + diff /tmp/packages_start.txt /tmp/packages_end.txt 09:39:58 + '[' /w/workspace/transportpce-tox-verify-transportpce-master ']' 09:39:58 + mkdir -p /w/workspace/transportpce-tox-verify-transportpce-master/archives/ 09:39:58 + cp -f /tmp/packages_diff.txt /tmp/packages_end.txt /tmp/packages_start.txt /w/workspace/transportpce-tox-verify-transportpce-master/archives/ 09:39:58 [transportpce-tox-verify-transportpce-master] $ /bin/bash /tmp/jenkins12061400927931716795.sh 09:39:58 ---> capture-instance-metadata.sh 09:39:58 Setup pyenv: 09:39:58 system 09:39:58 3.8.20 09:39:58 3.9.20 09:39:58 3.10.15 09:39:58 * 3.11.10 (set by /w/workspace/transportpce-tox-verify-transportpce-master/.python-version) 09:39:58 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-zWVR from file:/tmp/.os_lf_venv 09:39:58 lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv) 09:39:58 lf-activate-venv(): INFO: Attempting to install with network-safe options... 09:40:01 lf-activate-venv(): INFO: Base packages installed successfully 09:40:01 lf-activate-venv(): INFO: Installing additional packages: lftools 09:40:14 ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts. 09:40:14 kubernetes 34.1.0 requires urllib3<2.4.0,>=1.24.2, but you have urllib3 2.6.3 which is incompatible. 09:40:14 lf-activate-venv(): INFO: Adding /tmp/venv-zWVR/bin to PATH 09:40:14 INFO: Running in OpenStack, capturing instance metadata 09:40:15 [transportpce-tox-verify-transportpce-master] $ /bin/bash /tmp/jenkins12757399623376623817.sh 09:40:15 provisioning config files... 09:40:15 Could not find credentials [logs] for transportpce-tox-verify-transportpce-master #4200 09:40:15 copy managed file [jenkins-log-archives-settings] to file:/w/workspace/transportpce-tox-verify-transportpce-master@tmp/config16908504691526743789tmp 09:40:15 Regular expression run condition: Expression=[^.*logs-s3.*], Label=[odl-logs-s3-cloudfront-index] 09:40:15 Run condition [Regular expression match] enabling perform for step [Provide Configuration files] 09:40:15 provisioning config files... 09:40:15 copy managed file [jenkins-s3-log-ship] to file:/home/jenkins/.aws/credentials 09:40:15 [EnvInject] - Injecting environment variables from a build step. 09:40:15 [EnvInject] - Injecting as environment variables the properties content 09:40:15 SERVER_ID=logs 09:40:15 09:40:15 [EnvInject] - Variables injected successfully. 09:40:15 [transportpce-tox-verify-transportpce-master] $ /bin/bash /tmp/jenkins1111983218258505482.sh 09:40:15 ---> create-netrc.sh 09:40:15 WARN: Log server credential not found. 09:40:15 [transportpce-tox-verify-transportpce-master] $ /bin/bash /tmp/jenkins18360704366954662097.sh 09:40:15 ---> python-tools-install.sh 09:40:15 Setup pyenv: 09:40:15 system 09:40:15 3.8.20 09:40:15 3.9.20 09:40:15 3.10.15 09:40:15 * 3.11.10 (set by /w/workspace/transportpce-tox-verify-transportpce-master/.python-version) 09:40:15 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-zWVR from file:/tmp/.os_lf_venv 09:40:15 lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv) 09:40:15 lf-activate-venv(): INFO: Attempting to install with network-safe options... 09:40:17 lf-activate-venv(): INFO: Base packages installed successfully 09:40:17 lf-activate-venv(): INFO: Installing additional packages: lftools 09:40:27 lf-activate-venv(): INFO: Adding /tmp/venv-zWVR/bin to PATH 09:40:28 [transportpce-tox-verify-transportpce-master] $ /bin/bash /tmp/jenkins4782787361147125596.sh 09:40:28 ---> sudo-logs.sh 09:40:28 Archiving 'sudo' log.. 09:40:28 [transportpce-tox-verify-transportpce-master] $ /bin/bash /tmp/jenkins14539916455604064376.sh 09:40:28 ---> job-cost.sh 09:40:28 Setup pyenv: 09:40:28 system 09:40:28 3.8.20 09:40:28 3.9.20 09:40:28 3.10.15 09:40:28 * 3.11.10 (set by /w/workspace/transportpce-tox-verify-transportpce-master/.python-version) 09:40:28 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-zWVR from file:/tmp/.os_lf_venv 09:40:28 lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv) 09:40:28 lf-activate-venv(): INFO: Attempting to install with network-safe options... 09:40:30 lf-activate-venv(): INFO: Base packages installed successfully 09:40:30 lf-activate-venv(): INFO: Installing additional packages: zipp==1.1.0 python-openstackclient urllib3~=1.26.15 09:40:37 lf-activate-venv(): INFO: Adding /tmp/venv-zWVR/bin to PATH 09:40:37 INFO: No Stack... 09:40:37 INFO: Retrieving Pricing Info for: v3-standard-4 09:40:38 INFO: Archiving Costs 09:40:38 [transportpce-tox-verify-transportpce-master] $ /bin/bash -l /tmp/jenkins6839827498613753277.sh 09:40:38 ---> logs-deploy.sh 09:40:38 Setup pyenv: 09:40:38 system 09:40:38 3.8.20 09:40:38 3.9.20 09:40:38 3.10.15 09:40:38 * 3.11.10 (set by /w/workspace/transportpce-tox-verify-transportpce-master/.python-version) 09:40:38 lf-activate-venv(): INFO: Reuse venv:/tmp/venv-zWVR from file:/tmp/.os_lf_venv 09:40:38 lf-activate-venv(): INFO: Installing base packages (pip, setuptools, virtualenv) 09:40:38 lf-activate-venv(): INFO: Attempting to install with network-safe options... 09:40:40 lf-activate-venv(): INFO: Base packages installed successfully 09:40:40 lf-activate-venv(): INFO: Installing additional packages: lftools urllib3~=1.26.15 09:40:50 lf-activate-venv(): INFO: Adding /tmp/venv-zWVR/bin to PATH 09:40:50 WARNING: Nexus logging server not set 09:40:50 INFO: S3 path logs/releng/vex-yul-odl-jenkins-1/transportpce-tox-verify-transportpce-master/4200/ 09:40:50 INFO: archiving logs to S3 09:40:53 ---> uname -a: 09:40:53 Linux prd-ubuntu2204-docker-4c-16g-415 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux 09:40:53 09:40:53 09:40:53 ---> lscpu: 09:40:53 Architecture: x86_64 09:40:53 CPU op-mode(s): 32-bit, 64-bit 09:40:53 Address sizes: 40 bits physical, 48 bits virtual 09:40:53 Byte Order: Little Endian 09:40:53 CPU(s): 4 09:40:53 On-line CPU(s) list: 0-3 09:40:53 Vendor ID: AuthenticAMD 09:40:53 Model name: AMD EPYC-Rome Processor 09:40:53 CPU family: 23 09:40:53 Model: 49 09:40:53 Thread(s) per core: 1 09:40:53 Core(s) per socket: 1 09:40:53 Socket(s): 4 09:40:53 Stepping: 0 09:40:53 BogoMIPS: 5599.99 09:40:53 Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm rep_good nopl cpuid extd_apicid tsc_known_freq pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm cmp_legacy svm cr8_legacy abm sse4a misalignsse 3dnowprefetch osvw topoext perfctr_core ssbd ibrs ibpb stibp vmmcall fsgsbase tsc_adjust bmi1 avx2 smep bmi2 rdseed adx smap clflushopt clwb sha_ni xsaveopt xsavec xgetbv1 clzero xsaveerptr wbnoinvd arat npt nrip_save umip rdpid arch_capabilities 09:40:53 Virtualization: AMD-V 09:40:53 Hypervisor vendor: KVM 09:40:53 Virtualization type: full 09:40:53 L1d cache: 128 KiB (4 instances) 09:40:53 L1i cache: 128 KiB (4 instances) 09:40:53 L2 cache: 2 MiB (4 instances) 09:40:53 L3 cache: 64 MiB (4 instances) 09:40:53 NUMA node(s): 1 09:40:53 NUMA node0 CPU(s): 0-3 09:40:53 Vulnerability Gather data sampling: Not affected 09:40:53 Vulnerability Indirect target selection: Not affected 09:40:53 Vulnerability Itlb multihit: Not affected 09:40:53 Vulnerability L1tf: Not affected 09:40:53 Vulnerability Mds: Not affected 09:40:53 Vulnerability Meltdown: Not affected 09:40:53 Vulnerability Mmio stale data: Not affected 09:40:53 Vulnerability Reg file data sampling: Not affected 09:40:53 Vulnerability Retbleed: Mitigation; untrained return thunk; SMT disabled 09:40:53 Vulnerability Spec rstack overflow: Mitigation; SMT disabled 09:40:53 Vulnerability Spec store bypass: Mitigation; Speculative Store Bypass disabled via prctl and seccomp 09:40:53 Vulnerability Spectre v1: Mitigation; usercopy/swapgs barriers and __user pointer sanitization 09:40:53 Vulnerability Spectre v2: Mitigation; Retpolines; IBPB conditional; STIBP disabled; RSB filling; PBRSB-eIBRS Not affected; BHI Not affected 09:40:53 Vulnerability Srbds: Not affected 09:40:53 Vulnerability Tsa: Not affected 09:40:53 Vulnerability Tsx async abort: Not affected 09:40:53 Vulnerability Vmscape: Not affected 09:40:53 09:40:53 09:40:53 ---> nproc: 09:40:53 4 09:40:53 09:40:53 09:40:53 ---> df -h: 09:40:53 Filesystem Size Used Avail Use% Mounted on 09:40:53 tmpfs 1.6G 1.1M 1.6G 1% /run 09:40:53 /dev/vda1 78G 18G 61G 23% / 09:40:53 tmpfs 7.9G 0 7.9G 0% /dev/shm 09:40:53 tmpfs 5.0M 0 5.0M 0% /run/lock 09:40:53 /dev/vda15 105M 6.1M 99M 6% /boot/efi 09:40:53 tmpfs 1.6G 4.0K 1.6G 1% /run/user/1001 09:40:53 09:40:53 09:40:53 ---> free -m: 09:40:53 total used free shared buff/cache available 09:40:53 Mem: 15989 714 10848 3 4425 14931 09:40:53 Swap: 1023 0 1023 09:40:53 09:40:53 09:40:53 ---> ip addr: 09:40:53 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 09:40:53 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 09:40:53 inet 127.0.0.1/8 scope host lo 09:40:53 valid_lft forever preferred_lft forever 09:40:53 inet6 ::1/128 scope host 09:40:53 valid_lft forever preferred_lft forever 09:40:53 2: ens3: mtu 1458 qdisc mq state UP group default qlen 1000 09:40:53 link/ether fa:16:3e:cf:79:98 brd ff:ff:ff:ff:ff:ff 09:40:53 altname enp0s3 09:40:53 inet 10.30.171.248/23 metric 100 brd 10.30.171.255 scope global dynamic ens3 09:40:53 valid_lft 80383sec preferred_lft 80383sec 09:40:53 inet6 fe80::f816:3eff:fecf:7998/64 scope link 09:40:53 valid_lft forever preferred_lft forever 09:40:53 3: docker0: mtu 1458 qdisc noqueue state DOWN group default 09:40:53 link/ether fa:03:ab:ff:00:b4 brd ff:ff:ff:ff:ff:ff 09:40:53 inet 10.250.0.254/24 brd 10.250.0.255 scope global docker0 09:40:53 valid_lft forever preferred_lft forever 09:40:53 09:40:53 09:40:53 ---> sar -b -r -n DEV: 09:40:53 Linux 5.15.0-164-generic (prd-ubuntu2204-docker-4c-16g-415) 01/15/26 _x86_64_ (4 CPU) 09:40:53 09:40:53 08:00:39 LINUX RESTART (4 CPU) 09:40:53 09:40:53 08:10:06 tps rtps wtps dtps bread/s bwrtn/s bdscd/s 09:40:53 08:20:08 71.96 23.18 45.76 3.01 327.76 5273.98 2924.30 09:40:53 08:30:06 6.55 0.12 6.14 0.29 4.27 223.00 1182.86 09:40:53 08:40:02 7.08 0.14 6.50 0.44 7.59 256.22 1043.43 09:40:53 08:50:08 21.50 0.02 20.57 0.91 1.07 879.65 1477.74 09:40:53 09:00:08 7.11 0.01 6.79 0.30 0.65 208.92 697.01 09:40:53 09:10:08 19.72 12.07 7.41 0.24 145.19 196.05 301.29 09:40:53 09:20:08 5.48 0.01 5.16 0.31 1.07 213.93 131.73 09:40:53 09:30:08 2.74 0.00 2.73 0.00 0.00 47.11 0.04 09:40:53 09:40:02 26.90 1.53 8.96 16.40 111.74 575.32 213211.41 09:40:53 Average: 18.82 4.13 12.26 2.42 66.66 878.08 24320.47 09:40:53 09:40:53 08:10:06 kbmemfree kbavail kbmemused %memused kbbuffers kbcached kbcommit %commit kbactive kbinact kbdirty 09:40:53 08:20:08 5165264 8467608 7467588 45.61 259744 3029608 8548136 49.07 2117468 8494504 236 09:40:53 08:30:06 11279928 14598796 1340080 8.18 260512 3045416 2095768 12.03 2143064 2407372 5720 09:40:53 08:40:02 11898016 15314928 623976 3.81 264280 3139156 1342832 7.71 2164084 1754140 83236 09:40:53 08:50:08 9471380 12969456 2968720 18.13 267836 3216668 3730384 21.41 2189164 4158080 244 09:40:53 09:00:08 7955712 11481972 4455064 27.21 268956 3243712 5214272 29.93 2191344 5668968 220 09:40:53 09:10:08 10206080 13826000 2112268 12.90 275356 3318588 3439220 19.74 2235316 3371496 17164 09:40:53 09:20:08 6444560 10085208 5850972 35.74 276152 3338428 6655776 38.20 2238948 7109716 296 09:40:53 09:30:08 6184300 9827064 6108856 37.31 276360 3340328 6866716 39.41 2239216 7370656 76 09:40:53 09:40:02 11216420 15328792 609568 3.72 282772 3789572 1226116 7.04 2299904 2261020 299300 09:40:53 Average: 8869073 12433314 3504121 21.40 270219 3273497 4346580 24.95 2202056 4732884 45166 09:40:53 09:40:53 08:10:06 IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s %ifutil 09:40:53 08:20:08 lo 693.71 693.71 364.98 364.98 0.00 0.00 0.00 0.00 09:40:53 08:20:08 ens3 2.08 1.99 0.63 1.50 0.00 0.00 0.00 0.00 09:40:53 08:20:08 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09:40:53 08:30:06 lo 149.57 149.57 83.15 83.15 0.00 0.00 0.00 0.00 09:40:53 08:30:06 ens3 1.37 1.13 0.34 0.55 0.00 0.00 0.00 0.00 09:40:53 08:30:06 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09:40:53 08:40:02 lo 11.82 11.82 7.01 7.01 0.00 0.00 0.00 0.00 09:40:53 08:40:02 ens3 0.92 0.58 0.34 0.24 0.00 0.00 0.00 0.00 09:40:53 08:40:02 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09:40:53 08:50:08 lo 12.46 12.46 7.21 7.21 0.00 0.00 0.00 0.00 09:40:53 08:50:08 ens3 0.96 0.80 0.22 0.17 0.00 0.00 0.00 0.00 09:40:53 08:50:08 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09:40:53 09:00:08 lo 20.04 20.04 9.67 9.67 0.00 0.00 0.00 0.00 09:40:53 09:00:08 ens3 0.75 0.71 0.18 0.15 0.00 0.00 0.00 0.00 09:40:53 09:00:08 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09:40:53 09:10:08 lo 28.12 28.12 9.83 9.83 0.00 0.00 0.00 0.00 09:40:53 09:10:08 ens3 0.82 0.58 0.24 0.17 0.00 0.00 0.00 0.00 09:40:53 09:10:08 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09:40:53 09:20:08 lo 20.46 20.46 11.37 11.37 0.00 0.00 0.00 0.00 09:40:53 09:20:08 ens3 0.98 0.70 0.21 0.16 0.00 0.00 0.00 0.00 09:40:53 09:20:08 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09:40:53 09:30:08 lo 14.05 14.05 7.70 7.70 0.00 0.00 0.00 0.00 09:40:53 09:30:08 ens3 0.63 0.39 0.17 0.11 0.00 0.00 0.00 0.00 09:40:53 09:30:08 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09:40:53 09:40:02 lo 238.71 238.71 103.50 103.50 0.00 0.00 0.00 0.00 09:40:53 09:40:02 ens3 1.67 1.33 0.74 0.50 0.00 0.00 0.00 0.00 09:40:53 09:40:02 docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09:40:53 Average: lo 132.19 132.19 67.23 67.23 0.00 0.00 0.00 0.00 09:40:53 Average: ens3 1.13 0.91 0.34 0.40 0.00 0.00 0.00 0.00 09:40:53 Average: docker0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 09:40:53 09:40:53 09:40:53 ---> sar -P ALL: 09:40:53 Linux 5.15.0-164-generic (prd-ubuntu2204-docker-4c-16g-415) 01/15/26 _x86_64_ (4 CPU) 09:40:53 09:40:53 08:00:39 LINUX RESTART (4 CPU) 09:40:53 09:40:53 08:10:06 CPU %user %nice %system %iowait %steal %idle 09:40:53 08:20:08 all 69.60 0.00 3.23 0.12 0.12 26.93 09:40:53 08:20:08 0 68.75 0.00 3.51 0.09 0.12 27.53 09:40:53 08:20:08 1 68.52 0.00 3.31 0.09 0.12 27.97 09:40:53 08:20:08 2 71.09 0.00 3.14 0.12 0.12 25.54 09:40:53 08:20:08 3 70.04 0.00 2.95 0.20 0.12 26.69 09:40:53 08:30:06 all 14.76 0.00 0.93 0.04 0.12 84.16 09:40:53 08:30:06 0 14.05 0.00 0.94 0.01 0.12 84.88 09:40:53 08:30:06 1 13.93 0.00 0.94 0.13 0.12 84.89 09:40:53 08:30:06 2 16.46 0.00 0.94 0.01 0.12 82.48 09:40:53 08:30:06 3 14.58 0.00 0.91 0.02 0.12 84.37 09:40:53 08:40:02 all 14.70 0.00 0.66 0.05 0.11 84.47 09:40:53 08:40:02 0 13.70 0.00 0.52 0.07 0.10 85.61 09:40:53 08:40:02 1 15.79 0.00 0.70 0.03 0.12 83.36 09:40:53 08:40:02 2 14.19 0.00 0.82 0.04 0.12 84.83 09:40:53 08:40:02 3 15.13 0.00 0.62 0.05 0.11 84.08 09:40:53 08:50:08 all 30.98 0.00 1.04 0.08 0.11 67.79 09:40:53 08:50:08 0 30.21 0.00 1.01 0.13 0.11 68.53 09:40:53 08:50:08 1 31.20 0.00 1.02 0.09 0.12 67.57 09:40:53 08:50:08 2 31.53 0.00 1.01 0.05 0.11 67.30 09:40:53 08:50:08 3 30.97 0.00 1.11 0.03 0.11 67.77 09:40:53 09:00:08 all 13.93 0.00 0.53 0.05 0.11 85.38 09:40:53 09:00:08 0 14.27 0.00 0.57 0.03 0.11 85.03 09:40:53 09:00:08 1 13.30 0.00 0.52 0.04 0.11 86.03 09:40:53 09:00:08 2 13.96 0.00 0.51 0.02 0.12 85.39 09:40:53 09:00:08 3 14.18 0.00 0.54 0.10 0.11 85.06 09:40:53 09:10:08 all 10.79 0.08 0.55 0.09 0.11 88.38 09:40:53 09:10:08 0 10.65 0.00 0.53 0.02 0.11 88.70 09:40:53 09:10:08 1 10.54 0.22 0.55 0.22 0.11 88.36 09:40:53 09:10:08 2 11.02 0.09 0.59 0.10 0.10 88.11 09:40:53 09:10:08 3 10.97 0.00 0.54 0.02 0.11 88.35 09:40:53 09:20:08 all 14.34 0.00 0.69 0.03 0.11 84.84 09:40:53 09:20:08 0 14.46 0.00 0.61 0.02 0.10 84.80 09:40:53 09:20:08 1 14.19 0.00 0.65 0.03 0.11 85.03 09:40:53 09:20:08 2 14.75 0.00 0.74 0.06 0.11 84.34 09:40:53 09:20:08 3 13.94 0.00 0.77 0.01 0.11 85.17 09:40:53 09:30:08 all 2.80 0.00 0.36 0.02 0.11 96.71 09:40:53 09:30:08 0 2.75 0.00 0.33 0.02 0.11 96.80 09:40:53 09:30:08 1 2.92 0.00 0.38 0.01 0.12 96.58 09:40:53 09:30:08 2 2.75 0.00 0.42 0.02 0.12 96.70 09:40:53 09:30:08 3 2.80 0.00 0.31 0.04 0.10 96.75 09:40:53 09:40:02 all 18.40 0.00 1.06 0.09 0.11 80.34 09:40:53 09:40:02 0 17.63 0.00 1.15 0.02 0.10 81.10 09:40:53 09:40:02 1 17.92 0.00 1.02 0.14 0.11 80.81 09:40:53 09:40:02 2 18.99 0.00 1.11 0.05 0.12 79.74 09:40:53 09:40:02 3 19.06 0.00 0.97 0.15 0.11 79.70 09:40:53 Average: all 21.17 0.01 1.01 0.06 0.11 77.64 09:40:53 Average: 0 20.75 0.00 1.02 0.05 0.11 78.08 09:40:53 Average: 1 20.95 0.02 1.01 0.09 0.11 77.81 09:40:53 Average: 2 21.66 0.01 1.03 0.05 0.11 77.14 09:40:53 Average: 3 21.32 0.00 0.97 0.07 0.11 77.53 09:40:53 09:40:53 09:40:53