Exemple #1
0
    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')
Exemple #2
0
    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')
Exemple #3
0
    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))
Exemple #4
0
    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()
Exemple #5
0
    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)
Exemple #6
0
    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()
Exemple #7
0
    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')
Exemple #8
0
    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)
Exemple #9
0
    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)
Exemple #10
0
    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)
Exemple #11
0
    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)
Exemple #12
0
    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
Exemple #13
0
    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)
Exemple #14
0
    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()
Exemple #15
0
    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)
Exemple #16
0
    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)
Exemple #17
0
    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)
Exemple #18
0
    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)
Exemple #19
0
    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)
Exemple #20
0
    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),
        )
Exemple #21
0
    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))
Exemple #22
0
    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')
Exemple #23
0
                                      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,
Exemple #24
0
 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)