def test_add_a_list_of_ethernet_networks(self, mock_ethnet_get,
                                             mock_uplink_update):
        ethernet_to_add = [
            'eth1',
            'eth2',
        ]

        uplink_to_update = {
            'networkUris': [
                '/rest/ethernet-networks/134dcf5e-0d8e-441c-b00d-e1dd6a067188',
                '/rest/ethernet-networks/5f14bf27-f839-4e9f-9ec8-9f0e0b413939',
            ]
        }

        eth1 = self._ethernet_networks
        eth2 = EthernetNetworks(self.connection)
        eth1.data = {
            'name': 'eth1',
            'uri':
            '/rest/ethernet-networks/134dcf5e-0d8e-441c-b00d-e1dd6a067188'
        }
        eth2.data = {
            'name': 'eth2',
            'uri':
            '/rest/ethernet-networks/5f14bf27-f839-4e9f-9ec8-9f0e0b413939'
        }
        result_get_enet = [eth1, eth2]

        mock_ethnet_get.side_effect = result_get_enet

        self._uplink_sets.add_ethernet_networks(ethernet_to_add)
        mock_uplink_update.assert_called_once_with(uplink_to_update)
Ejemplo n.º 2
0
    def ethernet_networks(self):
        """
        Gets the EthernetNetworks API client.

        Returns:
            EthernetNetworks:
        """
        return EthernetNetworks(self.__connection)
 def setUp(self):
     self.host = '127.0.0.1'
     self.connection = connection(self.host, 800)
     self._uplink_sets = UplinkSets(self.connection)
     self._uplink_sets.data = {
         'uri': '/rest/ul-inksets/ad28cf21-8b15-4f92-bdcf-51cb2042db32'
     }
     self._ethernet_networks = EthernetNetworks(self.connection)
Ejemplo n.º 4
0
 def __init__(self, connection, data=None):
     super(UplinkSets, self).__init__(connection, data)
     self._ethernet_networks = EthernetNetworks(connection)
Ejemplo n.º 5
0
class UplinkSets(Resource):
    """
    Uplink Sets API client.

    """
    URI = '/rest/uplink-sets'

    DEFAULT_VALUES = {
        '200': {"type": "uplink-setV3"},
        '300': {"type": "uplink-setV300"},
        '500': {"type": "uplink-setV300"},
        '600': {"type": "uplink-setV4"},
        '800': {"type": "uplink-setV4"},
        '1000': {"type": "uplink-setV5"},
        '1200': {"type": "uplink-setV6"},
        '1600': {"type": "uplink-setV7"},
        '1800': {"type": "uplink-setV7"}
    }

    def __init__(self, connection, data=None):
        super(UplinkSets, self).__init__(connection, data)
        self._ethernet_networks = EthernetNetworks(connection)

    @ensure_resource_client
    def get_ethernet_networks(self):
        """
        Gets a list of associated ethernet networks of an uplink set.

        Args:
            id_or_uri: Can be either the uplink set id or the uplink set uri.

        Returns:
            list: Associated ethernet networks.
        """
        network_uris = self.data.get('networkUris')
        networks = []
        if network_uris:
            for uri in network_uris:
                networks.append(self._ethernet_networks.get_by_uri(uri))
        return networks

    @ensure_resource_client
    def add_ethernet_networks(self, ethernet_names):
        """
        Adds existing ethernet networks to an uplink set.

        Args:
            id_or_uri:
                Can be either the uplink set id or the uplink set uri.
            ethernet_name:
                Could be either one or more ethernet network names.
        Returns:
            dict: The updated uplink set.
        """
        self.__set_ethernet_uris(ethernet_names, operation="add")
        return self.data

    @ensure_resource_client
    def remove_ethernet_networks(self, ethernet_names):
        """
        Remove existing ethernet networks of an uplink set.

        Args:
            id_or_uri:
                Can be either the uplink set id or the uplink set uri.
            ethernet_id_or_uris:
                Could be either one or more ethernet network id or ethernet network uri.

        Returns:
            dict: The updated uplink set.
        """
        self.__set_ethernet_uris(ethernet_names, operation="remove")
        return self.data

    def __set_ethernet_uris(self, ethernet_names, operation="add"):
        """Updates network uris."""
        if not isinstance(ethernet_names, list):
            ethernet_names = [ethernet_names]

        associated_enets = self.data.get('networkUris', [])
        ethernet_uris = []

        for i, enet in enumerate(ethernet_names):
            enet_exists = self._ethernet_networks.get_by_name(enet)
            if enet_exists:
                ethernet_uris.append(enet_exists.data['uri'])
            else:
                raise HPEOneViewResourceNotFound("Ethernet: {} does not exist".foramt(enet))

        if operation == "remove":
            enets_to_update = sorted(list(set(associated_enets) - set(ethernet_uris)))
        elif operation == "add":
            enets_to_update = sorted(list(set(associated_enets).union(set(ethernet_uris))))
        else:
            raise ValueError("Value {} is not supported as operation. The supported values are: ['add', 'remove']")

        if set(enets_to_update) != set(associated_enets):
            updated_network = {'networkUris': enets_to_update}
            self.update(updated_network)
 def setUp(self):
     self.host = '127.0.0.1'
     self.connection = connection(self.host, 800)
     self._ethernet_networks = EthernetNetworks(self.connection)
class EthernetNetworksTest(TestCase):
    def setUp(self):
        self.host = '127.0.0.1'
        self.connection = connection(self.host, 800)
        self._ethernet_networks = EthernetNetworks(self.connection)

    @mock.patch.object(ResourceHelper, 'get_all')
    def test_get_all_called_once(self, mock_get_all):
        filter = 'name=TestName'
        sort = 'name:ascending'

        self._ethernet_networks.get_all(2, 500, filter, sort)

        mock_get_all.assert_called_once_with(count=500,
                                             filter=filter,
                                             sort=sort,
                                             start=2)

    @mock.patch.object(ResourceHelper, 'create')
    def test_create_should_use_given_values(self, mock_create):
        resource = {
            'vlanId': 10,
            'name': 'OneViewSDK Test Ethernet Network',
            "ethernetNetworkType": "Tagged",
            "purpose": "Management",
            "connectionTemplateUri": None,
            "smartLink": False,
            "privateNetwork": False
        }
        resource_rest_call = resource.copy()
        resource_rest_call['type'] = 'ethernet-networkV4'
        mock_create.return_value = {}

        self._ethernet_networks.create(resource, timeout=12)
        mock_create.assert_called_once_with(resource_rest_call, None, 12, None,
                                            False)

    @mock.patch.object(ResourceHelper, 'create')
    @mock.patch.object(Resource, 'get_all')
    def test_create_bulk(self, mock_get_all, mock_create):
        resource = {
            'vlanIdRange': '1-10',
            'purpose': 'General',
            'namePrefix': 'TestNetwork',
            'smartLink': False,
            'privateNetwork': False,
            'bandwidth': {
                'maximumBandwidth': 10000,
                'typicalBandwidth': 2000
            }
        }
        resource_rest_call = resource.copy()
        resource_rest_call['type'] = 'bulk-ethernet-networkV1'

        mock_create.return_value = {}
        mock_get_all.return_value = []

        self._ethernet_networks.create_bulk(resource, 27)

        mock_create.assert_called_once_with(resource_rest_call,
                                            uri='/rest/ethernet-networks/bulk',
                                            timeout=27)
        mock_get_all.assert_called_once_with(
            filter='"\'name\' matches \'TestNetwork\\_%\'"',
            sort='vlanId:ascending')

    @mock.patch.object(Resource, 'update')
    def test_update_should_use_given_values(self, mock_update):
        resource = {
            'name': 'OneViewSDK Test Ethernet Network',
            'smartLink': False,
            'connectionTemplateUri': None,
            'vlanId': None,
            'privateNetwork': True,
            'ethernetNetworkType': 'Untagged',
            'purpose': 'General'
        }
        resource_rest_call = resource.copy()
        mock_update.return_value = {}

        self._ethernet_networks.update(resource, timeout=60)
        mock_update.assert_called_once_with(resource_rest_call, timeout=60)

    @mock.patch.object(Resource, 'update')
    def test_update_should_use_default_values(self, mock_update):
        resource = {
            'name': 'OneViewSDK Test Ethernet Network',
        }

        mock_update.return_value = {}

        self._ethernet_networks.update(resource)

        mock_update.assert_called_once_with(resource)

    @mock.patch.object(Resource, 'delete')
    def test_delete_called_once(self, mock_delete):
        id = 'ad28cf21-8b15-4f92-bdcf-51cb2042db32'
        self._ethernet_networks.delete(id, force=False, timeout=-1)

        mock_delete.assert_called_once_with(id, force=False, timeout=-1)

    @mock.patch.object(Resource, 'get_by')
    def test_get_by_called_once(self, mock_get_by):
        self._ethernet_networks.get_by('name',
                                       'OneViewSDK Test Ethernet Network')

        mock_get_by.assert_called_once_with(
            'name', 'OneViewSDK Test Ethernet Network')

    @mock.patch.object(ResourceHelper, 'do_get')
    def test_get_associated_uplink_groups_uri_called_once_with_uri(
            self, mock_get):
        self._ethernet_networks.data = {
            "name": "name",
            "uri":
            "/rest/ethernet-networks/3518be0e-17c1-4189-8f81-83f3724f6155"
        }
        self._ethernet_networks.get_associated_uplink_groups()

        uri = '/rest/ethernet-networks/3518be0e-17c1-4189-8f81-83f3724f6155/associatedUplinkGroups'

        mock_get.assert_called_once_with(uri)

    @mock.patch.object(ResourceHelper, 'do_get')
    def test_get_associated_profiles_called_once_with_uri(self, mock_get):
        self._ethernet_networks.data = {
            "name": "name",
            "uri":
            "/rest/ethernet-networks/3518be0e-17c1-4189-8f81-83f3724f6155"
        }
        self._ethernet_networks.get_associated_profiles()

        uri = '/rest/ethernet-networks/3518be0e-17c1-4189-8f81-83f3724f6155/associatedProfiles'

        mock_get.assert_called_once_with(uri)

    def __mock_enet_gel_all(self):
        return [
            {
                'name': 'TestNetwork_1',
                'vlanId': 1
            },
            {
                'name': 'TestNetwork_2',
                'vlanId': 2
            },
            {
                'name': 'TestNetwork_3',
                'vlanId': 3
            },
            {
                'name': 'TestNetwork_4',
                'vlanId': 4
            },
            {
                'name': 'TestNetwork_5',
                'vlanId': 5
            },
            {
                'name': 'TestNetwork_5',
                'vlanId': 6
            },
            {
                'name': 'TestNetwork_7',
                'vlanId': 7
            },
            {
                'name': 'TestNetwork_8',
                'vlanId': 8
            },
            {
                'name': 'TestNetwork_9',
                'vlanId': 9
            },
            {
                'name': 'TestNetwork_10',
                'vlanId': 10
            },
        ]

    @mock.patch.object(EthernetNetworks, 'get_all')
    def test_get_bulk_with_one_range(self, mock_get_all):
        mock_get_all.return_value = self.__mock_enet_gel_all()

        expected_result = [
            {
                'name': 'TestNetwork_1',
                'vlanId': 1
            },
            {
                'name': 'TestNetwork_2',
                'vlanId': 2
            },
            {
                'name': 'TestNetwork_3',
                'vlanId': 3
            },
            {
                'name': 'TestNetwork_4',
                'vlanId': 4
            },
        ]

        result = self._ethernet_networks.get_range('TestNetwork', '1-4')
        self.assertEqual(result, expected_result)

    @mock.patch.object(EthernetNetworks, 'get_all')
    def test_get_bulk_with_one_value(self, mock_get_all):
        mock_get_all.return_value = self.__mock_enet_gel_all()

        expected_result = [
            {
                'name': 'TestNetwork_1',
                'vlanId': 1
            },
            {
                'name': 'TestNetwork_2',
                'vlanId': 2
            },
        ]

        result = self._ethernet_networks.get_range('TestNetwork', '2')
        self.assertEqual(result, expected_result)

    @mock.patch.object(EthernetNetworks, 'get_all')
    def test_get_bulk_with_one_value_and_one_range(self, mock_get_all):
        mock_get_all.return_value = self.__mock_enet_gel_all()

        expected_result = [
            {
                'name': 'TestNetwork_2',
                'vlanId': 2
            },
            {
                'name': 'TestNetwork_9',
                'vlanId': 9
            },
            {
                'name': 'TestNetwork_10',
                'vlanId': 10
            },
        ]

        result = self._ethernet_networks.get_range('TestNetwork', '2, 9-10')
        self.assertEqual(result, expected_result)

    @mock.patch.object(EthernetNetworks, 'get_all')
    def test_get_bulk_with_multiple_values(self, mock_get_all):
        mock_get_all.return_value = self.__mock_enet_gel_all()

        expected_result = [
            {
                'name': 'TestNetwork_9',
                'vlanId': 9
            },
            {
                'name': 'TestNetwork_10',
                'vlanId': 10
            },
        ]

        result = self._ethernet_networks.get_range('TestNetwork', '9,10')
        self.assertEqual(result, expected_result)

    @mock.patch.object(EthernetNetworks, 'get_all')
    def test_get_bulk_with_multiple_ranges(self, mock_get_all):
        mock_get_all.return_value = self.__mock_enet_gel_all()

        expected_result = [
            {
                'name': 'TestNetwork_5',
                'vlanId': 6
            },
            {
                'name': 'TestNetwork_7',
                'vlanId': 7
            },
            {
                'name': 'TestNetwork_9',
                'vlanId': 9
            },
            {
                'name': 'TestNetwork_10',
                'vlanId': 10
            },
        ]

        result = self._ethernet_networks.get_range('TestNetwork', '6-7,9-10')
        self.assertEqual(result, expected_result)

    @mock.patch.object(ResourcePatchMixin, 'patch_request')
    @mock.patch.object(Resource, 'get_by')
    def test_patch_should_use_user_defined_values(self, mock_get_by,
                                                  mock_patch):
        mock_patch.return_value = {}
        self._ethernet_networks.data = {
            "name": "test name",
            "uri": "/rest/test"
        }
        self._ethernet_networks.patch('replace', '/scopeUris',
                                      ['/rest/fake/scope123'], 1)
        mock_patch.assert_called_once_with('/rest/test',
                                           body=[{
                                               u'path':
                                               '/scopeUris',
                                               u'value':
                                               ['/rest/fake/scope123'],
                                               u'op':
                                               'replace'
                                           }],
                                           custom_headers=1,
                                           timeout=-1)

    def test_dissociate_values_or_ranges_with_one_value(self):
        expected_result = [1, 2, 3, 4, 5]
        result = self._ethernet_networks.dissociate_values_or_ranges('5')
        self.assertEqual(result, expected_result)

    def test_dissociate_values_or_ranges_with_multiple_values(self):
        expected_result = [6, 7, 9]
        result = self._ethernet_networks.dissociate_values_or_ranges('6,7,9')
        self.assertEqual(result, expected_result)

    def test_dissociate_values_or_ranges_with_one_range(self):
        expected_result = [6, 7]
        result = self._ethernet_networks.dissociate_values_or_ranges('6-7')
        self.assertEqual(result, expected_result)

    def test_dissociate_values_or_ranges_with_multiple_ranges(self):
        expected_result = [6, 7, 9, 10]
        result = self._ethernet_networks.dissociate_values_or_ranges(
            '6-7,9-10')
        self.assertEqual(result, expected_result)

    @mock.patch.object(ResourceHelper, 'create')
    @mock.patch.object(Resource, 'get_all')
    def test_delete_bulk(self, mock_get_all, mock_create):
        resource = {
            "networkUris": [
                "/rest/ethernet-networks/e2f0031b-52bd-4223-9ac1-d91cb519d548",
                "/rest/ethernet-networks/f2f0031b-52bd-4223-9ac1-d91cb519d549",
                "/rest/ethernet-networks/02f0031b-52bd-4223-9ac1-d91cb519d54a"
            ]
        }
        resource_rest_call = resource.copy()

        mock_create.return_value = {}
        mock_get_all.return_value = []

        self._ethernet_networks.delete_bulk(resource, 27)

        mock_create.assert_called_once_with(
            resource_rest_call,
            uri='/rest/ethernet-networks/bulk-delete',
            timeout=27)