Esempio n. 1
0
    def test_same_v_set(self):
        view_est_mod = ViewEstablishmentModule(0, self.resolver, 2, 0)
        pred_module = PredicatesAndAction(view_est_mod, 0, self.resolver, 2, 0)

        # Both processors are in the same view and phase
        view_est_mod.get_phs = MagicMock(return_value=0)
        pred_module.stale_v = MagicMock(return_value=False)
        pred_module.views = [{CURRENT: 0, NEXT: 0}, {CURRENT: 0, NEXT: 0}]
        self.assertEqual(pred_module.same_v_set(0, 0), {0, 1})

        # Processor 1 is not in the same view and but same phase
        pred_module.views = [{CURRENT: 0, NEXT: 0}, {CURRENT: 0, NEXT: 1}]
        self.assertEqual(pred_module.same_v_set(0, 0), {0})

        # Processor 1 is in the same view and but not in same phase
        view_est_mod.get_phs = MagicMock(
            side_effect=lambda x: x
        )  # Returns the input value (works for this specific case)
        pred_module.views = [{CURRENT: 0, NEXT: 0}, {CURRENT: 0, NEXT: 0}]
        self.assertEqual(pred_module.same_v_set(0, 0), {0})

        # Processors are stale, should return empty set
        view_est_mod.get_phs = MagicMock(return_value=0)
        pred_module.stale_v = MagicMock(return_value=True)
        pred_module.views = [{CURRENT: 0, NEXT: 0}, {CURRENT: 0, NEXT: 0}]
        self.assertEqual(pred_module.same_v_set(0, 0), set())
Esempio n. 2
0
    def test_next_view(self):
        view_est_mod = ViewEstablishmentModule(0, self.resolver, 2, 0)
        pred_module = PredicatesAndAction(view_est_mod, 0, self.resolver, 2, 0)

        # Should update to view 1 in next
        pred_module.views = [{CURRENT: 0, NEXT: 0}]
        pred_module.next_view()
        self.assertEqual(pred_module.views, [{CURRENT: 0, NEXT: 1}])

        # number of byzantine nodes = 2 so "next" should flip to view 0
        pred_module.views = [{CURRENT: 1, NEXT: 1}]
        pred_module.next_view()
        self.assertEqual(pred_module.views, [{CURRENT: 1, NEXT: 0}])
Esempio n. 3
0
 def test_set_info(self):
     view_est_mod = ViewEstablishmentModule(0, self.resolver, 2, 0)
     pred_module = PredicatesAndAction(view_est_mod, 0, self.resolver, 2, 0)
     pred_module.views = [{CURRENT: 0, NEXT: 0}, {CURRENT: 0, NEXT: 0}]
     # Should change the view pair of node 1
     pred_module.set_info({CURRENT: 1, NEXT: 1}, False, 1)
     self.assertEqual(pred_module.views[1], {CURRENT: 1, NEXT: 1})
Esempio n. 4
0
 def test_added_logic_phase_0_case_1_b(self):
     # No mocking needed, establishable should return true
     view_est_mod = ViewEstablishmentModule(0, self.resolver, 2, 0)
     pred_module = PredicatesAndAction(view_est_mod, 0, self.resolver, 2, 0)
     pred_module.vChange = [False for i in range(2)]
     pred_module.views = [pred_module.RST_PAIR, pred_module.RST_PAIR]
     view_est_mod.phs = [0, 0]
     self.assertTrue(
         pred_module.automation(ViewEstablishmentEnums.PREDICATE, 0, 1))
Esempio n. 5
0
 def test_get_info(self):
     view_est_mod = ViewEstablishmentModule(0, self.resolver, 2, 0)
     pred_module = PredicatesAndAction(view_est_mod, 0, self.resolver, 2, 0)
     pred_module.views = [{CURRENT: 0, NEXT: 0}, {CURRENT: 1, NEXT: 1}]
     # Should return node 1's view
     self.assertEqual(pred_module.get_info(1), ({
         CURRENT: 1,
         NEXT: 1
     }, False))
Esempio n. 6
0
    def test_interface_allow_service(self):
        view_est_mod = ViewEstablishmentModule(0, self.resolver, 6, 1)
        pred_module = PredicatesAndAction(view_est_mod, 0, self.resolver, 6, 1)
        # Allow service settings
        view_est_mod.get_phs = MagicMock(return_value=0)
        pred_module.views = [{CURRENT: 0, NEXT: 0}]
        pred_module.same_v_set = MagicMock(return_value={0, 1, 2, 3, 4, 5})
        self.assertTrue(pred_module.allow_service())

        #Deny service settings, creating a false statement for each condition
        view_est_mod.get_phs = MagicMock(return_value=1)
        self.assertFalse(pred_module.allow_service())
        view_est_mod.get_phs = MagicMock(return_value=0)
        pred_module.views = [{CURRENT: 0, NEXT: 1}]
        self.assertFalse(pred_module.allow_service())
        pred_module.views = [{CURRENT: 0, NEXT: 0}]
        pred_module.same_v_set = MagicMock(return_value={})
        self.assertFalse(pred_module.allow_service())
Esempio n. 7
0
    def test_establish(self):
        view_est_mod = ViewEstablishmentModule(0, self.resolver, 2, 0)
        pred_module = PredicatesAndAction(view_est_mod, 0, self.resolver, 2, 0)

        # Should update to view 1 in current
        pred_module.views = [{CURRENT: 0, NEXT: 1}]
        self.resolver.on_view_established = Mock()
        pred_module.establish()
        self.assertEqual(pred_module.views, [{CURRENT: 1, NEXT: 1}])
Esempio n. 8
0
    def test_automaton_phase_1_predicates(self):
        view_est_mod = ViewEstablishmentModule(0, self.resolver, 2, 0)
        pred_module = PredicatesAndAction(view_est_mod, 0, self.resolver, 2, 0)

        # Case 0
        pred_module.views = [{CURRENT: 0, NEXT: 4}, {CURRENT: 1, NEXT: 1}]
        pred_module.transit_adopble = MagicMock(return_value=True)
        self.assertTrue(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 1, 0))

        # Not a adoptable view in transit
        pred_module.transit_adopble = MagicMock(return_value=False)
        self.assertFalse(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 1, 0))
        # The adoptable view is the same as processor i
        pred_module.views = [{CURRENT: 0, NEXT: 0}, {CURRENT: 0, NEXT: 0}]
        pred_module.transit_adopble = MagicMock(return_value=True)
        self.assertFalse(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 1, 0))

        # Case 1
        pred_module.establishable = MagicMock(return_value=True)
        self.assertTrue(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 1, 1))
        # The threshold to move to a view change is not fulfilled
        pred_module.establishable = MagicMock(return_value=False)
        self.assertFalse(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 1, 1))

        # Case 2
        # There is not an adoptable view in transit
        self.assertTrue(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 1, 2))
        # There is not an adoptable view in transit
        pred_module.transit_adopble = MagicMock(return_value=False)
        self.assertFalse(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 1, 2))

        # Case 3 should return True
        self.assertTrue(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 1, 3))
Esempio n. 9
0
    def test_interface_get_current_view(self):
        view_est_mod = ViewEstablishmentModule(0, self.resolver, 2, 0)
        pred_module = PredicatesAndAction(view_est_mod, 0, self.resolver, 2, 0)
        pred_module.views = [{CURRENT: 0, NEXT: 0}, {CURRENT: 1, NEXT: 1}]
        view_est_mod.get_phs = MagicMock(return_value=1)
        view_est_mod.witnes_seen = MagicMock(return_value=True)
        pred_module.allow_service = MagicMock(return_value=True)

        # Should return the view of the current node
        self.assertEqual(pred_module.get_current_view(0), 0)
        # Should return the view of an other processor
        self.assertEqual(pred_module.get_current_view(1), 1)
        # Should give back the TEE (None) by denying service
        view_est_mod.get_phs = MagicMock(return_value=0)
        pred_module.allow_service = MagicMock(return_value=False)
        self.assertEqual(pred_module.get_current_view(0),
                         ViewEstablishmentEnums.TEE)
Esempio n. 10
0
    def test_automaton_phase_0_predicates(self):
        view_est_mod = ViewEstablishmentModule(0, self.resolver, 2, 0)
        pred_module = PredicatesAndAction(view_est_mod, 0, self.resolver, 2, 0)

        # Case 0
        pred_module.views = [{CURRENT: 0, NEXT: 0}, {CURRENT: 1, NEXT: 1}]
        pred_module.transit_adopble = MagicMock(return_value=True)
        self.assertTrue(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 0, 0))
        # Not a adoptable view in transit
        pred_module.transit_adopble = MagicMock(return_value=False)
        self.assertFalse(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 0, 0))
        # The adoptable view is the same as processor i
        pred_module.views = [{CURRENT: 0, NEXT: 0}, {CURRENT: 0, NEXT: 0}]
        pred_module.transit_adopble = MagicMock(return_value=True)
        self.assertFalse(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 0, 0))

        # Case 1b
        pred_module.vChange = [False for i in range(2)]
        pred_module.establishable = MagicMock(return_value=True)
        pred_module.views[pred_module.id] = pred_module.RST_PAIR
        self.assertTrue(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 0, 1))

        # Case 1a
        pred_module.views[pred_module.id] = {
            "current": 1,
            "next": 1
        }  # NOT the RST_PAIR
        pred_module.establishable = MagicMock(return_value=True)
        pred_module.vChange = [True for i in range(2)]
        self.assertTrue(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 0, 1))
        # View change is not required
        pred_module.vChange = [False for i in range(2)]
        pred_module.views[1] = {"current": 1, "next": 1}
        self.assertFalse(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 0, 1))
        # The threshold to move to a view change is not fulfilled
        pred_module.establishable = MagicMock(return_value=False)
        pred_module.vChange = [True for i in range(2)]
        self.assertFalse(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 0, 1))

        # Case 2
        # There is a adoptable view in transit
        self.assertTrue(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 0, 2))
        # None of the condition is fulfilled
        pred_module.transit_adopble = MagicMock(return_value=False)
        self.assertFalse(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 0, 2))
        # Processor i view_pair is the default pair
        pred_module.views[pred_module.id] = pred_module.RST_PAIR
        self.assertTrue(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 0, 2))

        # Case 3 should return True
        self.assertTrue(
            pred_module.automation(ViewEstablishmentEnums.PREDICATE, 0, 3))