summaryrefslogtreecommitdiff
path: root/tests/cache/test_dbm_backend.py
blob: 138a0af57ea2f48082addc7b8db34509950cf61c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
from ._fixtures import _GenericBackendTest, _GenericMutexTest
from . import eq_, assert_raises_message
from unittest import TestCase
from threading import Thread
import time
import os
from nose import SkipTest

try:
    import fcntl
except ImportError:
    raise SkipTest("fcntl not available")

class DBMBackendTest(_GenericBackendTest):
    backend = "dogpile.cache.dbm"

    config_args = {
        "arguments":{
            "filename":"test.dbm"
        }
    }

class DBMBackendNoLockTest(_GenericBackendTest):
    backend = "dogpile.cache.dbm"

    config_args = {
        "arguments":{
            "filename":"test.dbm",
            "rw_lockfile":False,
            "dogpile_lockfile":False,
        }
    }


class DBMMutexTest(_GenericMutexTest):
    backend = "dogpile.cache.dbm"

    config_args = {
        "arguments":{
            "filename":"test.dbm"
        }
    }

    def test_release_assertion_thread(self):
        backend = self._backend()
        m1 = backend.get_mutex("foo")
        assert_raises_message(
            AssertionError,
            "this thread didn't do the acquire",
            m1.release
        )

    def test_release_assertion_key(self):
        backend = self._backend()
        m1 = backend.get_mutex("foo")
        m2 = backend.get_mutex("bar")

        m1.acquire()
        try:
            assert_raises_message(
                AssertionError,
                "No acquire held for key 'bar'",
                m2.release
            )
        finally:
            m1.release()


def teardown():
    for fname in os.listdir(os.curdir):
        if fname.startswith("test.dbm"):
            os.unlink(fname)