diff --git a/rsd_lib/resources/v2_1/__init__.py b/rsd_lib/resources/v2_1/__init__.py index 06dc8d4..8b655f5 100644 --- a/rsd_lib/resources/v2_1/__init__.py +++ b/rsd_lib/resources/v2_1/__init__.py @@ -22,10 +22,10 @@ from rsd_lib.resources.v2_1.manager import manager from rsd_lib.resources.v2_1.node import node 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 class RSDLibV2_1(base.ResourceBase): - _systems_path = base.Field(['Systems', '@odata.id'], required=True) """SystemCollection path""" @@ -49,6 +49,9 @@ class RSDLibV2_1(base.ResourceBase): required=True) """EthernetSwitchCollecton path""" + _task_service_path = base.Field(['Tasks', '@odata.id'], required=True) + """Task Service path""" + _redfish_version = base.Field(['RedfishVersion'], required=True) """Redfish version""" @@ -212,3 +215,12 @@ class RSDLibV2_1(base.ResourceBase): self._conn, identity, redfish_version=self.redfish_version) + + def get_task_service(self): + """Get the TaskService object + + :returns: The TaskService object + """ + return task_service.TaskService(self._conn, + self._task_service_path, + redfish_version=self.redfish_version) diff --git a/rsd_lib/resources/v2_1/task/__init__.py b/rsd_lib/resources/v2_1/task/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rsd_lib/resources/v2_1/task/task.py b/rsd_lib/resources/v2_1/task/task.py new file mode 100644 index 0000000..0215adc --- /dev/null +++ b/rsd_lib/resources/v2_1/task/task.py @@ -0,0 +1,81 @@ +# 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 MessagesField(base.ListField): + message_id = base.Field("MessageId") + """The message id""" + + related_properties = base.Field("RelatedProperties") + """The message related properties""" + + message = base.Field("Message") + """The message returned""" + + message_args = base.Field("MessageArgs") + """The message args""" + + severity = base.Field("Severity") + """The message severity""" + + +class Task(base.ResourceBase): + identity = base.Field("Id") + """The task identity""" + + name = base.Field("Name") + """The task name""" + + description = base.Field("Description") + """The task description""" + + task_state = base.Field("TaskState") + """The task state""" + + start_time = base.Field("StartTime") + """The task start time""" + + end_time = base.Field("EndTime") + """The task end time""" + + task_status = base.Field("TaskStatus") + """"The task status""" + + messages = MessagesField("Messages") + """The task message""" + + def delete(self): + """Delete this task""" + self._conn.delete(self.path) + + +class TaskCollection(base.ResourceCollectionBase): + @property + def _resource_type(self): + return Task + + def __init__(self, connector, path, redfish_version=None): + """A class representing a Task Collection + + :param connector: A Connector instance + :param path: The canonical path to the task collection resource + :param redfish_version: The version of RedFish. Used to construct + the object according to schema of the given version. + """ + super(TaskCollection, self).__init__(connector, + path, + redfish_version) diff --git a/rsd_lib/resources/v2_1/task/task_service.py b/rsd_lib/resources/v2_1/task/task_service.py new file mode 100644 index 0000000..9827492 --- /dev/null +++ b/rsd_lib/resources/v2_1/task/task_service.py @@ -0,0 +1,80 @@ +# 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 rsd_lib.resources.v2_1.task import task +from sushy.resources import base +from sushy import utils + + +class StatusField(base.CompositeField): + state = base.Field("State") + """The status state""" + + health = base.Field("Health") + """The status health""" + + +class TaskService(base.ResourceBase): + identity = base.Field("Id") + """The task service identity""" + + name = base.Field("Name") + """The task service name""" + + date_time = base.Field("DateTime") + """The task service date time""" + + completed_task_overwrite_policy = base.Field( + "CompletedTaskOverWritePolicy") + """The task service date completed task overwrite policy""" + + life_cycle_event_on_task_state_change = base.Field( + "LifeCycleEventOnTaskStateChange", adapter=bool) + """Whether the task service cycle event on task state change""" + + status = StatusField("Status") + """The task service status""" + + service_enabled = base.Field("ServiceEnabled", adapter=bool) + """Whether the task service is enabled""" + + oem = base.Field("Oem") + """The task service oem""" + + def __init__(self, connector, identity, redfish_version=None): + """A class representing a TaskService + + :param connector: A Connector instance + :param identity: The identity of the TaskService resource + :param redfish_version: The version of RedFish. Used to construct + the object according to schema of the given version. + """ + super(TaskService, self).__init__(connector, identity, redfish_version) + + def _get_task_collection_path(self): + """Helper function to find the TaskCollection path""" + return utils.get_sub_resource_path_by(self, 'Tasks') + + @property + @utils.cache_it + def tasks(self): + """Property to provide reference to `TaskCollection` instance + + It is calculated once when it is queried for the first time. On + refresh, this property is reset. + """ + return task.TaskCollection( + self._conn, self._get_task_collection_path(), + redfish_version=self.redfish_version) diff --git a/rsd_lib/tests/unit/json_samples/v2_1/task.json b/rsd_lib/tests/unit/json_samples/v2_1/task.json new file mode 100644 index 0000000..94c8e5b --- /dev/null +++ b/rsd_lib/tests/unit/json_samples/v2_1/task.json @@ -0,0 +1,25 @@ +{ + "@odata.context":"/redfish/v1/$metadata#Task.Task", + "@odata.id":"/redfish/v1/TaskService/Tasks/1", + "@odata.type":"#Task.v1_0_0.Task", + "Id":"1", + "Name":"Task 1", + "Description":"Task 1", + "TaskState":"Completed", + "StartTime":"2016-08-18T12:00+01:00", + "EndTime":"2016-08-18T13:13+01:00", + "TaskStatus":"OK", + "Messages":[ + { + "MessageId":"Base.1.0.Created", + "RelatedProperties":[ + + ], + "Message":"The resource has been created successfully", + "MessageArgs":[ + + ], + "Severity":"OK" + } + ] +} \ No newline at end of file diff --git a/rsd_lib/tests/unit/json_samples/v2_1/task_collection.json b/rsd_lib/tests/unit/json_samples/v2_1/task_collection.json new file mode 100644 index 0000000..e3d4750 --- /dev/null +++ b/rsd_lib/tests/unit/json_samples/v2_1/task_collection.json @@ -0,0 +1,11 @@ +{ + "@odata.context":"/redfish/v1/$metadata#TaskCollection.TaskCollection", + "@odata.type":"#TaskCollection.TaskCollection", + "Name":"Task Collection", + "Members@odata.count":1, + "Members":[ + { + "@odata.id":"/redfish/v1/TaskService/Tasks/1" + } + ] +} \ No newline at end of file diff --git a/rsd_lib/tests/unit/json_samples/v2_1/task_service.json b/rsd_lib/tests/unit/json_samples/v2_1/task_service.json new file mode 100644 index 0000000..9b5fe65 --- /dev/null +++ b/rsd_lib/tests/unit/json_samples/v2_1/task_service.json @@ -0,0 +1,21 @@ +{ + "@odata.context":"/redfish/v1/$metadata/TaskService.TaskService", + "@odata.id":"/redfish/v1/TaskService", + "@odata.type":"#TaskService.v1_0_0.TaskService", + "Id":"TaskService", + "Name":"Tasks Service", + "DateTime":"2015-03-13T04:14:33+06:00", + "CompletedTaskOverWritePolicy":"Manual", + "LifeCycleEventOnTaskStateChange":true, + "Status":{ + "State":"Enabled", + "Health":"OK" + }, + "ServiceEnabled":true, + "Tasks":{ + "@odata.id":"/redfish/v1/TaskService/Tasks" + }, + "Oem":{ + + } +} \ No newline at end of file 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 b6d6abe..a2f4dec 100644 --- a/rsd_lib/tests/unit/json_samples/v2_2/root.json +++ b/rsd_lib/tests/unit/json_samples/v2_2/root.json @@ -22,8 +22,8 @@ "Fabrics": { "@odata.id": "/redfish/v1/Fabrics" }, - "EthernetSwitches": { - "@odata.id": "/redfish/v1/EthernetSwitches" + "Tasks": { + "@odata.id": "/redfish/v1/TaskService" }, "TelemetryService": { "@odata.id": "/redfish/v1/TelemetryService" 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 cdcf81d..15d4a13 100644 --- a/rsd_lib/tests/unit/json_samples/v2_3/root.json +++ b/rsd_lib/tests/unit/json_samples/v2_3/root.json @@ -22,8 +22,8 @@ "Fabrics": { "@odata.id": "/redfish/v1/Fabrics" }, - "EthernetSwitches": { - "@odata.id": "/redfish/v1/EthernetSwitches" + "Tasks": { + "@odata.id": "/redfish/v1/TaskService" }, "StorageServices": { "@odata.id": "/redfish/v1/StorageServices" 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 cafebd7..7da6786 100644 --- a/rsd_lib/tests/unit/json_samples/v2_4/root.json +++ b/rsd_lib/tests/unit/json_samples/v2_4/root.json @@ -22,8 +22,8 @@ "Fabrics": { "@odata.id": "/redfish/v1/Fabrics" }, - "EthernetSwitches": { - "@odata.id": "/redfish/v1/EthernetSwitches" + "Tasks": { + "@odata.id": "/redfish/v1/TaskService" }, "StorageServices": { "@odata.id": "/redfish/v1/StorageServices" diff --git a/rsd_lib/tests/unit/resources/v2_1/task/__init__.py b/rsd_lib/tests/unit/resources/v2_1/task/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/rsd_lib/tests/unit/resources/v2_1/task/test_task.py b/rsd_lib/tests/unit/resources/v2_1/task/test_task.py new file mode 100644 index 0000000..2237330 --- /dev/null +++ b/rsd_lib/tests/unit/resources/v2_1/task/test_task.py @@ -0,0 +1,94 @@ +# 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.task import task + + +class TaskTestCase(testtools.TestCase): + + def setUp(self): + super(TaskTestCase, self).setUp() + self.conn = mock.Mock() + with open('rsd_lib/tests/unit/json_samples/v2_1/task.json', + 'r') as f: + self.conn.get.return_value.json.return_value = json.loads(f.read()) + + self.task_inst = task.Task( + self.conn, '/redfish/v1/TaskService/Tasks/1', + redfish_version='1.0.2') + + def test__parse_attributes(self): + self.task_inst._parse_attributes() + self.assertEqual("1", self.task_inst.identity) + self.assertEqual("Task 1", self.task_inst.name) + self.assertEqual("Task 1", self.task_inst.description) + self.assertEqual("Completed", self.task_inst.task_state) + self.assertEqual("2016-08-18T12:00+01:00", self.task_inst.start_time) + self.assertEqual("2016-08-18T13:13+01:00", self.task_inst.end_time) + self.assertEqual("OK", self.task_inst.task_status) + self.assertEqual("Base.1.0.Created", + self.task_inst.messages[0].message_id) + self.assertEqual([], self.task_inst.messages[0].related_properties) + self.assertEqual("The resource has been created successfully", + self.task_inst.messages[0].message) + self.assertEqual([], self.task_inst.messages[0].message_args) + self.assertEqual("OK", self.task_inst.messages[0].severity) + + def test_delete(self): + self.task_inst.delete() + self.task_inst._conn.delete.assert_called_once() + + +class TaskCollectionTestCase(testtools.TestCase): + + def setUp(self): + super(TaskCollectionTestCase, self).setUp() + self.conn = mock.Mock() + + with open('rsd_lib/tests/unit/json_samples/v2_1/' + 'task_collection.json', 'r') as f: + self.conn.get.return_value.json.return_value = json.loads(f.read()) + + self.task_col = task.TaskCollection(self.conn, + '/redfish/v1/TaskService/Tasks', + redfish_version='1.0.2') + + def test_parse_attributes(self): + self.task_col._parse_attributes() + self.assertEqual("Task Collection", self.task_col.name) + self.assertEqual(('/redfish/v1/TaskService/Tasks/1',), + self.task_col.members_identities) + + @mock.patch.object(task, 'Task', autospec=True) + def test_get_member(self, mock_task): + self.task_col.get_member('/redfish/v1/TaskService/Tasks/1') + + mock_task.assert_called_once_with( + self.task_col._conn, + '/redfish/v1/TaskService/Tasks/1', + redfish_version=self.task_col.redfish_version + ) + + @mock.patch.object(task, 'Task', autospec=True) + def test_get_members(self, mock_task): + members = self.task_col.get_members() + self.assertEqual(mock_task.call_count, 1) + self.assertIsInstance(members, list) + self.assertEqual(1, len(members)) diff --git a/rsd_lib/tests/unit/resources/v2_1/task/test_task_service.py b/rsd_lib/tests/unit/resources/v2_1/task/test_task_service.py new file mode 100644 index 0000000..e748b8f --- /dev/null +++ b/rsd_lib/tests/unit/resources/v2_1/task/test_task_service.py @@ -0,0 +1,104 @@ +# 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.task import task +from rsd_lib.resources.v2_1.task import task_service + + +class TaskServiceTestCase(testtools.TestCase): + + def setUp(self): + super(TaskServiceTestCase, self).setUp() + self.conn = mock.Mock() + with open('rsd_lib/tests/unit/json_samples/v2_1/task_service.json', + 'r') as f: + self.conn.get.return_value.json.return_value = json.loads(f.read()) + + self.task_service_inst = task_service.TaskService( + self.conn, '/redfish/v1/TaskService', + redfish_version='1.0.2') + + def test__parse_attributes(self): + self.task_service_inst._parse_attributes() + self.assertEqual("TaskService", self.task_service_inst.identity) + self.assertEqual("Tasks Service", self.task_service_inst.name) + self.assertEqual("2015-03-13T04:14:33+06:00", + self.task_service_inst.date_time) + self.assertEqual("Manual", + self.task_service_inst. + completed_task_overwrite_policy) + self.assertEqual(True, + self.task_service_inst. + life_cycle_event_on_task_state_change) + self.assertEqual("Enabled", self.task_service_inst.status.state) + self.assertEqual("OK", self.task_service_inst.status.health) + self.assertEqual(True, self.task_service_inst.service_enabled) + self.assertEqual({}, self.task_service_inst.oem) + + def test__get_task_collection_path(self): + expected = '/redfish/v1/TaskService/Tasks' + result = self.task_service_inst._get_task_collection_path() + self.assertEqual(expected, result) + + def test_tasks(self): + # | GIVEN | + self.conn.get.return_value.json.reset_mock() + with open('rsd_lib/tests/unit/json_samples/v2_1/' + 'task_collection.json', 'r') as f: + self.conn.get.return_value.json.return_value = json.loads(f.read()) + # | WHEN | + actual_tasks = self.task_service_inst.tasks + # | THEN | + self.assertIsInstance(actual_tasks, + task.TaskCollection) + self.conn.get.return_value.json.assert_called_once_with() + + # reset mock + self.conn.get.return_value.json.reset_mock() + # | WHEN & THEN | + # tests for same object on invoking subsequently + self.assertIs(actual_tasks, + self.task_service_inst.tasks) + self.conn.get.return_value.json.assert_not_called() + + def test_tasks_on_refresh(self): + # | GIVEN | + with open('rsd_lib/tests/unit/json_samples/v2_1/' + 'task_collection.json', 'r') as f: + self.conn.get.return_value.json.return_value = json.loads(f.read()) + # | WHEN & THEN | + self.assertIsInstance(self.task_service_inst.tasks, + task.TaskCollection) + + # On refreshing the event_service instance... + with open('rsd_lib/tests/unit/json_samples/v2_1/' + 'task_service.json', 'r') as f: + self.conn.get.return_value.json.return_value = json.loads(f.read()) + + self.task_service_inst.invalidate() + self.task_service_inst.refresh(force=False) + + # | GIVEN | + with open('rsd_lib/tests/unit/json_samples/v2_1/' + 'task_collection.json', 'r') as f: + self.conn.get.return_value.json.return_value = json.loads(f.read()) + # | WHEN & THEN | + self.assertIsInstance(self.task_service_inst.tasks, + task.TaskCollection) 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 940a6b4..9ccedb7 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 @@ -25,6 +25,7 @@ from rsd_lib.resources.v2_1.manager import manager from rsd_lib.resources.v2_1.node import node 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 class RSDLibV2_1TestCase(testtools.TestCase): @@ -49,6 +50,8 @@ class RSDLibV2_1TestCase(testtools.TestCase): self.assertEqual("/redfish/v1/Managers", self.rsd._managers_path) self.assertEqual("/redfish/v1/EthernetSwitches", self.rsd._ethernet_switches_path) + self.assertEqual("/redfish/v1/TaskService", + self.rsd._task_service_path) @mock.patch.object(system, 'SystemCollection', autospec=True) def test_get_system_collection(self, mock_system_collection): @@ -155,3 +158,11 @@ class RSDLibV2_1TestCase(testtools.TestCase): self.rsd._conn, 'fake-ethernet-switch-id', redfish_version=self.rsd.redfish_version ) + + @mock.patch.object(task_service, 'TaskService', autospec=True) + def test_get_task_service( + self, mock_task_service): + self.rsd.get_task_service() + mock_task_service.assert_called_once_with( + self.rsd._conn, '/redfish/v1/TaskService', + 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 9ae42a6..df75b72 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 @@ -22,6 +22,7 @@ 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.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 from rsd_lib.resources import v2_2 from rsd_lib.resources.v2_2.ethernet_switch import ethernet_switch \ as v2_2_ethernet_switch @@ -52,6 +53,8 @@ class RSDLibV2_2TestCase(testtools.TestCase): self.assertEqual("/redfish/v1/Fabrics", self.rsd._fabrics_path) self.assertEqual("/redfish/v1/TelemetryService", self.rsd._telemetry_service_path) + self.assertEqual("/redfish/v1/TaskService", + self.rsd._task_service_path) @mock.patch.object(v2_2_system, 'SystemCollection', autospec=True) def test_get_system_collection(self, mock_system_collection): @@ -164,3 +167,11 @@ class RSDLibV2_2TestCase(testtools.TestCase): self.rsd._conn, 'fake-ethernet-switch-id', redfish_version=self.rsd.redfish_version ) + + @mock.patch.object(v2_1_task_service, 'TaskService', autospec=True) + def test_get_task_service( + self, mock_task_service): + self.rsd.get_task_service() + mock_task_service.assert_called_once_with( + self.rsd._conn, '/redfish/v1/TaskService', + 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 48da321..dc21b86 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.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 from rsd_lib.resources import v2_3 @@ -49,6 +50,8 @@ class RSDLibV2_3TestCase(testtools.TestCase): self.assertEqual("/redfish/v1/StorageServices", self.rsd._storage_service_path) self.assertEqual(None, self.rsd._telemetry_service_path) + self.assertEqual("/redfish/v1/TaskService", + self.rsd._task_service_path) @mock.patch.object(v2_2_system, 'SystemCollection', autospec=True) def test_get_system_collection(self, mock_system_collection): @@ -155,6 +158,14 @@ class RSDLibV2_3TestCase(testtools.TestCase): redfish_version=self.rsd.redfish_version ) + @mock.patch.object(v2_1_task_service, 'TaskService', autospec=True) + def test_get_task_service( + self, mock_task_service): + self.rsd.get_task_service() + mock_task_service.assert_called_once_with( + self.rsd._conn, '/redfish/v1/TaskService', + 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 4d845fc..d641f27 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.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 from rsd_lib.resources.v2_3.ethernet_switch import ethernet_switch \ @@ -49,6 +50,8 @@ class RSDLibV2_3TestCase(testtools.TestCase): self.assertEqual("/redfish/v1/StorageServices", self.rsd._storage_service_path) self.assertEqual(None, self.rsd._telemetry_service_path) + self.assertEqual("/redfish/v1/TaskService", + self.rsd._task_service_path) @mock.patch.object(v2_2_system, 'SystemCollection', autospec=True) def test_get_system_collection(self, mock_system_collection): @@ -155,6 +158,14 @@ class RSDLibV2_3TestCase(testtools.TestCase): redfish_version=self.rsd.redfish_version ) + @mock.patch.object(v2_1_task_service, 'TaskService', autospec=True) + def test_get_task_service( + self, mock_task_service): + self.rsd.get_task_service() + mock_task_service.assert_called_once_with( + self.rsd._conn, '/redfish/v1/TaskService', + 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()