jrobinAV 1 год назад
Родитель
Сommit
8ef7aa432c

+ 42 - 3
.github/workflows/partial-tests.yml

@@ -89,7 +89,7 @@ jobs:
 
       - name: Pytest Core
         if: steps.changes.outputs.core == 'true'
-        run: pipenv run pytest -m "not orchestrator_dispatcher and not modin" tests/core
+        run: pipenv run pytest -m "not orchestrator_dispatcher and not modin and not standalone" tests/core
 
       - name: Pytest GUI
         if: steps.changes.outputs.gui == 'true'
@@ -143,13 +143,52 @@ jobs:
         run: pipenv install --dev --python=${{ matrix.python-version }}
 
       - name: Setup LibMagic (MacOS)
-        if: matrix.os == 'macos-latest'
+        if: matrix.os == 'macos-latest' and steps.changes.outputs.core == 'true'
         run: brew install libmagic
 
       - name: Pytest Core orchestrator_dispatcher
         if: steps.changes.outputs.core == 'true'
         run: pipenv run pytest -m "orchestrator_dispatcher" tests/core
 
+  standalone_tests:
+    needs: linter
+    timeout-minutes: 20
+    strategy:
+      fail-fast: false
+      matrix:
+        python-version: ['3.8', '3.9', '3.10', '3.11']
+        os: [ubuntu-latest, windows-latest, macos-latest]
+    runs-on: ${{ matrix.os }}
+    steps:
+      - uses: actions/checkout@v4
+
+      - uses: dorny/paths-filter@v2
+        id: changes
+        with:
+          filters: |
+            core:
+              - 'taipy/core/**'
+
+      - uses: actions/setup-python@v5
+        with:
+          python-version: ${{matrix.python-version}}
+
+      - name: Install pipenv
+        if: steps.changes.outputs.core == 'true'
+        run: curl https://raw.githubusercontent.com/pypa/pipenv/master/get-pipenv.py | python
+
+      - name: Install Dependencies
+        if: steps.changes.outputs.core == 'true'
+        run: pipenv install --dev --python=${{ matrix.python-version }}
+
+      - name: Setup LibMagic (MacOS)
+        if: matrix.os == 'macos-latest' and steps.changes.outputs.core == 'true'
+        run: brew install libmagic
+
+      - name: Pytest Core standalone
+        if: steps.changes.outputs.core == 'true'
+        run: pipenv run pytest -m "standalone" tests/core
+
   modin_tests:
     needs: linter
     timeout-minutes: 20
@@ -182,7 +221,7 @@ jobs:
         run: pipenv install --dev --python=${{ matrix.python-version }}
 
       - name: Setup LibMagic (MacOS)
-        if: matrix.os == 'macos-latest'
+        if: matrix.os == 'macos-latest' and steps.changes.outputs.core == 'true'
         run: brew install libmagic
 
       - name: Pytest Core modin

+ 1 - 0
pytest.ini

@@ -11,3 +11,4 @@ markers =
     teste2e:End-to-end tests
     orchestrator_dispatcher:Orchestrator dispatcher tests
     modin:Tests using modin
+    standalone:Tests starting a standalone dispatcher thread

+ 0 - 4
tests/core/_orchestrator/_dispatcher/mock_standalone_dispatcher.py

@@ -11,13 +11,9 @@
 from concurrent.futures import Executor, Future
 from typing import Optional
 
-from taipy import Config
-from taipy.config._serializer._toml_serializer import _TomlSerializer
 from taipy.core import Job
 from taipy.core._orchestrator._abstract_orchestrator import _AbstractOrchestrator
-
 from taipy.core._orchestrator._dispatcher import _StandaloneJobDispatcher
-from taipy.core._orchestrator._dispatcher._task_function_wrapper import _TaskFunctionWrapper
 
 
 class MockProcessPoolExecutor(Executor):

+ 1 - 14
tests/core/_orchestrator/_dispatcher/test_dispatcher__execute_job.py

@@ -9,30 +9,17 @@
 # an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
 # specific language governing permissions and limitations under the License.
 
-import multiprocessing
-import time
-from concurrent.futures import ProcessPoolExecutor
-from functools import partial
 from unittest import mock
-from unittest.mock import MagicMock
-
-from pytest import raises
 
 import taipy
 from taipy.config.config import Config
-from taipy.core import DataNodeId, JobId, TaskId
+from taipy.core import JobId, TaskId
 from taipy.core._orchestrator._dispatcher import _JobDispatcher
-from taipy.core._orchestrator._dispatcher._development_job_dispatcher import _DevelopmentJobDispatcher
-from taipy.core._orchestrator._dispatcher._standalone_job_dispatcher import _StandaloneJobDispatcher
 from taipy.core._orchestrator._orchestrator_factory import _OrchestratorFactory
-from taipy.core.config.job_config import JobConfig
-from taipy.core.data._data_manager import _DataManager
 from taipy.core.job._job_manager_factory import _JobManagerFactory
 from taipy.core.job.job import Job
-from taipy.core.submission._submission_manager_factory import _SubmissionManagerFactory
 from taipy.core.task._task_manager_factory import _TaskManagerFactory
 from taipy.core.task.task import Task
-from tests.core.utils import assert_true_after_time
 
 
 def nothing(*args):

+ 4 - 0
tests/core/_orchestrator/test_orchestrator__submit.py

@@ -12,6 +12,7 @@ from datetime import datetime, timedelta
 from unittest import mock
 
 import freezegun
+import pytest
 
 from taipy import Scope, Task, Scenario
 from taipy.config import Config
@@ -205,6 +206,7 @@ def test_submit_scenario_development_mode_blocked_jobs():
     assert orchestrator.jobs_to_run.qsize() == 0
 
 
+@pytest.mark.standalone
 def test_submit_scenario_standalone_mode():
     Config.configure_job_executions(mode=JobConfig._STANDALONE_MODE)
     sc = create_scenario()
@@ -378,6 +380,7 @@ def test_submit_sequence_development_mode():
     assert orchestrator.jobs_to_run.qsize() == 0
 
 
+@pytest.mark.standalone
 def test_submit_sequence_standalone_mode():
     Config.configure_job_executions(mode=JobConfig._STANDALONE_MODE)
     scenario = create_scenario()
@@ -443,6 +446,7 @@ def test_submit_sequence_standalone_mode():
     assert orchestrator.jobs_to_run.qsize() == 1
 
 
+@pytest.mark.standalone
 def test_submit_sequence_with_callbacks_and_force_and_wait():
     Config.configure_job_executions(mode="standalone")
     scenario = create_scenario()

+ 4 - 0
tests/core/_orchestrator/test_orchestrator__submit_task.py

@@ -12,6 +12,7 @@ from datetime import datetime
 from unittest import mock
 
 import freezegun
+import pytest
 
 from taipy.config import Config
 from taipy.core import taipy
@@ -110,6 +111,7 @@ def test_submit_task_development_mode_blocked_job():
     assert orchestrator.jobs_to_run.qsize() == 0
 
 
+@pytest.mark.standalone
 def test_submit_task_standalone_mode():
     Config.configure_job_executions(mode="standalone")
     sc = create_scenario()
@@ -148,6 +150,7 @@ def test_submit_task_standalone_mode():
     assert orchestrator.jobs_to_run.qsize() == 1
 
 
+@pytest.mark.standalone
 def test_submit_task_standalone_mode_blocked_job():
     Config.configure_job_executions(mode="standalone")
     sc = create_scenario()
@@ -186,6 +189,7 @@ def test_submit_task_standalone_mode_blocked_job():
     assert orchestrator.jobs_to_run.qsize() == 0
 
 
+@pytest.mark.standalone
 def test_submit_task_with_callbacks_and_force_and_wait():
     Config.configure_job_executions(mode="standalone")
     scenario = create_scenario()

+ 3 - 0
tests/core/_orchestrator/test_orchestrator_factory.py

@@ -60,6 +60,7 @@ def test_build_development_dispatcher():
     assert isinstance(_OrchestratorFactory._dispatcher, _DevelopmentJobDispatcher)
 
 
+@pytest.mark.standalone
 def test_build_standalone_dispatcher():
     Config.configure_job_executions(mode=JobConfig._STANDALONE_MODE)
     _OrchestratorFactory._orchestrator = None
@@ -71,6 +72,7 @@ def test_build_standalone_dispatcher():
     _OrchestratorFactory._dispatcher.stop()
 
 
+@pytest.mark.standalone
 def test_rebuild_standalone_dispatcher_and_force_restart():
     Config.configure_job_executions(mode=JobConfig._STANDALONE_MODE)
     _OrchestratorFactory._build_orchestrator()
@@ -123,6 +125,7 @@ def test_remove_dispatcher_development():
     assert _OrchestratorFactory._dispatcher is None
 
 
+@pytest.mark.standalone
 def test_remove_dispatcher_standalone():
     Config.configure_job_executions(mode=JobConfig._STANDALONE_MODE)
     _OrchestratorFactory._build_orchestrator()

+ 2 - 1
tests/core/job/test_job.py

@@ -16,9 +16,10 @@ from unittest import mock
 from unittest.mock import MagicMock
 
 import pytest
+
 from taipy.config.common.scope import Scope
 from taipy.config.config import Config
-from taipy.core import JobId, Sequence, SequenceId, TaskId
+from taipy.core import JobId, TaskId
 from taipy.core._orchestrator._dispatcher._development_job_dispatcher import _DevelopmentJobDispatcher
 from taipy.core._orchestrator._dispatcher._standalone_job_dispatcher import _StandaloneJobDispatcher
 from taipy.core._orchestrator._orchestrator_factory import _OrchestratorFactory

+ 1 - 0
tests/core/scenario/test_scenario_manager.py

@@ -1216,6 +1216,7 @@ def test_scenarios_comparison_development_mode():
         _ScenarioManager._compare(scenario_1, scenario_2, data_node_config_id="abc")
 
 
+@pytest.mark.standalone
 def test_scenarios_comparison_standalone_mode():
     Config.configure_job_executions(mode=JobConfig._STANDALONE_MODE)
 

+ 1 - 0
tests/core/test_core.py

@@ -109,6 +109,7 @@ class TestCore:
                 Config.configure_data_node(id="i1")
             core.stop()
 
+    @pytest.mark.standalone
     def test_block_config_update_when_core_service_is_running_standalone_mode(self):
         _OrchestratorFactory._dispatcher = None
 

+ 2 - 0
tests/core/test_core_cli.py

@@ -457,6 +457,7 @@ def test_force_override_production_version():
         core.stop()
 
 
+@pytest.mark.standalone
 def test_modify_job_configuration_dont_stop_application(caplog, init_config):
     scenario_config = config_scenario()
 
@@ -483,6 +484,7 @@ def test_modify_job_configuration_dont_stop_application(caplog, init_config):
         core.stop()
 
 
+@pytest.mark.standalone
 def test_modify_config_properties_without_force(caplog, init_config):
     scenario_config = config_scenario()
 

+ 6 - 0
tests/core/version/test_production_version_migration.py

@@ -12,6 +12,8 @@
 import multiprocessing
 from unittest.mock import patch
 
+import pytest
+
 from taipy.config.config import Config
 from taipy.core import Core, taipy
 from taipy.core.data._data_manager import _DataManager
@@ -56,6 +58,7 @@ def test_migrate_datanode(init_config):
     assert v1.d1.path == "bar.pkl"
 
 
+@pytest.mark.standalone
 def test_migrate_datanode_in_standalone_mode(init_config):
     scenario_v1 = submit_v1()
 
@@ -88,6 +91,7 @@ def test_migrate_task(init_config):
     assert v1.my_task.skippable is True
 
 
+@pytest.mark.standalone
 def test_migrate_task_in_standalone_mode(init_config):
     scenario_v1 = submit_v1()
 
@@ -120,6 +124,7 @@ def test_migrate_scenario(init_config):
     assert v1.properties["foo"] == "bar"
 
 
+@pytest.mark.standalone
 def test_migrate_scenario_in_standalone_mode(init_config):
     scenario_v1 = submit_v1()
 
@@ -159,6 +164,7 @@ def test_migrate_all_entities(init_config):
     assert v1.properties["foo"] == "bar"
 
 
+@pytest.mark.standalone
 def test_migrate_all_entities_in_standalone_mode(init_config):
     scenario_v1 = submit_v1()