Skip to content

Commit

Permalink
Unit tests for Single OneView Context
Browse files Browse the repository at this point in the history
  • Loading branch information
victorhugorodrigues committed Oct 4, 2018
1 parent d96f19a commit 208d1d3
Showing 1 changed file with 265 additions and 0 deletions.
265 changes: 265 additions & 0 deletions oneview_redfish_toolkit/tests/test_single_oneview_context.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,265 @@
# -*- coding: utf-8 -*-

# Copyright (2018) Hewlett Packard Enterprise Development LP
#
# 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.

# Python libs
import json
from unittest import mock

# 3rd party libs
from unittest.mock import call

from flask_api import status
from hpOneView.exceptions import HPOneViewException

# Module libs
from oneview_redfish_toolkit.blueprints import resource_block
from oneview_redfish_toolkit import category_resource
from oneview_redfish_toolkit import config
from oneview_redfish_toolkit import multiple_oneview
from oneview_redfish_toolkit import single_oneview_context
from oneview_redfish_toolkit.tests.base_flask_test import BaseFlaskTest


class TestResourceBlock(BaseFlaskTest):
"""Tests for ResourceBlock blueprint"""

@classmethod
def setUpClass(self):
super(TestResourceBlock, self).setUpClass()

self.app.register_blueprint(resource_block.resource_block)

with open(
'oneview_redfish_toolkit/mockups/oneview/ServerHardware.json'
) as f:
self.server_hardware = json.load(f)

with open(
'oneview_redfish_toolkit/mockups/oneview'
'/ServerProfileTemplate.json'
) as f:
self.server_profile_template = json.load(f)

with open(
'oneview_redfish_toolkit/mockups/oneview/Drive.json'
) as f:
self.drive = json.load(f)

with open(
'oneview_redfish_toolkit/mockups/oneview/DriveIndexTrees.json'
) as f:
self.drive_index_tree = json.load(f)

with open(
'oneview_redfish_toolkit/mockups/oneview/'
'DriveComposedIndexTrees.json'
) as f:
self.drive_composed_index_tree = json.load(f)

with open(
'oneview_redfish_toolkit/mockups/oneview'
'/ServerProfileTemplates.json'
) as f:
self.server_profile_templates = json.load(f)

with open(
'oneview_redfish_toolkit/mockups/oneview/LogicalEnclosures.json'
) as f:
self.log_encl_list = json.load(f)

with open(
'oneview_redfish_toolkit/mockups/redfish'
'/ServerHardwareResourceBlock.json'
) as f:
self.expected_sh_resource_block = json.load(f)

with open(
'oneview_redfish_toolkit/mockups/oneview'
'/DriveEnclosureList.json'
) as f:
self.drive_enclosure_list = json.load(f)

self.resource_not_found = HPOneViewException({
"errorCode": "RESOURCE_NOT_FOUND",
"message": "Any resource not found message"
})

@mock.patch.object(config, 'get_oneview_multiple_ips')
def test_get_storage_resource_block_single_ov(self,
get_oneview_multiple_ips):
with open(
'oneview_redfish_toolkit/mockups/redfish/StorageResourceBlock.json'
) as f:
expected_resource_block = json.load(f)

multiple_oneview.init_map_resources()
category_resource.init_map_category_resources()

list_ips = ['10.0.0.1', '10.0.0.2', '10.0.0.3']
get_oneview_multiple_ips.return_value = list_ips

self.oneview_client.server_hardware.get.side_effect = [
self.resource_not_found,
self.resource_not_found,
self.resource_not_found,
]
self.oneview_client.server_profile_templates.get.side_effect = [
self.resource_not_found,
self.resource_not_found,
self.resource_not_found,
]
self.oneview_client.index_resources.get.side_effect = [
self.resource_not_found,
self.resource_not_found,
self.drive,
]
self.oneview_client.connection.get.return_value = self.drive_index_tree
self.oneview_client.server_profile_templates.get_all.return_value = \
self.server_profile_templates
self.oneview_client.\
logical_enclosures.get_all.return_value = self.log_encl_list
self.oneview_client.drive_enclosures.get_all.return_value = \
self.drive_enclosure_list

uri = "/redfish/v1/CompositionService/ResourceBlocks"\
"/c4f0392d-fae9-4c2e-a2e6-b22e6bb7533e"
uuid = uri.split('/')[-1]
response = self.client.get(uri)

result = json.loads(response.data.decode("utf-8"))

self.assertEqual(status.HTTP_200_OK, response.status_code)
self.assertEqual("application/json", response.mimetype)
self.assertEqualMockup(expected_resource_block, result)

self.oneview_client.server_hardware.get.assert_has_calls([
call(uuid),
call(uuid),
call(uuid)
])
self.oneview_client.server_profile_templates.get.assert_has_calls([
call(uuid),
call(uuid),
call(uuid)
])
self.oneview_client.index_resources.get.assert_has_calls([
call(self.drive["uri"]),
call(self.drive["uri"]),
call(self.drive["uri"]),
])
conn_uri = "/rest/index/trees/rest/drives/"\
"c4f0392d-fae9-4c2e-a2e6-b22e6bb7533e?parentDepth=3"
# Check for single calls on OneView context
self.oneview_client.connection.get.assert_called_once_with(
conn_uri)
self.oneview_client.\
server_profile_templates.get_all.assert_called_once_with()
self.oneview_client.logical_enclosures.get_all.\
assert_called_once_with()
self.oneview_client.drive_enclosures.get_all.\
assert_called_once_with()

@mock.patch.object(config, 'get_oneview_multiple_ips')
@mock.patch.object(single_oneview_context, 'is_single_oneview_context')
def test_get_storage_resource_block_without_single_ov(self,
is_single_ov_context,
get_ov_multiple_ips):
with open(
'oneview_redfish_toolkit/mockups/redfish/StorageResourceBlock.json'
) as f:
expected_resource_block = json.load(f)

multiple_oneview.init_map_resources()
category_resource.init_map_category_resources()

list_ips = ['10.0.0.1', '10.0.0.2', '10.0.0.3']
get_ov_multiple_ips.return_value = list_ips

is_single_ov_context.return_value = False

self.oneview_client.server_hardware.get.side_effect = [
self.resource_not_found,
self.resource_not_found,
self.resource_not_found,
]
self.oneview_client.server_profile_templates.get.side_effect = [
self.resource_not_found,
self.resource_not_found,
self.resource_not_found,
]
self.oneview_client.index_resources.get.side_effect = [
self.resource_not_found,
self.resource_not_found,
self.drive,
]
self.oneview_client.connection.get.side_effect = [
self.resource_not_found,
self.resource_not_found,
self.drive_index_tree
]
self.oneview_client.server_profile_templates.get_all.side_effect = [
self.resource_not_found,
self.resource_not_found,
self.server_profile_templates
]
self.oneview_client.logical_enclosures.get_all.side_effect = [
self.resource_not_found,
self.resource_not_found,
self.log_encl_list
]
self.oneview_client.drive_enclosures.get_all.side_effect = [
self.resource_not_found,
self.resource_not_found,
self.drive_enclosure_list
]

uri = "/redfish/v1/CompositionService/ResourceBlocks"\
"/c4f0392d-fae9-4c2e-a2e6-b22e6bb7533e"
uuid = uri.split('/')[-1]
response = self.client.get(uri)

result = json.loads(response.data.decode("utf-8"))

self.assertEqual(status.HTTP_200_OK, response.status_code)
self.assertEqual("application/json", response.mimetype)
self.assertEqualMockup(expected_resource_block, result)

self.oneview_client.server_hardware.get.assert_has_calls([
call(uuid),
call(uuid),
call(uuid)
])
self.oneview_client.server_profile_templates.get.assert_has_calls([
call(uuid),
call(uuid),
call(uuid)
])
self.oneview_client.index_resources.get.assert_has_calls([
call(self.drive["uri"]),
call(self.drive["uri"]),
call(self.drive["uri"]),
])
conn_uri = "/rest/index/trees/rest/drives/"\
"c4f0392d-fae9-4c2e-a2e6-b22e6bb7533e?parentDepth=3"
# Check for multiple calls on multiple OneView context
self.oneview_client.connection.get.assert_has_calls(
[call(conn_uri), call(conn_uri), call(conn_uri)])
self.oneview_client.server_profile_templates.get_all.has_calls(
[call(), call(), call()])
self.oneview_client.logical_enclosures.get_all.has_calls(
[call(), call(), call()])
self.oneview_client.drive_enclosures.get_all.has_calls(
[call(), call(), call()])

0 comments on commit 208d1d3

Please sign in to comment.