Commit fd6b5252 authored by Kirill Smelkov's avatar Kirill Smelkov

tests: Don't try to access db.storage when automatically closing connections

DB.close() does `del self.storage`.

https://github.com/zopefoundation/ZODB/blob/5.6.0-14-g0eae10cd0/src/ZODB/DB.py#L646

This way if DB was closed, but some conn(s) were not, it will crash in
teardown as e.g. below:

    _____________ ERROR at teardown of test_bigfile_zblk1_zdata_reuse ______________

        def teardown_module():
    >       testdb.teardown()

    bigfile/tests/test_filezodb.py:58:
    _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

    self = <wendelin.lib.testing.TestDB_ZEO object at 0x7fb9c0216350>

        def teardown(self):
            # close connections that test code forgot to close
            for connref, tb in self.connv:
                conn = connref()
                if conn is None:
                    continue
                if not conn.opened:
                    continue    # still alive, but closed
                print("W: testdb: teardown: %s left not closed by test code"
                      "; opened by:\n%s" % (conn, tb), file=sys.stderr)

                db = conn.db()
    >           stor = db.storage
    E           AttributeError: 'DB' object has no attribute 'storage'

    lib/testing.py:217: AttributeError

The fix is simple - don't use db.storage at all, because it is not actually used in that code.
parent a6a8f5ba
# Wendelin. Testing utilities # Wendelin. Testing utilities
# Copyright (C) 2014-2019 Nexedi SA and Contributors. # Copyright (C) 2014-2020 Nexedi SA and Contributors.
# Kirill Smelkov <kirr@nexedi.com> # Kirill Smelkov <kirr@nexedi.com>
# #
# This program is free software: you can Use, Study, Modify and Redistribute # This program is free software: you can Use, Study, Modify and Redistribute
...@@ -214,7 +214,6 @@ class TestDB_Base(object): ...@@ -214,7 +214,6 @@ class TestDB_Base(object):
"; opened by:\n%s" % (conn, tb), file=sys.stderr) "; opened by:\n%s" % (conn, tb), file=sys.stderr)
db = conn.db() db = conn.db()
stor = db.storage
conn.close() conn.close()
# DB.close() should close underlying storage and is noop when # DB.close() should close underlying storage and is noop when
# called the second time. # called the second time.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment