diff --git a/src/borg/hashindex.pyx b/src/borg/hashindex.pyx index e40c426eb..182018ed2 100644 --- a/src/borg/hashindex.pyx +++ b/src/borg/hashindex.pyx @@ -128,6 +128,7 @@ cdef class IndexBase: def setdefault(self, key, value): if not key in self: self[key] = value + return self[key] def __delitem__(self, key): assert len(key) == self.key_size diff --git a/src/borg/testsuite/hashindex.py b/src/borg/testsuite/hashindex.py index af65f21ed..0c8634ad0 100644 --- a/src/borg/testsuite/hashindex.py +++ b/src/borg/testsuite/hashindex.py @@ -71,6 +71,22 @@ class HashIndexTestCase(BaseTestCase): del idx self.assert_equal(len(cls.read(idx_name.name)), 0) + idx = cls() + # Test setdefault - set non-existing key + idx.setdefault(H(0), make_value(42)) + assert H(0) in idx + assert idx[H(0)] == make_value(42) + # Test setdefault - do not set existing key + idx.setdefault(H(0), make_value(23)) + assert H(0) in idx + assert idx[H(0)] == make_value(42) + # Test setdefault - get-like return value, key not present + assert idx.setdefault(H(1), make_value(23)) == make_value(23) + # Test setdefault - get-like return value, key present + assert idx.setdefault(H(0), make_value(23)) == make_value(42) + # clean up setdefault test + del idx + def test_nsindex(self): self._generic_test(NSIndex, lambda x: (x, x), '85f72b036c692c8266e4f51ccf0cff2147204282b5e316ae508d30a448d88fef')