old_contents: import gc
  import pytest
  import os
  
  from server.storage import Storage, db_class
  from lib.util import subclasses
  
  # Find out which db engines to test
  # Those that are not installed will be skipped
  db_engines = []
  for c in subclasses(Storage):
      try:
          c.import_module()
      except ImportError:
          db_engines.append(pytest.mark.skip(c.__name__))
      else:
          db_engines.append(c.__name__)
  
  
  @pytest.fixture(params=db_engines)
  def db(tmpdir, request):
      cwd = os.getcwd()
      os.chdir(str(tmpdir))
      db = db_class(request.param)("db", False)
      yield db
      os.chdir(cwd)
      # Make sure all the locks and handles are closed
      del db
      gc.collect()
  
  
  def test_put_get(db):
      db.put(b"x", b"y")
      assert db.get(b"x") == b"y"
  
  
  def test_batch(db):
      db.put(b"a", b"1")
      with db.write_batch() as b:
          b.put(b"a", b"2")
          assert db.get(b"a") == b"1"
      assert db.get(b"a") == b"2"
  
  
  def test_iterator(db):
      """
      The iterator should contain all key/value pairs starting with prefix
      ordered by key.
      """
      for i in range(5):
          db.put(b"abc" + str.encode(str(i)), str.encode(str(i)))
      db.put(b"abc", b"")
      db.put(b"a", b"xyz")
      db.put(b"abd", b"x")
      assert list(db.iterator(prefix=b"abc")) == [(b"abc", b"")] + [
              (b"abc" + str.encode(str(i)), str.encode(str(i))) for
              i in range(5)
          ]
  
  
  def test_iterator_reverse(db):
      for i in range(5):
          db.put(b"abc" + str.encode(str(i)), str.encode(str(i)))
      db.put(b"a", b"xyz")
      db.put(b"abd", b"x")
      assert list(db.iterator(prefix=b"abc", reverse=True)) == [
              (b"abc" + str.encode(str(i)), str.encode(str(i))) for
              i in reversed(range(5))
          ]
  
  
  def test_close(db):
      db.put(b"a", b"b")
      db.close()
      db = db_class(db.__class__.__name__)("db", False)
      assert db.get(b"a") == b"b"
  
new_contents: import pytest
  import os
  
  from server.storage import Storage, db_class
  from lib.util import subclasses
  
  # Find out which db engines to test
  # Those that are not installed will be skipped
  db_engines = []
  for c in subclasses(Storage):
      try:
          c.import_module()
      except ImportError:
          db_engines.append(pytest.mark.skip(c.__name__))
      else:
          db_engines.append(c.__name__)
  
  
  @pytest.fixture(params=db_engines)
  def db(tmpdir, request):
      cwd = os.getcwd()
      os.chdir(str(tmpdir))
      db = db_class(request.param)("db", False)
      yield db
      os.chdir(cwd)
      db.close()
  
  
  def test_put_get(db):
      db.put(b"x", b"y")
      assert db.get(b"x") == b"y"
  
  
  def test_batch(db):
      db.put(b"a", b"1")
      with db.write_batch() as b:
          b.put(b"a", b"2")
          assert db.get(b"a") == b"1"
      assert db.get(b"a") == b"2"
  
  
  def test_iterator(db):
      """
      The iterator should contain all key/value pairs starting with prefix
      ordered by key.
      """
      for i in range(5):
          db.put(b"abc" + str.encode(str(i)), str.encode(str(i)))
      db.put(b"abc", b"")
      db.put(b"a", b"xyz")
      db.put(b"abd", b"x")
      assert list(db.iterator(prefix=b"abc")) == [(b"abc", b"")] + [
              (b"abc" + str.encode(str(i)), str.encode(str(i))) for
              i in range(5)
          ]
  
  
  def test_iterator_reverse(db):
      for i in range(5):
          db.put(b"abc" + str.encode(str(i)), str.encode(str(i)))
      db.put(b"a", b"xyz")
      db.put(b"abd", b"x")
      assert list(db.iterator(prefix=b"abc", reverse=True)) == [
              (b"abc" + str.encode(str(i)), str.encode(str(i))) for
              i in reversed(range(5))
          ]
  
  
  def test_close(db):
      db.put(b"a", b"b")
      db.close()
      db = db_class(db.__class__.__name__)("db", False)
      assert db.get(b"a") == b"b"
  
subject: Fix pytest 3.3 failures