oslo.vmware/oslo_vmware/tests/test_dvs_util.py

137 lines
5.5 KiB
Python

# Copyright (c) 2018 VMware, 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.
"""Unit tests for VMware DVS utility module."""
import collections
from unittest import mock
from oslo_vmware import dvs_util
from oslo_vmware.tests import base
from oslo_vmware import vim_util
ObjectContent = collections.namedtuple('ObjectContent', ['obj', 'propSet'])
DynamicProperty = collections.namedtuple('Property', ['name', 'val'])
Moref = collections.namedtuple('Moref', ['name', 'type'])
class DvsUtilTest(base.TestCase):
"""Test class for utility methods in dvs_util."""
def test_get_dvs_moref(self):
moref = dvs_util.get_dvs_moref('dvs-123')
self.assertEqual('dvs-123', moref.value)
self.assertEqual('VmwareDistributedVirtualSwitch', moref._type)
def test_get_vlan_spec(self):
session = mock.Mock()
spec = dvs_util.get_vlan_spec(session, 7)
self.assertEqual(7, spec.vlanId)
def test_get_trunk_vlan_spec(self):
session = mock.Mock()
spec = dvs_util.get_trunk_vlan_spec(session, start=1, end=2)
self.assertEqual(1, spec.vlanId.start)
self.assertEqual(2, spec.vlanId.end)
def test_get_port_group_spec(self):
session = mock.Mock()
spec = dvs_util.get_port_group_spec(session, 'pg', 7)
self.assertEqual('pg', spec.name)
self.assertEqual('ephemeral', spec.type)
self.assertEqual(7, spec.defaultPortConfig.vlan.vlanId)
def test_get_port_group_spec_trunk(self):
session = mock.Mock()
spec = dvs_util.get_port_group_spec(session, 'pg', None,
trunk_mode=True)
self.assertEqual('pg', spec.name)
self.assertEqual('ephemeral', spec.type)
self.assertEqual(0, spec.defaultPortConfig.vlan.start)
self.assertEqual(4094, spec.defaultPortConfig.vlan.end)
@mock.patch.object(dvs_util, 'get_port_group_spec')
def test_add_port_group(self, mock_spec):
session = mock.Mock()
dvs_moref = dvs_util.get_dvs_moref('dvs-123')
spec = dvs_util.get_port_group_spec(session, 'pg', 7)
mock_spec.return_value = spec
pg_moref = vim_util.get_moref('dvportgroup-7',
'DistributedVirtualPortgroup')
def wait_for_task_side_effect(task):
task_info = mock.Mock()
task_info.result = pg_moref
return task_info
session.wait_for_task.side_effect = wait_for_task_side_effect
pg = dvs_util.add_port_group(session, dvs_moref, 'pg',
vlan_id=7)
self.assertEqual(pg, pg_moref)
session.invoke_api.assert_called_once_with(
session.vim, 'CreateDVPortgroup_Task', dvs_moref,
spec=spec)
@mock.patch.object(dvs_util, 'get_port_group_spec')
def test_add_port_group_trunk(self, mock_spec):
session = mock.Mock()
dvs_moref = dvs_util.get_dvs_moref('dvs-123')
spec = dvs_util.get_port_group_spec(session, 'pg', None,
trunk_mode=True)
mock_spec.return_value = spec
dvs_util.add_port_group(session, dvs_moref, 'pg',
trunk_mode=True)
session.invoke_api.assert_called_once_with(
session.vim, 'CreateDVPortgroup_Task', dvs_moref,
spec=spec)
def test_get_portgroups_empty(self):
session = mock.Mock()
dvs_moref = dvs_util.get_dvs_moref('dvs-123')
session.invoke_api.return_value = []
pgs = dvs_util.get_portgroups(session, dvs_moref)
self.assertEqual([], pgs)
def test_get_portgroups(self):
session = mock.Mock()
dvs_moref = dvs_util.get_dvs_moref('dvs-123')
pg_moref = vim_util.get_moref('dvportgroup-7',
'DistributedVirtualPortgroup')
def session_invoke_api_side_effect(module, method, *args, **kwargs):
if module == vim_util and method == 'get_object_properties':
if ['portgroup'] in args:
propSet = [DynamicProperty(name='portgroup',
val=[[pg_moref]])]
return [ObjectContent(obj=dvs_moref,
propSet=propSet)]
if ['name'] in args:
propSet = [DynamicProperty(name='name',
val='pg-name')]
return [ObjectContent(obj=pg_moref,
propSet=propSet)]
session.invoke_api.side_effect = session_invoke_api_side_effect
session._call_method.return_value = []
pgs = dvs_util.get_portgroups(session, dvs_moref)
result = [('pg-name', pg_moref)]
self.assertEqual(result, pgs)
def test_delete_port_group(self):
session = mock.Mock()
dvs_util.delete_port_group(session, 'pg-moref')
session.invoke_api.assert_called_once_with(
session.vim, 'Destroy_Task', 'pg-moref')