Rearrange emulator unit tests
Refactored Redfish emulator unit tests along the following lines: * test_main.py tests just REST API, mocks virtualization driver * test_nova.py tests just the driver, mocks openstacksdk * test_libvirt.py tests just the driver, mocks libvirt This is a follow-up of change ID: If8a479ae793c1616ef8b30e76bd8cdfdfc08dbe0 Story: 1751134 Task: 12046 Change-Id: Ieb010ef298aa8b7f1b6c18ada8e3cf33035019fa
This commit is contained in:
parent
4f0cc187ee
commit
50d3c1dd17
|
@ -15,179 +15,194 @@ from oslotest import base
|
|||
from six.moves import mock
|
||||
|
||||
from sushy_tools.emulator.drivers.libvirtdriver import LibvirtDriver
|
||||
from sushy_tools.emulator import main
|
||||
from sushy_tools.error import FishyError
|
||||
|
||||
|
||||
@mock.patch.object(main, 'driver', None) # This enables libvirt driver
|
||||
class EmulatorTestCase(base.BaseTestCase):
|
||||
class LibvirtDriverTestCase(base.BaseTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.app = main.app.test_client()
|
||||
|
||||
self.test_driver = LibvirtDriver()
|
||||
super(EmulatorTestCase, self).setUp()
|
||||
|
||||
def test_root_resource(self):
|
||||
response = self.app.get('/redfish/v1/')
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertTrue(response.json)
|
||||
super(LibvirtDriverTestCase, self).setUp()
|
||||
|
||||
@mock.patch('libvirt.openReadOnly', autospec=True)
|
||||
def test_collection_resource(self, libvirt_mock):
|
||||
def test_uuid(self, libvirt_mock):
|
||||
conn_mock = libvirt_mock.return_value
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.UUIDString.return_value = 'zzzz-yyyy-xxxx'
|
||||
uuid = self.test_driver.uuid('name')
|
||||
self.assertEqual('zzzz-yyyy-xxxx', uuid)
|
||||
|
||||
@mock.patch('libvirt.openReadOnly', autospec=True)
|
||||
def test_systems(self, libvirt_mock):
|
||||
conn_mock = libvirt_mock.return_value
|
||||
conn_mock.listDefinedDomains.return_value = ['host0', 'host1']
|
||||
|
||||
response = self.app.get('/redfish/v1/Systems')
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual({'@odata.id': '/redfish/v1/Systems/host0'},
|
||||
response.json['Members'][0])
|
||||
self.assertEqual({'@odata.id': '/redfish/v1/Systems/host1'},
|
||||
response.json['Members'][1])
|
||||
systems = self.test_driver.systems
|
||||
self.assertEqual(['host0', 'host1'], systems)
|
||||
|
||||
@mock.patch('libvirt.openReadOnly', autospec=True)
|
||||
def test_system_resource_get(self, libvirt_mock):
|
||||
with open('sushy_tools/tests/unit/emulator/domain.xml', 'r') as f:
|
||||
data = f.read()
|
||||
domain_mock = mock.Mock()
|
||||
domain_mock.XMLDesc.return_value = data
|
||||
domain_mock.isActive.return_value = True
|
||||
domain_mock.maxMemory.return_value = 1024 * 1024
|
||||
domain_mock.UUIDString.return_value = 'zzzz-yyyy-xxxx'
|
||||
domain_mock.maxVcpus.return_value = 2
|
||||
|
||||
def test_get_power_state_on(self, libvirt_mock):
|
||||
conn_mock = libvirt_mock.return_value
|
||||
conn_mock.lookupByName.return_value = domain_mock
|
||||
|
||||
response = self.app.get('/redfish/v1/Systems/xxxx-yyyy-zzzz')
|
||||
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual('xxxx-yyyy-zzzz', response.json['Id'])
|
||||
self.assertEqual('zzzz-yyyy-xxxx', response.json['UUID'])
|
||||
self.assertEqual('On', response.json['PowerState'])
|
||||
self.assertEqual(
|
||||
1, response.json['MemorySummary']['TotalSystemMemoryGiB'])
|
||||
self.assertEqual(2, response.json['ProcessorSummary']['Count'])
|
||||
self.assertEqual(
|
||||
'Cd', response.json['Boot']['BootSourceOverrideTarget'])
|
||||
self.assertEqual(
|
||||
'Legacy', response.json['Boot']['BootSourceOverrideMode'])
|
||||
|
||||
@mock.patch('libvirt.open', autospec=True)
|
||||
def test_system_resource_patch(self, libvirt_mock):
|
||||
|
||||
with open('sushy_tools/tests/unit/emulator/domain.xml', 'r') as f:
|
||||
data = f.read()
|
||||
domain_mock = mock.Mock()
|
||||
domain_mock.XMLDesc.return_value = data
|
||||
|
||||
conn_mock = libvirt_mock.return_value
|
||||
conn_mock.lookupByName.return_value = domain_mock
|
||||
conn_mock.defineXML = mock.Mock()
|
||||
data = {'Boot': {'BootSourceOverrideTarget': 'Cd'}}
|
||||
response = self.app.patch('/redfish/v1/Systems/xxxx-yyyy-zzzz',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
|
||||
@mock.patch('libvirt.open', autospec=True)
|
||||
def test_system_reset_action_on(self, libvirt_mock):
|
||||
domain_mock = mock.Mock()
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.isActive.return_value = True
|
||||
|
||||
conn_mock = libvirt_mock.return_value
|
||||
conn_mock.lookupByName.return_value = domain_mock
|
||||
power_state = self.test_driver.get_power_state('zzzz-yyyy-xxxx')
|
||||
|
||||
data = {'ResetType': 'On'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
domain_mock.create.assert_not_called()
|
||||
self.assertEqual('On', power_state)
|
||||
|
||||
@mock.patch('libvirt.openReadOnly', autospec=True)
|
||||
def test_get_power_state_off(self, libvirt_mock):
|
||||
conn_mock = libvirt_mock.return_value
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.isActive.return_value = False
|
||||
|
||||
power_state = self.test_driver.get_power_state('zzzz-yyyy-xxxx')
|
||||
|
||||
self.assertEqual('Off', power_state)
|
||||
|
||||
@mock.patch('libvirt.open', autospec=True)
|
||||
def test_system_reset_action_forceon(self, libvirt_mock):
|
||||
domain_mock = mock.Mock()
|
||||
domain_mock.isActive.return_value = True
|
||||
|
||||
def test_set_power_state_on(self, libvirt_mock):
|
||||
conn_mock = libvirt_mock.return_value
|
||||
conn_mock.lookupByName.return_value = domain_mock
|
||||
data = {'ResetType': 'ForceOn'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
domain_mock.create.assert_not_called()
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.isActive.return_value = False
|
||||
|
||||
self.test_driver.set_power_state('zzzz-yyyy-xxxx', 'On')
|
||||
|
||||
domain_mock.create.assert_called_once_with()
|
||||
|
||||
@mock.patch('libvirt.open', autospec=True)
|
||||
def test_system_reset_action_forceoff(self, libvirt_mock):
|
||||
domain_mock = mock.Mock()
|
||||
def test_set_power_state_forceon(self, libvirt_mock):
|
||||
conn_mock = libvirt_mock.return_value
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.isActive.return_value = False
|
||||
|
||||
self.test_driver.set_power_state('zzzz-yyyy-xxxx', 'ForceOn')
|
||||
|
||||
domain_mock.create.assert_called_once_with()
|
||||
|
||||
@mock.patch('libvirt.open', autospec=True)
|
||||
def test_set_power_state_forceoff(self, libvirt_mock):
|
||||
conn_mock = libvirt_mock.return_value
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.isActive.return_value = True
|
||||
|
||||
conn_mock = libvirt_mock.return_value
|
||||
conn_mock.lookupByName.return_value = domain_mock
|
||||
data = {'ResetType': 'ForceOff'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
self.test_driver.set_power_state('zzzz-yyyy-xxxx', 'ForceOff')
|
||||
|
||||
domain_mock.destroy.assert_called_once_with()
|
||||
|
||||
@mock.patch('libvirt.open', autospec=True)
|
||||
def test_system_reset_action_shutdown(self, libvirt_mock):
|
||||
domain_mock = mock.Mock()
|
||||
def test_set_power_state_gracefulshutdown(self, libvirt_mock):
|
||||
conn_mock = libvirt_mock.return_value
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.isActive.return_value = True
|
||||
|
||||
conn_mock = libvirt_mock.return_value
|
||||
conn_mock.lookupByName.return_value = domain_mock
|
||||
data = {'ResetType': 'GracefulShutdown'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
self.test_driver.set_power_state('zzzz-yyyy-xxxx', 'GracefulShutdown')
|
||||
|
||||
domain_mock.shutdown.assert_called_once_with()
|
||||
|
||||
@mock.patch('libvirt.open', autospec=True)
|
||||
def test_system_reset_action_restart(self, libvirt_mock):
|
||||
domain_mock = mock.Mock()
|
||||
def test_set_power_state_gracefulrestart(self, libvirt_mock):
|
||||
conn_mock = libvirt_mock.return_value
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.isActive.return_value = True
|
||||
|
||||
conn_mock = libvirt_mock.return_value
|
||||
conn_mock.lookupByName.return_value = domain_mock
|
||||
data = {'ResetType': 'GracefulRestart'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
self.test_driver.set_power_state('zzzz-yyyy-xxxx', 'GracefulRestart')
|
||||
|
||||
domain_mock.reboot.assert_called_once_with()
|
||||
|
||||
@mock.patch('libvirt.open', autospec=True)
|
||||
def test_system_reset_action_forcerestart(self, libvirt_mock):
|
||||
domain_mock = mock.Mock()
|
||||
def test_set_power_state_forcerestart(self, libvirt_mock):
|
||||
conn_mock = libvirt_mock.return_value
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.isActive.return_value = True
|
||||
|
||||
conn_mock = libvirt_mock.return_value
|
||||
conn_mock.lookupByName.return_value = domain_mock
|
||||
data = {'ResetType': 'ForceRestart'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
self.test_driver.set_power_state('zzzz-yyyy-xxxx', 'ForceRestart')
|
||||
|
||||
domain_mock.reset.assert_called_once_with()
|
||||
|
||||
@mock.patch('libvirt.open', autospec=True)
|
||||
def test_system_reset_action_nmi(self, libvirt_mock):
|
||||
domain_mock = mock.Mock()
|
||||
def test_set_power_state_nmi(self, libvirt_mock):
|
||||
conn_mock = libvirt_mock.return_value
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.isActive.return_value = True
|
||||
|
||||
conn_mock = libvirt_mock.return_value
|
||||
conn_mock.lookupByName.return_value = domain_mock
|
||||
data = {'ResetType': 'Nmi'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
self.test_driver.set_power_state('zzzz-yyyy-xxxx', 'Nmi')
|
||||
|
||||
domain_mock.injectNMI.assert_called_once_with()
|
||||
|
||||
@mock.patch('libvirt.openReadOnly', autospec=True)
|
||||
def test_get_boot_device(self, libvirt_mock):
|
||||
with open('sushy_tools/tests/unit/emulator/domain.xml', 'r') as f:
|
||||
data = f.read()
|
||||
|
||||
conn_mock = libvirt_mock.return_value
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.XMLDesc.return_value = data
|
||||
|
||||
boot_device = self.test_driver.get_boot_device('zzzz-yyyy-xxxx')
|
||||
|
||||
self.assertEqual('Cd', boot_device)
|
||||
|
||||
@mock.patch('libvirt.open', autospec=True)
|
||||
def test_set_boot_device(self, libvirt_mock):
|
||||
with open('sushy_tools/tests/unit/emulator/domain.xml', 'r') as f:
|
||||
data = f.read()
|
||||
|
||||
conn_mock = libvirt_mock.return_value
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.XMLDesc.return_value = data
|
||||
|
||||
self.test_driver.set_boot_device('zzzz-yyyy-xxxx', 'Hdd')
|
||||
|
||||
conn_mock.defineXML.assert_called_once_with(mock.ANY)
|
||||
|
||||
@mock.patch('libvirt.openReadOnly', autospec=True)
|
||||
def test_get_boot_mode(self, libvirt_mock):
|
||||
with open('sushy_tools/tests/unit/emulator/domain.xml', 'r') as f:
|
||||
data = f.read()
|
||||
|
||||
conn_mock = libvirt_mock.return_value
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.XMLDesc.return_value = data
|
||||
|
||||
boot_mode = self.test_driver.get_boot_mode('zzzz-yyyy-xxxx')
|
||||
|
||||
self.assertEqual('Legacy', boot_mode)
|
||||
|
||||
@mock.patch('libvirt.open', autospec=True)
|
||||
def test_set_boot_mode(self, libvirt_mock):
|
||||
with open('sushy_tools/tests/unit/emulator/domain.xml', 'r') as f:
|
||||
data = f.read()
|
||||
|
||||
conn_mock = libvirt_mock.return_value
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.XMLDesc.return_value = data
|
||||
|
||||
self.test_driver.set_boot_mode('zzzz-yyyy-xxxx', 'Uefi')
|
||||
|
||||
conn_mock.defineXML.assert_called_once_with(mock.ANY)
|
||||
|
||||
@mock.patch('libvirt.openReadOnly', autospec=True)
|
||||
def test_get_total_memory(self, libvirt_mock):
|
||||
conn_mock = libvirt_mock.return_value
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.maxMemory.return_value = 1024 * 1024
|
||||
|
||||
memory = self.test_driver.get_total_memory('zzzz-yyyy-xxxx')
|
||||
|
||||
self.assertEqual(1, memory)
|
||||
|
||||
@mock.patch('libvirt.openReadOnly', autospec=True)
|
||||
def test_get_total_cpus(self, libvirt_mock):
|
||||
conn_mock = libvirt_mock.return_value
|
||||
domain_mock = conn_mock.lookupByName.return_value
|
||||
domain_mock.isActive.return_value = True
|
||||
domain_mock.XMLDesc.return_value = b'<empty/>'
|
||||
domain_mock.maxVcpus.return_value = 2
|
||||
|
||||
cpus = self.test_driver.get_total_cpus('zzzz-yyyy-xxxx')
|
||||
|
||||
self.assertEqual(2, cpus)
|
||||
|
||||
@mock.patch('libvirt.open', autospec=True)
|
||||
def test_get_bios(self, libvirt_mock):
|
||||
with open('sushy_tools/tests/unit/emulator/domain.xml') as f:
|
||||
|
@ -200,7 +215,7 @@ class EmulatorTestCase(base.BaseTestCase):
|
|||
bios_attributes = self.test_driver.get_bios('xxx-yyy-zzz')
|
||||
self.assertEqual(LibvirtDriver.DEFAULT_BIOS_ATTRIBUTES,
|
||||
bios_attributes)
|
||||
self.assertEqual(1, conn_mock.defineXML.call_count)
|
||||
conn_mock.defineXML.assert_called_once_with(mock.ANY)
|
||||
|
||||
@mock.patch('libvirt.open', autospec=True)
|
||||
def test_get_bios_existing(self, libvirt_mock):
|
||||
|
@ -231,7 +246,7 @@ class EmulatorTestCase(base.BaseTestCase):
|
|||
self.test_driver.set_bios('xxx-yyy-zzz',
|
||||
{"BootMode": "Uefi",
|
||||
"ProcTurboMode": "Enabled"})
|
||||
self.assertEqual(1, conn_mock.defineXML.call_count)
|
||||
conn_mock.defineXML.assert_called_once_with(mock.ANY)
|
||||
|
||||
@mock.patch('libvirt.open', autospec=True)
|
||||
def test_reset_bios(self, libvirt_mock):
|
||||
|
@ -243,7 +258,7 @@ class EmulatorTestCase(base.BaseTestCase):
|
|||
domain_mock.XMLDesc.return_value = domain_xml
|
||||
|
||||
self.test_driver.reset_bios('xxx-yyy-zzz')
|
||||
self.assertEqual(1, conn_mock.defineXML.call_count)
|
||||
conn_mock.defineXML.assert_called_once_with(mock.ANY)
|
||||
|
||||
def test__process_bios_attributes_get_default(self):
|
||||
with open('sushy_tools/tests/unit/emulator/domain.xml') as f:
|
||||
|
|
|
@ -10,8 +10,6 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import json
|
||||
|
||||
from oslotest import base
|
||||
from six.moves import mock
|
||||
|
||||
|
@ -33,7 +31,118 @@ class EmulatorTestCase(base.BaseTestCase):
|
|||
|
||||
self.assertEqual('500 INTERNAL SERVER ERROR', response.status)
|
||||
|
||||
def test_bios(self, driver_mock):
|
||||
def test_root_resource(self, driver_mock):
|
||||
response = self.app.get('/redfish/v1/')
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual('RedvirtService', response.json['Id'])
|
||||
|
||||
def test_collection_resource(self, driver_mock):
|
||||
type(driver_mock).systems = mock.PropertyMock(
|
||||
return_value=['host0', 'host1'])
|
||||
response = self.app.get('/redfish/v1/Systems')
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual({'@odata.id': '/redfish/v1/Systems/host0'},
|
||||
response.json['Members'][0])
|
||||
self.assertEqual({'@odata.id': '/redfish/v1/Systems/host1'},
|
||||
response.json['Members'][1])
|
||||
|
||||
def test_system_resource_get(self, driver_mock):
|
||||
driver_mock.uuid.return_value = 'zzzz-yyyy-xxxx'
|
||||
driver_mock.get_power_state.return_value = 'On'
|
||||
driver_mock.get_total_memory.return_value = 1
|
||||
driver_mock.get_total_cpus.return_value = 2
|
||||
driver_mock.get_boot_device.return_value = 'Cd'
|
||||
driver_mock.get_boot_mode.return_value = 'Legacy'
|
||||
|
||||
response = self.app.get('/redfish/v1/Systems/xxxx-yyyy-zzzz')
|
||||
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual('xxxx-yyyy-zzzz', response.json['Id'])
|
||||
self.assertEqual('zzzz-yyyy-xxxx', response.json['UUID'])
|
||||
self.assertEqual('On', response.json['PowerState'])
|
||||
self.assertEqual(
|
||||
1, response.json['MemorySummary']['TotalSystemMemoryGiB'])
|
||||
self.assertEqual(2, response.json['ProcessorSummary']['Count'])
|
||||
self.assertEqual(
|
||||
'Cd', response.json['Boot']['BootSourceOverrideTarget'])
|
||||
self.assertEqual(
|
||||
'Legacy', response.json['Boot']['BootSourceOverrideMode'])
|
||||
|
||||
def test_system_resource_patch(self, driver_mock):
|
||||
data = {'Boot': {'BootSourceOverrideTarget': 'Cd'}}
|
||||
response = self.app.patch('/redfish/v1/Systems/xxxx-yyyy-zzzz',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
set_boot_device = driver_mock.set_boot_device
|
||||
set_boot_device.assert_called_once_with('xxxx-yyyy-zzzz', 'Cd')
|
||||
|
||||
def test_system_reset_action_on(self, driver_mock):
|
||||
data = {'ResetType': 'On'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
set_power_state = driver_mock.set_power_state
|
||||
set_power_state.assert_called_once_with('xxxx-yyyy-zzzz', 'On')
|
||||
|
||||
def test_system_reset_action_forceon(self, driver_mock):
|
||||
data = {'ResetType': 'ForceOn'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
set_power_state = driver_mock.set_power_state
|
||||
set_power_state.assert_called_once_with('xxxx-yyyy-zzzz', 'ForceOn')
|
||||
|
||||
def test_system_reset_action_forceoff(self, driver_mock):
|
||||
data = {'ResetType': 'ForceOff'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
set_power_state = driver_mock.set_power_state
|
||||
set_power_state.assert_called_once_with('xxxx-yyyy-zzzz', 'ForceOff')
|
||||
|
||||
def test_system_reset_action_shutdown(self, driver_mock):
|
||||
data = {'ResetType': 'GracefulShutdown'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
set_power_state = driver_mock.set_power_state
|
||||
set_power_state.assert_called_once_with(
|
||||
'xxxx-yyyy-zzzz', 'GracefulShutdown')
|
||||
|
||||
def test_system_reset_action_restart(self, driver_mock):
|
||||
data = {'ResetType': 'GracefulRestart'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
set_power_state = driver_mock.set_power_state
|
||||
set_power_state.assert_called_once_with(
|
||||
'xxxx-yyyy-zzzz', 'GracefulRestart')
|
||||
|
||||
def test_system_reset_action_forcerestart(self, driver_mock):
|
||||
data = {'ResetType': 'ForceRestart'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
set_power_state = driver_mock.set_power_state
|
||||
set_power_state.assert_called_once_with(
|
||||
'xxxx-yyyy-zzzz', 'ForceRestart')
|
||||
|
||||
def test_system_reset_action_nmi(self, driver_mock):
|
||||
data = {'ResetType': 'Nmi'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
set_power_state = driver_mock.set_power_state
|
||||
set_power_state.assert_called_once_with('xxxx-yyyy-zzzz', 'Nmi')
|
||||
|
||||
def test_get_bios(self, driver_mock):
|
||||
driver_mock.get_bios.return_value = {"attribute 1": "value 1",
|
||||
"attribute 2": "value 2"}
|
||||
response = self.app.get('/redfish/v1/Systems/xxxx-yyyy-zzzz/BIOS')
|
||||
|
@ -44,35 +153,46 @@ class EmulatorTestCase(base.BaseTestCase):
|
|||
"attribute 2": "value 2"},
|
||||
response.json['Attributes'])
|
||||
|
||||
def test_bios_settings(self, driver_mock):
|
||||
def test_get_bios_existing(self, driver_mock):
|
||||
driver_mock.get_bios.return_value = {"attribute 1": "value 1",
|
||||
"attribute 2": "value 2"}
|
||||
response = self.app.get(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/BIOS/Settings')
|
||||
|
||||
self.assertEqual('200 OK', response.status)
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual('Settings', response.json['Id'])
|
||||
self.assertEqual({"attribute 1": "value 1",
|
||||
"attribute 2": "value 2"},
|
||||
response.json['Attributes'])
|
||||
|
||||
def test_bios_settings_patch(self, driver_mock):
|
||||
data = {'Attributes': {'key': 'value'}}
|
||||
self.app.driver = driver_mock
|
||||
response = self.app.patch(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/BIOS/Settings',
|
||||
data=json.dumps({'Attributes': {'key': 'value'}}),
|
||||
content_type='application/json')
|
||||
json=data)
|
||||
|
||||
self.assertEqual('204 NO CONTENT', response.status)
|
||||
self.assertEqual(204, response.status_code)
|
||||
driver_mock.set_bios.assert_called_once_with('xxxx-yyyy-zzzz',
|
||||
{'key': 'value'})
|
||||
|
||||
def test_set_bios(self, driver_mock):
|
||||
data = {'Attributes': {'key': 'value'}}
|
||||
self.app.driver = driver_mock
|
||||
response = self.app.patch(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/BIOS/Settings',
|
||||
json=data)
|
||||
|
||||
self.assertEqual(204, response.status_code)
|
||||
driver_mock.set_bios.assert_called_once_with(
|
||||
'xxxx-yyyy-zzzz', data['Attributes'])
|
||||
|
||||
def test_reset_bios(self, driver_mock):
|
||||
self.app.driver = driver_mock
|
||||
response = self.app.post('/redfish/v1/Systems/xxxx-yyyy-zzzz/'
|
||||
'BIOS/Actions/Bios.ResetBios')
|
||||
|
||||
self.assertEqual('204 NO CONTENT', response.status)
|
||||
self.assertEqual(204, response.status_code)
|
||||
driver_mock.reset_bios.assert_called_once_with('xxxx-yyyy-zzzz')
|
||||
|
||||
def test_ethernet_interfaces_collection(self, driver_mock):
|
||||
|
@ -83,7 +203,7 @@ class EmulatorTestCase(base.BaseTestCase):
|
|||
response = self.app.get('redfish/v1/Systems/xxx-yyy-zzz/'
|
||||
'EthernetInterfaces')
|
||||
|
||||
self.assertEqual('200 OK', response.status)
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual('Ethernet Interface Collection',
|
||||
response.json['Name'])
|
||||
self.assertEqual(2, response.json['Members@odata.count'])
|
||||
|
@ -98,7 +218,7 @@ class EmulatorTestCase(base.BaseTestCase):
|
|||
response = self.app.get('redfish/v1/Systems/xxx-yyy-zzz/'
|
||||
'EthernetInterfaces')
|
||||
|
||||
self.assertEqual('200 OK', response.status)
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual('Ethernet Interface Collection',
|
||||
response.json['Name'])
|
||||
self.assertEqual(0, response.json['Members@odata.count'])
|
||||
|
@ -112,7 +232,7 @@ class EmulatorTestCase(base.BaseTestCase):
|
|||
response = self.app.get('/redfish/v1/Systems/xxx-yyy-zzz/'
|
||||
'EthernetInterfaces/nic2')
|
||||
|
||||
self.assertEqual('200 OK', response.status)
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual('nic2', response.json['Id'])
|
||||
self.assertEqual('VNIC nic2', response.json['Name'])
|
||||
self.assertEqual('00:11:22:33:44:55',
|
||||
|
@ -131,4 +251,4 @@ class EmulatorTestCase(base.BaseTestCase):
|
|||
response = self.app.get('/redfish/v1/Systems/xxx-yyy-zzz/'
|
||||
'EthernetInterfaces/nic3')
|
||||
|
||||
self.assertEqual('404 NOT FOUND', response.status)
|
||||
self.assertEqual(404, response.status_code)
|
||||
|
|
|
@ -13,178 +13,174 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import os
|
||||
|
||||
from munch import Munch
|
||||
from oslotest import base
|
||||
from six.moves import mock
|
||||
|
||||
from sushy_tools.emulator.drivers.novadriver import OpenStackDriver
|
||||
from sushy_tools.emulator import main
|
||||
from sushy_tools.error import FishyError
|
||||
|
||||
|
||||
@mock.patch.object(os, 'environ', dict(OS_CLOUD='fake-cloud', **os.environ))
|
||||
@mock.patch.object(main, 'driver', None) # This enables Nova driver
|
||||
@mock.patch('openstack.connect', autospec=True)
|
||||
class EmulatorTestCase(base.BaseTestCase):
|
||||
class NovaDriverTestCase(base.BaseTestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.app = main.app.test_client()
|
||||
super(EmulatorTestCase, self).setUp()
|
||||
self.nova_patcher = mock.patch('openstack.connect', autospec=True)
|
||||
self.nova_mock = self.nova_patcher.start()
|
||||
|
||||
def test_root_resource(self, nova_mock):
|
||||
response = self.app.get('/redfish/v1/')
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertTrue(response.json)
|
||||
self.test_driver = OpenStackDriver('fake-cloud')
|
||||
|
||||
def test_collection_resource(self, nova_mock):
|
||||
super(NovaDriverTestCase, self).setUp()
|
||||
|
||||
def tearDown(self):
|
||||
self.nova_patcher.stop()
|
||||
super(NovaDriverTestCase, self).tearDown()
|
||||
|
||||
def test_uuid(self):
|
||||
server = mock.Mock(id='zzzz-yyyy-xxxx')
|
||||
self.nova_mock.return_value.get_server.return_value = server
|
||||
uuid = self.test_driver.uuid('zzzz-yyyy-xxxx')
|
||||
self.assertEqual('zzzz-yyyy-xxxx', uuid)
|
||||
|
||||
def test_systems(self):
|
||||
server0 = mock.Mock(id='host0')
|
||||
server1 = mock.Mock(id='host1')
|
||||
nova_mock.return_value.list_servers.return_value = [server0, server1]
|
||||
self.nova_mock.return_value.list_servers.return_value = [
|
||||
server0, server1]
|
||||
|
||||
response = self.app.get('/redfish/v1/Systems')
|
||||
systems = self.test_driver.systems
|
||||
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual({'@odata.id': '/redfish/v1/Systems/host0'},
|
||||
response.json['Members'][0])
|
||||
self.assertEqual({'@odata.id': '/redfish/v1/Systems/host1'},
|
||||
response.json['Members'][1])
|
||||
self.assertEqual(['host0', 'host1'], systems)
|
||||
|
||||
def test_system_resource_get(self, nova_mock):
|
||||
def test_get_power_state_on(self,):
|
||||
server = mock.Mock(id='zzzz-yyyy-xxxx',
|
||||
power_state=1,
|
||||
image={'id': 'xxxx-zzzz-yyyy'})
|
||||
nova_mock.return_value.get_server.return_value = server
|
||||
power_state=1)
|
||||
self.nova_mock.return_value.get_server.return_value = server
|
||||
|
||||
flavor = mock.Mock(ram=1024, vcpus=2)
|
||||
nova_mock.return_value.get_flavor.return_value = flavor
|
||||
power_state = self.test_driver.get_power_state('zzzz-yyyy-xxxx')
|
||||
|
||||
self.assertEqual('On', power_state)
|
||||
|
||||
def test_get_power_state_off(self):
|
||||
server = mock.Mock(id='zzzz-yyyy-xxxx',
|
||||
power_state=0)
|
||||
self.nova_mock.return_value.get_server.return_value = server
|
||||
|
||||
power_state = self.test_driver.get_power_state('zzzz-yyyy-xxxx')
|
||||
|
||||
self.assertEqual('Off', power_state)
|
||||
|
||||
def test_set_power_state_on(self):
|
||||
server = mock.Mock(id='zzzz-yyyy-xxxx', power_state=0)
|
||||
self.nova_mock.return_value.get_server.return_value = server
|
||||
self.test_driver.set_power_state('zzzz-yyyy-xxxx', 'On')
|
||||
compute = self.nova_mock.return_value.compute
|
||||
compute.start_server.assert_called_once_with('zzzz-yyyy-xxxx')
|
||||
|
||||
def test_set_power_state_forceon(self):
|
||||
server = mock.Mock(id='zzzz-yyyy-xxxx', power_state=0)
|
||||
self.nova_mock.return_value.get_server.return_value = server
|
||||
self.test_driver.set_power_state('zzzz-yyyy-xxxx', 'ForceOn')
|
||||
compute = self.nova_mock.return_value.compute
|
||||
compute.start_server.assert_called_once_with('zzzz-yyyy-xxxx')
|
||||
|
||||
def test_set_power_state_forceoff(self):
|
||||
server = mock.Mock(id='zzzz-yyyy-xxxx', power_state=1)
|
||||
self.nova_mock.return_value.get_server.return_value = server
|
||||
self.test_driver.set_power_state('zzzz-yyyy-xxxx', 'ForceOff')
|
||||
compute = self.nova_mock.return_value.compute
|
||||
compute.stop_server.assert_called_once_with('zzzz-yyyy-xxxx')
|
||||
|
||||
def test_set_power_state_gracefulshutdown(self):
|
||||
server = mock.Mock(id='zzzz-yyyy-xxxx', power_state=1)
|
||||
self.nova_mock.return_value.get_server.return_value = server
|
||||
self.test_driver.set_power_state('zzzz-yyyy-xxxx', 'GracefulShutdown')
|
||||
compute = self.nova_mock.return_value.compute
|
||||
compute.stop_server.assert_called_once_with('zzzz-yyyy-xxxx')
|
||||
|
||||
def test_set_power_state_gracefulrestart(self):
|
||||
server = mock.Mock(id='zzzz-yyyy-xxxx', power_state=1)
|
||||
self.nova_mock.return_value.get_server.return_value = server
|
||||
self.test_driver.set_power_state('zzzz-yyyy-xxxx', 'GracefulRestart')
|
||||
compute = self.nova_mock.return_value.compute
|
||||
compute.reboot_server.assert_called_once_with(
|
||||
'zzzz-yyyy-xxxx', reboot_type='SOFT')
|
||||
|
||||
def test_set_power_state_forcerestart(self):
|
||||
server = mock.Mock(id='zzzz-yyyy-xxxx', power_state=1)
|
||||
self.nova_mock.return_value.get_server.return_value = server
|
||||
self.test_driver.set_power_state(
|
||||
'zzzz-yyyy-xxxx', 'ForceRestart')
|
||||
compute = self.nova_mock.return_value.compute
|
||||
compute.reboot_server.assert_called_once_with(
|
||||
'zzzz-yyyy-xxxx', reboot_type='HARD')
|
||||
|
||||
def test_get_boot_device(self):
|
||||
server = mock.Mock(id='zzzz-yyyy-xxxx')
|
||||
self.nova_mock.return_value.get_server.return_value = server
|
||||
|
||||
boot_device = self.test_driver.get_boot_device('zzzz-yyyy-xxxx')
|
||||
|
||||
self.assertEqual('Pxe', boot_device)
|
||||
get_server_metadata = (
|
||||
self.nova_mock.return_value.compute.get_server_metadata)
|
||||
get_server_metadata.assert_called_once_with(server.id)
|
||||
|
||||
def test_set_boot_device(self):
|
||||
server = mock.Mock(id='zzzz-yyyy-xxxx')
|
||||
self.nova_mock.return_value.get_server.return_value = server
|
||||
|
||||
compute = self.nova_mock.return_value.compute
|
||||
set_server_metadata = compute.set_server_metadata
|
||||
|
||||
self.test_driver.set_boot_device('zzzz-yyyy-xxxx', 'Pxe')
|
||||
|
||||
set_server_metadata.assert_called_once_with(
|
||||
'zzzz-yyyy-xxxx', **{'libvirt:pxe-first': '1'}
|
||||
)
|
||||
|
||||
def test_get_boot_mode(self):
|
||||
image = mock.Mock(hw_firmware_type='bios')
|
||||
nova_mock.return_value.image.find_image.return_value = image
|
||||
self.nova_mock.return_value.image.find_image.return_value = image
|
||||
|
||||
response = self.app.get('/redfish/v1/Systems/xxxx-yyyy-zzzz')
|
||||
boot_mode = self.test_driver.get_boot_mode('zzzz-yyyy-xxxx')
|
||||
|
||||
self.assertEqual(200, response.status_code)
|
||||
self.assertEqual('xxxx-yyyy-zzzz', response.json['Id'])
|
||||
self.assertEqual('zzzz-yyyy-xxxx', response.json['UUID'])
|
||||
self.assertEqual('On', response.json['PowerState'])
|
||||
self.assertEqual(
|
||||
response.json['MemorySummary']['TotalSystemMemoryGiB'], 1)
|
||||
self.assertEqual(2, response.json['ProcessorSummary']['Count'])
|
||||
self.assertEqual(
|
||||
'Pxe', response.json['Boot']['BootSourceOverrideTarget'])
|
||||
self.assertEqual(
|
||||
'Legacy', response.json['Boot']['BootSourceOverrideMode'])
|
||||
self.assertEqual('Legacy', boot_mode)
|
||||
|
||||
def test_system_resource_patch(self, nova_mock):
|
||||
nova_conn_mock = nova_mock.return_value
|
||||
server = mock.Mock(power_state=0)
|
||||
nova_conn_mock.get_server.return_value = server
|
||||
|
||||
data = {'Boot': {'BootSourceOverrideTarget': 'Cd'}}
|
||||
response = self.app.patch('/redfish/v1/Systems/xxxx-yyyy-zzzz',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
|
||||
nova_conn_mock.compute.set_server_metadata.assert_called_once_with(
|
||||
server.id, **{'libvirt:pxe-first': ''})
|
||||
|
||||
def test_system_reset_action_on(self, nova_mock):
|
||||
nova_conn_mock = nova_mock.return_value
|
||||
server = mock.Mock(power_state=0)
|
||||
nova_conn_mock.get_server.return_value = server
|
||||
|
||||
data = {'ResetType': 'On'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
nova_conn_mock.compute.start_server.assert_called_once_with(server.id)
|
||||
|
||||
def test_system_reset_action_forceon(self, nova_mock):
|
||||
nova_conn_mock = nova_mock.return_value
|
||||
server = mock.Mock(power_state=0)
|
||||
nova_conn_mock.get_server.return_value = server
|
||||
|
||||
data = {'ResetType': 'ForceOn'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
nova_conn_mock.compute.start_server.assert_called_once_with(server.id)
|
||||
|
||||
def test_system_reset_action_forceoff(self, nova_mock):
|
||||
nova_conn_mock = nova_mock.return_value
|
||||
server = mock.Mock(power_state=1)
|
||||
nova_conn_mock.get_server.return_value = server
|
||||
|
||||
data = {'ResetType': 'ForceOff'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
nova_conn_mock.compute.stop_server.assert_called_once_with(server.id)
|
||||
|
||||
def test_system_reset_action_shutdown(self, nova_mock):
|
||||
nova_conn_mock = nova_mock.return_value
|
||||
server = mock.Mock(power_state=1)
|
||||
nova_conn_mock.get_server.return_value = server
|
||||
|
||||
data = {'ResetType': 'GracefulShutdown'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
nova_conn_mock.compute.stop_server.assert_called_once_with(server.id)
|
||||
|
||||
def test_system_reset_action_restart(self, nova_mock):
|
||||
nova_conn_mock = nova_mock.return_value
|
||||
server = mock.Mock(power_state=1)
|
||||
nova_conn_mock.get_server.return_value = server
|
||||
|
||||
data = {'ResetType': 'GracefulRestart'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
nova_conn_mock.compute.reboot_server.assert_called_once_with(
|
||||
server.id, reboot_type='SOFT')
|
||||
|
||||
def test_system_reset_action_forcerestart(self, nova_mock):
|
||||
nova_conn_mock = nova_mock.return_value
|
||||
server = mock.Mock(power_state=1)
|
||||
nova_conn_mock.get_server.return_value = server
|
||||
|
||||
data = {'ResetType': 'ForceRestart'}
|
||||
response = self.app.post(
|
||||
'/redfish/v1/Systems/xxxx-yyyy-zzzz/Actions/ComputerSystem.Reset',
|
||||
json=data)
|
||||
self.assertEqual(204, response.status_code)
|
||||
nova_conn_mock.compute.reboot_server.assert_called_once_with(
|
||||
server.id, reboot_type='HARD')
|
||||
|
||||
def test_get_bios(self, nova_mock):
|
||||
test_driver = OpenStackDriver('fake-cloud')
|
||||
def test_set_boot_mode(self):
|
||||
self.assertRaises(
|
||||
NotImplementedError,
|
||||
test_driver.get_bios, 'xxx-yyy-zzz')
|
||||
FishyError, self.test_driver.set_boot_mode,
|
||||
'zzzz-yyyy-xxxx', 'Legacy')
|
||||
|
||||
def test_set_bios(self, nova_mock):
|
||||
test_driver = OpenStackDriver('fake-cloud')
|
||||
def test_get_total_memory(self):
|
||||
flavor = mock.Mock(ram=1024)
|
||||
self.nova_mock.return_value.get_flavor.return_value = flavor
|
||||
|
||||
memory = self.test_driver.get_total_memory('zzzz-yyyy-xxxx')
|
||||
|
||||
self.assertEqual(1, memory)
|
||||
|
||||
def test_get_total_cpus(self):
|
||||
flavor = mock.Mock(vcpus=2)
|
||||
self.nova_mock.return_value.get_flavor.return_value = flavor
|
||||
|
||||
cpus = self.test_driver.get_total_cpus('zzzz-yyyy-xxxx')
|
||||
|
||||
self.assertEqual(2, cpus)
|
||||
|
||||
def test_get_bios(self):
|
||||
self.assertRaises(
|
||||
NotImplementedError,
|
||||
test_driver.set_bios,
|
||||
'xxx-yyy-zzz',
|
||||
{'attribute 1': 'value 1'})
|
||||
NotImplementedError, self.test_driver.get_bios, 'zzzz-yyyy-xxxx')
|
||||
|
||||
def test_reset_bios(self, nova_mock):
|
||||
test_driver = OpenStackDriver('fake-cloud')
|
||||
def test_set_bios(self):
|
||||
self.assertRaises(
|
||||
NotImplementedError,
|
||||
test_driver.reset_bios,
|
||||
'xxx-yyy-zzz')
|
||||
NotImplementedError, self.test_driver.set_bios,
|
||||
'zzzz-yyyy-xxxx', {})
|
||||
|
||||
def test_get_nics(self, nova_mock):
|
||||
def test_reset_bios(self):
|
||||
self.assertRaises(
|
||||
NotImplementedError, self.test_driver.reset_bios, 'zzzz-yyyy-xxxx')
|
||||
|
||||
def test_get_nics(self):
|
||||
addresses = Munch(
|
||||
{u'public': [
|
||||
Munch({u'OS-EXT-IPS-MAC:mac_addr': u'fa:16:3e:46:e3:ac',
|
||||
|
@ -205,24 +201,22 @@ class EmulatorTestCase(base.BaseTestCase):
|
|||
u'addr': u'10.0.0.10',
|
||||
u'OS-EXT-IPS:type': u'fixed'})]})
|
||||
server = mock.Mock(addresses=addresses)
|
||||
nova_mock.return_value.get_server.return_value = server
|
||||
self.nova_mock.return_value.get_server.return_value = server
|
||||
|
||||
test_driver = OpenStackDriver('fake-cloud')
|
||||
nics = test_driver.get_nics('xxxx-yyyy-zzzz')
|
||||
nics = self.test_driver.get_nics('xxxx-yyyy-zzzz')
|
||||
self.assertEqual([{'id': 'fa:16:3e:22:18:31',
|
||||
'mac': 'fa:16:3e:22:18:31'},
|
||||
{'id': 'fa:16:3e:46:e3:ac',
|
||||
'mac': 'fa:16:3e:46:e3:ac'}],
|
||||
sorted(nics, key=lambda k: k['id']))
|
||||
|
||||
def test_get_nics_empty(self, nova_mock):
|
||||
def test_get_nics_empty(self):
|
||||
server = mock.Mock(addresses=None)
|
||||
nova_mock.return_value.get_server.return_value = server
|
||||
test_driver = OpenStackDriver('fake-cloud')
|
||||
nics = test_driver.get_nics('xxxx-yyyy-zzzz')
|
||||
self.nova_mock.return_value.get_server.return_value = server
|
||||
nics = self.test_driver.get_nics('xxxx-yyyy-zzzz')
|
||||
self.assertEqual(set(), nics)
|
||||
|
||||
def test_get_nics_error(self, nova_mock):
|
||||
def test_get_nics_error(self):
|
||||
addresses = Munch(
|
||||
{u'public': [
|
||||
Munch({u'version': 6,
|
||||
|
@ -239,9 +233,8 @@ class EmulatorTestCase(base.BaseTestCase):
|
|||
u'addr': u'10.0.0.10',
|
||||
u'OS-EXT-IPS:type': u'fixed'})]})
|
||||
server = mock.Mock(addresses=addresses)
|
||||
nova_mock.return_value.get_server.return_value = server
|
||||
test_driver = OpenStackDriver('fake-cloud')
|
||||
nics = test_driver.get_nics('xxxx-yyyy-zzzz')
|
||||
self.nova_mock.return_value.get_server.return_value = server
|
||||
nics = self.test_driver.get_nics('xxxx-yyyy-zzzz')
|
||||
self.assertEqual([{'id': 'fa:16:3e:22:18:31',
|
||||
'mac': 'fa:16:3e:22:18:31'}],
|
||||
nics)
|
||||
|
|
Loading…
Reference in New Issue