Resolve Brocade HTTPS connection error

Convert all payloads for SSL connections through https into string type.
This prevents SSL3_WRITE_PENDING errors when communicating by SSL.

Change-Id: I3d0e18e638593482e446a575da3dc52736e8e067
Closes-Bug: #1653806
This commit is contained in:
Yucong Feng 2017-01-03 23:44:38 +01:00
parent 2f86642ec2
commit 777128dd34
2 changed files with 26 additions and 12 deletions

View File

@ -17,8 +17,11 @@
"""Unit tests for brcd fc zone client http(s)."""
import time
from oslo_utils import encodeutils
import mock
from mock import patch
import six
from cinder import exception
from cinder import test
@ -604,13 +607,20 @@ class TestBrcdHttpFCZoneClient(client.BrcdHTTPFCZoneClient, test.TestCase):
def test_form_zone_string(self):
new_alias = {
'alia1': '10:00:00:05:1e:7c:64:96;10:21:10:05:33:0e:96:12'}
new_qlps = {'qlp': '10:11:f4:ce:46:ae:68:6c;20:11:f4:ce:46:ae:68:6c'}
new_ifas = {'fa1': '20:15:f4:ce:96:ae:68:6c;20:11:f4:ce:46:ae:68:6c'}
self.assertEqual(mocked_zone_string, self.form_zone_string(
cfgs, active_cfg, zones, new_alias, new_qlps, new_ifas, True))
self.assertEqual(mocked_zone_string_no_activate, self.form_zone_string(
cfgs, active_cfg, zones, new_alias, new_qlps, new_ifas, False))
'alia1': u'10:00:00:05:1e:7c:64:96;10:21:10:05:33:0e:96:12'}
new_qlps = {'qlp': u'10:11:f4:ce:46:ae:68:6c;20:11:f4:ce:46:ae:68:6c'}
new_ifas = {'fa1': u'20:15:f4:ce:96:ae:68:6c;20:11:f4:ce:46:ae:68:6c'}
self.assertEqual(type(self.form_zone_string(
cfgs, active_cfg, zones, new_alias, new_qlps, new_ifas, True)),
six.binary_type)
self.assertEqual(
encodeutils.safe_encode(mocked_zone_string),
self.form_zone_string(
cfgs, active_cfg, zones, new_alias, new_qlps, new_ifas, True))
self.assertEqual(
encodeutils.safe_encode(mocked_zone_string_no_activate),
self.form_zone_string(
cfgs, active_cfg, zones, new_alias, new_qlps, new_ifas, False))
@patch.object(client.BrcdHTTPFCZoneClient, 'post_zone_data')
def test_add_zones_activate(self, post_zone_data_mock):
@ -626,7 +636,8 @@ class TestBrcdHttpFCZoneClient(client.BrcdHTTPFCZoneClient, test.TestCase):
'20:19:00:05:1e:e8:e3:29']
}
self.add_zones(add_zones_info, True)
post_zone_data_mock.assert_called_once_with(zone_string_to_post)
post_zone_data_mock.assert_called_once_with(
encodeutils.safe_encode(zone_string_to_post))
@patch.object(client.BrcdHTTPFCZoneClient, 'post_zone_data')
def test_add_zones_invalid_zone_name(self, post_zone_data_mock):
@ -661,7 +672,7 @@ class TestBrcdHttpFCZoneClient(client.BrcdHTTPFCZoneClient, test.TestCase):
}
self.add_zones(add_zones_info, False)
post_zone_data_mock.assert_called_once_with(
zone_string_to_post_no_activate)
encodeutils.safe_encode(zone_string_to_post_no_activate))
@patch.object(client.BrcdHTTPFCZoneClient, 'post_zone_data')
def test_delete_zones_activate(self, post_zone_data_mock):
@ -675,7 +686,8 @@ class TestBrcdHttpFCZoneClient(client.BrcdHTTPFCZoneClient, test.TestCase):
delete_zones_info = valid_zone_name
self.delete_zones(delete_zones_info, True)
post_zone_data_mock.assert_called_once_with(zone_string_del_to_post)
post_zone_data_mock.assert_called_once_with(
encodeutils.safe_encode(zone_string_del_to_post))
@patch.object(client.BrcdHTTPFCZoneClient, 'post_zone_data')
def test_delete_zones_no_activate(self, post_zone_data_mock):
@ -689,7 +701,7 @@ class TestBrcdHttpFCZoneClient(client.BrcdHTTPFCZoneClient, test.TestCase):
delete_zones_info = valid_zone_name
self.delete_zones(delete_zones_info, False)
post_zone_data_mock.assert_called_once_with(
zone_string_del_to_post_no_active)
encodeutils.safe_encode(zone_string_del_to_post_no_active))
@patch.object(client.BrcdHTTPFCZoneClient, 'post_zone_data')
def test_delete_zones_invalid_zone_name(self, post_zone_data_mock):

View File

@ -20,6 +20,7 @@ HTTP or HTTPS protocol.
from oslo_log import log as logging
from oslo_serialization import base64
from oslo_utils import encodeutils
import requests
import six
import time
@ -647,7 +648,8 @@ class BrcdHTTPFCZoneClient(object):
% six.text_type(e))
LOG.error(msg)
raise exception.BrocadeZoningHttpException(reason=msg)
return zoneString
# Reconstruct the zoneString to type base string for OpenSSL
return encodeutils.safe_encode(zoneString)
def add_zones_cfgs(self, cfgs, zones, add_zones_info,
active_cfg, cfg_name):