Files
python-blazarclient/blazarclient/tests/v1/shell_commands/test_leases.py
Pierre Riteau 1db6cb37c6 Remove use of mock.seal()
The seal function was introduced in unittest.mock in Python 3.7. It is
preventing us from using unittest.mock instead of mock.

We can restore it when the minimum runtime is Python 3.7 or later.

Change-Id: Ieb26af07da0c4084fb8c4ea2c4d461eb5595f583
2021-02-23 15:10:51 +01:00

388 lines
13 KiB
Python

# Copyright (c) 2017 NTT Corp.
#
# 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.
import argparse
from datetime import datetime
import mock
from blazarclient import exception
from blazarclient import shell
from blazarclient import tests
from blazarclient.v1.shell_commands import leases
mock_time = mock.Mock(return_value=datetime(2020, 6, 8))
FIRST_LEASE = 'd1e43d6d-8f6f-4c2e-b0a9-2982b39dc698'
SECOND_LEASE = '424d21c3-45a2-448a-81ad-32eddc888375'
@mock.patch('blazarclient.v1.shell_commands.leases._utc_now', mock_time)
class CreateLeaseTestCase(tests.TestCase):
def setUp(self):
super(CreateLeaseTestCase, self).setUp()
self.cl = leases.CreateLease(shell.BlazarShell(), mock.Mock())
def test_args2body_correct_phys_res_params(self):
args = argparse.Namespace(
start='2020-07-24 20:00',
end='2020-08-09 22:30',
before_end='2020-08-09 21:30',
events=[],
name='lease-test',
reservations=[],
physical_reservations=[
'min=1,'
'max=2,'
'hypervisor_properties='
'["and", [">=", "$vcpus", "2"], '
'[">=", "$memory_mb", "2048"]],'
'resource_properties='
'["==", "$extra_key", "extra_value"],'
'before_end=default'
]
)
expected = {
'start': '2020-07-24 20:00',
'end': '2020-08-09 22:30',
'before_end': '2020-08-09 21:30',
'events': [],
'name': 'lease-test',
'reservations': [
{
'min': 1,
'max': 2,
'hypervisor_properties':
'["and", [">=", "$vcpus", "2"], '
'[">=", "$memory_mb", "2048"]]',
'resource_properties':
'["==", "$extra_key", "extra_value"]',
'resource_type': 'physical:host',
'before_end': 'default'
}
]
}
self.assertDictEqual(self.cl.args2body(args), expected)
def test_args2body_incorrect_phys_res_params(self):
args = argparse.Namespace(
start='2020-07-24 20:00',
end='2020-08-09 22:30',
before_end='2020-08-09 21:30',
events=[],
name='lease-test',
reservations=[],
physical_reservations=[
'incorrect_param=1,'
'min=1,'
'max=2,'
'hypervisor_properties='
'["and", [">=", "$vcpus", "2"], '
'[">=", "$memory_mb", "2048"]],'
'resource_properties='
'["==", "$extra_key", "extra_value"]'
]
)
self.assertRaises(exception.IncorrectLease,
self.cl.args2body,
args)
def test_args2body_duplicated_phys_res_params(self):
args = argparse.Namespace(
start='2020-07-24 20:00',
end='2020-08-09 22:30',
before_end='2020-08-09 21:30',
events=[],
name='lease-test',
reservations=[],
physical_reservations=[
'min=1,'
'min=1,'
'max=2,'
'hypervisor_properties='
'["and", [">=", "$vcpus", "2"], '
'[">=", "$memory_mb", "2048"]],'
'resource_properties='
'["==", "$extra_key", "extra_value"]'
]
)
self.assertRaises(exception.DuplicatedLeaseParameters,
self.cl.args2body,
args)
def test_args2body_correct_instance_res_params(self):
args = argparse.Namespace(
start='2020-07-24 20:00',
end='2020-08-09 22:30',
before_end='2020-08-09 21:30',
events=[],
name='lease-test',
reservations=[
'vcpus=4,'
'memory_mb=1024,'
'disk_gb=10,'
'amount=2,'
'affinity=True,'
'resource_properties='
'["==", "$extra_key", "extra_value"],'
'resource_type=virtual:instance'
],
physical_reservations=[
'min=1,'
'max=2,'
'hypervisor_properties='
'["and", [">=", "$vcpus", "2"], '
'[">=", "$memory_mb", "2048"]],'
'resource_properties='
'["==", "$extra_key", "extra_value"],'
'before_end=default'
]
)
expected = {
'start': '2020-07-24 20:00',
'end': '2020-08-09 22:30',
'before_end': '2020-08-09 21:30',
'events': [],
'name': 'lease-test',
'reservations': [
{
'min': 1,
'max': 2,
'hypervisor_properties':
'["and", [">=", "$vcpus", "2"], '
'[">=", "$memory_mb", "2048"]]',
'resource_properties':
'["==", "$extra_key", "extra_value"]',
'resource_type': 'physical:host',
'before_end': 'default'
},
{
'vcpus': 4,
'memory_mb': 1024,
'disk_gb': 10,
'amount': 2,
'affinity': 'True',
'resource_properties':
'["==", "$extra_key", "extra_value"]',
'resource_type': 'virtual:instance'
}
]
}
self.assertDictEqual(self.cl.args2body(args), expected)
def test_args2body_start_now(self):
args = argparse.Namespace(
start='now',
end='2030-08-09 22:30',
before_end='2030-08-09 21:30',
events=[],
name='lease-test',
reservations=[],
physical_reservations=[
'min=1,'
'max=2,'
'hypervisor_properties='
'["and", [">=", "$vcpus", "2"], '
'[">=", "$memory_mb", "2048"]],'
'resource_properties='
'["==", "$extra_key", "extra_value"],'
'before_end=default'
]
)
expected = {
'start': 'now',
'end': '2030-08-09 22:30',
'before_end': '2030-08-09 21:30',
'events': [],
'name': 'lease-test',
'reservations': [
{
'min': 1,
'max': 2,
'hypervisor_properties':
'["and", [">=", "$vcpus", "2"], '
'[">=", "$memory_mb", "2048"]]',
'resource_properties':
'["==", "$extra_key", "extra_value"]',
'resource_type': 'physical:host',
'before_end': 'default'
}
]
}
self.assertDictEqual(self.cl.args2body(args), expected)
class UpdateLeaseTestCase(tests.TestCase):
def setUp(self):
super(UpdateLeaseTestCase, self).setUp()
self.cl = leases.UpdateLease(shell.BlazarShell(), mock.Mock())
def test_args2body_time_params(self):
args = argparse.Namespace(
name=None,
prolong_for='1h',
reduce_by=None,
end_date=None,
defer_by=None,
advance_by=None,
start_date=None,
reservation=None
)
expected = {
'prolong_for': '1h',
}
self.assertDictEqual(self.cl.args2body(args), expected)
def test_args2body_host_reservation_params(self):
args = argparse.Namespace(
name=None,
prolong_for=None,
reduce_by=None,
end_date=None,
defer_by=None,
advance_by=None,
start_date=None,
reservation=[
'id=798379a6-194c-45dc-ba34-1b5171d5552f,'
'max=3,'
'hypervisor_properties='
'["and", [">=", "$vcpus", "4"], '
'[">=", "$memory_mb", "8192"]],'
'resource_properties='
'["==", "$extra_key", "extra_value"]'
]
)
expected = {
'reservations': [
{
'id': '798379a6-194c-45dc-ba34-1b5171d5552f',
'max': 3,
'hypervisor_properties':
'["and", [">=", "$vcpus", "4"], '
'[">=", "$memory_mb", "8192"]]',
'resource_properties':
'["==", "$extra_key", "extra_value"]'
}
]
}
self.assertDictEqual(self.cl.args2body(args), expected)
def test_args2body_instance_reservation_params(self):
args = argparse.Namespace(
name=None,
prolong_for=None,
reduce_by=None,
end_date=None,
defer_by=None,
advance_by=None,
start_date=None,
reservation=[
'id=798379a6-194c-45dc-ba34-1b5171d5552f,'
'vcpus=3,memory_mb=1024,disk_gb=20,'
'amount=4,affinity=False'
]
)
expected = {
'reservations': [
{
'id': '798379a6-194c-45dc-ba34-1b5171d5552f',
'vcpus': 3,
'memory_mb': 1024,
'disk_gb': 20,
'amount': 4,
'affinity': 'False'
}
]
}
self.assertDictEqual(self.cl.args2body(args), expected)
class ShowLeaseTestCase(tests.TestCase):
def create_show_command(self):
mock_lease_manager = mock.Mock()
mock_client = mock.Mock()
mock_client.lease = mock_lease_manager
blazar_shell = shell.BlazarShell()
blazar_shell.client = mock_client
return (leases.ShowLease(blazar_shell, mock.Mock()),
mock_lease_manager)
def test_show_lease(self):
show_lease, lease_manager = self.create_show_command()
lease_manager.get.return_value = {'id': FIRST_LEASE}
args = argparse.Namespace(id=FIRST_LEASE)
expected = [('id',), (FIRST_LEASE,)]
self.assertEqual(show_lease.get_data(args), expected)
lease_manager.get.assert_called_once_with(FIRST_LEASE)
def test_show_lease_by_name(self):
show_lease, lease_manager = self.create_show_command()
lease_manager.list.return_value = [
{'id': FIRST_LEASE, 'name': 'first-lease'},
{'id': SECOND_LEASE, 'name': 'second-lease'},
]
lease_manager.get.return_value = {'id': SECOND_LEASE}
args = argparse.Namespace(id='second-lease')
expected = [('id',), (SECOND_LEASE,)]
self.assertEqual(show_lease.get_data(args), expected)
lease_manager.list.assert_called_once_with()
lease_manager.get.assert_called_once_with(SECOND_LEASE)
class DeleteLeaseTestCase(tests.TestCase):
def create_delete_command(self):
mock_lease_manager = mock.Mock()
mock_client = mock.Mock()
mock_client.lease = mock_lease_manager
blazar_shell = shell.BlazarShell()
blazar_shell.client = mock_client
return (leases.DeleteLease(blazar_shell, mock.Mock()),
mock_lease_manager)
def test_delete_lease(self):
delete_lease, lease_manager = self.create_delete_command()
lease_manager.delete.return_value = None
args = argparse.Namespace(id=FIRST_LEASE)
delete_lease.run(args)
lease_manager.delete.assert_called_once_with(FIRST_LEASE)
def test_delete_lease_by_name(self):
delete_lease, lease_manager = self.create_delete_command()
lease_manager.list.return_value = [
{'id': FIRST_LEASE, 'name': 'first-lease'},
{'id': SECOND_LEASE, 'name': 'second-lease'},
]
lease_manager.delete.return_value = None
args = argparse.Namespace(id='second-lease')
delete_lease.run(args)
lease_manager.list.assert_called_once_with()
lease_manager.delete.assert_called_once_with(SECOND_LEASE)