Esempio n. 1
0
 def test_answerObjectUndoSerial(self):
     uuid = self.getStorageUUID()
     conn = self.getFakeConnection(uuid=uuid)
     oid1 = self.getOID(1)
     oid2 = self.getOID(2)
     tid0 = self.getNextTID()
     tid1 = self.getNextTID()
     tid2 = self.getNextTID()
     tid3 = self.getNextTID()
     undo_dict = {}
     handler = StorageAnswersHandler(Mock())
     handler.answerObjectUndoSerial(conn, {oid1: [tid0, tid1]}, undo_dict)
     self.assertEqual(undo_dict, {oid1: [tid0, tid1]})
     handler.answerObjectUndoSerial(conn, {oid2: [tid2, tid3]}, undo_dict)
     self.assertEqual(undo_dict, {
         oid1: [tid0, tid1],
         oid2: [tid2, tid3],
     })
Esempio n. 2
0
 def test_answerTIDs(self):
     uuid = self.getStorageUUID()
     tid1 = self.getNextTID()
     tid2 = self.getNextTID(tid1)
     tid_list = [tid1, tid2]
     conn = self.getFakeConnection(uuid=uuid)
     tid_set = set()
     StorageAnswersHandler(Mock()).answerTIDs(conn, tid_list, tid_set)
     self.assertEqual(tid_set, set(tid_list))
Esempio n. 3
0
 def _getAnswerStoreObjectHandler(self, object_stored_counter_dict,
                                  conflict_serial_dict,
                                  resolved_conflict_serial_dict):
     app = Mock({
         'getHandlerData': {
             'object_stored_counter_dict': object_stored_counter_dict,
             'conflict_serial_dict': conflict_serial_dict,
             'resolved_conflict_serial_dict': resolved_conflict_serial_dict,
         }
     })
     return StorageAnswersHandler(app)
Esempio n. 4
0
 def test_answerObjectUndoSerial(self):
     uuid = self.getStorageUUID()
     conn = self.getFakeConnection(uuid=uuid)
     oid1 = self.getOID(1)
     oid2 = self.getOID(2)
     tid0 = self.getNextTID()
     tid1 = self.getNextTID()
     tid2 = self.getNextTID()
     tid3 = self.getNextTID()
     undo_dict = {}
     handler = StorageAnswersHandler(Mock())
     handler.answerObjectUndoSerial(conn, {oid1: [tid0, tid1]}, undo_dict)
     self.assertEqual(undo_dict, {oid1: [tid0, tid1]})
     handler.answerObjectUndoSerial(conn, {oid2: [tid2, tid3]}, undo_dict)
     self.assertEqual(undo_dict, {
         oid1: [tid0, tid1],
         oid2: [tid2, tid3],
     })
Esempio n. 5
0
 def setUp(self):
     super(StorageAnswerHandlerTests, self).setUp()
     self.app = Mock()
     self.handler = StorageAnswersHandler(self.app)
Esempio n. 6
0
class StorageAnswerHandlerTests(NeoUnitTestBase):

    def setUp(self):
        super(StorageAnswerHandlerTests, self).setUp()
        self.app = Mock()
        self.handler = StorageAnswersHandler(self.app)

    def _checkHandlerData(self, ref):
        calls = self.app.mockGetNamedCalls('setHandlerData')
        self.assertEqual(len(calls), 1)
        calls[0].checkArgs(ref)

    def test_answerObject(self):
        conn = self.getFakeConnection()
        oid = self.getOID(0)
        tid1 = self.getNextTID()
        tid2 = self.getNextTID(tid1)
        the_object = (oid, tid1, tid2, 0, '', 'DATA', None)
        self.handler.answerObject(conn, *the_object)
        self._checkHandlerData(the_object[1:])

    def _getAnswerStoreObjectHandler(self, object_stored_counter_dict,
            conflict_serial_dict, resolved_conflict_serial_dict):
        app = Mock({
            'getHandlerData': {
                'object_stored_counter_dict': object_stored_counter_dict,
                'conflict_serial_dict': conflict_serial_dict,
                'resolved_conflict_serial_dict': resolved_conflict_serial_dict,
            }
        })
        return StorageAnswersHandler(app)

    def test_answerStoreObject_1(self):
        conn = self.getFakeConnection()
        oid = self.getOID(0)
        tid = self.getNextTID()
        # conflict
        object_stored_counter_dict = {oid: {}}
        conflict_serial_dict = {}
        resolved_conflict_serial_dict = {}
        self._getAnswerStoreObjectHandler(object_stored_counter_dict,
            conflict_serial_dict, resolved_conflict_serial_dict,
            ).answerStoreObject(conn, 1, oid, tid)
        self.assertEqual(conflict_serial_dict[oid], {tid})
        self.assertEqual(object_stored_counter_dict[oid], {})
        self.assertFalse(oid in resolved_conflict_serial_dict)
        # object was already accepted by another storage, raise
        handler = self._getAnswerStoreObjectHandler({oid: {tid: {1}}}, {}, {})
        self.assertRaises(NEOStorageError, handler.answerStoreObject,
            conn, 1, oid, tid)

    def test_answerStoreObject_2(self):
        conn = self.getFakeConnection()
        oid = self.getOID(0)
        tid = self.getNextTID()
        tid_2 = self.getNextTID()
        # resolution-pending conflict
        object_stored_counter_dict = {oid: {}}
        conflict_serial_dict = {oid: {tid}}
        resolved_conflict_serial_dict = {}
        self._getAnswerStoreObjectHandler(object_stored_counter_dict,
            conflict_serial_dict, resolved_conflict_serial_dict,
            ).answerStoreObject(conn, 1, oid, tid)
        self.assertEqual(conflict_serial_dict[oid], {tid})
        self.assertFalse(oid in resolved_conflict_serial_dict)
        self.assertEqual(object_stored_counter_dict[oid], {})
        # object was already accepted by another storage, raise
        handler = self._getAnswerStoreObjectHandler({oid: {tid: {1}}},
            {oid: {tid}}, {})
        self.assertRaises(NEOStorageError, handler.answerStoreObject,
            conn, 1, oid, tid)
        # detected conflict is different, don't raise
        self._getAnswerStoreObjectHandler({oid: {}}, {oid: {tid}}, {},
            ).answerStoreObject(conn, 1, oid, tid_2)

    def test_answerStoreObject_3(self):
        conn = self.getFakeConnection()
        oid = self.getOID(0)
        tid = self.getNextTID()
        tid_2 = self.getNextTID()
        # already-resolved conflict
        # This case happens if a storage is answering a store action for which
        # any other storage already answered (with same conflict) and any other
        # storage accepted the resolved object.
        object_stored_counter_dict = {oid: {tid_2: 1}}
        conflict_serial_dict = {}
        resolved_conflict_serial_dict = {oid: {tid}}
        self._getAnswerStoreObjectHandler(object_stored_counter_dict,
            conflict_serial_dict, resolved_conflict_serial_dict,
            ).answerStoreObject(conn, 1, oid, tid)
        self.assertFalse(oid in conflict_serial_dict)
        self.assertEqual(resolved_conflict_serial_dict[oid], {tid})
        self.assertEqual(object_stored_counter_dict[oid], {tid_2: 1})
        # detected conflict is different, don't raise
        self._getAnswerStoreObjectHandler({oid: {tid: 1}}, {},
            {oid: {tid}}).answerStoreObject(conn, 1, oid, tid_2)

    def test_answerStoreObject_4(self):
        uuid = self.getStorageUUID()
        conn = self.getFakeConnection(uuid=uuid)
        oid = self.getOID(0)
        tid = self.getNextTID()
        # no conflict
        object_stored_counter_dict = {oid: {}}
        conflict_serial_dict = {}
        resolved_conflict_serial_dict = {}
        h = self._getAnswerStoreObjectHandler(object_stored_counter_dict,
            conflict_serial_dict, resolved_conflict_serial_dict)
        h.app.getHandlerData()['cache_dict'] = {oid: None}
        h.answerStoreObject(conn, 0, oid, tid)
        self.assertFalse(oid in conflict_serial_dict)
        self.assertFalse(oid in resolved_conflict_serial_dict)
        self.assertEqual(object_stored_counter_dict[oid], {tid: {uuid}})

    def test_answerTransactionInformation(self):
        conn = self.getFakeConnection()
        tid = self.getNextTID()
        user = '******'
        desc = 'DESC'
        ext = 'EXT'
        packed = False
        oid_list = [self.getOID(0), self.getOID(1)]
        self.handler.answerTransactionInformation(conn, tid, user, desc, ext,
            packed, oid_list)
        self._checkHandlerData(({
            'time': TimeStamp(tid).timeTime(),
            'user_name': user,
            'description': desc,
            'id': tid,
            'oids': oid_list,
            'packed': packed,
        }, ext))

    def test_oidNotFound(self):
        conn = self.getFakeConnection()
        self.assertRaises(NEOStorageNotFoundError, self.handler.oidNotFound,
            conn, 'message')

    def test_oidDoesNotExist(self):
        conn = self.getFakeConnection()
        self.assertRaises(NEOStorageDoesNotExistError,
            self.handler.oidDoesNotExist, conn, 'message')

    def test_tidNotFound(self):
        conn = self.getFakeConnection()
        self.assertRaises(NEOStorageNotFoundError, self.handler.tidNotFound,
            conn, 'message')

    def test_answerTIDs(self):
        uuid = self.getStorageUUID()
        tid1 = self.getNextTID()
        tid2 = self.getNextTID(tid1)
        tid_list = [tid1, tid2]
        conn = self.getFakeConnection(uuid=uuid)
        tid_set = set()
        StorageAnswersHandler(Mock()).answerTIDs(conn, tid_list, tid_set)
        self.assertEqual(tid_set, set(tid_list))

    def test_answerObjectUndoSerial(self):
        uuid = self.getStorageUUID()
        conn = self.getFakeConnection(uuid=uuid)
        oid1 = self.getOID(1)
        oid2 = self.getOID(2)
        tid0 = self.getNextTID()
        tid1 = self.getNextTID()
        tid2 = self.getNextTID()
        tid3 = self.getNextTID()
        undo_dict = {}
        handler = StorageAnswersHandler(Mock())
        handler.answerObjectUndoSerial(conn, {oid1: [tid0, tid1]}, undo_dict)
        self.assertEqual(undo_dict, {oid1: [tid0, tid1]})
        handler.answerObjectUndoSerial(conn, {oid2: [tid2, tid3]}, undo_dict)
        self.assertEqual(undo_dict, {
            oid1: [tid0, tid1],
            oid2: [tid2, tid3],
        })
Esempio n. 7
0
 def setUp(self):
     super(StorageAnswerHandlerTests, self).setUp()
     self.app = Mock()
     self.handler = StorageAnswersHandler(self.app)
Esempio n. 8
0
class StorageAnswerHandlerTests(NeoUnitTestBase):
    def setUp(self):
        super(StorageAnswerHandlerTests, self).setUp()
        self.app = Mock()
        self.handler = StorageAnswersHandler(self.app)

    def _checkHandlerData(self, ref):
        calls = self.app.mockGetNamedCalls('setHandlerData')
        self.assertEqual(len(calls), 1)
        calls[0].checkArgs(ref)

    def test_answerObject(self):
        conn = self.getFakeConnection()
        oid = self.getOID(0)
        tid1 = self.getNextTID()
        tid2 = self.getNextTID(tid1)
        the_object = (oid, tid1, tid2, 0, '', 'DATA', None)
        self.handler.answerObject(conn, *the_object)
        self._checkHandlerData(the_object[1:])

    def _getAnswerStoreObjectHandler(self, object_stored_counter_dict,
                                     conflict_serial_dict,
                                     resolved_conflict_serial_dict):
        app = Mock({
            'getHandlerData': {
                'object_stored_counter_dict': object_stored_counter_dict,
                'conflict_serial_dict': conflict_serial_dict,
                'resolved_conflict_serial_dict': resolved_conflict_serial_dict,
            }
        })
        return StorageAnswersHandler(app)

    def test_answerStoreObject_1(self):
        conn = self.getFakeConnection()
        oid = self.getOID(0)
        tid = self.getNextTID()
        # conflict
        object_stored_counter_dict = {oid: {}}
        conflict_serial_dict = {}
        resolved_conflict_serial_dict = {}
        self._getAnswerStoreObjectHandler(
            object_stored_counter_dict,
            conflict_serial_dict,
            resolved_conflict_serial_dict,
        ).answerStoreObject(conn, 1, oid, tid)
        self.assertEqual(conflict_serial_dict[oid], {tid})
        self.assertEqual(object_stored_counter_dict[oid], {})
        self.assertFalse(oid in resolved_conflict_serial_dict)
        # object was already accepted by another storage, raise
        handler = self._getAnswerStoreObjectHandler({oid: {tid: {1}}}, {}, {})
        self.assertRaises(NEOStorageError, handler.answerStoreObject, conn, 1,
                          oid, tid)

    def test_answerStoreObject_2(self):
        conn = self.getFakeConnection()
        oid = self.getOID(0)
        tid = self.getNextTID()
        tid_2 = self.getNextTID()
        # resolution-pending conflict
        object_stored_counter_dict = {oid: {}}
        conflict_serial_dict = {oid: {tid}}
        resolved_conflict_serial_dict = {}
        self._getAnswerStoreObjectHandler(
            object_stored_counter_dict,
            conflict_serial_dict,
            resolved_conflict_serial_dict,
        ).answerStoreObject(conn, 1, oid, tid)
        self.assertEqual(conflict_serial_dict[oid], {tid})
        self.assertFalse(oid in resolved_conflict_serial_dict)
        self.assertEqual(object_stored_counter_dict[oid], {})
        # object was already accepted by another storage, raise
        handler = self._getAnswerStoreObjectHandler({oid: {
            tid: {1}
        }}, {oid: {tid}}, {})
        self.assertRaises(NEOStorageError, handler.answerStoreObject, conn, 1,
                          oid, tid)
        # detected conflict is different, don't raise
        self._getAnswerStoreObjectHandler(
            {
                oid: {}
            },
            {
                oid: {tid}
            },
            {},
        ).answerStoreObject(conn, 1, oid, tid_2)

    def test_answerStoreObject_3(self):
        conn = self.getFakeConnection()
        oid = self.getOID(0)
        tid = self.getNextTID()
        tid_2 = self.getNextTID()
        # already-resolved conflict
        # This case happens if a storage is answering a store action for which
        # any other storage already answered (with same conflict) and any other
        # storage accepted the resolved object.
        object_stored_counter_dict = {oid: {tid_2: 1}}
        conflict_serial_dict = {}
        resolved_conflict_serial_dict = {oid: {tid}}
        self._getAnswerStoreObjectHandler(
            object_stored_counter_dict,
            conflict_serial_dict,
            resolved_conflict_serial_dict,
        ).answerStoreObject(conn, 1, oid, tid)
        self.assertFalse(oid in conflict_serial_dict)
        self.assertEqual(resolved_conflict_serial_dict[oid], {tid})
        self.assertEqual(object_stored_counter_dict[oid], {tid_2: 1})
        # detected conflict is different, don't raise
        self._getAnswerStoreObjectHandler({
            oid: {
                tid: 1
            }
        }, {}, {
            oid: {tid}
        }).answerStoreObject(conn, 1, oid, tid_2)

    def test_answerStoreObject_4(self):
        uuid = self.getStorageUUID()
        conn = self.getFakeConnection(uuid=uuid)
        oid = self.getOID(0)
        tid = self.getNextTID()
        # no conflict
        object_stored_counter_dict = {oid: {}}
        conflict_serial_dict = {}
        resolved_conflict_serial_dict = {}
        h = self._getAnswerStoreObjectHandler(object_stored_counter_dict,
                                              conflict_serial_dict,
                                              resolved_conflict_serial_dict)
        h.app.getHandlerData()['cache_dict'] = {oid: None}
        h.answerStoreObject(conn, 0, oid, tid)
        self.assertFalse(oid in conflict_serial_dict)
        self.assertFalse(oid in resolved_conflict_serial_dict)
        self.assertEqual(object_stored_counter_dict[oid], {tid: {uuid}})

    def test_answerTransactionInformation(self):
        conn = self.getFakeConnection()
        tid = self.getNextTID()
        user = '******'
        desc = 'DESC'
        ext = 'EXT'
        packed = False
        oid_list = [self.getOID(0), self.getOID(1)]
        self.handler.answerTransactionInformation(conn, tid, user, desc, ext,
                                                  packed, oid_list)
        self._checkHandlerData(({
            'time': TimeStamp(tid).timeTime(),
            'user_name': user,
            'description': desc,
            'id': tid,
            'oids': oid_list,
            'packed': packed,
        }, ext))

    def test_oidNotFound(self):
        conn = self.getFakeConnection()
        self.assertRaises(NEOStorageNotFoundError, self.handler.oidNotFound,
                          conn, 'message')

    def test_oidDoesNotExist(self):
        conn = self.getFakeConnection()
        self.assertRaises(NEOStorageDoesNotExistError,
                          self.handler.oidDoesNotExist, conn, 'message')

    def test_tidNotFound(self):
        conn = self.getFakeConnection()
        self.assertRaises(NEOStorageNotFoundError, self.handler.tidNotFound,
                          conn, 'message')

    def test_answerTIDs(self):
        uuid = self.getStorageUUID()
        tid1 = self.getNextTID()
        tid2 = self.getNextTID(tid1)
        tid_list = [tid1, tid2]
        conn = self.getFakeConnection(uuid=uuid)
        tid_set = set()
        StorageAnswersHandler(Mock()).answerTIDs(conn, tid_list, tid_set)
        self.assertEqual(tid_set, set(tid_list))

    def test_answerObjectUndoSerial(self):
        uuid = self.getStorageUUID()
        conn = self.getFakeConnection(uuid=uuid)
        oid1 = self.getOID(1)
        oid2 = self.getOID(2)
        tid0 = self.getNextTID()
        tid1 = self.getNextTID()
        tid2 = self.getNextTID()
        tid3 = self.getNextTID()
        undo_dict = {}
        handler = StorageAnswersHandler(Mock())
        handler.answerObjectUndoSerial(conn, {oid1: [tid0, tid1]}, undo_dict)
        self.assertEqual(undo_dict, {oid1: [tid0, tid1]})
        handler.answerObjectUndoSerial(conn, {oid2: [tid2, tid3]}, undo_dict)
        self.assertEqual(undo_dict, {
            oid1: [tid0, tid1],
            oid2: [tid2, tid3],
        })