summaryrefslogtreecommitdiffstats
path: root/src/pybind/mgr/telemetry/tests/test_telemetry.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/pybind/mgr/telemetry/tests/test_telemetry.py')
-rw-r--r--src/pybind/mgr/telemetry/tests/test_telemetry.py121
1 files changed, 121 insertions, 0 deletions
diff --git a/src/pybind/mgr/telemetry/tests/test_telemetry.py b/src/pybind/mgr/telemetry/tests/test_telemetry.py
new file mode 100644
index 000000000..188d0efa8
--- /dev/null
+++ b/src/pybind/mgr/telemetry/tests/test_telemetry.py
@@ -0,0 +1,121 @@
+import json
+import pytest
+import unittest
+from unittest import mock
+
+import telemetry
+from typing import cast, Any, DefaultDict, Dict, List, Optional, Tuple, TypeVar, TYPE_CHECKING, Union
+
+OptionValue = Optional[Union[bool, int, float, str]]
+
+Collection = telemetry.module.Collection
+ALL_CHANNELS = telemetry.module.ALL_CHANNELS
+MODULE_COLLECTION = telemetry.module.MODULE_COLLECTION
+
+COLLECTION_BASE = ["basic_base", "device_base", "crash_base", "ident_base"]
+
+class TestTelemetry:
+ @pytest.mark.parametrize("preconfig,postconfig,prestore,poststore,expected",
+ [
+ (
+ # user is not opted-in
+ {
+ 'last_opt_revision': 1,
+ 'enabled': False,
+ },
+ {
+ 'last_opt_revision': 1,
+ 'enabled': False,
+ },
+ {
+ # None
+ },
+ {
+ 'collection': []
+ },
+ {
+ 'is_opted_in': False,
+ 'is_enabled_collection':
+ {
+ 'basic_base': False,
+ 'basic_mds_metadata': False,
+ },
+ },
+ ),
+ (
+ # user is opted-in to an old revision
+ {
+ 'last_opt_revision': 2,
+ 'enabled': True,
+ },
+ {
+ 'last_opt_revision': 2,
+ 'enabled': True,
+ },
+ {
+ # None
+ },
+ {
+ 'collection': []
+ },
+ {
+ 'is_opted_in': False,
+ 'is_enabled_collection':
+ {
+ 'basic_base': False,
+ 'basic_mds_metadata': False,
+ },
+ },
+ ),
+ (
+ # user is opted-in to the latest revision
+ {
+ 'last_opt_revision': 3,
+ 'enabled': True,
+ },
+ {
+ 'last_opt_revision': 3,
+ 'enabled': True,
+ },
+ {
+ # None
+ },
+ {
+ 'collection': COLLECTION_BASE
+ },
+ {
+ 'is_opted_in': True,
+ 'is_enabled_collection':
+ {
+ 'basic_base': True,
+ 'basic_mds_metadata': False,
+ },
+ },
+ ),
+ ])
+ def test_upgrade(self,
+ preconfig: Dict[str, Any], \
+ postconfig: Dict[str, Any], \
+ prestore: Dict[str, Any], \
+ poststore: Dict[str, Any], \
+ expected: Dict[str, Any]) -> None:
+
+ m = telemetry.Module('telemetry', '', '')
+
+ if preconfig is not None:
+ for k, v in preconfig.items():
+ # no need to mock.patch since _ceph_set_module_option() which
+ # is called from set_module_option() is already mocked for
+ # tests, and provides setting default values for all module
+ # options
+ m.set_module_option(k, v)
+
+ m.config_update_module_option()
+ m.load()
+
+ collection = json.loads(m.get_store('collection'))
+
+ assert collection == poststore['collection']
+ assert m.is_opted_in() == expected['is_opted_in']
+ assert m.is_enabled_collection(Collection.basic_base) == expected['is_enabled_collection']['basic_base']
+ assert m.is_enabled_collection(Collection.basic_mds_metadata) == expected['is_enabled_collection']['basic_mds_metadata']