congress/congress/tests/datasources/test_vCenter_driver.py

326 lines
15 KiB
Python

# Copyright (c) 2014 Marist SDN Innovation lab Joint with Plexxi 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.
#
from __future__ import print_function
from __future__ import division
from __future__ import absolute_import
from unittest import mock
from congress.datasources import vCenter_driver
from congress.tests import base
from congress.tests.datasources import vCenter_fakes
from congress.tests import helper
class TestvCenterDriver(base.TestCase):
def setUp(self):
super(TestvCenterDriver, self).setUp()
args = helper.datasource_openstack_args()
args['max_hosts'] = 999
args['max_vms'] = 999
self.driver = vCenter_driver.VCenterDriver(args=args,
session="Testing")
self.mock_rawhosts = {}
h1_obj = {}
h1_obj['value'] = 'Host1'
mock_host1 = vCenter_fakes.MockvCenterHost(h1_obj)
h1_uuid = vCenter_fakes.MockProperty(
'9912c61d-79e0-4423-bb43-d79926e0d1f0',
'hardware.systemInfo.uuid')
h1_name = vCenter_fakes.MockProperty('Host1', 'name')
h1_DNS_obj = vCenter_fakes.MockDNSInfo(['10.11.12.1', '10.11.12.2'])
h1_DNS = vCenter_fakes.MockProperty(h1_DNS_obj,
'config.network.dnsConfig.address')
h1_pnic1 = {}
h1_pnic1['uuid'] = '9912c61d-79e0-4423-bb43-d79926e0d1f1'
h1_pnic1['mac'] = '3F-0B-DD-8A-F3-B9'
h1_pnic1['device'] = 'vmnic1'
h1_pnic1['spec'] = {}
h1_pnic1['spec']['ip'] = {}
h1_pnic1['spec']['ip']['ipAddress'] = '10.11.13.1'
h1_pnic1['spec']['ip']['subnetMask'] = '255.255.255.0'
h1_pnic2 = {}
h1_pnic2['uuid'] = '9912c61d-79e0-4423-bb43-d79926e0d1f2'
h1_pnic2['mac'] = '3F-0B-DD-8A-F3-BA'
h1_pnic2['device'] = 'vmnic2'
h1_pnic2['spec'] = {}
h1_pnic2['spec']['ip'] = {}
h1_pnic2['spec']['ip']['ipAddress'] = '10.11.13.2'
h1_pnic2['spec']['ip']['subnetMask'] = '255.255.255.0'
h1_pnic_list = (h1_pnic1, h1_pnic2)
h1_pnic_obj = vCenter_fakes.MockNicContainer(h1_pnic_list)
h1_pnics = vCenter_fakes.MockProperty(h1_pnic_obj,
'config.network.pnic')
h1_vnic1 = {}
h1_vnic1['uuid'] = '9912c61d-79e0-4423-bb43-d79926e0d1f3'
h1_vnic1['device'] = 'vmk1'
h1_vnic1['portgroup'] = 'Management'
h1_vnic1['spec'] = {}
h1_vnic1['spec']['mac'] = '3F-0B-DD-8A-F3-BB'
h1_vnic1['spec']['ip'] = {}
h1_vnic1['spec']['ip']['ipAddress'] = '10.11.13.3'
h1_vnic1['spec']['ip']['subnetMask'] = '255.255.255.0'
h1_vnic2 = {}
h1_vnic2['uuid'] = '9912c61d-79e0-4423-bb43-d79926e0d1f4'
h1_vnic2['device'] = 'vmk2'
h1_vnic2['portgroup'] = 'Public'
h1_vnic2['spec'] = {}
h1_vnic2['spec']['mac'] = '3F-0B-DD-8A-F3-BC'
h1_vnic2['spec']['ip'] = {}
h1_vnic2['spec']['ip']['ipAddress'] = '10.11.13.4'
h1_vnic2['spec']['ip']['subnetMask'] = '255.255.255.0'
h1_vnic_list = [h1_vnic1, h1_vnic2]
h1_vnic_obj = vCenter_fakes.MockNicContainer(h1_vnic_list)
h1_vnics = vCenter_fakes.MockProperty(h1_vnic_obj,
'config.network.vnic')
mock_host1['propSet'] = [h1_uuid, h1_name, h1_DNS, h1_pnics, h1_vnics]
h2_obj = {}
h2_obj['value'] = 'Host2'
mock_host2 = vCenter_fakes.MockvCenterHost(h2_obj)
h2_uuid = vCenter_fakes.MockProperty(
'9912c61d-79e0-4423-bb43-d79926e0d1f5',
'hardware.systemInfo.uuid')
h2_name = vCenter_fakes.MockProperty('Host2', 'name')
h2_DNS_obj = vCenter_fakes.MockDNSInfo(['10.11.12.1', '10.11.12.2'])
h2_DNS = vCenter_fakes.MockProperty(h2_DNS_obj,
'config.network.dnsConfig.address')
h2_pnic1 = {}
h2_pnic1['uuid'] = '9912c61d-79e0-4423-bb43-d79926e0d1f6'
h2_pnic1['mac'] = '3F-0B-DD-8A-F3-BD'
h2_pnic1['device'] = 'vmnic1'
h2_pnic1['spec'] = {}
h2_pnic1['spec']['ip'] = {}
h2_pnic1['spec']['ip']['ipAddress'] = '10.11.14.1'
h2_pnic1['spec']['ip']['subnetMask'] = '255.255.255.0'
h2_pnic2 = {}
h2_pnic2['uuid'] = '9912c61d-79e0-4423-bb43-d79926e0d1f7'
h2_pnic2['mac'] = '3F-0B-DD-8A-F3-BE'
h2_pnic2['device'] = 'vmnic2'
h2_pnic2['spec'] = {}
h2_pnic2['spec']['ip'] = {}
h2_pnic2['spec']['ip']['ipAddress'] = '10.11.14.2'
h2_pnic2['spec']['ip']['subnetMask'] = '255.255.255.0'
h2_pnic_list = (h2_pnic1, h2_pnic2)
h2_pnic_obj = vCenter_fakes.MockNicContainer(h2_pnic_list)
h2_pnics = vCenter_fakes.MockProperty(h2_pnic_obj,
'config.network.pnic')
h2_vnic1 = {}
h2_vnic1['uuid'] = '9912c61d-79e0-4423-bb43-d79926e0d1f8'
h2_vnic1['device'] = 'vmk1'
h2_vnic1['portgroup'] = 'Management'
h2_vnic1['spec'] = {}
h2_vnic1['spec']['mac'] = '3F-0B-DD-8A-F3-BF'
h2_vnic1['spec']['ip'] = {}
h2_vnic1['spec']['ip']['ipAddress'] = '10.11.14.3'
h2_vnic1['spec']['ip']['subnetMask'] = '255.255.255.0'
h2_vnic2 = {}
h2_vnic2['uuid'] = '9912c61d-79e0-4423-bb43-d79926e0d1f9'
h2_vnic2['device'] = 'vmk2'
h2_vnic2['portgroup'] = 'Public'
h2_vnic2['spec'] = {}
h2_vnic2['spec']['mac'] = '3F-0B-DD-8A-F3-C0'
h2_vnic2['spec']['ip'] = {}
h2_vnic2['spec']['ip']['ipAddress'] = '10.11.14.4'
h2_vnic2['spec']['ip']['subnetMask'] = '255.255.255.0'
h2_vnic_list = [h2_vnic1, h2_vnic2]
h2_vnic_obj = vCenter_fakes.MockNicContainer(h2_vnic_list)
h2_vnics = vCenter_fakes.MockProperty(h2_vnic_obj,
'config.network.vnic')
mock_host2['propSet'] = [h2_uuid, h2_name, h2_DNS, h2_pnics, h2_vnics]
mock_hostlist = [mock_host1, mock_host2]
self.mock_rawhosts['objects'] = mock_hostlist
self.mock_rawvms = {}
mock_vm1 = {}
mock_vm1['value'] = 'VM1'
vm1_name = vCenter_fakes.MockProperty('VM1', 'name')
vm1_uuid = vCenter_fakes.MockProperty(
'9912c61d-79e0-4423-bb43-d79926e0d200',
'config.uuid')
vm1_annotation = vCenter_fakes.MockProperty('First VM',
'config.annotation')
vm1_path = vCenter_fakes.MockProperty('[Datastore] VM1/VM1.vmtx',
'summary.config.vmPathName')
vm1_memSize = vCenter_fakes.MockProperty(4096,
'summary.config.memorySizeMB')
vm1_status = vCenter_fakes.MockProperty('green',
'summary.overallStatus')
host1_referance = {}
host1_referance['value'] = 'Host1'
vm1_host = vCenter_fakes.MockProperty(host1_referance, 'runtime.host')
vm1_quickstats = {}
vm1_quickstats['guestMemoryUsage'] = 245
vm1_quickstats['overallCpuDemand'] = 216
vm1_quickstats['overallCpuUsage'] = 192
vm1_quickstats_property = vCenter_fakes.MockProperty(
vm1_quickstats, 'summary.quickStats')
vm1_storage = {}
vm1_storage['committed'] = 25294964803
vm1_storage['uncommitted'] = 32812040762
vm1_storage_property = vCenter_fakes.MockProperty(vm1_storage,
'summary.storage')
mock_vm1['propSet'] = [vm1_name, vm1_uuid, vm1_annotation, vm1_path,
vm1_memSize, vm1_status, vm1_host,
vm1_quickstats_property, vm1_storage_property]
mock_vm2 = {}
mock_vm2['value'] = 'VM2'
vm2_name = vCenter_fakes.MockProperty('VM2', 'name')
vm2_uuid = vCenter_fakes.MockProperty(
'9912c61d-79e0-4423-bb43-d79926e0d201',
'config.uuid')
vm2_annotation = vCenter_fakes.MockProperty('Second VM',
'config.annotation')
vm2_path = vCenter_fakes.MockProperty('[Datastore] VM2/VM2.vmtx',
'summary.config.vmPathName')
vm2_memSize = vCenter_fakes.MockProperty(4096,
'summary.config.memorySizeMB')
vm2_status = vCenter_fakes.MockProperty('green',
'summary.overallStatus')
host2_referance = {}
host2_referance['value'] = 'Host2'
vm2_host = vCenter_fakes.MockProperty(host2_referance, 'runtime.host')
vm2_quickstats = {}
vm2_quickstats['guestMemoryUsage'] = 0
vm2_quickstats['overallCpuDemand'] = 0
vm2_quickstats['overallCpuUsage'] = 0
vm2_quickstats_property = vCenter_fakes.MockProperty(
vm1_quickstats,
'summary.quickStats')
vm2_storage = {}
vm2_storage['committed'] = 6271694636
vm2_storage['uncommitted'] = 34110177822
vm2_storage_property = vCenter_fakes.MockProperty(vm2_storage,
'summary.storage')
mock_vm2['propSet'] = [vm2_name, vm2_uuid, vm2_annotation, vm2_path,
vm2_memSize, vm2_status, vm2_host,
vm2_quickstats_property, vm2_storage_property]
mock_vmlist = [mock_vm1, mock_vm2]
self.mock_rawvms['objects'] = mock_vmlist
def test_translators(self):
with mock.patch.object(self.driver, '_get_hosts_from_vcenter',
return_value=self.mock_rawhosts):
hosts, pnics, vnics = self.driver._get_hosts_and_nics()
self.driver._translate_hosts(hosts)
self.driver._translate_pnics(pnics)
self.driver._translate_vnics(vnics)
expected_hosts = set([('Host1',
'9912c61d-79e0-4423-bb43-d79926e0d1f0',
'895f69d340dac8cd4c9550e745703c77'),
('Host2',
'9912c61d-79e0-4423-bb43-d79926e0d1f5',
'895f69d340dac8cd4c9550e745703c77')])
self.assertEqual(expected_hosts, self.driver.state['hosts'])
expected_DNS = set([('895f69d340dac8cd4c9550e745703c77',
'10.11.12.1'),
('895f69d340dac8cd4c9550e745703c77',
'10.11.12.2')])
self.assertEqual(expected_DNS, self.driver.state['host.DNS_IPs'])
expected_pnics = set([('9912c61d-79e0-4423-bb43-d79926e0d1f0',
'vmnic1',
'3F-0B-DD-8A-F3-B9',
'10.11.13.1',
'255.255.255.0'),
('9912c61d-79e0-4423-bb43-d79926e0d1f0',
'vmnic2',
'3F-0B-DD-8A-F3-BA',
'10.11.13.2',
'255.255.255.0'),
('9912c61d-79e0-4423-bb43-d79926e0d1f5',
'vmnic1',
'3F-0B-DD-8A-F3-BD',
'10.11.14.1',
'255.255.255.0'),
('9912c61d-79e0-4423-bb43-d79926e0d1f5',
'vmnic2',
'3F-0B-DD-8A-F3-BE',
'10.11.14.2',
'255.255.255.0')])
self.assertEqual(expected_pnics, self.driver.state['host.PNICs'])
expected_vnics = set([('9912c61d-79e0-4423-bb43-d79926e0d1f0',
'vmk1',
'3F-0B-DD-8A-F3-BB',
'Management',
'10.11.13.3',
'255.255.255.0'),
('9912c61d-79e0-4423-bb43-d79926e0d1f0',
'vmk2',
'3F-0B-DD-8A-F3-BC',
'Public',
'10.11.13.4',
'255.255.255.0'),
('9912c61d-79e0-4423-bb43-d79926e0d1f5',
'vmk1',
'3F-0B-DD-8A-F3-BF',
'Management',
'10.11.14.3',
'255.255.255.0'),
('9912c61d-79e0-4423-bb43-d79926e0d1f5',
'vmk2',
'3F-0B-DD-8A-F3-C0',
'Public',
'10.11.14.4',
'255.255.255.0')])
self.assertEqual(expected_vnics, self.driver.state['host.VNICs'])
with mock.patch.object(self.driver, '_get_vms_from_vcenter',
return_value=self.mock_rawvms):
vms = self.driver._get_vms()
self.driver._translate_vms(vms)
expected_vms = set([('VM1',
'9912c61d-79e0-4423-bb43-d79926e0d200',
'9912c61d-79e0-4423-bb43-d79926e0d1f0',
'[Datastore] VM1/VM1.vmtx',
'green',
216,
192,
4096,
245,
25294964803,
32812040762,
'First VM'),
('VM2',
'9912c61d-79e0-4423-bb43-d79926e0d201',
'9912c61d-79e0-4423-bb43-d79926e0d1f5',
'[Datastore] VM2/VM2.vmtx',
'green',
216,
192,
4096,
245,
6271694636,
34110177822,
'Second VM')])
self.assertEqual(expected_vms, self.driver.state['vms'])
def test_execute(self):
class vCenterClient(object):
def __init__(self):
self.testkey = None
def connectNetwork(self, arg1):
self.testkey = 'arg1=%s' % arg1
vcenter_client = vCenterClient()
self.driver.session = vcenter_client
api_args = {
'positional': ['1']
}
expected_ans = 'arg1=1'
self.driver.execute('connectNetwork', api_args)
self.assertEqual(expected_ans, vcenter_client.testkey)