Beispiel #1
0
    def test_unhandle_handled(self):
        handler = ObjectId()
        c1 = commit.Commit(handled_by=handler)
        c1.save(self.database)
        c1.unhandle_handled(self.database, c1._id, handler)
        self.sync()
        assert self.find_one({'_id': c1._id}, self.database.commits)

        c2 = commit.Commit(handled_by=handler)
        # c1 is intentional. Ensure c2 isn't saved in any form
        c1.unhandle_handled(self.database, c2._id, handler)
        c2.unhandle_handled(self.database, c2._id, handler)
        self.sync()
        assert not self.find_one({'_id': c2._id}, self.database.commits)
Beispiel #2
0
 def test_fromquery(self):
     handler = ObjectId()
     c1 = commit.Commit(handled_by=handler)
     c1.save(self.database)
     self.sync()
     c2 = commit.Commit.fromquery(self.database, {'handled_by': handler})
     assert c1._id == c2._id
Beispiel #3
0
    def test_delete(self):
        class Op(object):
            def __init__(self, blobs):
                self.blobs = blobs

            def blobVals(self):
                return self.blobs

        c = commit.Commit()
        added = BlobVal('added')
        deleted = BlobVal('deleted')
        opval = BlobVal('op')
        added.addref(c._id)
        deleted.addref(c._id)
        opval.addref(c._id)
        result = BlobVal('result')
        result.addref(c._id)

        ops = [Op([opval])]

        c.results = [result]
        c.addedBlobVals = {'a': [added]}
        c.deletedBlobVals = {'b': [deleted]}
        c.save(self.database)
        self.sync()

        assert self.find_one({'_id': c._id}, self.database.commits)
        c.operations = ops  # Not BSONable
        c.delete(self.database)
        self.sync()
        assert not self.find_one({'_id': c._id}, self.database.commits)
        assert added.references == set()
        assert deleted.references == set()
        assert ops[0].blobs[0].references == set()
        assert result.references == set()
Beispiel #4
0
 def test_save(self):
     c = commit.Commit()
     c.save(self.database)
     self.sync()
     result = self.find_one({'_id': c._id}, self.database.commits)
     expect = c.get_doc()
     assert result == expect
Beispiel #5
0
    def test_unhandle(self):
        handler = ObjectId()
        c = commit.Commit(handled_by=handler)
        c.unhandle(self.database, handler)
        self.sync()

        cdoc = self.find_one({'_id': c._id}, self.database.commits)
        assert 'handled_by' not in cdoc
Beispiel #6
0
    def test_done_not_interested(self):
        c = commit.Commit()
        result = BlobVal('result')
        c.results = [result]
        c.newTois = {'a': 'b'}
        c.done(self.database)

        assert result.references == set()
        result = self.find_one({'_id': c._id}, self.database.commits)
        assert not result
Beispiel #7
0
    def test_handlers_running(self):
        self.set_primary()
        handler = ObjectId()
        c = commit.Commit(handled_by=handler)
        c.save(self.database)

        assert c.handlers_running(self.database)
        c.unhandle(self.database, handler)

        assert not c.handlers_running(self.database)
Beispiel #8
0
 def test_save_gridfs(self):
     resstr = 'random string' * 24 * 2**10
     c1 = commit.Commit(results=[resstr])
     c1.save(self.database)
     self.sync()
     result = self.find_one({'_id': c1._id}, self.database.commits)
     gridfile = result['_griddata']
     assert isinstance(gridfile, BlobVal)
     assert isinstance(gridfile.value, gridfs.GridOut)
     c2 = commit.Commit.fromdoc(self.database, result)
     assert c2.results == [resstr]
Beispiel #9
0
    def test_handle(self):
        handler = ObjectId()
        c1 = commit.Commit()
        c1.save(self.database)
        expected = c1.get_doc()
        expected['handled_by'] = handler

        c2 = commit.Commit.handle(self.database, handler)
        assert c2.get_doc() == expected

        c3 = commit.Commit.handle(self.database, handler)
        assert c3 is None
Beispiel #10
0
 def test_get_doc(self):
     c = commit.Commit()
     result = c.get_doc()
     expected = {
         '_id': c._id,
         'user': None,
         'interested': None,
         'error': None,
         'traceback': None,
         'state': 'new',
         'generation': 0
     }
     assert result == expected
Beispiel #11
0
 def runCommit(ops, interested=None):
     self.sync()
     state = self._getState()
     # link must have been saved before we process commit
     assert state == 'processing'
     self.ops = ops
     self.interested = interested
     cmt = commit.Commit(handled_by=interested,
                         state='done',
                         interested=interested,
                         results=self.results,
                         error=self.error)
     cmt.done(self.database)
Beispiel #12
0
    def test_delete_gridfs(self):
        c = commit.Commit(results=['foo bar baz' * 24 * 2**10])
        doc = c.get_doc()
        blobval = doc['_griddata']
        c.save(self.database)
        self.sync()
        assert self.find_one({'_id': c._id}, self.database.commits)
        assert self.find_one({'metadata.references.value': c._id},
                             self.database.blobvals.files)

        c.delete(self.database)
        self.sync()

        assert not self.find_one({'_id': c._id}, self.database.commits)
        assert not self.find_one({'metadata.references.value': c._id},
                                 self.database.blobvals.files)
        # Make sure that ALL generated blobvals get decref()'d
        assert blobval.references == set()
Beispiel #13
0
 def test_attributes(self):
     c = commit.Commit()
     assert isinstance(c._id, ObjectId)
     assert c.user == None
     assert c.interested == None
     assert c.handled_by == None
     assert c.operations == []
     assert c.newTois == []
     assert c.changedTois == []
     assert c.deletedTois == []
     assert c.addedBlobVals == {}
     assert c.deletedBlobVals == {}
     assert c.indexData == []
     assert c.results == []
     assert c.error == None
     assert c.traceback == None
     assert c.state == 'new'
     assert c.generation == 0
Beispiel #14
0
    def test_done(self):
        c = commit.Commit(interested='interested')
        result = BlobVal('result')
        c.results = [result]
        c.newTois = {'a': 'b'}
        c.done(self.database)
        self.sync()

        assert result.references == {c._id}
        result = self.find_one({'_id': c._id}, self.database.commits)
        expect = {
            '_id': c._id,
            'error': None,
            'handled_by': 'interested',
            'interested': 'interested',
            'results': c.results,
            'state': 'done'
        }
        assert result == expect