← Back to team overview

yahoo-eng-team team mailing list archive

[Bug 1998343] [NEW] Unittest test_distributed_port_binding_deleted_by_port_deletion fails: DeprecationWarning('ssl.PROTOCOL_TLS is deprecated')

 

Public bug reported:

I got an error in the test_distributed_port_binding_deleted_by_port_deletion test on my CI run [1].
Also I found the same failure in another CI run [2]

FAIL: neutron.tests.unit.plugins.ml2.test_db.Ml2DvrDBTestCase.test_distributed_port_binding_deleted_by_port_deletion
tags: worker-0
----------------------------------------------------------------------
stderr: {{{
/home/zuul/src/opendev.org/openstack/neutron/.tox/shared/lib/python3.10/site-packages/ovs/stream.py:794: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated
  ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
/home/zuul/src/opendev.org/openstack/neutron/.tox/shared/lib/python3.10/site-packages/ovs/stream.py:794: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated
  ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
}}}

Traceback (most recent call last):
  File "/home/zuul/src/opendev.org/openstack/neutron/neutron/tests/base.py", line 182, in func
    return f(self, *args, **kwargs)
  File "/home/zuul/src/opendev.org/openstack/neutron/neutron/tests/unit/plugins/ml2/test_db.py", line 535, in test_distributed_port_binding_deleted_by_port_deletion
    self.assertEqual(
  File "/home/zuul/src/opendev.org/openstack/neutron/.tox/shared/lib/python3.10/site-packages/testtools/testcase.py", line 393, in assertEqual
    self.assertThat(observed, matcher, message)
  File "/home/zuul/src/opendev.org/openstack/neutron/.tox/shared/lib/python3.10/site-packages/testtools/testcase.py", line 480, in assertThat
    raise mismatch_error
testtools.matchers._impl.MismatchError: [] != [<warnings.WarningMessage object at 0x7f65a6cdd3c0>]: Warnings: {message : DeprecationWarning('ssl.PROTOCOL_TLS is deprecated'), category : 'DeprecationWarning', filename : '/home/zuul/src/opendev.org/openstack/neutron/.tox/shared/lib/python3.10/site-packages/ovs/stream.py', lineno : 794, line : None}

I have spent some time and seem to have found the reason for this behavior on python 3.10.
First of all, since python3.10 we get a warning when using ssl.PROTOCOL_TLS [3]:

[root@node0 neutron]# python
Python 3.10.8+ (heads/3.10-dirty:ca3c480, Nov 30 2022, 12:16:40) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> ssl.SSLContext(ssl.PROTOCOL_SSLv23)
<stdin>:1: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated
<ssl.SSLContext object at 0x7f98620223c0>
>>>

I also found that the `test_ssl_connection` test case affects catching warnings in the test_distributed_port_binding_deleted_by_port_deletion test case.
I was then able to reproduce the issue like this:

[root@node0 neutron]# cat run_list.txt
neutron.tests.unit.agent.ovsdb.native.test_connection.ConfigureSslConnTestCase.test_ssl_connection
neutron.tests.unit.plugins.ml2.test_db.Ml2DvrDBTestCase.test_distributed_port_binding_deleted_by_port_deletion
[root@node0 neutron]# git diff
diff --git a/neutron/tests/unit/plugins/ml2/test_db.py b/neutron/tests/unit/plugins/ml2/test_db.py
index 578a01a..d837871 100644
--- a/neutron/tests/unit/plugins/ml2/test_db.py
+++ b/neutron/tests/unit/plugins/ml2/test_db.py
@@ -531,6 +531,8 @@ class Ml2DvrDBTestCase(testlib_api.SqlTestCase):
             router_id='router_id',
             status=constants.PORT_STATUS_DOWN).create()
         with warnings.catch_warnings(record=True) as warning_list:
+            import time
+            time.sleep(0.1)
             port.delete()
             self.assertEqual(
                 [], warning_list,
[root@node0 neutron]# source .tox/shared/bin/activate
(shared) [root@node0 neutron]# stestr run --concurrency=1 --load-list ./run_list.txt
...
neutron.tests.unit.plugins.ml2.test_db.Ml2DvrDBTestCase.test_distributed_port_binding_deleted_by_port_deletion
--------------------------------------------------------------------------------------------------------------
Captured traceback:
~~~~~~~~~~~~~~~~~~~
    Traceback (most recent call last):
      File "/root/github/neutron/neutron/tests/base.py", line 182, in func
    return f(self, *args, **kwargs)
      File "/root/github/neutron/neutron/tests/unit/plugins/ml2/test_db.py", line 537, in test_distributed_port_binding_deleted_by_port_deletion
    self.assertEqual(
      File "/root/github/neutron/.tox/shared/lib/python3.10/site-packages/testtools/testcase.py", line 393, in assertEqual
    self.assertThat(observed, matcher, message)
      File "/root/github/neutron/.tox/shared/lib/python3.10/site-packages/testtools/testcase.py", line 480, in assertThat
    raise mismatch_error
    testtools.matchers._impl.MismatchError: [] != [<warnings.WarningMessage object at 0x7f701cb5f640>]: Warnings: {message : DeprecationWarning('ssl.PROTOCOL_TLS is deprecated'), category : 'DeprecationWarning', filename : '/root/github/neutron/.tox/shared/lib/python3.10/site-packages/ovs/stream.py', lineno : 794, line : None}

======
Totals
======
Ran: 2 tests in 1.3571 sec.
 - Passed: 1
 - Skipped: 0
 - Expected Fail: 0
 - Unexpected Success: 0
 - Failed: 1
Sum of execute time for each test: 1.3053 sec.


[1] https://zuul.opendev.org/t/openstack/build/8e0dd6e817394911aa0baffe07798b13
[2] https://zuul.opendev.org/t/openstack/build/9f7881818f7842b38d31ed44ffa8a4f3
[3] https://github.com/python/cpython/blob/3.10/Modules/_ssl.c#L3038

** Affects: neutron
     Importance: Undecided
         Status: New

-- 
You received this bug notification because you are a member of Yahoo!
Engineering Team, which is subscribed to neutron.
https://bugs.launchpad.net/bugs/1998343

Title:
  Unittest test_distributed_port_binding_deleted_by_port_deletion fails:
  DeprecationWarning('ssl.PROTOCOL_TLS is deprecated')

Status in neutron:
  New

Bug description:
  I got an error in the test_distributed_port_binding_deleted_by_port_deletion test on my CI run [1].
  Also I found the same failure in another CI run [2]

  FAIL: neutron.tests.unit.plugins.ml2.test_db.Ml2DvrDBTestCase.test_distributed_port_binding_deleted_by_port_deletion
  tags: worker-0
  ----------------------------------------------------------------------
  stderr: {{{
  /home/zuul/src/opendev.org/openstack/neutron/.tox/shared/lib/python3.10/site-packages/ovs/stream.py:794: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated
    ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
  /home/zuul/src/opendev.org/openstack/neutron/.tox/shared/lib/python3.10/site-packages/ovs/stream.py:794: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated
    ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
  }}}

  Traceback (most recent call last):
    File "/home/zuul/src/opendev.org/openstack/neutron/neutron/tests/base.py", line 182, in func
      return f(self, *args, **kwargs)
    File "/home/zuul/src/opendev.org/openstack/neutron/neutron/tests/unit/plugins/ml2/test_db.py", line 535, in test_distributed_port_binding_deleted_by_port_deletion
      self.assertEqual(
    File "/home/zuul/src/opendev.org/openstack/neutron/.tox/shared/lib/python3.10/site-packages/testtools/testcase.py", line 393, in assertEqual
      self.assertThat(observed, matcher, message)
    File "/home/zuul/src/opendev.org/openstack/neutron/.tox/shared/lib/python3.10/site-packages/testtools/testcase.py", line 480, in assertThat
      raise mismatch_error
  testtools.matchers._impl.MismatchError: [] != [<warnings.WarningMessage object at 0x7f65a6cdd3c0>]: Warnings: {message : DeprecationWarning('ssl.PROTOCOL_TLS is deprecated'), category : 'DeprecationWarning', filename : '/home/zuul/src/opendev.org/openstack/neutron/.tox/shared/lib/python3.10/site-packages/ovs/stream.py', lineno : 794, line : None}

  I have spent some time and seem to have found the reason for this behavior on python 3.10.
  First of all, since python3.10 we get a warning when using ssl.PROTOCOL_TLS [3]:

  [root@node0 neutron]# python
  Python 3.10.8+ (heads/3.10-dirty:ca3c480, Nov 30 2022, 12:16:40) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
  Type "help", "copyright", "credits" or "license" for more information.
  >>> import ssl
  >>> ssl.SSLContext(ssl.PROTOCOL_SSLv23)
  <stdin>:1: DeprecationWarning: ssl.PROTOCOL_TLS is deprecated
  <ssl.SSLContext object at 0x7f98620223c0>
  >>>

  I also found that the `test_ssl_connection` test case affects catching warnings in the test_distributed_port_binding_deleted_by_port_deletion test case.
  I was then able to reproduce the issue like this:

  [root@node0 neutron]# cat run_list.txt
  neutron.tests.unit.agent.ovsdb.native.test_connection.ConfigureSslConnTestCase.test_ssl_connection
  neutron.tests.unit.plugins.ml2.test_db.Ml2DvrDBTestCase.test_distributed_port_binding_deleted_by_port_deletion
  [root@node0 neutron]# git diff
  diff --git a/neutron/tests/unit/plugins/ml2/test_db.py b/neutron/tests/unit/plugins/ml2/test_db.py
  index 578a01a..d837871 100644
  --- a/neutron/tests/unit/plugins/ml2/test_db.py
  +++ b/neutron/tests/unit/plugins/ml2/test_db.py
  @@ -531,6 +531,8 @@ class Ml2DvrDBTestCase(testlib_api.SqlTestCase):
               router_id='router_id',
               status=constants.PORT_STATUS_DOWN).create()
           with warnings.catch_warnings(record=True) as warning_list:
  +            import time
  +            time.sleep(0.1)
               port.delete()
               self.assertEqual(
                   [], warning_list,
  [root@node0 neutron]# source .tox/shared/bin/activate
  (shared) [root@node0 neutron]# stestr run --concurrency=1 --load-list ./run_list.txt
  ...
  neutron.tests.unit.plugins.ml2.test_db.Ml2DvrDBTestCase.test_distributed_port_binding_deleted_by_port_deletion
  --------------------------------------------------------------------------------------------------------------
  Captured traceback:
  ~~~~~~~~~~~~~~~~~~~
      Traceback (most recent call last):
        File "/root/github/neutron/neutron/tests/base.py", line 182, in func
      return f(self, *args, **kwargs)
        File "/root/github/neutron/neutron/tests/unit/plugins/ml2/test_db.py", line 537, in test_distributed_port_binding_deleted_by_port_deletion
      self.assertEqual(
        File "/root/github/neutron/.tox/shared/lib/python3.10/site-packages/testtools/testcase.py", line 393, in assertEqual
      self.assertThat(observed, matcher, message)
        File "/root/github/neutron/.tox/shared/lib/python3.10/site-packages/testtools/testcase.py", line 480, in assertThat
      raise mismatch_error
      testtools.matchers._impl.MismatchError: [] != [<warnings.WarningMessage object at 0x7f701cb5f640>]: Warnings: {message : DeprecationWarning('ssl.PROTOCOL_TLS is deprecated'), category : 'DeprecationWarning', filename : '/root/github/neutron/.tox/shared/lib/python3.10/site-packages/ovs/stream.py', lineno : 794, line : None}

  ======
  Totals
  ======
  Ran: 2 tests in 1.3571 sec.
   - Passed: 1
   - Skipped: 0
   - Expected Fail: 0
   - Unexpected Success: 0
   - Failed: 1
  Sum of execute time for each test: 1.3053 sec.

  
  [1] https://zuul.opendev.org/t/openstack/build/8e0dd6e817394911aa0baffe07798b13
  [2] https://zuul.opendev.org/t/openstack/build/9f7881818f7842b38d31ed44ffa8a4f3
  [3] https://github.com/python/cpython/blob/3.10/Modules/_ssl.c#L3038

To manage notifications about this bug go to:
https://bugs.launchpad.net/neutron/+bug/1998343/+subscriptions



Follow ups