def test_update_project_limits(self):
        tenant = doubles.make(self.mox,
                              doubles.Tenant,
                              id=self.tenant_id,
                              name='old name',
                              description='old description')
        gb = 1024 * 1024 * 1024
        params = {
            u'cpus-limit': 13,
            u'ram-limit': 11 * gb,
            u'instances-limit': 8
        }

        self.fake_client_set.identity_admin \
            .tenants.get(self.tenant_id).AndReturn(tenant)
        self.fake_client_set.compute.quotas.update(self.tenant_id,
                                                   instances=8,
                                                   ram=11 * 1024,
                                                   cores=13)

        projects._network_for_project(self.tenant_id).AndReturn('NET')
        projects._quotaset_for_project(self.tenant_id).AndReturn('QUOTA')
        projects._project_to_view(tenant, 'NET', 'QUOTA')\
                .AndReturn('UPDATED')

        self.mox.ReplayAll()
        data = self.interact(params)
        self.assertEquals(data, 'UPDATED')
    def test_project_creation_works(self):
        self.mox.StubOutWithMock(projects, '_project_to_view')
        self.mox.StubOutWithMock(projects, '_quotaset_for_project')

        networks = self.fake_client_set.compute.networks
        tenants = self.fake_client_set.identity_admin.tenants
        tenant = doubles.make(self.mox,
                              doubles.Tenant,
                              name=self.name,
                              id='PID',
                              description=self.description)

        networks.get(self.net_id).AndReturn(
            doubles.make(self.mox,
                         doubles.Network,
                         label='NETLABEL',
                         id=self.net_id,
                         project_id=None))
        tenants.create(self.name, self.description).AndReturn(tenant)
        networks.associate(self.net_id, tenant.id)

        networks.get(self.net_id).AndReturn('UPDATED NETWORK')
        projects._quotaset_for_project(tenant.id).AndReturn('QUOTA')
        projects._project_to_view(tenant, 'UPDATED NETWORK', 'QUOTA')\
                .AndReturn('REPLY')

        self.mox.ReplayAll()

        data = self.interact()
        self.assertEquals(data, 'REPLY')
    def test_project_creation_works(self):
        self.mox.StubOutWithMock(projects, '_project_to_view')
        self.mox.StubOutWithMock(projects, '_quotaset_for_project')

        networks = self.fake_client_set.compute.networks
        tenants = self.fake_client_set.identity_admin.tenants
        tenant = doubles.make(self.mox, doubles.Tenant,
                              name=self.name, id='PID',
                              description=self.description)

        networks.get(self.net_id).AndReturn(
            doubles.make(self.mox, doubles.Network,
                         label='NETLABEL', id=self.net_id, project_id=None))
        tenants.create(self.name, self.description).AndReturn(tenant)
        networks.associate(self.net_id, tenant.id)

        networks.get(self.net_id).AndReturn('UPDATED NETWORK')
        projects._quotaset_for_project(tenant.id).AndReturn('QUOTA')
        projects._project_to_view(tenant, 'UPDATED NETWORK', 'QUOTA')\
                .AndReturn('REPLY')

        self.mox.ReplayAll()

        data = self.interact()
        self.assertEquals(data, 'REPLY')
    def test_get_all_projects(self):
        tenants = (
            doubles.make(self.mox, doubles.Tenant, name=u'tnt1', id=u't1'),
            doubles.make(self.mox, doubles.Tenant, name=u'tnt2', id=u't2'),
            doubles.make(self.mox, doubles.Tenant,
                         name=u'systenant', id=u'SYSTENANT_ID'))
        nets = (
            self.net(label=u'net2', id=u'netid2', project_id=u't2'),
            self.net(label=u'net_', id=u'netid_', project_id=None),  # unused
            self.net(label=u'net1', id=u'netid1', project_id=u't1'))

        self.tm_mock.list().AndReturn(tenants)
        self.nm_mock.list().AndReturn(nets)
        projects._quotaset_for_project(u't1').AndReturn('QUOTA1')
        projects._project_to_view(tenants[0], nets[2], 'QUOTA1')\
                .AndReturn('PROJECT1')

        projects._quotaset_for_project(u't2').AndReturn('QUOTA2')
        projects._project_to_view(tenants[1], nets[0], 'QUOTA2')\
                .AndReturn('PROJECT2')

        expected = {
            u'collection': {
                u'name': u'projects',
                u'size': 2
            },
            u'projects': [ 'PROJECT1', 'PROJECT2' ]
        }

        self.mox.ReplayAll()

        rv = self.client.get('/v1/projects/')
        data = self.check_and_parse_response(rv)
        self.assertEquals(data, expected)
    def test_get_project(self):
        tenant = doubles.make(self.mox, doubles.Tenant,
                              name=u'name', id=u'pid')

        self.tm_mock.find(id=u'pid').AndReturn(tenant)
        projects._quotaset_for_project(u'pid').AndReturn('QUOTA')
        projects._network_for_project(u'pid').AndReturn('FAKE_NETWORK')
        projects._project_to_view(tenant, 'FAKE_NETWORK', 'QUOTA') \
                .AndReturn('FAKE_PROJECT')

        self.mox.ReplayAll()

        rv = self.client.get('/v1/projects/pid')
        data = self.check_and_parse_response(rv)
        self.assertEquals(data, 'FAKE_PROJECT')
    def test_get_project(self):
        tenant = doubles.make(self.mox,
                              doubles.Tenant,
                              name=u'name',
                              id=u'pid')

        self.tm_mock.find(id=u'pid').AndReturn(tenant)
        projects._quotaset_for_project(u'pid').AndReturn('QUOTA')
        projects._network_for_project(u'pid').AndReturn('FAKE_NETWORK')
        projects._project_to_view(tenant, 'FAKE_NETWORK', 'QUOTA') \
                .AndReturn('FAKE_PROJECT')

        self.mox.ReplayAll()

        rv = self.client.get('/v1/projects/pid')
        data = self.check_and_parse_response(rv)
        self.assertEquals(data, 'FAKE_PROJECT')
    def test_quotaset_for_project(self):
        project_id = 'PID'
        self.fake_client_set.compute.quotas.get(project_id).AndReturn('QUOTA')

        self.mox.ReplayAll()
        with self.app.test_request_context():
            self.install_fake_auth()
            quota = projects._quotaset_for_project(project_id)
        self.assertEquals('QUOTA', quota)
    def test_quotaset_for_project(self):
        project_id = 'PID'
        self.fake_client_set.compute.quotas.get(project_id).AndReturn('QUOTA')

        self.mox.ReplayAll()
        with self.app.test_request_context():
            self.install_fake_auth()
            quota = projects._quotaset_for_project(project_id)
        self.assertEquals('QUOTA', quota)
    def test_update_project_updates(self):
        tenant = doubles.make(self.mox, doubles.Tenant,
                              id=self.tenant_id, name='old name',
                              description='old description')

        updated = doubles.make(self.mox, doubles.Tenant,
                               id=self.tenant_id, name='old name',
                               description='new description')

        self.fake_client_set.identity_admin \
            .tenants.get(self.tenant_id).AndReturn(tenant)
        tenant.update(description=updated.description).AndReturn(updated)
        projects._network_for_project(self.tenant_id).AndReturn('NET')
        projects._quotaset_for_project(self.tenant_id).AndReturn('QUOTA')
        projects._project_to_view(updated, 'NET', 'QUOTA')\
                .AndReturn('UPDATED')

        self.mox.ReplayAll()
        data = self.interact({'description': updated.description})
        self.assertEquals(data, 'UPDATED')
    def test_get_all_projects(self):
        tenants = (doubles.make(self.mox,
                                doubles.Tenant,
                                name=u'tnt1',
                                id=u't1'),
                   doubles.make(self.mox,
                                doubles.Tenant,
                                name=u'tnt2',
                                id=u't2'),
                   doubles.make(self.mox,
                                doubles.Tenant,
                                name=u'systenant',
                                id=u'SYSTENANT_ID'))
        nets = (
            self.net(label=u'net2', id=u'netid2', project_id=u't2'),
            self.net(label=u'net_', id=u'netid_', project_id=None),  # unused
            self.net(label=u'net1', id=u'netid1', project_id=u't1'))

        self.tm_mock.list().AndReturn(tenants)
        self.nm_mock.list().AndReturn(nets)
        projects._quotaset_for_project(u't1').AndReturn('QUOTA1')
        projects._project_to_view(tenants[0], nets[2], 'QUOTA1')\
                .AndReturn('PROJECT1')

        projects._quotaset_for_project(u't2').AndReturn('QUOTA2')
        projects._project_to_view(tenants[1], nets[0], 'QUOTA2')\
                .AndReturn('PROJECT2')

        expected = {
            u'collection': {
                u'name': u'projects',
                u'size': 2
            },
            u'projects': ['PROJECT1', 'PROJECT2']
        }

        self.mox.ReplayAll()

        rv = self.client.get('/v1/projects/')
        data = self.check_and_parse_response(rv)
        self.assertEquals(data, expected)
    def test_update_project_updates(self):
        tenant = doubles.make(self.mox,
                              doubles.Tenant,
                              id=self.tenant_id,
                              name='old name',
                              description='old description')

        updated = doubles.make(self.mox,
                               doubles.Tenant,
                               id=self.tenant_id,
                               name='old name',
                               description='new description')

        self.fake_client_set.identity_admin \
            .tenants.get(self.tenant_id).AndReturn(tenant)
        tenant.update(description=updated.description).AndReturn(updated)
        projects._network_for_project(self.tenant_id).AndReturn('NET')
        projects._quotaset_for_project(self.tenant_id).AndReturn('QUOTA')
        projects._project_to_view(updated, 'NET', 'QUOTA')\
                .AndReturn('UPDATED')

        self.mox.ReplayAll()
        data = self.interact({'description': updated.description})
        self.assertEquals(data, 'UPDATED')
    def test_update_project_limits(self):
        tenant = doubles.make(self.mox, doubles.Tenant,
                              id=self.tenant_id, name='old name',
                              description='old description')
        gb = 1024 * 1024 * 1024
        params = {
            u'cpus-limit': 13,
            u'ram-limit': 11 * gb,
            u'instances-limit': 8
        }

        self.fake_client_set.identity_admin \
            .tenants.get(self.tenant_id).AndReturn(tenant)
        self.fake_client_set.compute.quotas.update(self.tenant_id,
            instances=8, ram=11 * 1024, cores=13)

        projects._network_for_project(self.tenant_id).AndReturn('NET')
        projects._quotaset_for_project(self.tenant_id).AndReturn('QUOTA')
        projects._project_to_view(tenant, 'NET', 'QUOTA')\
                .AndReturn('UPDATED')

        self.mox.ReplayAll()
        data = self.interact(params)
        self.assertEquals(data, 'UPDATED')