def setUp(self): super(TestLeasesController, self).setUp() self.test_lease = lease_obj.Lease( start_time=datetime.datetime(2016, 7, 16, 19, 20, 30), end_time=datetime.datetime(2016, 8, 16, 19, 20, 30), uuid=uuidutils.generate_uuid(), resource_type='test_node', resource_uuid='111', project_id='lesseeid', owner_id='ownerid', parent_lease_uuid=None) self.test_lease_1 = lease_obj.Lease( start_time=datetime.datetime(2016, 7, 16, 19, 20, 30), end_time=datetime.datetime(2016, 8, 16, 19, 20, 30), uuid=uuidutils.generate_uuid(), resource_type='ironic_node', resource_uuid='222', project_id='lesseeid', owner_id='ownerid', parent_lease_uuid=None) self.test_lease_with_parent = lease_obj.Lease( start_time=datetime.datetime(2016, 7, 16, 19, 20, 30), end_time=datetime.datetime(2016, 8, 16, 19, 20, 30), uuid=uuidutils.generate_uuid(), resource_type='test_node', resource_uuid='111', project_id='lesseeid', owner_id='ownerid', parent_lease_uuid='parent-lease-uuid')
def setUp(self): super(TestCheckResourceLeaseAdminUtils, self).setUp() self.test_lease = lease.Lease( uuid=uuidutils.generate_uuid(), start_time=datetime.datetime(2016, 7, 16, 19, 20, 30), end_time=datetime.datetime(2016, 8, 16, 19, 20, 30), parent_lease_uuid=None) self.test_lease_with_parent = lease.Lease( uuid=uuidutils.generate_uuid(), start_time=datetime.datetime(2016, 7, 16, 19, 20, 30), end_time=datetime.datetime(2016, 8, 16, 19, 20, 30), parent_lease_uuid='parent-lease-uuid')
def claim(self, offer_uuid, new_lease): request = pecan.request.context cdict = request.to_policy_values() offer = utils.check_offer_policy_and_retrieve(request, 'esi_leap:offer:claim', offer_uuid, statuses.AVAILABLE) utils.check_offer_lessee(cdict, offer) lease_dict = new_lease.to_dict() lease_dict['project_id'] = request.project_id lease_dict['uuid'] = uuidutils.generate_uuid() lease_dict['offer_uuid'] = offer_uuid lease_dict['resource_type'] = offer.resource_type lease_dict['resource_uuid'] = offer.resource_uuid lease_dict['owner_id'] = offer.project_id if offer.parent_lease_uuid is not None: lease_dict['parent_lease_uuid'] = offer.parent_lease_uuid if 'start_time' not in lease_dict: lease_dict['start_time'] = datetime.datetime.now() if 'end_time' not in lease_dict: q = offer.get_first_availability(lease_dict['start_time']) if q is None: lease_dict['end_time'] = offer.end_time else: lease_dict['end_time'] = q.start_time new_lease = lease_obj.Lease(**lease_dict) new_lease.create(request) return lease.Lease(**utils.lease_get_dict_with_added_info(new_lease))
def test__expire_leases_error(self, mock_ga, mock_utcnow, mock_expire, mock_save): error_lease = lease.Lease( offer_uuid=self.test_offer.uuid, name='c', uuid=uuidutils.generate_uuid(), project_id='lesseeid', status=statuses.CREATED, start_time=datetime.datetime(3000, 7, 16), end_time=datetime.datetime(4000, 7, 16), ) mock_ga.return_value = [error_lease] mock_utcnow.return_value = datetime.datetime(5000, 7, 16) mock_expire.side_effect = Exception('whoops') s = ManagerService() s._expire_leases() mock_expire.assert_called_once() mock_ga.assert_called_once_with( { 'status': [ statuses.ACTIVE, statuses.CREATED, statuses.WAIT_EXPIRE, statuses.WAIT_FULFILL ] }, s._context) self.assertEqual(statuses.ERROR, error_lease.status) mock_save.assert_called_once()
def test_destroy(self): lease = lease_obj.Lease(self.context, **self.test_lease_dict) with mock.patch.object(self.db_api, 'lease_destroy', autospec=True) as mock_lease_cancel: lease.destroy() mock_lease_cancel.assert_called_once_with(lease.uuid)
def test_create_with_parent_lease_expired(self, mock_lc, mock_lg, mock_lvca): lease = lease_obj.Lease(self.context, **self.test_lease_create_parent_lease_dict) mock_lg.return_value = self.test_parent_lease_expired self.assertRaises(exception.LeaseNotActive, lease.create) mock_lc.assert_not_called() mock_lg.assert_called_once_with('parent-lease-uuid') mock_lvca.assert_not_called()
def setUp(self): super(TestOfferObject, self).setUp() start = datetime.datetime(2016, 7, 16, 19, 20, 30) self.test_offer_data = { 'id': 27, 'name': 'o', 'uuid': uuidutils.generate_uuid(), 'project_id': '0wn5r', 'lessee_id': None, 'resource_type': 'dummy_node', 'resource_uuid': '1718', 'start_time': start, 'end_time': start + datetime.timedelta(days=100), 'status': statuses.AVAILABLE, 'properties': {'floor_price': 3}, 'parent_lease_uuid': None, 'created_at': None, 'updated_at': None } self.test_offer_create_data = { 'name': 'o', 'project_id': '0wn5r', 'resource_type': 'dummy_node', 'resource_uuid': '1718', 'start_time': start, 'end_time': start + datetime.timedelta(days=100), 'properties': {'floor_price': 3}, } self.test_offer_create_parent_lease_data = ( self.test_offer_create_data.copy()) self.test_offer_create_parent_lease_data['parent_lease_uuid'] = ( 'parent-lease-uuid') self.test_parent_lease = lease.Lease( uuid=uuidutils.generate_uuid(), status=statuses.ACTIVE) self.test_parent_lease_expired = lease.Lease( uuid=uuidutils.generate_uuid(), status=statuses.EXPIRED) self.config(lock_path=tempfile.mkdtemp(), group='oslo_concurrency')
def setUp(self): super(TestLeaseGetDictWithAddedInfoUtils, self).setUp() self.test_lease = lease.Lease( start_time=datetime.datetime(2016, 7, 16, 19, 20, 30), end_time=datetime.datetime(2016, 8, 16, 19, 20, 30), uuid=uuidutils.generate_uuid(), resource_type='test_node', resource_uuid='111', project_id='lesseeid', owner_id='ownerid', parent_lease_uuid=None)
def test_fulfill(self, mock_save, mock_set_lease, mock_ro): lease = lease_obj.Lease(self.context, **self.test_lease_dict) test_node = TestNode('test-node', '12345') mock_ro.return_value = test_node lease.fulfill() mock_ro.assert_called_once() mock_set_lease.assert_called_once() mock_save.assert_called_once() self.assertEqual(lease.status, statuses.ACTIVE)
def test_fulfill_error(self, mock_save, mock_set_lease, mock_ro): lease = lease_obj.Lease(self.context, **self.test_lease_dict) test_node = TestNode('test-node', '12345') mock_ro.return_value = test_node mock_set_lease.side_effect = Exception('bad') lease.fulfill() mock_ro.assert_called_once() mock_set_lease.assert_called_once() mock_save.assert_called_once() self.assertEqual(lease.status, statuses.WAIT_FULFILL)
def test_create(self, mock_lc, mock_og, mock_ova, mock_rva): lease = lease_obj.Lease(self.context, **self.test_lease_create_dict) mock_lc.return_value = self.test_lease_dict lease.create() mock_lc.assert_called_once_with(self.test_lease_create_dict) mock_og.assert_not_called mock_ova.assert_not_called mock_rva.assert_called_once_with(lease.resource_type, lease.resource_uuid, lease.start_time, lease.end_time)
def test_create_with_offer(self, mock_lc, mock_og, mock_ova, mock_rva): lease = lease_obj.Lease(self.context, **self.test_lease_create_offer_dict) mock_lc.return_value = self.test_lease_offer_dict mock_og.return_value = self.test_offer lease.create() mock_lc.assert_called_once_with(self.test_lease_create_offer_dict) mock_og.assert_called_once_with(lease.offer_uuid) mock_ova.assert_called_once_with(self.test_offer, lease.start_time, lease.end_time) mock_rva.assert_not_called
def test_create_with_parent_lease(self, mock_lc, mock_lg, mock_lvca): lease = lease_obj.Lease(self.context, **self.test_lease_create_parent_lease_dict) mock_lc.return_value = self.test_lease_offer_dict mock_lg.return_value = self.test_parent_lease lease.create() mock_lc.assert_called_once_with( self.test_lease_create_parent_lease_dict) mock_lg.assert_called_once_with('parent-lease-uuid') mock_lvca.assert_called_once_with(self.test_parent_lease, lease.start_time, lease.end_time)
def test_create_concurrent_offer_conflict(self): lease = lease_obj.Lease(self.context, **self.test_lease_create_offer_dict) lease2 = lease_obj.Lease(self.context, **self.test_lease_create_offer_dict) lease2.id = 28 with mock.patch.object(self.db_api, 'lease_create', autospec=True) as mock_lease_create: with mock.patch.object(offer_obj.Offer, 'get', autospec=True) as mock_offer_get: with mock.patch.object(self.db_api, 'offer_verify_availability', autospec=True) as mock_ovca: mock_offer_get.return_value = self.test_offer def update_mock(updates): mock_ovca.side_effect = Exception('bad') mock_lease_create.side_effect = update_mock thread = threading.Thread(target=lease.create) thread2 = threading.Thread(target=lease2.create) thread.start() thread2.start() thread.join() thread2.join() assert mock_offer_get.call_count == 2 assert mock_ovca.call_count == 2 mock_lease_create.assert_called_once()
def test_expire_no_expire(self, mock_save, mock_expire_lease, mock_glu, mock_ro): lease = lease_obj.Lease(self.context, **self.test_lease_dict) test_node = TestNode('test-node', '12345') mock_ro.return_value = test_node mock_glu.return_value = 'some-other-lease-uuid' lease.expire() mock_ro.assert_called_once() mock_glu.assert_called_once() mock_expire_lease.assert_not_called() mock_save.assert_called_once() self.assertEqual(lease.status, statuses.EXPIRED)
def test_cancel(self, mock_save, mock_expire_lease, mock_glu, mock_ro, mock_lg, mock_sl): lease = lease_obj.Lease(self.context, **self.test_lease_dict) test_node = TestNode('test-node', '12345') mock_ro.return_value = test_node mock_glu.return_value = lease.uuid lease.cancel() mock_sl.assert_not_called() mock_lg.assert_not_called() mock_ro.assert_called_once() mock_glu.assert_called_once() mock_expire_lease.assert_called_once() mock_save.assert_called_once() self.assertEqual(lease.status, statuses.DELETED)
def test_expire_error(self, mock_save, mock_expire_lease, mock_glu, mock_ro, mock_lg, mock_sl): lease = lease_obj.Lease(self.context, **self.test_lease_dict) test_node = TestNode('test-node', '12345') mock_ro.return_value = test_node mock_glu.return_value = lease.uuid mock_expire_lease.side_effect = Exception('bad') lease.expire() mock_sl.assert_not_called() mock_lg.assert_not_called() mock_ro.assert_called_once() mock_glu.assert_called_once() mock_expire_lease.assert_called_once() mock_save.assert_called_once() self.assertEqual(lease.status, statuses.WAIT_EXPIRE)
def test_create_invalid_time(self): bad_lease = { 'id': 30, 'name': 'bad-lease', 'uuid': '534653c9-880d-4c2d-6d6d-44444444444', 'project_id': 'le55ee_2', 'owner_id': 'ownerid', 'resource_type': 'dummy_node', 'resource_uuid': '1111', 'start_time': self.start_time + datetime.timedelta(days=30), 'end_time': self.start_time + datetime.timedelta(days=20), 'fulfill_time': self.start_time + datetime.timedelta(days=35), 'expire_time': self.start_time + datetime.timedelta(days=40), } lease = lease_obj.Lease(self.context, **bad_lease) self.assertRaises(exception.InvalidTimeRange, lease.create)
def test_save(self): lease = lease_obj.Lease(self.context, **self.test_lease_dict) new_status = statuses.ACTIVE updated_at = datetime.datetime(2006, 12, 11, 0, 0) with mock.patch.object(self.db_api, 'lease_update', autospec=True) as mock_lease_update: updated_lease = self.test_lease_dict.copy() updated_lease['status'] = new_status updated_lease['updated_at'] = updated_at mock_lease_update.return_value = updated_lease lease.status = new_status lease.save(self.context) updated_values = self.test_lease_dict.copy() updated_values['status'] = new_status mock_lease_update.assert_called_once_with(lease.uuid, updated_values) self.assertEqual(self.context, lease._context) self.assertEqual(updated_at, lease.updated_at)
def setUp(self): super(TestService, self).setUp() self.test_offer = offer.Offer(resource_type='test_node', resource_uuid='abc', name='o', uuid=uuidutils.generate_uuid(), status=statuses.AVAILABLE, start_time=datetime.datetime( 3000, 7, 16), end_time=datetime.datetime(4000, 7, 16), project_id='ownerid') self.test_lease = lease.Lease( offer_uuid=self.test_offer.uuid, name='c', uuid=uuidutils.generate_uuid(), project_id='lesseeid', status=statuses.CREATED, start_time=datetime.datetime(3000, 7, 16), end_time=datetime.datetime(4000, 7, 16), )
def post(self, new_lease): request = pecan.request.context cdict = request.to_policy_values() utils.policy_authorize('esi_leap:lease:create', cdict, cdict) lease_dict = new_lease.to_dict() lease_dict['owner_id'] = request.project_id lease_dict['uuid'] = uuidutils.generate_uuid() if 'resource_type' not in lease_dict: lease_dict['resource_type'] = CONF.api.default_resource_type resource = get_resource_object(lease_dict['resource_type'], lease_dict['resource_uuid']) lease_dict['resource_uuid'] = resource.get_resource_uuid() if 'project_id' in lease_dict: lease_dict['project_id'] = keystone.get_project_uuid_from_ident( lease_dict['project_id']) if 'start_time' not in lease_dict: lease_dict['start_time'] = datetime.datetime.now() if 'end_time' not in lease_dict: lease_dict['end_time'] = datetime.datetime.max try: utils.check_resource_admin(cdict, resource, request.project_id) except exception.HTTPResourceForbidden: parent_lease_uuid = utils.check_resource_lease_admin( cdict, resource, request.project_id, lease_dict.get('start_time'), lease_dict.get('end_time')) if parent_lease_uuid is None: raise lease_dict['parent_lease_uuid'] = parent_lease_uuid lease = lease_obj.Lease(**lease_dict) lease.create(request) return Lease(**utils.lease_get_dict_with_added_info(lease))
def setUp(self): super(TestLeaseObject, self).setUp() self.start_time = datetime.datetime(2016, 7, 16, 19, 20, 30) self.test_offer = offer_obj.Offer( id=27, uuid=uuidutils.generate_uuid(), project_id='01d4e6a72f5c408813e02f664cc8c83e', resource_type='dummy_node', resource_uuid='1718', start_time=self.start_time, end_time=self.start_time + datetime.timedelta(days=100), status=statuses.AVAILABLE, properties={'floor_price': 3}, ) self.test_parent_lease = lease_obj.Lease( uuid=uuidutils.generate_uuid(), status=statuses.ACTIVE, ) self.test_parent_lease_expired = lease_obj.Lease( uuid=uuidutils.generate_uuid(), status=statuses.EXPIRED, ) self.test_lease_dict = { 'id': 28, 'name': 'lease', 'uuid': uuidutils.generate_uuid(), 'project_id': 'le55ee', 'owner_id': '0wn3r', 'start_time': self.start_time + datetime.timedelta(days=5), 'end_time': self.start_time + datetime.timedelta(days=10), 'fulfill_time': self.start_time + datetime.timedelta(days=5), 'expire_time': self.start_time + datetime.timedelta(days=10), 'status': statuses.CREATED, 'properties': {}, 'resource_type': 'dummy_node', 'resource_uuid': '1718', 'offer_uuid': None, 'parent_lease_uuid': None, 'created_at': None, 'updated_at': None } self.test_lease_offer_dict = self.test_lease_dict.copy() self.test_lease_offer_dict['offer_uuid'] = self.test_offer.uuid self.test_lease_parent_lease_dict = self.test_lease_dict.copy() self.test_lease_parent_lease_dict['parent_lease_uuid'] = ( 'parent-lease-uuid') self.test_lease_create_dict = { 'name': 'lease_create', 'project_id': 'le55ee', 'owner_id': '0wn3r', 'start_time': self.start_time + datetime.timedelta(days=5), 'end_time': self.start_time + datetime.timedelta(days=10), 'resource_type': 'dummy_node', 'resource_uuid': '1718', } self.test_lease_create_offer_dict = self.test_lease_create_dict.copy() self.test_lease_create_offer_dict['offer_uuid'] = self.test_offer.uuid self.test_lease_create_parent_lease_dict = ( self.test_lease_create_dict.copy()) self.test_lease_create_parent_lease_dict['parent_lease_uuid'] = ( 'parent-lease-uuid') self.config(lock_path=tempfile.mkdtemp(), group='oslo_concurrency')
end_time=end, project_id=owner_ctx.project_id) test_offer_lessee_no_match = offer.Offer(resource_type='test_node', resource_uuid=test_node_1._uuid, name='o', uuid=uuidutils.generate_uuid(), lessee_id='otherlesseeid', status=statuses.EXPIRED, start_time=start, end_time=end, project_id=owner_ctx.project_id) test_lease = lease.Lease(offer_uuid=o_uuid, name='c', uuid=uuidutils.generate_uuid(), project_id=lessee_ctx.project_id, owner_id=owner_ctx.project_id, status=statuses.CREATED) test_lease_2 = lease.Lease(offer_uuid=o_uuid, name='c', uuid=uuidutils.generate_uuid(), project_id=lessee_ctx.project_id, owner_id=owner_ctx.project_id, status=statuses.CREATED) test_lease_3 = lease.Lease(offer_uuid=o_uuid, name='c', uuid=uuidutils.generate_uuid(), project_id=lessee_ctx_2.project_id, owner_id=owner_ctx.project_id,
def test_resource_object(self, mock_gro): lease = lease_obj.Lease(self.context, **self.test_lease_dict) lease.resource_object() mock_gro.assert_called_once_with(lease.resource_type, lease.resource_uuid)