Example #1
0
    def test_peer_setup(self):
        a = SawtoothContainer()
        b = SawtoothContainer()
        id_a = '1'
        id_b = '2'
        inter = Intersection(a, b, id_a, id_b)

        self.assertEqual(inter.committee_id_a, id_a)
        self.assertEqual(inter.committee_id_b, id_b)
        self.assertEqual(inter.ip(id_a), a.ip())
        self.assertEqual(inter.ip(id_b), b.ip())
        self.assertEqual(inter.attached_network(), DEFAULT_DOCKER_NETWORK)
        self.assertTrue(inter.in_committee(id_a))
        self.assertTrue(inter.in_committee(id_b))
        self.assertFalse(inter.in_committee('c'))
        self.assertFalse(inter.in_committee(0))

        del a, b, inter
        a = SawtoothContainer('host')
        b = SawtoothContainer('host')
        id_a = '1'
        id_b = '2'
        inter = Intersection(a, b, id_a, id_b)
        self.assertEqual(inter.attached_network(), 'host')
Example #2
0
    def test_committee_independent_join(self):
        intersections = make_peer_committees(7)
        number_of_tx_a = 1
        id_a = intersections[0].committee_id_a

        new_peer = Intersection(SawtoothContainer(), None, id_a, None)

        committee_ips_a = [inter.ip(id_a) for inter in intersections]
        committee_ips_a.append(new_peer.ip(id_a))

        committee_val_a = [inter.val_key(id_a) for inter in intersections]
        committee_val_a.append(new_peer.val_key(id_a))

        intersections[0].submit(Transaction(id_a, 'update_a_1', 999))
        number_of_tx_a += 1
        self.assertTrue(check_for_confirmation([i.instance_a for i in intersections], number_of_tx_a, 'update_a_1'))

        new_peer.peer_join(id_a, committee_ips_a)
        intersections[0].update_committee(id_a, committee_val_a)
        number_of_tx_a += 1

        intersections[0].submit(Transaction(id_a, 'update_a_2', 888))
        number_of_tx_a += 1
        self.assertTrue(check_for_confirmation([i.instance_a for i in intersections], number_of_tx_a, 'update_a_2'))

        # confirm membership
        committee_a = intersections.copy()
        committee_a.append(new_peer)
        self.assertEqual(None, new_peer.committee_id_b)
        for inter in committee_a:
            intersections_config = inter.sawtooth_api(id_a, 'http://localhost:8008/peers')['data']
            for ip in committee_ips_a:
                if ip != inter.ip(id_a):  # the peer it's self is not reported in the list
                    self.assertIn("tcp://{}:8800".format(ip), intersections_config)
        for inter in committee_a:
            self.assertEqual(number_of_tx_a, len(inter.blocks(id_a)))

        # now committee B
        id_b = intersections[0].committee_id_b
        number_of_tx_b = 1
        new_peer = Intersection(None, SawtoothContainer(), None, id_b)

        committee_ips_b = [inter.ip(id_b) for inter in intersections]
        committee_ips_b.append(new_peer.ip(id_b))

        committee_val_b = [inter.val_key(id_b) for inter in intersections]
        committee_val_b.append(new_peer.val_key(id_b))

        intersections[0].submit(Transaction(id_b, 'update_b_1', 999))
        number_of_tx_b += 1
        self.assertTrue(check_for_confirmation([i.instance_b for i in intersections], number_of_tx_b, 'update_b_1'))

        new_peer.peer_join(id_b, committee_ips_b)
        intersections[0].update_committee(id_b, committee_val_b)
        number_of_tx_b += 1
        self.assertTrue(check_for_confirmation([i.instance_b for i in intersections], number_of_tx_b))

        intersections[0].submit(Transaction(id_b, 'update_b_2', 888))
        number_of_tx_b += 1
        self.assertTrue(check_for_confirmation([i.instance_b for i in intersections], number_of_tx_b, 'update_b_2'))

        # confirm membership
        committee_b = intersections.copy()
        committee_b.append(new_peer)
        for inter in committee_b:
            intersections_config = inter.sawtooth_api(id_b, 'http://localhost:8008/peers')['data']
            for ip in committee_ips_b:
                if ip != inter.ip(id_b):  # the peer it's self is not reported in the list
                    self.assertIn("tcp://{}:8800".format(ip), intersections_config)
        for inter in committee_b:
            self.assertEqual(number_of_tx_b, len(inter.blocks(id_b)))