Exemple #1
0
    def test_multithreaded_runner_with_multiapp_system(self):
        system = System(
            Orders | Reservations | Orders,
            Orders | Payments | Orders,
            setup_tables=True,
            infrastructure_class=self.infrastructure_class,
        )

        self.set_db_uri()

        with MultiThreadedRunner(system) as runner:

            orders = runner.get(Orders)
            started = time()

            # Create new orders.
            num_orders = 10
            order_ids = []
            for i in range(num_orders):
                order_id = create_new_order()
                order_ids.append(order_id)

            retries = num_orders
            for order_id in order_ids:
                # while not orders.repository[order_id].is_reserved:
                #     sleep(0.1)
                #     retries -= 1
                #     assert retries, "Failed set order.is_reserved"

                while not orders.repository[order_id].is_paid:
                    sleep(0.5)
                    retries -= 1
                    assert retries, "Failed set order.is_paid"

            print(f"Duration: { time() - started :.4f}s")
Exemple #2
0
    def test_multithreaded_runner_with_singleapp_system(self):

        system = System(
            Examples | Examples,
            setup_tables=True,
            infrastructure_class=self.infrastructure_class,
        )

        self.set_db_uri()

        with MultiThreadedRunner(system) as runner:

            app = runner.get(Examples)

            aggregate = ExampleAggregate.__create__()
            aggregate.__save__()

            assert aggregate.id in app.repository

            # Check the aggregate is moved on.
            retries = 50
            while not app.repository[aggregate.id].is_moved_on:

                sleep(0.1)
                retries -= 1
                assert retries, "Failed to move"
Exemple #3
0
    def test_multithreaded_runner_with_single_pipe(self):
        system = System(
            Orders | Reservations,
            setup_tables=True,
            infrastructure_class=self.infrastructure_class,
        )
        self.set_db_uri()

        # with system as runner:
        with MultiThreadedRunner(system) as runner:
            order_id = create_new_order()
            orders_repo = runner.get(Orders).repository
            self.assertEqual(orders_repo[order_id].id, order_id)
            reservations_repo = runner.get(Reservations).repository
            reservation_id = Reservation.create_reservation_id(order_id)

            patience = 10
            while True:
                try:
                    self.assertEqual(
                        reservations_repo[reservation_id].order_id, order_id
                    )
                except (RepositoryKeyError, AssertionError):
                    if patience:
                        patience -= 1
                        sleep(0.1)
                    else:
                        raise
                else:
                    break
Exemple #4
0
 def test_multithreaded_runner_with_single_application_class(self):
     system = System(
         Orders, setup_tables=True, infrastructure_class=self.infrastructure_class,
     )
     with MultiThreadedRunner(system) as runner:
         app = runner.get(Orders)
         order_id = app.create_new_order()
         repository = app.repository
         self.assertEqual(repository[order_id].id, order_id)
    def test_multi_threaded(self):

        if "TRAVIS_PYTHON_VERSION" in os.environ:
            if self.infrastructure_class is SQLAlchemyApplication:
                self.skipTest(
                    "There's an intermittent problem with the multi-threaded"
                    "runner with SQLAlchemy and Python 3.7 on Travis. Fix me :)."
                )
        set_db_uri()

        key1, key2, key3 = uuid4(), uuid4(), uuid4()
        value1, value2, value3 = 11111, 22222, 33333

        runner = MultiThreadedRunner(
            system=self.system, infrastructure_class=self.infrastructure_class
        )

        with runner:
            paxosapplication0 = runner.processes["paxosapplication0"]
            paxosapplication1 = runner.processes["paxosapplication1"]
            paxosapplication2 = runner.processes["paxosapplication2"]

            started1 = datetime.datetime.now()
            assert isinstance(paxosapplication0, PaxosApplication)
            paxosapplication0.propose_value(key1, value1)
            ended1 = (datetime.datetime.now() - started1).total_seconds()

            # Check each process has expected final value.
            self.assert_final_value(paxosapplication0, key1, value1)
            self.assert_final_value(paxosapplication1, key1, value1)
            self.assert_final_value(paxosapplication2, key1, value1)
            print("Resolved paxos 1 with multi threads in %ss" % ended1)

            started2 = datetime.datetime.now()
            paxosapplication1.propose_value(key2, value2)
            ended2 = (datetime.datetime.now() - started2).total_seconds()

            # Check each process has a resolution.
            self.assert_final_value(paxosapplication0, key2, value2)
            self.assert_final_value(paxosapplication1, key2, value2)
            self.assert_final_value(paxosapplication2, key2, value2)
            print("Resolved paxos 2 with multi threads in %ss" % ended2)

            started3 = datetime.datetime.now()
            paxosapplication2.propose_value(key3, value3)
            ended3 = (datetime.datetime.now() - started3).total_seconds()

            # Check each process has a resolution.
            self.assert_final_value(paxosapplication0, key3, value3)
            self.assert_final_value(paxosapplication1, key3, value3)
            self.assert_final_value(paxosapplication2, key3, value3)
            print("Resolved paxos 3 with multi threads in %ss" % ended3)
Exemple #6
0
    def test_clocked_multithreaded_runner_with_multiapp_system(self):
        system = System(
            Orders | Reservations | Orders,
            Orders | Payments | Orders,
            setup_tables=True,
            infrastructure_class=self.infrastructure_class,
        )

        self.set_db_uri()

        clock_speed = 10
        with MultiThreadedRunner(system, clock_speed=clock_speed) as runner:

            started = time()

            # Create a new order.
            num_orders = 10
            order_ids = []
            for i in range(num_orders):
                order_id = create_new_order()
                order_ids.append(order_id)
                # sleep(tick_interval / 3)
                # sleep(tick_interval )

            retries = 30 * num_orders
            num_completed = 0
            for order_id in order_ids:
                app = runner.get(Orders)
                while not app.repository[order_id].is_paid:
                    sleep(0.1)
                    retries -= 1
                    assert retries, (
                        "Failed set order.is_paid (after %s completed)" % num_completed
                    )
                num_completed += 1

        print(f"Duration: { time() - started :.4f}s")