import pytest
from cephadm.services.osd import RemoveUtil, OSD
-from mock import mock
-from .fixtures import with_cephadm_module
+from unittest import mock
+from .fixtures import with_cephadm_module, async_side_effect
from cephadm import CephadmOrchestrator
from typing import Generator
with mock.patch("cephadm.services.osd.RemoveUtil"):
o = OSD(0, mock.MagicMock())
yield o
+
+
+@pytest.fixture()
+def mock_cephadm(monkeypatch):
+ import cephadm.module
+ import cephadm.serve
+
+ mm = mock.MagicMock()
+ mm._run_cephadm.side_effect = async_side_effect(('{}', '', 0))
+ monkeypatch.setattr(
+ cephadm.serve.CephadmServe, '_run_cephadm', mm._run_cephadm
+ )
+ monkeypatch.setattr(
+ cephadm.module.CephadmOrchestrator,
+ '_daemon_action',
+ mm._daemon_action,
+ )
+ mm.serve = cephadm.serve.CephadmServe
+ return mm
+import contextlib
import json
-from unittest.mock import patch
+from unittest.mock import patch, ANY
from cephadm.module import CephadmOrchestrator
from ceph.deployment.service_spec import TracingSpec
error_ok=True,
use_current_daemon_image=False,
)
+
+
+def test_jaeger_agent_choose_next_action(cephadm_module, mock_cephadm):
+ jaeger_spec = TracingSpec(service_type="jaeger-agent")
+ coll_spec = TracingSpec(service_type="jaeger-collector")
+ es_spec = TracingSpec(service_type="elasticsearch")
+ with contextlib.ExitStack() as stack:
+ stack.enter_context(with_host(cephadm_module, "test"))
+ stack.enter_context(with_service(cephadm_module, jaeger_spec))
+ stack.enter_context(with_service(cephadm_module, es_spec))
+ stack.enter_context(with_service(cephadm_module, coll_spec))
+ # manually invoke _check_daemons to trigger a call to
+ # _daemon_action so we can check what action was chosen
+ mock_cephadm.serve(cephadm_module)._check_daemons()
+ mock_cephadm._daemon_action.assert_called_with(ANY, action="redeploy")