Skip to content

Commit

Permalink
Merge dcb2062 into 6218a73
Browse files Browse the repository at this point in the history
  • Loading branch information
manali-deshmukh authored Dec 6, 2018
2 parents 6218a73 + dcb2062 commit 11f0ccb
Show file tree
Hide file tree
Showing 3 changed files with 101 additions and 17 deletions.
10 changes: 6 additions & 4 deletions oneview_redfish_toolkit/api/drive.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,16 @@ def build_for_computer_system(drive_id, server_profile, logical_jbod):
profile_uuid = server_profile["uri"].split("/")[-1]
odata_id = "{}/{}/Storage/1/Drives/{}"\
.format(ComputerSystem.BASE_URI, profile_uuid, drive_id)

media_type = logical_jbod["driveTechnology"]["driveMedia"]
media_type = None if (media_type == "Unknown") else media_type
attrs = {
"Id": str(drive_id),
"Name": logical_jbod["name"],
"Status": status_mapping.STATUS_MAP.get(logical_jbod["status"]),
"CapacityBytes": Drive.get_capacity_in_bytes(
logical_jbod["maxSizeGB"]),
"Protocol": logical_jbod["driveTechnology"]["deviceInterface"],
"MediaType": logical_jbod["driveTechnology"]["driveMedia"],
"MediaType": media_type,
"Links": {
"Chassis": {
"@odata.id": "/redfish/v1/Chassis/" + enclosure_id
Expand All @@ -81,15 +82,16 @@ def build_for_resource_block(drive, drive_enclosure):
ov_drive_attrs = drive["attributes"]
odata_id = "{}/{}/Storage/1/Drives/1"\
.format(ResourceBlockCollection.BASE_URI, drive_uuid)

media_type = ov_drive_attrs["mediaType"]
media_type = None if (media_type == "Unknown") else media_type
attrs = {
"Id": "1",
"Name": drive["name"],
"Status": status_mapping.STATUS_MAP.get(drive["status"]),
"CapacityBytes": Drive.get_capacity_in_bytes(
ov_drive_attrs["capacityInGB"]),
"Protocol": ov_drive_attrs["interfaceType"],
"MediaType": ov_drive_attrs["mediaType"],
"MediaType": media_type,
"Links": {
"Chassis": {
"@odata.id": "/redfish/v1/Chassis/" + enclosure_id
Expand Down
32 changes: 26 additions & 6 deletions oneview_redfish_toolkit/api/scmb.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
# 3rd party libs
from hpOneView.exceptions import HPOneViewException
from hpOneView.oneview_client import OneViewClient
from hpOneView.resources.resource import ResourceClient
from pika.credentials import ExternalCredentials

# Own libs
Expand All @@ -34,7 +35,6 @@
from oneview_redfish_toolkit import connection
from oneview_redfish_toolkit import util


SCMB_DIR_NAME = "scmb"
ONEVIEW_CA_NAME = "oneview_ca.pem"
SCMB_CERT_NAME = "oneview_scmb.pem"
Expand Down Expand Up @@ -74,7 +74,7 @@ def init_event_service():
else:
logging.info('SCMB certs not found. '
'Checking if already generated in Oneview...')
get_cert()
create_scmb_certs()
logging.info('Got certs. Testing connection...')
if not _is_cert_working_with_scmb():
logging.error('Failed to connect to scmb. Aborting...')
Expand Down Expand Up @@ -110,19 +110,39 @@ def get_oneview_client():
# multiple OneViews for events service
ip=config.get_oneview_multiple_ips()[0],
credentials=config.get_credentials(),
api_version=300
api_version=600
)
ov_client = OneViewClient(ov_config)
ov_client.connection.login(config.get_credentials())

return ov_client


def get_cert():
def _get_ov_ca_cert(ov_client):
URI = '/rest/certificates/ca'
resource_client = ResourceClient(ov_client.connection, URI)
cert = resource_client.get(URI + "?filter=certType:INTERNAL")
return cert


def _get_ov_ca_cert_base64data(ov_client):
cert = _get_ov_ca_cert(ov_client)
returnCert = None
if isinstance(cert, dict):
if 'members' in cert.keys():
for certObj in cert.get('members'):
if certObj and certObj.get('certificateDetails') and \
certObj.get('certificateDetails').get('base64Data'):
returnCert = certObj.get('certificateDetails').\
get('base64Data')
break
return returnCert


def create_scmb_certs():
# Get CA
ov_client = get_oneview_client()

cert = ov_client.certificate_authority.get()
cert = _get_ov_ca_cert_base64data(ov_client)

# Create the dir to save the scmb files
os.makedirs(name=_scmb_base_dir(), exist_ok=True)
Expand Down
76 changes: 69 additions & 7 deletions oneview_redfish_toolkit/tests/api/test_scmb.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,11 @@ def test_check_cert_exist_when_config_key_is_missing(self,
@mock.patch.object(scmb, '_is_cert_working_with_scmb')
@mock.patch.object(scmb, 'config')
@mock.patch.object(scmb, 'get_oneview_client')
def test_get_cert_already_exists(self, get_oneview_client, config_mock,
@mock.patch.object(scmb, '_get_ov_ca_cert_base64data')
def test_get_cert_already_exists(self,
_get_ov_ca_cert_base64data,
get_oneview_client,
config_mock,
_is_cert_working_with_scmb):
config_mock.get_config.return_value = {
'ssl': {
Expand All @@ -114,7 +118,10 @@ def test_get_cert_already_exists(self, get_oneview_client, config_mock,
'message': 'certs already exist',
})
oneview_client.certificate_rabbitmq.generate.side_effect = e
scmb.get_cert()

oneview_client.connection = 'con'
_get_ov_ca_cert_base64data.return_value = "CA CERT"
scmb.create_scmb_certs()
self.assertTrue(scmb._has_valid_certificates())

@mock.patch('pika.BlockingConnection')
Expand All @@ -137,12 +144,16 @@ def test_consume_message(self, dispatch_mock):

self.assertTrue(dispatch_mock.called)

@mock.patch.object(scmb, '_get_ov_ca_cert')
@mock.patch.object(scmb, 'config')
@mock.patch.object(scmb, '_is_cert_working_with_scmb')
@mock.patch.object(scmb, 'get_oneview_client')
def test_generate_new_cert_for_oneview(self, get_oneview_client,
def test_generate_new_cert_for_oneview(self,
get_oneview_client,
_is_cert_working_with_scmb,
config_mock):
config_mock,
_get_ov_ca_cert
):
config_mock.get_config.return_value = {
'ssl': {
'SSLCertFile': 'cert_file.crt'
Expand All @@ -167,12 +178,32 @@ def test_generate_new_cert_for_oneview(self, get_oneview_client,
[e, cert_key_pair]
get_oneview_client.return_value = oneview_client
_is_cert_working_with_scmb.return_value = True
scmb.get_cert()

_get_ov_ca_cert.return_value = {
'type': 'CAInfo',
'members': [
{
'certificateDetails': {
'base64Data': 'CA CERT'
}
}
]
}

scmb.create_scmb_certs()
self.assertTrue(scmb._has_valid_certificates())

# Return None if cert is not a dict
_get_ov_ca_cert.return_value = []
cert = scmb._get_ov_ca_cert_base64data(oneview_client)
self.assertEqual(cert, None)

@mock.patch.object(scmb, 'config')
@mock.patch.object(scmb, 'get_oneview_client')
def test_get_oneview_cert_unexpected_error(self, get_oneview_client,
@mock.patch.object(scmb, '_get_ov_ca_cert_base64data')
def test_get_oneview_cert_unexpected_error(self,
_get_ov_ca_cert_base64data,
get_oneview_client,
config_mock):
config_mock.get_config.return_value = {
'ssl': {
Expand All @@ -193,8 +224,11 @@ def test_get_oneview_cert_unexpected_error(self, get_oneview_client,
oneview_client.certificate_rabbitmq.get_key_pair.side_effect = e
get_oneview_client.return_value = oneview_client

oneview_client.connection = 'con'
_get_ov_ca_cert_base64data.return_value = "CA CERT"

with self.assertRaises(HPOneViewException) as hp_exception:
scmb.get_cert()
scmb.create_scmb_certs()

test_exception = hp_exception.exception
self.assertEqual(hp_ov_exception_msg, test_exception.msg)
Expand All @@ -205,7 +239,9 @@ def test_get_oneview_cert_unexpected_error(self, get_oneview_client,
@mock.patch('pika.ConnectionParameters')
@mock.patch.object(scmb, 'config')
@mock.patch.object(scmb, 'get_oneview_client')
@mock.patch.object(scmb, '_get_ov_ca_cert_base64data')
def test_init_event_service_with_valid_certificate(self,
_get_ov_ca_cert,
get_oneview_client,
config_mock, conn_param,
block_conn, channel):
Expand All @@ -226,6 +262,9 @@ def test_init_event_service_with_valid_certificate(self,
'base64SSLCertData': 'Client CERT',
'base64SSLKeyData': 'Client Key'}

oneview_client.connection = 'con'
_get_ov_ca_cert.return_value = "CA CERT"

pika_mock = mock.MagicMock()
pika_mock.channel.Channel = {}
block_conn.return_value = pika_mock
Expand Down Expand Up @@ -275,3 +314,26 @@ def test_init_event_service_with_certs_already_generated(self, config_mock,
scmb.init_event_service()

self.assertTrue(scmb._has_valid_certificates())

@mock.patch.object(scmb, 'config')
@mock.patch.object(scmb, 'OneViewClient')
def test_get_oneview_client(self, ov_client, config_mock):
config_mock.get_credentials.return_value = {
'password': 'password',
'userName': 'Administrator'
}
config_mock.get_oneview_multiple_ips.return_value = ['1.1.1.1',
'2.1.2.2']

connection = mock.MagicMock()
connection.create_oneview_config.return_value = {
'ip': '1.1.1.1',
'credentials':
{
'password': 'password',
'userName': 'Administrator'
},
'api_version': 600}
ov_client.return_value = mock.MagicMock()
ov_client.connection.login = mock.MagicMock()
self.assertNotEqual(scmb.get_oneview_client(), None)

0 comments on commit 11f0ccb

Please sign in to comment.