From c99b6959f38ed937e05ef6950b8f08b46ec42701 Mon Sep 17 00:00:00 2001
From: monokai <2536818783@qq.com>
Date: Wed, 23 Jan 2019 15:51:38 +0800
Subject: [PATCH] Add registries resource for RSD2.1

Change-Id: Id437ee4596e2a797be8898d2a2ff8d5d2a4651c1
---
 rsd_lib/resources/v2_1/__init__.py            | 28 ++++++
 rsd_lib/resources/v2_1/registries/__init__.py |  0
 .../resources/v2_1/registries/registries.py   | 75 ++++++++++++++++
 .../unit/json_samples/v2_1/registries.json    | 21 +++++
 .../v2_1/registries_collection.json           | 13 +++
 .../tests/unit/json_samples/v2_1/root.json    |  3 +
 .../tests/unit/json_samples/v2_2/root.json    |  3 +
 .../tests/unit/json_samples/v2_3/root.json    |  3 +
 .../tests/unit/json_samples/v2_4/root.json    |  3 +
 .../resources/v2_1/registries/__init__.py     |  0
 .../v2_1/registries/test_registries.py        | 89 +++++++++++++++++++
 .../unit/resources/v2_1/test_rsdlib_v2_1.py   | 18 ++++
 .../unit/resources/v2_2/test_rsdlib_v2_2.py   | 18 ++++
 .../unit/resources/v2_3/test_rsdlib_v2_3.py   | 18 ++++
 .../unit/resources/v2_4/test_rsdlib_v2_4.py   | 18 ++++
 15 files changed, 310 insertions(+)
 create mode 100644 rsd_lib/resources/v2_1/registries/__init__.py
 create mode 100644 rsd_lib/resources/v2_1/registries/registries.py
 create mode 100644 rsd_lib/tests/unit/json_samples/v2_1/registries.json
 create mode 100644 rsd_lib/tests/unit/json_samples/v2_1/registries_collection.json
 create mode 100644 rsd_lib/tests/unit/resources/v2_1/registries/__init__.py
 create mode 100644 rsd_lib/tests/unit/resources/v2_1/registries/test_registries.py

diff --git a/rsd_lib/resources/v2_1/__init__.py b/rsd_lib/resources/v2_1/__init__.py
index 8b655f5..ef2472b 100644
--- a/rsd_lib/resources/v2_1/__init__.py
+++ b/rsd_lib/resources/v2_1/__init__.py
@@ -20,6 +20,7 @@ from rsd_lib.resources.v2_1.ethernet_switch import ethernet_switch
 from rsd_lib.resources.v2_1.fabric import fabric
 from rsd_lib.resources.v2_1.manager import manager
 from rsd_lib.resources.v2_1.node import node
+from rsd_lib.resources.v2_1.registries import registries
 from rsd_lib.resources.v2_1.storage_service import storage_service
 from rsd_lib.resources.v2_1.system import system
 from rsd_lib.resources.v2_1.task import task_service
@@ -52,6 +53,9 @@ class RSDLibV2_1(base.ResourceBase):
     _task_service_path = base.Field(['Tasks', '@odata.id'], required=True)
     """Task Service path"""
 
+    _registries_path = base.Field(['Registries', '@odata.id'], required=True)
+    """RegistriesCollection path"""
+
     _redfish_version = base.Field(['RedfishVersion'], required=True)
     """Redfish version"""
 
@@ -224,3 +228,27 @@ class RSDLibV2_1(base.ResourceBase):
         return task_service.TaskService(self._conn,
                                         self._task_service_path,
                                         redfish_version=self.redfish_version)
+
+    def get_registries_collection(self):
+        """Get the RegistriesCollection object
+
+        :raises: MissingAttributeError, if the collection attribute is
+            not found
+        :returns: a RegistriesCollection object
+        """
+        return registries.RegistriesCollection(
+            self._conn,
+            self._registries_path,
+            redfish_version=self.redfish_version
+        )
+
+    def get_registries(self, identity):
+        """Given the identity return a Registries object
+
+        :param identity: The identity of the registries resource
+        :returns: The Registries object
+        """
+        return registries.Registries(
+            self._conn,
+            identity,
+            redfish_version=self.redfish_version)
diff --git a/rsd_lib/resources/v2_1/registries/__init__.py b/rsd_lib/resources/v2_1/registries/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/rsd_lib/resources/v2_1/registries/registries.py b/rsd_lib/resources/v2_1/registries/registries.py
new file mode 100644
index 0000000..02f9824
--- /dev/null
+++ b/rsd_lib/resources/v2_1/registries/registries.py
@@ -0,0 +1,75 @@
+# Copyright 2019 Intel, Inc.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on 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.
+
+from sushy.resources import base
+
+
+class LocationField(base.ListField):
+    language = base.Field("Language")
+    """The location language"""
+
+    publication_uri = base.Field("PublicationUri")
+    """The location publication uri"""
+
+
+class Registries(base.ResourceBase):
+    identity = base.Field("Id")
+    """The registries identity"""
+
+    name = base.Field("Name")
+    """The registries name"""
+
+    description = base.Field("Description")
+    """The registries description"""
+
+    languages = base.Field("Languages")
+    """The registries languages"""
+
+    registry = base.Field("Registry")
+    """The registry"""
+
+    location = LocationField("Location")
+    """The registries location"""
+
+    oem = base.Field("Oem")
+    """The registries oem"""
+
+    def __init__(self, connector, identity, redfish_version=None):
+        """A class representing a Registries
+
+        :param connector: A Connector instance
+        :param identity: The identity of the registries resource
+        :param redfish_version: The version of RedFish. Used to construct
+            the object according to schema of the given version.
+        """
+        super(Registries, self).__init__(connector, identity, redfish_version)
+
+
+class RegistriesCollection(base.ResourceCollectionBase):
+    @property
+    def _resource_type(self):
+        return Registries
+
+    def __init__(self, connector, path, redfish_version=None):
+        """A class representing a RegistriesCollection
+
+        :param connector: A Connector instance
+        :param path: The canonical path to the registries collection
+            resource
+        :param redfish_version: The version of RedFish. Used to construct
+            the object according to schema of the given version.
+        """
+        super(RegistriesCollection, self).__init__(connector, path,
+                                                   redfish_version)
diff --git a/rsd_lib/tests/unit/json_samples/v2_1/registries.json b/rsd_lib/tests/unit/json_samples/v2_1/registries.json
new file mode 100644
index 0000000..1c6d558
--- /dev/null
+++ b/rsd_lib/tests/unit/json_samples/v2_1/registries.json
@@ -0,0 +1,21 @@
+{
+    "@odata.context":"/redfish/v1/$metadata#Registries/Members/$entity",
+    "@odata.id":"/redfish/v1/Registries/Base",
+    "@odata.type":"#MessageRegistryFile.v1_0_0.MessageRegistryFile",
+    "Id":"Base",
+    "Name":"Base Message Registry File",
+    "Description":"Base Message Registry File locations",
+    "Languages":[
+        "en"
+    ],
+    "Registry":"Base.1.0",
+    "Location":[
+        {
+            "Language":"en",
+            "PublicationUri":"https://www.dmtf.org/sites/default/files/standards/documents/DSP8011_1.0.0a.json"
+        }
+    ],
+    "Oem":{
+
+    }
+}
\ No newline at end of file
diff --git a/rsd_lib/tests/unit/json_samples/v2_1/registries_collection.json b/rsd_lib/tests/unit/json_samples/v2_1/registries_collection.json
new file mode 100644
index 0000000..aef08dc
--- /dev/null
+++ b/rsd_lib/tests/unit/json_samples/v2_1/registries_collection.json
@@ -0,0 +1,13 @@
+{
+    "@odata.context":"/redfish/v1/$metadata#MessageRegistryFileCollection.MessageRegistryFileCollection",
+    "@odata.id":"/redfish/v1/Registries",
+    "@odata.type":"#MessageRegistryFileCollection.MessageRegistryFileCollection",
+    "Name":"Registry File Collection",
+    "Description":"Registry Repository",
+    "Members@odata.count":1,
+    "Members":[
+        {
+            "@odata.id":"/redfish/v1/Registries/Base"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/rsd_lib/tests/unit/json_samples/v2_1/root.json b/rsd_lib/tests/unit/json_samples/v2_1/root.json
index aff3ce5..aa8306c 100644
--- a/rsd_lib/tests/unit/json_samples/v2_1/root.json
+++ b/rsd_lib/tests/unit/json_samples/v2_1/root.json
@@ -37,6 +37,9 @@
     "EthernetSwitches": {
         "@odata.id": "/redfish/v1/EthernetSwitches"
     },
+    "Registries": {
+      "@odata.id": "/redfish/v1/Registries"
+    },
     "Links": {
         "Sessions": {
             "@odata.id": "/redfish/v1/SessionService/Sessions"
diff --git a/rsd_lib/tests/unit/json_samples/v2_2/root.json b/rsd_lib/tests/unit/json_samples/v2_2/root.json
index a2f4dec..92fdd15 100644
--- a/rsd_lib/tests/unit/json_samples/v2_2/root.json
+++ b/rsd_lib/tests/unit/json_samples/v2_2/root.json
@@ -28,6 +28,9 @@
     "TelemetryService": {
         "@odata.id": "/redfish/v1/TelemetryService"
     },
+    "Registries": {
+      "@odata.id": "/redfish/v1/Registries"
+    },
     "Oem": {
         "Intel_RackScale": {
             "@odata.type": "#Intel.Oem.ServiceRoot",
diff --git a/rsd_lib/tests/unit/json_samples/v2_3/root.json b/rsd_lib/tests/unit/json_samples/v2_3/root.json
index 15d4a13..b8c766c 100644
--- a/rsd_lib/tests/unit/json_samples/v2_3/root.json
+++ b/rsd_lib/tests/unit/json_samples/v2_3/root.json
@@ -28,6 +28,9 @@
     "StorageServices": {
       "@odata.id": "/redfish/v1/StorageServices"
     },
+    "Registries": {
+      "@odata.id": "/redfish/v1/Registries"
+    },
     "Oem": {
         "Intel_RackScale": {
             "@odata.type": "#Intel.Oem.ServiceRoot",
diff --git a/rsd_lib/tests/unit/json_samples/v2_4/root.json b/rsd_lib/tests/unit/json_samples/v2_4/root.json
index 7da6786..afd04b8 100644
--- a/rsd_lib/tests/unit/json_samples/v2_4/root.json
+++ b/rsd_lib/tests/unit/json_samples/v2_4/root.json
@@ -28,6 +28,9 @@
     "StorageServices": {
       "@odata.id": "/redfish/v1/StorageServices"
     },
+    "Registries": {
+      "@odata.id": "/redfish/v1/Registries"
+    },
     "Oem": {
         "Intel_RackScale": {
             "@odata.type": "#Intel.Oem.ServiceRoot",
diff --git a/rsd_lib/tests/unit/resources/v2_1/registries/__init__.py b/rsd_lib/tests/unit/resources/v2_1/registries/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/rsd_lib/tests/unit/resources/v2_1/registries/test_registries.py b/rsd_lib/tests/unit/resources/v2_1/registries/test_registries.py
new file mode 100644
index 0000000..a969be0
--- /dev/null
+++ b/rsd_lib/tests/unit/resources/v2_1/registries/test_registries.py
@@ -0,0 +1,89 @@
+# Copyright 2019 Intel, Inc.
+# All Rights Reserved.
+#
+#    Licensed under the Apache License, Version 2.0 (the "License"); you may
+#    not use this file except in compliance with the License. You may obtain
+#    a copy of the License at
+#
+#         http://www.apache.org/licenses/LICENSE-2.0
+#
+#    Unless required by applicable law or agreed to in writing, software
+#    distributed under the License is distributed on 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 json
+import mock
+import testtools
+
+from rsd_lib.resources.v2_1.registries import registries
+
+
+class RegistriesTestCase(testtools.TestCase):
+
+    def setUp(self):
+        super(RegistriesTestCase, self).setUp()
+        self.conn = mock.Mock()
+        with open('rsd_lib/tests/unit/json_samples/v2_1/registries.json',
+                  'r') as f:
+            self.conn.get.return_value.json.return_value = json.loads(f.read())
+
+        self.registries_inst = registries.Registries(
+            self.conn, '/redfish/v1/Registries/Base',
+            redfish_version='1.0.2')
+
+    def test__parse_attributes(self):
+        self.registries_inst._parse_attributes()
+        self.assertEqual("Base", self.registries_inst.identity)
+        self.assertEqual("Base Message Registry File",
+                         self.registries_inst.name)
+        self.assertEqual("Base Message Registry File locations",
+                         self.registries_inst.description)
+        self.assertEqual(['en'], self.registries_inst.languages)
+        self.assertEqual("Base.1.0", self.registries_inst.registry)
+        self.assertEqual("en", self.registries_inst.location[0].language)
+        self.assertEqual(
+            "https://www.dmtf.org/sites/default/files/standards"
+            "/documents/DSP8011_1.0.0a.json",
+            self.registries_inst.location[0].publication_uri)
+        self.assertEqual({}, self.registries_inst.oem)
+
+
+class RegistriesCollectionTestCase(testtools.TestCase):
+
+    def setUp(self):
+        super(RegistriesCollectionTestCase, self).setUp()
+        self.conn = mock.Mock()
+
+        with open('rsd_lib/tests/unit/json_samples/v2_1/'
+                  'registries_collection.json', 'r') as f:
+            self.conn.get.return_value.json.return_value = json.loads(f.read())
+
+        self.registries_col = registries.RegistriesCollection(
+            self.conn,
+            '/redfish/v1/Registries',
+            redfish_version='1.0.2')
+
+    def test_parse_attributes(self):
+        self.registries_col._parse_attributes()
+        self.assertEqual("Registry File Collection", self.registries_col.name)
+        self.assertEqual(('/redfish/v1/Registries/Base',),
+                         self.registries_col.members_identities)
+
+    @mock.patch.object(registries, 'Registries', autospec=True)
+    def test_get_member(self, mock_registries):
+        self.registries_col.get_member('/redfish/v1/Registries/Base')
+
+        mock_registries.assert_called_once_with(
+            self.registries_col._conn,
+            '/redfish/v1/Registries/Base',
+            redfish_version=self.registries_col.redfish_version
+        )
+
+    @mock.patch.object(registries, 'Registries', autospec=True)
+    def test_get_members(self, mock_registries):
+        members = self.registries_col.get_members()
+        self.assertEqual(mock_registries.call_count, 1)
+        self.assertIsInstance(members, list)
+        self.assertEqual(1, len(members))
diff --git a/rsd_lib/tests/unit/resources/v2_1/test_rsdlib_v2_1.py b/rsd_lib/tests/unit/resources/v2_1/test_rsdlib_v2_1.py
index 9ccedb7..3070e2b 100644
--- a/rsd_lib/tests/unit/resources/v2_1/test_rsdlib_v2_1.py
+++ b/rsd_lib/tests/unit/resources/v2_1/test_rsdlib_v2_1.py
@@ -23,6 +23,7 @@ from rsd_lib.resources.v2_1.ethernet_switch import ethernet_switch
 from rsd_lib.resources.v2_1.fabric import fabric
 from rsd_lib.resources.v2_1.manager import manager
 from rsd_lib.resources.v2_1.node import node
+from rsd_lib.resources.v2_1.registries import registries
 from rsd_lib.resources.v2_1.storage_service import storage_service
 from rsd_lib.resources.v2_1.system import system
 from rsd_lib.resources.v2_1.task import task_service
@@ -52,6 +53,8 @@ class RSDLibV2_1TestCase(testtools.TestCase):
                          self.rsd._ethernet_switches_path)
         self.assertEqual("/redfish/v1/TaskService",
                          self.rsd._task_service_path)
+        self.assertEqual("/redfish/v1/Registries",
+                         self.rsd._registries_path)
 
     @mock.patch.object(system, 'SystemCollection', autospec=True)
     def test_get_system_collection(self, mock_system_collection):
@@ -166,3 +169,18 @@ class RSDLibV2_1TestCase(testtools.TestCase):
         mock_task_service.assert_called_once_with(
             self.rsd._conn, '/redfish/v1/TaskService',
             redfish_version=self.rsd.redfish_version)
+
+    @mock.patch.object(registries, 'RegistriesCollection', autospec=True)
+    def test_get_registries_collection(self, mock_registries_collection):
+        self.rsd.get_registries_collection()
+        mock_registries_collection.assert_called_once_with(
+            self.rsd._conn, '/redfish/v1/Registries',
+            redfish_version=self.rsd.redfish_version)
+
+    @mock.patch.object(registries, 'Registries', autospec=True)
+    def test_get_registries(self, mock_registries_service):
+        self.rsd.get_registries('fake-registries-id')
+        mock_registries_service.assert_called_once_with(
+            self.rsd._conn, 'fake-registries-id',
+            redfish_version=self.rsd.redfish_version
+        )
diff --git a/rsd_lib/tests/unit/resources/v2_2/test_rsdlib_v2_2.py b/rsd_lib/tests/unit/resources/v2_2/test_rsdlib_v2_2.py
index df75b72..d5d5946 100644
--- a/rsd_lib/tests/unit/resources/v2_2/test_rsdlib_v2_2.py
+++ b/rsd_lib/tests/unit/resources/v2_2/test_rsdlib_v2_2.py
@@ -20,6 +20,7 @@ import testtools
 from rsd_lib.resources.v2_1.chassis import chassis as v2_1_chassis
 from rsd_lib.resources.v2_1.fabric import fabric as v2_1_fabric
 from rsd_lib.resources.v2_1.node import node as v2_1_node
+from rsd_lib.resources.v2_1.registries import registries as v2_1_registries
 from rsd_lib.resources.v2_1.storage_service import storage_service \
     as v2_1_storage_service
 from rsd_lib.resources.v2_1.task import task_service as v2_1_task_service
@@ -55,6 +56,8 @@ class RSDLibV2_2TestCase(testtools.TestCase):
                          self.rsd._telemetry_service_path)
         self.assertEqual("/redfish/v1/TaskService",
                          self.rsd._task_service_path)
+        self.assertEqual("/redfish/v1/Registries",
+                         self.rsd._registries_path)
 
     @mock.patch.object(v2_2_system, 'SystemCollection', autospec=True)
     def test_get_system_collection(self, mock_system_collection):
@@ -175,3 +178,18 @@ class RSDLibV2_2TestCase(testtools.TestCase):
         mock_task_service.assert_called_once_with(
             self.rsd._conn, '/redfish/v1/TaskService',
             redfish_version=self.rsd.redfish_version)
+
+    @mock.patch.object(v2_1_registries, 'RegistriesCollection', autospec=True)
+    def test_get_registries_collection(self, mock_registries_collection):
+        self.rsd.get_registries_collection()
+        mock_registries_collection.assert_called_once_with(
+            self.rsd._conn, '/redfish/v1/Registries',
+            redfish_version=self.rsd.redfish_version)
+
+    @mock.patch.object(v2_1_registries, 'Registries', autospec=True)
+    def test_get_registries(self, mock_registries_service):
+        self.rsd.get_registries('fake-registries-id')
+        mock_registries_service.assert_called_once_with(
+            self.rsd._conn, 'fake-registries-id',
+            redfish_version=self.rsd.redfish_version
+        )
diff --git a/rsd_lib/tests/unit/resources/v2_3/test_rsdlib_v2_3.py b/rsd_lib/tests/unit/resources/v2_3/test_rsdlib_v2_3.py
index dc21b86..6a14441 100644
--- a/rsd_lib/tests/unit/resources/v2_3/test_rsdlib_v2_3.py
+++ b/rsd_lib/tests/unit/resources/v2_3/test_rsdlib_v2_3.py
@@ -18,6 +18,7 @@ import mock
 import testtools
 
 from rsd_lib.resources.v2_1.chassis import chassis as v2_1_chassis
+from rsd_lib.resources.v2_1.registries import registries as v2_1_registries
 from rsd_lib.resources.v2_1.task import task_service as v2_1_task_service
 from rsd_lib.resources.v2_2.manager import manager as v2_2_manager
 from rsd_lib.resources.v2_2.system import system as v2_2_system
@@ -52,6 +53,8 @@ class RSDLibV2_3TestCase(testtools.TestCase):
         self.assertEqual(None, self.rsd._telemetry_service_path)
         self.assertEqual("/redfish/v1/TaskService",
                          self.rsd._task_service_path)
+        self.assertEqual("/redfish/v1/Registries",
+                         self.rsd._registries_path)
 
     @mock.patch.object(v2_2_system, 'SystemCollection', autospec=True)
     def test_get_system_collection(self, mock_system_collection):
@@ -166,6 +169,21 @@ class RSDLibV2_3TestCase(testtools.TestCase):
             self.rsd._conn, '/redfish/v1/TaskService',
             redfish_version=self.rsd.redfish_version)
 
+    @mock.patch.object(v2_1_registries, 'RegistriesCollection', autospec=True)
+    def test_get_registries_collection(self, mock_registries_collection):
+        self.rsd.get_registries_collection()
+        mock_registries_collection.assert_called_once_with(
+            self.rsd._conn, '/redfish/v1/Registries',
+            redfish_version=self.rsd.redfish_version)
+
+    @mock.patch.object(v2_1_registries, 'Registries', autospec=True)
+    def test_get_registries(self, mock_registries_service):
+        self.rsd.get_registries('fake-registries-id')
+        mock_registries_service.assert_called_once_with(
+            self.rsd._conn, 'fake-registries-id',
+            redfish_version=self.rsd.redfish_version
+        )
+
     # @mock.patch.object(v2_2_telemetry, 'Telemetry', autospec=True)
     # def test_get_telemetry_service(self, mock_telemetry_service):
     #     self.rsd.get_telemetry_service()
diff --git a/rsd_lib/tests/unit/resources/v2_4/test_rsdlib_v2_4.py b/rsd_lib/tests/unit/resources/v2_4/test_rsdlib_v2_4.py
index d641f27..e269d13 100644
--- a/rsd_lib/tests/unit/resources/v2_4/test_rsdlib_v2_4.py
+++ b/rsd_lib/tests/unit/resources/v2_4/test_rsdlib_v2_4.py
@@ -18,6 +18,7 @@ import mock
 import testtools
 
 from rsd_lib.resources.v2_1.chassis import chassis as v2_1_chassis
+from rsd_lib.resources.v2_1.registries import registries as v2_1_registries
 from rsd_lib.resources.v2_1.task import task_service as v2_1_task_service
 from rsd_lib.resources.v2_2.manager import manager as v2_2_manager
 from rsd_lib.resources.v2_2.system import system as v2_2_system
@@ -52,6 +53,8 @@ class RSDLibV2_3TestCase(testtools.TestCase):
         self.assertEqual(None, self.rsd._telemetry_service_path)
         self.assertEqual("/redfish/v1/TaskService",
                          self.rsd._task_service_path)
+        self.assertEqual("/redfish/v1/Registries",
+                         self.rsd._registries_path)
 
     @mock.patch.object(v2_2_system, 'SystemCollection', autospec=True)
     def test_get_system_collection(self, mock_system_collection):
@@ -166,6 +169,21 @@ class RSDLibV2_3TestCase(testtools.TestCase):
             self.rsd._conn, '/redfish/v1/TaskService',
             redfish_version=self.rsd.redfish_version)
 
+    @mock.patch.object(v2_1_registries, 'RegistriesCollection', autospec=True)
+    def test_get_registries_collection(self, mock_registries_collection):
+        self.rsd.get_registries_collection()
+        mock_registries_collection.assert_called_once_with(
+            self.rsd._conn, '/redfish/v1/Registries',
+            redfish_version=self.rsd.redfish_version)
+
+    @mock.patch.object(v2_1_registries, 'Registries', autospec=True)
+    def test_get_registries(self, mock_registries_service):
+        self.rsd.get_registries('fake-registries-id')
+        mock_registries_service.assert_called_once_with(
+            self.rsd._conn, 'fake-registries-id',
+            redfish_version=self.rsd.redfish_version
+        )
+
     # @mock.patch.object(v2_2_telemetry, 'Telemetry', autospec=True)
     # def test_get_telemetry_service(self, mock_telemetry_service):
     #     self.rsd.get_telemetry_service()