docs: install_deps> python -I -m pip install -r docs/requirements.txt checkbashisms: freeze> python -m pip freeze --all buildcontroller: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt docs-linkcheck: install_deps> python -I -m pip install -r docs/requirements.txt checkbashisms: pip==26.0.1,setuptools==82.0.1 checkbashisms: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./fixCIcentOS8reposMirrors.sh checkbashisms: commands[1] /w/workspace/transportpce-tox-verify-transportpce-master/tests> sh -c 'command checkbashisms>/dev/null || sudo yum install -y devscripts-checkbashisms || sudo yum install -y devscripts-minimal || sudo yum install -y devscripts || sudo yum install -y https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/31/Everything/x86_64/os/Packages/d/devscripts-checkbashisms-2.19.6-2.fc31.x86_64.rpm || (echo "checkbashisms command not found - please install it (e.g. sudo apt-get install devscripts | yum install devscripts-minimal )" >&2 && exit 1)' checkbashisms: commands[2] /w/workspace/transportpce-tox-verify-transportpce-master/tests> find . -not -path '*/\.*' -name '*.sh' -exec checkbashisms -f '{}' + checkbashisms: OK ✔ in 3.81 seconds pre-commit: install_deps> python -I -m pip install pre-commit pre-commit: freeze> python -m pip freeze --all pre-commit: cfgv==3.5.0,distlib==0.4.0,filelock==3.28.0,identify==2.6.18,nodeenv==1.10.0,pip==26.0.1,platformdirs==4.9.6,pre_commit==4.5.1,python-discovery==1.2.2,PyYAML==6.0.3,setuptools==82.0.1,virtualenv==21.2.4 pre-commit: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./fixCIcentOS8reposMirrors.sh pre-commit: commands[1] /w/workspace/transportpce-tox-verify-transportpce-master/tests> sh -c 'which cpan || sudo yum install -y perl-CPAN || (echo "cpan command not found - please install it (e.g. sudo apt-get install perl-modules | yum install perl-CPAN )" >&2 && exit 1)' /usr/bin/cpan pre-commit: commands[2] /w/workspace/transportpce-tox-verify-transportpce-master/tests> pre-commit run --all-files --show-diff-on-failure [INFO] Initializing environment for https://github.com/pre-commit/pre-commit-hooks. [INFO] Initializing environment for https://github.com/jorisroovers/gitlint. [INFO] Initializing environment for https://github.com/jorisroovers/gitlint:./gitlint-core[trusted-deps]. [INFO] Initializing environment for https://github.com/Lucas-C/pre-commit-hooks. [INFO] Initializing environment for https://github.com/hhatto/autopep8. [INFO] Initializing environment for https://github.com/perltidy/perltidy. buildcontroller: freeze> python -m pip freeze --all buildcontroller: bcrypt==5.0.0,certifi==2026.2.25,cffi==2.0.0,charset-normalizer==3.4.7,cryptography==46.0.7,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==3.0.3,lxml==6.0.4,netconf-client==3.5.0,packaging==26.1,paramiko==4.0.0,pip==26.0.1,pluggy==1.6.0,psutil==7.2.2,pycparser==3.0,Pygments==2.20.0,PyNaCl==1.6.2,pytest==9.0.3,requests==2.33.1,setuptools==82.0.1,urllib3==2.6.3 buildcontroller: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_controller.sh java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64 java-1.17.0-openjdk-amd64 1711 /usr/lib/jvm/java-1.17.0-openjdk-amd64 java-1.21.0-openjdk-amd64 2111 /usr/lib/jvm/java-1.21.0-openjdk-amd64 [INFO] Initializing environment for https://github.com/koalaman/shellcheck-precommit. 21 [INFO] Initializing environment for https://github.com/pre-commit/mirrors-prettier. 21 ok, java is 21 or newer [INFO] Initializing environment for https://github.com/pre-commit/mirrors-prettier:prettier@4.0.0-alpha.8. [INFO] Initializing environment for https://github.com/adrienverge/yamllint. Apache Maven 3.9.14 (996c630dbc656c76214ce58821dcc58be960875b) Maven home: /opt/maven Java version: 21.0.10, vendor: Ubuntu, runtime: /usr/lib/jvm/java-21-openjdk-amd64 Default locale: en, platform encoding: UTF-8 OS name: "linux", version: "5.15.0-171-generic", arch: "amd64", family: "unix" [INFO] Installing environment for https://github.com/pre-commit/pre-commit-hooks. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... [INFO] Installing environment for https://github.com/Lucas-C/pre-commit-hooks. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... [INFO] Installing environment for https://github.com/hhatto/autopep8. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... [INFO] Installing environment for https://github.com/perltidy/perltidy. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... docs: freeze> python -m pip freeze --all docs-linkcheck: freeze> python -m pip freeze --all docs: alabaster==1.0.0,attrs==26.1.0,babel==2.18.0,blockdiag==3.0.0,certifi==2026.2.25,charset-normalizer==3.4.7,contourpy==1.3.3,cycler==0.12.1,docutils==0.21.2,fonttools==4.62.1,funcparserlib==2.0.0a0,future==1.0.0,idna==3.11,imagesize==2.0.0,Jinja2==3.1.6,jsonschema==3.2.0,kiwisolver==1.5.0,lfdocs_conf==0.10.0,MarkupSafe==3.0.3,matplotlib==3.10.8,numpy==2.4.4,nwdiag==3.0.0,packaging==26.1,pillow==12.2.0,pip==26.0.1,Pygments==2.20.0,pyparsing==3.3.2,pyrsistent==0.20.0,python-dateutil==2.9.0.post0,PyYAML==6.0.3,requests==2.33.1,requests-file==1.5.1,roman-numerals==4.1.0,roman-numerals-py==4.1.0,seqdiag==3.0.0,setuptools==82.0.1,six==1.17.0,snowballstemmer==3.0.1,Sphinx==8.2.3,sphinx-bootstrap-theme==0.8.1,sphinx-data-viewer==0.1.5,sphinx-tabs==3.5.0,sphinx_rtd_theme==3.1.0,sphinxcontrib-applehelp==2.0.0,sphinxcontrib-blockdiag==3.0.0,sphinxcontrib-devhelp==2.0.0,sphinxcontrib-htmlhelp==2.1.0,sphinxcontrib-jquery==4.1,sphinxcontrib-jsmath==1.0.1,sphinxcontrib-needs==0.7.9,sphinxcontrib-nwdiag==2.0.0,sphinxcontrib-plantuml==0.31,sphinxcontrib-qthelp==2.0.0,sphinxcontrib-seqdiag==3.0.0,sphinxcontrib-serializinghtml==2.0.0,sphinxcontrib-swaggerdoc==0.1.7,urllib3==2.6.3,webcolors==25.10.0 docs: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> sphinx-build -q -W --keep-going -b html -n -d /w/workspace/transportpce-tox-verify-transportpce-master/.tox/docs/tmp/doctrees ../docs/ /w/workspace/transportpce-tox-verify-transportpce-master/docs/_build/html docs-linkcheck: alabaster==1.0.0,attrs==26.1.0,babel==2.18.0,blockdiag==3.0.0,certifi==2026.2.25,charset-normalizer==3.4.7,contourpy==1.3.3,cycler==0.12.1,docutils==0.21.2,fonttools==4.62.1,funcparserlib==2.0.0a0,future==1.0.0,idna==3.11,imagesize==2.0.0,Jinja2==3.1.6,jsonschema==3.2.0,kiwisolver==1.5.0,lfdocs_conf==0.10.0,MarkupSafe==3.0.3,matplotlib==3.10.8,numpy==2.4.4,nwdiag==3.0.0,packaging==26.1,pillow==12.2.0,pip==26.0.1,Pygments==2.20.0,pyparsing==3.3.2,pyrsistent==0.20.0,python-dateutil==2.9.0.post0,PyYAML==6.0.3,requests==2.33.1,requests-file==1.5.1,roman-numerals==4.1.0,roman-numerals-py==4.1.0,seqdiag==3.0.0,setuptools==82.0.1,six==1.17.0,snowballstemmer==3.0.1,Sphinx==8.2.3,sphinx-bootstrap-theme==0.8.1,sphinx-data-viewer==0.1.5,sphinx-tabs==3.5.0,sphinx_rtd_theme==3.1.0,sphinxcontrib-applehelp==2.0.0,sphinxcontrib-blockdiag==3.0.0,sphinxcontrib-devhelp==2.0.0,sphinxcontrib-htmlhelp==2.1.0,sphinxcontrib-jquery==4.1,sphinxcontrib-jsmath==1.0.1,sphinxcontrib-needs==0.7.9,sphinxcontrib-nwdiag==2.0.0,sphinxcontrib-plantuml==0.31,sphinxcontrib-qthelp==2.0.0,sphinxcontrib-seqdiag==3.0.0,sphinxcontrib-serializinghtml==2.0.0,sphinxcontrib-swaggerdoc==0.1.7,urllib3==2.6.3,webcolors==25.10.0 docs-linkcheck: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> sphinx-build -q -b linkcheck -d /w/workspace/transportpce-tox-verify-transportpce-master/.tox/docs-linkcheck/tmp/doctrees ../docs/ /w/workspace/transportpce-tox-verify-transportpce-master/docs/_build/linkcheck docs: OK ✔ in 52.75 seconds pylint: install_deps> python -I -m pip install 'pylint>=2.6.0' [INFO] Installing environment for https://github.com/pre-commit/mirrors-prettier. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... docs-linkcheck: OK ✔ in 54.94 seconds pylint: freeze> python -m pip freeze --all pylint: astroid==4.0.4,dill==0.4.1,isort==8.0.1,mccabe==0.7.0,pip==26.0.1,platformdirs==4.9.6,pylint==4.0.5,setuptools==82.0.1,tomlkit==0.14.0 pylint: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> find transportpce_tests/ -name '*.py' -exec pylint --fail-under=10 --max-line-length=120 --disable=missing-docstring,import-error --disable=fixme --disable=duplicate-code '--module-rgx=([a-z0-9_]+$)|([0-9.]{1,30}$)' '--method-rgx=(([a-z_][a-zA-Z0-9_]{2,})|(_[a-z0-9_]*)|(__[a-zA-Z][a-zA-Z0-9_]+__))$' '--variable-rgx=[a-zA-Z_][a-zA-Z0-9_]{1,30}$' '{}' + [INFO] Installing environment for https://github.com/adrienverge/yamllint. [INFO] Once installed this environment will be reused. [INFO] This may take a few minutes... trim trailing whitespace.................................................Passed fix end of files.........................................................Passed check for added large files..............................................Passed check for merge conflicts................................................Passed check for case conflicts.................................................Passed check json...............................................................Passed mixed line ending........................................................Passed Tabs remover.............................................................Passed autopep8.................................................................Failed - hook id: autopep8 - files were modified by this hook perltidy.................................................................Passed ShellCheck v0.11.0.......................................................************* Module test03_tapi_device_change_notifications transportpce_tests/tapi/test03_tapi_device_change_notifications.py:673:0: C0301: Line too long (129/120) (line-too-long) transportpce_tests/tapi/test03_tapi_device_change_notifications.py:151:4: R0913: Too many arguments (6/5) (too-many-arguments) transportpce_tests/tapi/test03_tapi_device_change_notifications.py:151:4: R0917: Too many positional arguments (6/5) (too-many-positional-arguments) transportpce_tests/tapi/test03_tapi_device_change_notifications.py:177:4: R0913: Too many arguments (7/5) (too-many-arguments) transportpce_tests/tapi/test03_tapi_device_change_notifications.py:177:4: R0917: Too many positional arguments (7/5) (too-many-positional-arguments) transportpce_tests/tapi/test03_tapi_device_change_notifications.py:202:4: R0913: Too many arguments (7/5) (too-many-arguments) transportpce_tests/tapi/test03_tapi_device_change_notifications.py:202:4: R0917: Too many positional arguments (7/5) (too-many-positional-arguments) transportpce_tests/tapi/test03_tapi_device_change_notifications.py:226:4: R0913: Too many arguments (6/5) (too-many-arguments) transportpce_tests/tapi/test03_tapi_device_change_notifications.py:226:4: R0917: Too many positional arguments (6/5) (too-many-positional-arguments) transportpce_tests/tapi/test03_tapi_device_change_notifications.py:248:4: R0913: Too many arguments (6/5) (too-many-arguments) transportpce_tests/tapi/test03_tapi_device_change_notifications.py:248:4: R0917: Too many positional arguments (6/5) (too-many-positional-arguments) transportpce_tests/tapi/test03_tapi_device_change_notifications.py:272:4: R0913: Too many arguments (7/5) (too-many-arguments) transportpce_tests/tapi/test03_tapi_device_change_notifications.py:272:4: R0917: Too many positional arguments (7/5) (too-many-positional-arguments) transportpce_tests/tapi/test03_tapi_device_change_notifications.py:316:27: E0602: Undefined variable 'Path' (undefined-variable) ----------------------------------- Your code has been rated at 9.99/10 Passed prettier.................................................................Passed yamllint.................................................................pylint: exit 1 (31.46 seconds) /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}$' '{}' + pid=4477 Passed pre-commit hook(s) made changes. If you are seeing this message in CI, reproduce locally with: `pre-commit run --all-files`. To run `pre-commit` as part of git workflow, use `pre-commit install`. All changes made by hooks: diff --git a/tests/transportpce_tests/tapi/test03_tapi_device_change_notifications.py b/tests/transportpce_tests/tapi/test03_tapi_device_change_notifications.py index e992f5bdb..04da18f9b 100644 --- a/tests/transportpce_tests/tapi/test03_tapi_device_change_notifications.py +++ b/tests/transportpce_tests/tapi/test03_tapi_device_change_notifications.py @@ -235,8 +235,8 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): for mapping in mappings: if mapping.get('logical-connection-point') == logical_connection_point: return ( - mapping.get('port-oper-state') == expected_state and - mapping.get('port-admin-state') == expected_state + mapping.get('port-oper-state') == expected_state and + mapping.get('port-admin-state') == expected_state ) return False @@ -259,8 +259,8 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): for tp in node.get('ietf-network-topology:termination-point', []): if tp.get('tp-id') == tp_id: return ( - tp.get('org-openroadm-common-network:operational-state') == expected_state and - tp.get('org-openroadm-common-network:administrative-state') == expected_state + tp.get('org-openroadm-common-network:operational-state') == expected_state and + tp.get('org-openroadm-common-network:administrative-state') == expected_state ) return False @@ -285,8 +285,8 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): value = names[0].get('value', '') if names else '' if name_fragment in value: return ( - nep.get('operational-state') == expected_oper and - nep.get('administrative-state') == expected_admin + nep.get('operational-state') == expected_oper and + nep.get('administrative-state') == expected_admin ) return False @@ -310,7 +310,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): description=f"{topology_name} to be cleared" ) - @staticmethod def _json_default(obj): if isinstance(obj, Path): @@ -382,7 +381,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): # pylint: disable=consider-using-f-string print("execution of {}".format(self.id().split(".")[-1])) - def _assert_ordm_service_planned(self): response = self._wait_for_ordm_service_state( "serviceEthernet-1", admin='inService', lifecycle='planned', timeout=60 @@ -603,7 +601,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): def test_12_get_service_Ethernet(self): self._assert_ordm_service_planned() - def test_13_get_connectivity_service_Ethernet(self): self._assert_tapi_service_installed() @@ -633,7 +630,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): self.assertEqual(mapping['port-admin-state'], 'InService', "Administrative State should be 'InService'") - def test_16_check_update_openroadm_topo(self): response = test_utils.get_ietf_network_request('openroadm-topology', 'config') self.assertEqual(response['status_code'], requests.codes.ok) @@ -670,7 +666,8 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): self.assertEqual(link['org-openroadm-common-network:operational-state'], 'inService') self.assertEqual(link['org-openroadm-common-network:administrative-state'], 'inService') self.assertEqual(nb_updated_link, 2, "Only two xponder-output/input links should have been modified") - self._wait_for_tapi_nep_state('1770bea4-b1da-3b20-abce-7d182c0ec0df', 'XPDR1-NETWORK1', 'DISABLED', 'LOCKED', timeout=45) + self._wait_for_tapi_nep_state('1770bea4-b1da-3b20-abce-7d182c0ec0df', + 'XPDR1-NETWORK1', 'DISABLED', 'LOCKED', timeout=45) def test_17_check_update_tapi_neps(self): self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID @@ -696,7 +693,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): self.node_details["node-id"] = "XPDR-C1-XPDR1+DSR" self.assertEqual(nb_updated_neps, 4, "4 xponder neps (OTS, OTSI_MC, iOTU, eODU) should have been modified") - def test_18_check_update_tapi_links(self): self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( @@ -716,14 +712,12 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): self.assertEqual(nb_updated_link, 1, "Only one xponder-output/input bidirectional link should have been modified") - def test_19_check_update_service_Ethernet(self): self._assert_service_degraded() def test_20_check_update_connectivity_service_Ethernet(self): self._assert_tapi_service_degraded() - def test_21_restore_status_line_port_xpdrc(self): self.assertTrue(test_utils.sims_update_cp_port(('xpdrc', self.NODE_VERSION_221), '1/0/1-PLUG-NET', '1', { @@ -737,11 +731,9 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): def test_22_check_update_portmapping_ok(self): self._assert_portmapping_all_in_service("XPDR-C1") - def test_23_check_update_openroadm_topo_ok(self): self._assert_openroadm_topology_all_in_service() - def test_24_check_update_tapi_neps_ok(self): self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID # self.node_details["node-id"] = "XPDR-C1-XPDR1+OTSi" @@ -756,11 +748,9 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): self.assertEqual(nep['administrative-state'], 'UNLOCKED', "Administrative State should be 'UNLOCKED'") - def test_25_check_update_tapi_links_ok(self): self._assert_tapi_links_all_enabled() - def test_26_check_update_service1_ok(self): self._assert_ordm_service_planned() @@ -799,7 +789,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): self.assertEqual(mapping['port-admin-state'], 'InService', "Administrative State should be 'InService'") - def test_30_check_update_openroadm_topo(self): response = test_utils.get_ietf_network_request('openroadm-topology', 'config') self.assertEqual(response['status_code'], requests.codes.ok) @@ -837,7 +826,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): self.assertEqual(link['org-openroadm-common-network:administrative-state'], 'inService') self.assertEqual(nb_updated_link, 2, "Only two xponder-output/input links should have been modified") - def test_31_check_update_tapi_neps(self): self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID # self.node_details["node-id"] = "ROADM-A1+PHOTONIC_MEDIA" @@ -861,7 +849,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): "Administrative State should be 'UNLOCKED'") self.assertEqual(nb_updated_neps, 2, "Only 2 roadm SRG-PP nep (OTS/MC)should have been modified") - def test_32_check_update_tapi_links(self): self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( @@ -880,7 +867,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): self.assertEqual(nb_updated_link, 1, "Only one xponder-output/input link should have been modified") - def test_33_check_update_service_Ethernet(self): self._assert_service_degraded() @@ -902,14 +888,12 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): def test_36_check_update_portmapping_ok(self): self._assert_portmapping_all_in_service("ROADM-A1") - def test_37_check_update_openroadm_topo_ok(self): self._assert_openroadm_topology_all_in_service() def test_38_check_update_tapi_neps_ok(self): self._assert_roadm_a_photonic_media_neps_enabled() - def test_39_check_update_tapi_links_ok(self): self._assert_tapi_links_all_enabled() @@ -947,7 +931,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): self.assertEqual(mapping['port-admin-state'], 'InService', "Administrative State should be 'InService'") - def test_44_check_update_openroadm_topo(self): response = test_utils.get_ietf_network_request('openroadm-topology', 'config') self.assertEqual(response['status_code'], requests.codes.ok) @@ -984,7 +967,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): self.assertEqual(link['org-openroadm-common-network:administrative-state'], 'inService') self.assertEqual(nb_updated_link, 2, "Only two xponder-output/input links should have been modified") - def test_45_check_update_tapi_neps(self): self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID # self.node_details["node-id"] = "ROADM-A1+PHOTONIC_MEDIA" @@ -1008,11 +990,9 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): "Administrative State should be 'UNLOCKED'") self.assertEqual(nb_updated_neps, 4, "4 roadm NEPS should have been modified (OTS/OMS/MC/OTSI_MC") - def test_46_check_update_tapi_links(self): self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID - response = self._wait_until( lambda: test_utils.transportpce_api_rpc_request('tapi-topology', 'get-topology-details', self.tapi_topo), lambda r: r['status_code'] == requests.codes.ok, @@ -1033,7 +1013,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): self.assertEqual(nb_updated_link, 1, "Only one rdm-rdm link should have been modified") - def test_47_check_update_service_Ethernet(self): self._assert_service_degraded() @@ -1098,7 +1077,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): self.assertEqual(mapping['port-admin-state'], 'InService', "Administrative State should be 'InService'") - def test_58_check_update_openroadm_topo(self): response = test_utils.get_ietf_network_request('openroadm-topology', 'config') self.assertEqual(response['status_code'], requests.codes.ok) @@ -1131,7 +1109,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): self.assertEqual(link['org-openroadm-common-network:operational-state'], 'inService') self.assertEqual(link['org-openroadm-common-network:administrative-state'], 'inService') - def test_59_check_update_tapi_neps(self): self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID # self.node_details["node-id"] = uuid.UUID(bytes="ROADM-A1+PHOTONIC_MEDIA".bytes) @@ -1155,7 +1132,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): "Administrative State should be 'UNLOCKED'") self.assertEqual(nb_updated_neps, 1, "Only 1 roadm neps OTS should have been modified for SRG2PP") - def test_60_check_update_tapi_links(self): self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( @@ -1172,7 +1148,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): self.assertEqual(link['operational-state'], 'ENABLED') self.assertEqual(link['administrative-state'], 'UNLOCKED') - def test_61_check_update_service1_ok(self): self._assert_ordm_service_planned() @@ -1364,5 +1339,6 @@ class TestTransportPCEDeviceChangeNotifications(unittest.TestCase): description=f"TAPI service {uuid_value} to disappear" ) + if __name__ == "__main__": unittest.main(verbosity=2) pylint: FAIL ✖ in 37.26 seconds pre-commit: exit 1 (74.28 seconds) /w/workspace/transportpce-tox-verify-transportpce-master/tests> pre-commit run --all-files --show-diff-on-failure pid=3420 pre-commit: FAIL ✖ in 1 minute 26.34 seconds buildcontroller: OK ✔ in 2 minutes 16.51 seconds build_karaf_tests190: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt build_karaf_tests71: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt build_karaf_tests221: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt build_karaf_tests121: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt build_karaf_tests190: freeze> python -m pip freeze --all build_karaf_tests121: freeze> python -m pip freeze --all build_karaf_tests190: bcrypt==5.0.0,certifi==2026.2.25,cffi==2.0.0,charset-normalizer==3.4.7,cryptography==46.0.7,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==3.0.3,lxml==6.0.4,netconf-client==3.5.0,packaging==26.1,paramiko==4.0.0,pip==26.0.1,pluggy==1.6.0,psutil==7.2.2,pycparser==3.0,Pygments==2.20.0,PyNaCl==1.6.2,pytest==9.0.3,requests==2.33.1,setuptools==82.0.1,urllib3==2.6.3 build_karaf_tests190: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_karaf_for_tests.sh build karaf in karafoc with ./karafoc.env build_karaf_tests71: freeze> python -m pip freeze --all build_karaf_tests221: freeze> python -m pip freeze --all build_karaf_tests121: bcrypt==5.0.0,certifi==2026.2.25,cffi==2.0.0,charset-normalizer==3.4.7,cryptography==46.0.7,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==3.0.3,lxml==6.0.4,netconf-client==3.5.0,packaging==26.1,paramiko==4.0.0,pip==26.0.1,pluggy==1.6.0,psutil==7.2.2,pycparser==3.0,Pygments==2.20.0,PyNaCl==1.6.2,pytest==9.0.3,requests==2.33.1,setuptools==82.0.1,urllib3==2.6.3 build_karaf_tests121: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_karaf_for_tests.sh build karaf in karaf121 with ./karaf121.env build_karaf_tests71: bcrypt==5.0.0,certifi==2026.2.25,cffi==2.0.0,charset-normalizer==3.4.7,cryptography==46.0.7,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==3.0.3,lxml==6.0.4,netconf-client==3.5.0,packaging==26.1,paramiko==4.0.0,pip==26.0.1,pluggy==1.6.0,psutil==7.2.2,pycparser==3.0,Pygments==2.20.0,PyNaCl==1.6.2,pytest==9.0.3,requests==2.33.1,setuptools==82.0.1,urllib3==2.6.3 build_karaf_tests71: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_karaf_for_tests.sh build karaf in karaf71 with ./karaf71.env build_karaf_tests221: bcrypt==5.0.0,certifi==2026.2.25,cffi==2.0.0,charset-normalizer==3.4.7,cryptography==46.0.7,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==3.0.3,lxml==6.0.4,netconf-client==3.5.0,packaging==26.1,paramiko==4.0.0,pip==26.0.1,pluggy==1.6.0,psutil==7.2.2,pycparser==3.0,Pygments==2.20.0,PyNaCl==1.6.2,pytest==9.0.3,requests==2.33.1,setuptools==82.0.1,urllib3==2.6.3 build_karaf_tests221: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./build_karaf_for_tests.sh build karaf in karaf221 with ./karaf221.env build_karaf_tests190: OK ✔ in 1 minute 37.8 seconds buildlighty: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt build_karaf_tests221: OK ✔ in 1 minute 53.18 seconds build_karaf_tests121: OK ✔ in 1 minute 53.22 seconds build_karaf_tests71: OK ✔ in 1 minute 53.22 seconds sims: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt testsPCE: install_deps> python -I -m pip install gnpy4tpce==2.4.7 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt buildlighty: freeze> python -m pip freeze --all buildlighty: bcrypt==5.0.0,certifi==2026.2.25,cffi==2.0.0,charset-normalizer==3.4.7,cryptography==46.0.7,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==3.0.3,lxml==6.0.4,netconf-client==3.5.0,packaging==26.1,paramiko==4.0.0,pip==26.0.1,pluggy==1.6.0,psutil==7.2.2,pycparser==3.0,Pygments==2.20.0,PyNaCl==1.6.2,pytest==9.0.3,requests==2.33.1,setuptools==82.0.1,urllib3==2.6.3 buildlighty: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/lighty> ./build.sh sims: freeze> python -m pip freeze --all sims: bcrypt==5.0.0,certifi==2026.2.25,cffi==2.0.0,charset-normalizer==3.4.7,cryptography==46.0.7,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==3.0.3,lxml==6.0.4,netconf-client==3.5.0,packaging==26.1,paramiko==4.0.0,pip==26.0.1,pluggy==1.6.0,psutil==7.2.2,pycparser==3.0,Pygments==2.20.0,PyNaCl==1.6.2,pytest==9.0.3,requests==2.33.1,setuptools==82.0.1,urllib3==2.6.3 sims: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./install_lightynode.sh Using lighynode version 22.1.0.6 Installing lightynode device to ./lightynode/lightynode-openroadm-device directory sims: OK ✔ in 50.36 seconds buildlighty: OK ✔ in 1 minute 13.87 seconds testsPCE: freeze> python -m pip freeze --all testsPCE: bcrypt==5.0.0,certifi==2026.2.25,cffi==2.0.0,charset-normalizer==3.4.7,click==8.3.2,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.62.1,gnpy4tpce==2.4.7,idna==3.11,iniconfig==2.3.0,injector==0.24.0,invoke==3.0.3,itsdangerous==2.2.0,Jinja2==3.1.6,kiwisolver==1.5.0,lxml==6.0.4,MarkupSafe==3.0.3,matplotlib==3.10.8,netconf-client==3.5.0,networkx==2.8.8,numpy==1.26.4,packaging==26.1,pandas==1.5.3,paramiko==4.0.0,pbr==5.11.1,pillow==12.2.0,pip==26.0.1,pluggy==1.6.0,psutil==7.2.2,pycparser==3.0,Pygments==2.20.0,PyNaCl==1.6.2,pyparsing==3.3.2,pytest==9.0.3,python-dateutil==2.9.0.post0,pytz==2026.1.post1,requests==2.33.1,scipy==1.17.1,setuptools==50.3.2,six==1.17.0,urllib3==2.6.3,Werkzeug==2.0.3,xlrd==1.2.0 testsPCE: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh pce pytest -q transportpce_tests/pce/test01_pce.py .................... [100%] 20 passed in 117.95s (0:01:57) pytest -q transportpce_tests/pce/test02_pce_400G.py ............ [100%] 12 passed in 52.47s pytest -q transportpce_tests/pce/test03_gnpy.py ........ [100%] 8 passed in 40.43s pytest -q transportpce_tests/pce/test04_pce_bug_fix.py ... [100%] 3 passed in 39.45s testsPCE: OK ✔ in 6 minutes 35.19 seconds 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 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 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 tests121: freeze> python -m pip freeze --all tests_tapi: freeze> python -m pip freeze --all tests190: freeze> python -m pip freeze --all tests121: bcrypt==5.0.0,certifi==2026.2.25,cffi==2.0.0,charset-normalizer==3.4.7,cryptography==46.0.7,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==3.0.3,lxml==6.0.4,netconf-client==3.5.0,packaging==26.1,paramiko==4.0.0,pip==26.0.1,pluggy==1.6.0,psutil==7.2.2,pycparser==3.0,Pygments==2.20.0,PyNaCl==1.6.2,pytest==9.0.3,requests==2.33.1,setuptools==82.0.1,urllib3==2.6.3 tests121: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh 1.2.1 using environment variables from ./karaf121.env pytest -q transportpce_tests/1.2.1/test01_portmapping.py tests_tapi: bcrypt==5.0.0,certifi==2026.2.25,cffi==2.0.0,charset-normalizer==3.4.7,cryptography==46.0.7,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==3.0.3,lxml==6.0.4,netconf-client==3.5.0,packaging==26.1,paramiko==4.0.0,pip==26.0.1,pluggy==1.6.0,psutil==7.2.2,pycparser==3.0,Pygments==2.20.0,PyNaCl==1.6.2,pytest==9.0.3,requests==2.33.1,setuptools==82.0.1,urllib3==2.6.3 tests_tapi: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh tapi using environment variables from ./karaf221.env pytest -q transportpce_tests/tapi/test01_abstracted_topology.py tests190: bcrypt==5.0.0,certifi==2026.2.25,cffi==2.0.0,charset-normalizer==3.4.7,cryptography==46.0.7,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==3.0.3,lxml==6.0.4,netconf-client==3.5.0,packaging==26.1,paramiko==4.0.0,pip==26.0.1,pluggy==1.6.0,psutil==7.2.2,pycparser==3.0,Pygments==2.20.0,PyNaCl==1.6.2,pytest==9.0.3,requests==2.33.1,setuptools==82.0.1,urllib3==2.6.3 tests190: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh oc using environment variables from ./karafoc.env pytest -q transportpce_tests/oc/test01_portmapping.py ........... [100%] 10 passed in 91.73s (0:01:31) pytest -q transportpce_tests/oc/test02_topology.py ........................... [100%] 21 passed in 140.82s (0:02:20) .pytest -q transportpce_tests/1.2.1/test02_topo_portmapping.py ............................. [100%] 14 passed in 71.54s (0:01:11) pytest -q transportpce_tests/oc/test03_renderer.py ...................... [100%]. 6 passed in 72.25s (0:01:12) pytest -q transportpce_tests/1.2.1/test03_topology.py ................ [100%] 19 passed in 66.51s (0:01:06) tests190: OK ✔ in 4 minutes 5.7 seconds tests71: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt .tests71: freeze> python -m pip freeze --all tests71: bcrypt==5.0.0,certifi==2026.2.25,cffi==2.0.0,charset-normalizer==3.4.7,cryptography==46.0.7,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==3.0.3,lxml==6.0.4,netconf-client==3.5.0,packaging==26.1,paramiko==4.0.0,pip==26.0.1,pluggy==1.6.0,psutil==7.2.2,pycparser==3.0,Pygments==2.20.0,PyNaCl==1.6.2,pytest==9.0.3,requests==2.33.1,setuptools==82.0.1,urllib3==2.6.3 tests71: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh 7.1 using environment variables from ./karaf71.env pytest -q transportpce_tests/7.1/test01_portmapping.py .................................... [100%] 12 passed in 62.80s (0:01:02) pytest -q transportpce_tests/7.1/test02_otn_renderer.py ............... [100%] 51 passed in 337.72s (0:05:37) pytest -q transportpce_tests/tapi/test02_full_topology.py ..................................... [100%] 44 passed in 164.06s (0:02:44) pytest -q transportpce_tests/1.2.1/test04_renderer_service_path_nominal.py ............................................................................. [100%] 62 passed in 163.83s (0:02:43) pytest -q transportpce_tests/7.1/test03_renderer_or_modes.py ..... [100%] 24 passed in 101.48s (0:01:41) pytest -q transportpce_tests/1.2.1/test05_olm.py ......................................................................................... [100%] 48 passed in 154.84s (0:02:34) pytest -q transportpce_tests/7.1/test04_renderer_regen_mode.py ............................. [100%] 40 passed in 206.46s (0:03:26) pytest -q transportpce_tests/1.2.1/test06_end2end.py ........ [100%] 22 passed in 78.80s (0:01:18) ................................... [100%] 36 passed in 529.11s (0:08:49) pytest -q transportpce_tests/tapi/test03_tapi_device_change_notifications.py ......................................................................................... [100%] 71 passed in 119.69s (0:01:59) pytest -q transportpce_tests/tapi/test04_topo_extension.py .................... [100%] 19 passed in 157.18s (0:02:37) pytest -q transportpce_tests/tapi/test05_pce_tapi.py ..... [100%] 54 passed in 540.57s (0:09:00) ...................... [100%] 22 passed in 472.88s (0:07:52) tests71: OK ✔ in 7 minutes 52.94 seconds tests121: OK ✔ in 20 minutes 43.05 seconds tests_tapi: OK ✔ in 27 minutes 13.22 seconds tests221: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt tests221: freeze> python -m pip freeze --all tests221: bcrypt==5.0.0,certifi==2026.2.25,cffi==2.0.0,charset-normalizer==3.4.7,cryptography==46.0.7,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==3.0.3,lxml==6.0.4,netconf-client==3.5.0,packaging==26.1,paramiko==4.0.0,pip==26.0.1,pluggy==1.6.0,psutil==7.2.2,pycparser==3.0,Pygments==2.20.0,PyNaCl==1.6.2,pytest==9.0.3,requests==2.33.1,setuptools==82.0.1,urllib3==2.6.3 tests221: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh 2.2.1 using environment variables from ./karaf221.env pytest -q transportpce_tests/2.2.1/test01_portmapping.py ................................... [100%] 35 passed in 80.45s (0:01:20) pytest -q transportpce_tests/2.2.1/test02_topo_portmapping.py ...... [100%] 6 passed in 48.52s pytest -q transportpce_tests/2.2.1/test03_topology.py ............................................ [100%] 44 passed in 323.77s (0:05:23) pytest -q transportpce_tests/2.2.1/test04_otn_topology.py ............ [100%] 12 passed in 63.21s (0:01:03) pytest -q transportpce_tests/2.2.1/test05_flex_grid.py ................ [100%] 16 passed in 118.10s (0:01:58) pytest -q transportpce_tests/2.2.1/test06_renderer_service_path_nominal.py ............................... [100%] 31 passed in 40.66s pytest -q transportpce_tests/2.2.1/test07_otn_renderer.py .......................... [100%] 26 passed in 93.74s (0:01:33) pytest -q transportpce_tests/2.2.1/test08_otn_sh_renderer.py ...................... [100%] 22 passed in 103.95s (0:01:43) pytest -q transportpce_tests/2.2.1/test09_olm.py ........................................ [100%] 40 passed in 186.82s (0:03:06) pytest -q transportpce_tests/2.2.1/test11_otn_end2end.py ........................................................................ [ 74%] ......................... [100%] 97 passed in 493.67s (0:08:13) pytest -q transportpce_tests/2.2.1/test12_end2end.py ...................................................... [100%] 54 passed in 629.82s (0:10:29) pytest -q transportpce_tests/2.2.1/test14_otn_switch_end2end.py ........................................................................ [ 71%] ............................. [100%] 101 passed in 495.95s (0:08:15) pytest -q transportpce_tests/2.2.1/test15_otn_end2end_with_intermediate_switch.py ........................................................................ [ 67%] ................................... [100%] 107 passed in 787.54s (0:13:07) pytest -q transportpce_tests/2.2.1/test16_freq_end2end.py ............................................. [100%] 45 passed in 205.82s (0:03:25) tests221: OK ✔ in 1 hour 1 minute 24.06 seconds tests_hybrid: install_deps> python -I -m pip install 'setuptools>=7.0' -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/requirements.txt -r /w/workspace/transportpce-tox-verify-transportpce-master/tests/test-requirements.txt tests_hybrid: freeze> python -m pip freeze --all tests_hybrid: bcrypt==5.0.0,certifi==2026.2.25,cffi==2.0.0,charset-normalizer==3.4.7,cryptography==46.0.7,dict2xml==1.7.8,idna==3.11,iniconfig==2.3.0,invoke==3.0.3,lxml==6.0.4,netconf-client==3.5.0,packaging==26.1,paramiko==4.0.0,pip==26.0.1,pluggy==1.6.0,psutil==7.2.2,pycparser==3.0,Pygments==2.20.0,PyNaCl==1.6.2,pytest==9.0.3,requests==2.33.1,setuptools==82.0.1,urllib3==2.6.3 tests_hybrid: commands[0] /w/workspace/transportpce-tox-verify-transportpce-master/tests> ./launch_tests.sh hybrid using environment variables from ./karaf221.env pytest -q transportpce_tests/hybrid/test01_device_change_notifications.py ................................................... [100%] 51 passed in 152.73s (0:02:32) pytest -q transportpce_tests/hybrid/test02_B100G_end2end.py ........................................................................ [ 66%] ..................................... [100%] 109 passed in 433.27s (0:07:13) pytest -q transportpce_tests/hybrid/test03_autonomous_reroute.py ..................................................... [100%] 53 passed in 263.90s (0:04:23) buildcontroller: OK (136.51=setup[21.27]+cmd[115.24] seconds) sims: OK (50.36=setup[46.51]+cmd[3.85] seconds) build_karaf_tests121: OK (113.22=setup[18.75]+cmd[94.47] seconds) testsPCE: OK (395.19=setup[143.43]+cmd[251.76] seconds) tests121: OK (1243.05=setup[14.14]+cmd[1228.91] seconds) build_karaf_tests221: OK (113.18=setup[19.08]+cmd[94.10] seconds) tests_tapi: OK (1633.22=setup[14.20]+cmd[1619.01] seconds) tests221: OK (3684.06=setup[7.13]+cmd[3676.92] seconds) build_karaf_tests71: OK (113.22=setup[19.04]+cmd[94.18] seconds) tests71: OK (472.94=setup[10.31]+cmd[462.62] seconds) build_karaf_tests190: OK (97.80=setup[18.59]+cmd[79.21] seconds) tests190: OK (245.70=setup[14.38]+cmd[231.32] seconds) tests_hybrid: OK (858.60=setup[7.70]+cmd[850.89] seconds) buildlighty: OK (73.87=setup[46.25]+cmd[27.62] seconds) docs: OK (52.75=setup[48.80]+cmd[3.95] seconds) docs-linkcheck: OK (54.94=setup[49.51]+cmd[5.43] seconds) checkbashisms: OK (3.80=setup[2.50]+cmd[0.00,0.05,1.24] seconds) pre-commit: FAIL code 1 (86.34=setup[12.06]+cmd[0.00,0.00,74.28] seconds) pylint: FAIL code 1 (37.26=setup[5.80]+cmd[31.46] seconds) evaluation failed :( (6820.85 seconds)