Add task resource for RSD2.1
Change-Id: I66916ed107211bbb8f7a0ca5a4aeee460c4a7a02
This commit is contained in:
		@@ -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)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										0
									
								
								rsd_lib/resources/v2_1/task/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								rsd_lib/resources/v2_1/task/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										81
									
								
								rsd_lib/resources/v2_1/task/task.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								rsd_lib/resources/v2_1/task/task.py
									
									
									
									
									
										Normal file
									
								
							@@ -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)
 | 
			
		||||
							
								
								
									
										80
									
								
								rsd_lib/resources/v2_1/task/task_service.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										80
									
								
								rsd_lib/resources/v2_1/task/task_service.py
									
									
									
									
									
										Normal file
									
								
							@@ -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)
 | 
			
		||||
							
								
								
									
										25
									
								
								rsd_lib/tests/unit/json_samples/v2_1/task.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								rsd_lib/tests/unit/json_samples/v2_1/task.json
									
									
									
									
									
										Normal file
									
								
							@@ -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"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										11
									
								
								rsd_lib/tests/unit/json_samples/v2_1/task_collection.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								rsd_lib/tests/unit/json_samples/v2_1/task_collection.json
									
									
									
									
									
										Normal file
									
								
							@@ -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"
 | 
			
		||||
        }
 | 
			
		||||
    ]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										21
									
								
								rsd_lib/tests/unit/json_samples/v2_1/task_service.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								rsd_lib/tests/unit/json_samples/v2_1/task_service.json
									
									
									
									
									
										Normal file
									
								
							@@ -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":{
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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"
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										0
									
								
								rsd_lib/tests/unit/resources/v2_1/task/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								rsd_lib/tests/unit/resources/v2_1/task/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										94
									
								
								rsd_lib/tests/unit/resources/v2_1/task/test_task.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								rsd_lib/tests/unit/resources/v2_1/task/test_task.py
									
									
									
									
									
										Normal file
									
								
							@@ -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))
 | 
			
		||||
							
								
								
									
										104
									
								
								rsd_lib/tests/unit/resources/v2_1/task/test_task_service.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								rsd_lib/tests/unit/resources/v2_1/task/test_task_service.py
									
									
									
									
									
										Normal file
									
								
							@@ -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)
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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)
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 
 | 
			
		||||
@@ -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()
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user