예제 #1
0
def test_release_other_lock(lock_collection, freeze_time):
    lockname = pytest.faux.gen_alphanumeric()
    lock1 = lock.BaseMongoLock(lockname)
    lock2 = lock.BaseMongoLock(lockname)

    lock1.acquire()
    with pytest.raises(exceptions.MongoLockCannotRelease):
        lock2.release()
예제 #2
0
def test_other_prolong_lock(lock_collection, freeze_time):
    lockname = pytest.faux.gen_alphanumeric()
    lock1 = lock.BaseMongoLock(lockname)
    lock2 = lock.BaseMongoLock(lockname)

    lock1.acquire()
    freeze_time.return_value *= 2
    with pytest.raises(exceptions.MongoLockCannotProlong):
        lock2.prolong()
예제 #3
0
def test_force_acquire_lock(block, lock_collection, freeze_time):
    lockname = pytest.faux.gen_alphanumeric()
    lock1 = lock.BaseMongoLock(lockname)
    lock2 = lock.BaseMongoLock(lockname)

    lock1.acquire()
    lock2.acquire(block=block, force=True, timeout=1)

    db_model = lock_collection.find_one({"_id": lockname})
    assert db_model
    assert db_model["locker"] == lock2.lock_id
예제 #4
0
def test_force_prolong_lock(lock_collection, freeze_time):
    lockname = pytest.faux.gen_alphanumeric()
    lock1 = lock.BaseMongoLock(lockname)
    lock2 = lock.BaseMongoLock(lockname)

    lock1.acquire()
    freeze_time.return_value *= 2
    lock2.prolong(True)

    db_model = lock_collection.find_one({"_id": lockname})
    assert db_model
    assert db_model["locker"] == lock1.lock_id
    assert db_model["expired_at"] == int(freeze_time.return_value) + \
        lock.BaseMongoLock.DEFAULT_PROLONG_TIMEOUT
예제 #5
0
def test_force_release_other_lock(lock_collection, freeze_time):
    lockname = pytest.faux.gen_alphanumeric()
    lock1 = lock.BaseMongoLock(lockname)
    lock2 = lock.BaseMongoLock(lockname)

    lock1.acquire()
    lock2.release(force=True)
    assert not lock2.acquired
    assert lock1.acquired

    db_model = lock_collection.find_one({"_id": lockname})
    assert db_model
    assert db_model["locker"] is None
    assert db_model["expired_at"] == 0
예제 #6
0
def test_check_double_acquire(lock_collection, no_sleep, freeze_time):
    lockname = pytest.faux.gen_alphanumeric()
    lock1 = lock.BaseMongoLock(lockname)
    lock2 = lock.BaseMongoLock(lockname)

    lock1.acquire()
    with pytest.raises(exceptions.MongoLockCannotAcquire):
        lock2.acquire(block=False)

    freeze_time.side_effect = range(110, 120)

    def sleep_side_effect(*args, **kwargs):
        freeze_time.return_value += 1

    no_sleep.side_effect = sleep_side_effect

    with pytest.raises(exceptions.MongoLockCannotAcquire):
        lock2.acquire(block=True, timeout=5)
예제 #7
0
def test_double_release_lock(lock_collection, freeze_time):
    lockname = pytest.faux.gen_alphanumeric()
    lock1 = lock.BaseMongoLock(lockname)

    lock1.acquire()
    lock1.release()
    lock1.release(True)

    db_model = lock_collection.find_one({"_id": lockname})
    assert db_model
    assert db_model["locker"] is None
    assert db_model["expired_at"] == 0
예제 #8
0
def test_acquire_lock_after_wait(lock_collection, freeze_time, no_sleep):
    lockname = pytest.faux.gen_alphanumeric()
    lock1 = lock.BaseMongoLock(lockname)
    lock2 = lock.BaseMongoLock(lockname)

    lock1.acquire()
    frst_expired_at = lock_collection.find_one({"_id": lockname})["expired_at"]

    freeze_time.side_effect = range(110, 120)

    def sleep_side_effect(*args, **kwargs):
        freeze_time.return_value += 1
        lock1.release()

    no_sleep.side_effect = sleep_side_effect

    lock2.acquire(block=True)
    assert lock2.acquired

    db_model = lock_collection.find_one({"_id": lockname})
    assert db_model
    assert db_model["locker"] == lock2.lock_id
    assert db_model["expired_at"] > frst_expired_at