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')
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)))