コード例 #1
0
    def test_transaction_resolution_same_ts_diff_data(self):
        self.tm.add_transaction("foo0", 1, "bubba", "gump")

        tm2 = TransactionManager("test_tm.pickle")
        tm2._clear()
        tm2.add_transaction("foo1", 1, "bubba", "gump")
        tm2.resolve_missing_transactions(self.tm.top_hash, self.tm.get_transactions_recent_to_old())
        self.assertEqual(tm2.current_id, 2)
コード例 #2
0
    def test_transaction_resolution_multiple_same_timestamp(self):
        self.tm.add_transaction("foo0", 1, "bubba", "gump", uuid="1")
        self.tm.add_transaction("foo1", 1, "bubba", "gump", uuid="2")
        self.tm.add_transaction("foo2", 1, "bubba", "gump", uuid="3")

        tm2 = TransactionManager("test_tm.pickle")
        tm2._clear()
        tm2.add_transaction("foo1", 1, "bubba", "gump", uuid="2")
        tm2.resolve_missing_transactions(self.tm.top_hash, self.tm.get_transactions_recent_to_old())
        self.assertEqual(tm2.current_id, 3)
        self.assertEqual(self.tm.top_hash, tm2.top_hash)
コード例 #3
0
        def test_logic():
            tm1 = TransactionManager("test_tm.pickle")
            tm1._clear()
            tm1.add_transaction("foo1", 1, "bubba", "gump")
            tm1.add_transaction("foo2", 2, "bubba", "gump")
            sm1 = StatusManager(self.reactor, self._get_fake_multicast_ping(), tm1, 32825)

            tm2 = TransactionManager("test_tm2.pickle")
            tm2._clear()
            sm2 = StatusManager(self.reactor, self._get_fake_multicast_ping(), tm2, 32826)

            message = "offer_state %s %s" % (tm1.get_top_hash(), sm1.comm_port)
            sm2.check_state_update(message, "localhost")

            self._wait_on_check_state_update_to_finish(sm2)

            self.assertEqual(tm2.get_current_id(), 2)
            self.reactor.callFromThread(self.reactor.stop)
コード例 #4
0
    def test_transaction_resolution(self):
        self.tm.add_transaction("foo0", 1, "bubba", "gump", uuid="1")
        self.tm.add_transaction("foo1", 2, "bubba", "gump", uuid="2")
        self.tm.add_transaction("foo2", 3, "bubba", "gump", uuid="3")
        self.tm.add_transaction("foo3", 4, "bubba", "gump", uuid="4")
        self.tm.add_transaction("foo4", 5, "bubba", "gump", uuid="5")

        tm2 = TransactionManager("test_tm.pickle")
        tm2._clear()
        tm2.resolve_missing_transactions(self.tm.top_hash, self.tm.get_transactions_recent_to_old())
        self.assertEqual(tm2.current_id, 5)
        for i in xrange(0, 5):
            self.assertEqual(tm2.get_transaction(i + 1)["data"], "foo%s" % i)

        tm2 = TransactionManager("test_tm.pickle")
        tm2._clear()
        tm2.add_transaction("foo0", 1, "bubba", "gump", uuid="1")
        tm2.add_transaction("foo1", 2, "bubba", "gump", uuid="2")
        tm2.add_transaction("foo3", 4, "bubba", "gump", uuid="4")
        tm2.resolve_missing_transactions(self.tm.top_hash, self.tm.get_transactions_recent_to_old())
        self.assertEqual(tm2.current_id, 5)
        for i in xrange(0, 5):
            self.assertEqual(tm2.get_transaction(i + 1)["data"], "foo%s" % i)
コード例 #5
0
    def test_get_transactions(self):

        class FakeTransactionFetcher(object):

            def request_transactions(self):
                pass

        class FakeConnection(object):

            def addCallback(self, func):
                pass

        ftf = FakeTransactionFetcher()
        sm = StatusManager(None, self._get_fake_multicast_ping())

        tm2 = TransactionManager('test_tm.pickle')
        tm2._clear()
        tm2.add_transaction("foo1", 1, "bubba", "gump")
        tm2.add_transaction("foo2", 2, "bubba", "gump")
        passes = []

        def worker_thread(ftf, connection):
            tm = TransactionManager()
            tm._clear()
            tm.resolve_missing_transactions(tm2.get_top_hash(), sm.get_transactions(ftf, connection))
            self.assertEqual(tm.get_transaction(1)['data'], 'foo1')
            self.assertEqual(tm.get_transaction(2)['data'], 'foo2')
            passes.append(True)

        t = threading.Thread(target=worker_thread, args=[ftf, FakeConnection()])
        t.daemon = True
        t.start()
        self._wait_for_callback_to_be_set(ftf)

        for data in tm2.get_transactions_recent_to_old(2):
            ftf.call_back(data)

        ftf.call_back("done")
        t.join()
        self.assertEqual(len(passes), 1)

        tm2.add_transaction("foo3", 3, "bubba", "gump")
        tm2.add_transaction("foo4", 4, "bubba", "gump")
        tm2.add_transaction("foo5", 1.5, "bubba", "gump")

        def worker_thread2(ftf, connection):
            tm = TransactionManager()
            tm.resolve_missing_transactions(tm2.get_top_hash(), sm.get_transactions(ftf, connection))
            self.assertEqual(tm.get_transaction(2)['data'], 'foo5')
            self.assertEqual(tm.get_transaction(3)['data'], 'foo2')
            self.assertEqual(tm.get_transaction(4)['data'], 'foo3')
            self.assertEqual(tm.get_transaction(5)['data'], 'foo4')
            passes.append(True)

        t = threading.Thread(target=worker_thread2, args=[ftf, FakeConnection()])
        t.daemon = True
        del ftf.call_back
        t.start()
        self._wait_for_callback_to_be_set(ftf)

        for data in tm2.get_transactions_recent_to_old(2):
            ftf.call_back(data)
            time.sleep(0.05)

        ftf.call_back("done")
        t.join()
        self.assertEqual(len(passes), 2)
コード例 #6
0
class TestTransactionManager(TestCase):
    def setUp(self):
        self.tm = TransactionManager()
        self.tm._clear()

    def test_init(self):
        tm = self.tm
        self.assertEqual(tm.current_id, 0)
        self.assertEqual(tm.top_hash, None)

    def test_bubble_up(self):
        self.tm.set_val(0, "hi")
        self.tm.set_val(1, "there")
        self.tm.set_val(2, "buddy")
        self.tm.current_id = 2
        self.tm._bubble_up(1)
        self.assertEqual(self.tm.get_val(3), "buddy")
        self.assertEqual(self.tm.get_val(2), "there")
        self.assertEqual(self.tm.get_val(0), "hi")
        self.tm.current_id = 3
        self.tm._bubble_up(3)
        self.assertEqual(self.tm.get_val(4), "buddy")

    def test_add_transaction(self):
        self.tm.add_transaction("foo", 12345, "bubba", "gump")
        self.assertEqual(self.tm.current_id, 1)
        item = self.tm.get_transaction(1)
        self.assertEqual(item["data"], "foo")
        self.assertEqual(item["ts"], 12345)
        self.assertEqual(item["user"], "bubba")
        self.assertEqual(item["signature"], "gump")
        self.assertIsNotNone(item["hash"])

        self.tm.add_transaction("fooz", 12349, "bubbas", "gumps")
        old_top_hash = self.tm.top_hash
        self.tm.add_transaction("middle", 12346, "blubba", "gumple")

        bottom = self.tm.get_transaction(1)
        self.assertEqual(bottom["data"], "foo")
        middle = self.tm.get_transaction(2)
        self.assertEqual(middle["data"], "middle")
        top = self.tm.get_transaction(3)
        self.assertEqual(top["data"], "fooz")
        self.assertNotEqual(self.tm.top_hash, old_top_hash)

    def test_transaction_resolution(self):
        self.tm.add_transaction("foo0", 1, "bubba", "gump", uuid="1")
        self.tm.add_transaction("foo1", 2, "bubba", "gump", uuid="2")
        self.tm.add_transaction("foo2", 3, "bubba", "gump", uuid="3")
        self.tm.add_transaction("foo3", 4, "bubba", "gump", uuid="4")
        self.tm.add_transaction("foo4", 5, "bubba", "gump", uuid="5")

        tm2 = TransactionManager("test_tm.pickle")
        tm2._clear()
        tm2.resolve_missing_transactions(self.tm.top_hash, self.tm.get_transactions_recent_to_old())
        self.assertEqual(tm2.current_id, 5)
        for i in xrange(0, 5):
            self.assertEqual(tm2.get_transaction(i + 1)["data"], "foo%s" % i)

        tm2 = TransactionManager("test_tm.pickle")
        tm2._clear()
        tm2.add_transaction("foo0", 1, "bubba", "gump", uuid="1")
        tm2.add_transaction("foo1", 2, "bubba", "gump", uuid="2")
        tm2.add_transaction("foo3", 4, "bubba", "gump", uuid="4")
        tm2.resolve_missing_transactions(self.tm.top_hash, self.tm.get_transactions_recent_to_old())
        self.assertEqual(tm2.current_id, 5)
        for i in xrange(0, 5):
            self.assertEqual(tm2.get_transaction(i + 1)["data"], "foo%s" % i)

    def test_transaction_resolution_multiple_same_timestamp(self):
        self.tm.add_transaction("foo0", 1, "bubba", "gump", uuid="1")
        self.tm.add_transaction("foo1", 1, "bubba", "gump", uuid="2")
        self.tm.add_transaction("foo2", 1, "bubba", "gump", uuid="3")

        tm2 = TransactionManager("test_tm.pickle")
        tm2._clear()
        tm2.add_transaction("foo1", 1, "bubba", "gump", uuid="2")
        tm2.resolve_missing_transactions(self.tm.top_hash, self.tm.get_transactions_recent_to_old())
        self.assertEqual(tm2.current_id, 3)
        self.assertEqual(self.tm.top_hash, tm2.top_hash)

    def test_transaction_resolution_same_ts_diff_data(self):
        self.tm.add_transaction("foo0", 1, "bubba", "gump")

        tm2 = TransactionManager("test_tm.pickle")
        tm2._clear()
        tm2.add_transaction("foo1", 1, "bubba", "gump")
        tm2.resolve_missing_transactions(self.tm.top_hash, self.tm.get_transactions_recent_to_old())
        self.assertEqual(tm2.current_id, 2)

    def test_current_id_loads(self):
        self.tm.add_transaction("foo0", 1, "bubba", "gump", uuid="1")

        tm = TransactionManager()
        self.assertEqual(tm.current_id, 1)