Beispiel #1
0
 def p1(alert_id):
     session = saq.database.DatabaseSession()
     alert = session.query(Alert).filter(Alert.id == alert_id).one()
     lock_uuid = acquire_lock(alert.uuid)
     # tell parent to get the lock
     sync0.set()
     # wait for parent to signal
     sync1.wait()
     release_lock(alert.uuid, lock_uuid)
     sync2.set()
Beispiel #2
0
 def test_lock(self):
     first_lock_uuid = str(uuid.uuid4())
     second_lock_uuid = str(uuid.uuid4())
     target_lock = str(uuid.uuid4())
     self.assertTrue(acquire_lock(target_lock, first_lock_uuid))
     self.assertFalse(acquire_lock(target_lock, second_lock_uuid))
     self.assertTrue(acquire_lock(target_lock, first_lock_uuid))
     release_lock(target_lock, first_lock_uuid)
     self.assertTrue(acquire_lock(target_lock, second_lock_uuid))
     self.assertFalse(acquire_lock(target_lock, first_lock_uuid))
     release_lock(target_lock, second_lock_uuid)
Beispiel #3
0
    def test_database_002_lock(self):
        alert = self.insert_alert()

        lock_uuid = acquire_lock(alert.uuid)
        self.assertTrue(lock_uuid)
        # something that was locked is locked
        self.assertTrue(alert.is_locked())
        # and can be locked again
        self.assertEquals(lock_uuid, acquire_lock(alert.uuid, lock_uuid))
        # can be unlocked
        self.assertTrue(release_lock(alert.uuid, lock_uuid))
        # truely is unlocked
        self.assertFalse(alert.is_locked())
        # cannot be unlocked again
        self.assertFalse(release_lock(alert.uuid, lock_uuid))
        # and can be locked again
        self.assertTrue(acquire_lock(alert.uuid))
        self.assertTrue(alert.is_locked())
Beispiel #4
0
    def test_database_003_multiprocess_lock(self):
        alert = self.insert_alert()
        sync0 = Event()
        sync1 = Event()
        sync2 = Event()

        def p1(alert_id):
            session = saq.database.DatabaseSession()
            alert = session.query(Alert).filter(Alert.id == alert_id).one()
            lock_uuid = acquire_lock(alert.uuid)
            # tell parent to get the lock
            sync0.set()
            # wait for parent to signal
            sync1.wait()
            release_lock(alert.uuid, lock_uuid)
            sync2.set()

        p = Process(target=p1, args=(alert.id, ))
        p.start()

        try:
            sync0.wait()

            # lock should already be locked
            self.assertTrue(alert.is_locked())
            # should not be able to lock the lock
            self.assertFalse(acquire_lock(alert.uuid))

            sync1.set()
            sync2.wait()
            # lock should be unlocked
            self.assertFalse(alert.is_locked())
            # and we should be able to lock it
            lock_uuid = acquire_lock(alert.uuid)
            self.assertTrue(uuid)
            self.assertTrue(alert.is_locked())
            self.assertTrue(release_lock(alert.uuid, lock_uuid))
            self.assertFalse(alert.is_locked())

            p.join()
            p = None
        finally:
            if p:
                p.terminate()
                p.join()