Exemple #1
0
 def test_usage(self):
     now = timezone.now()
     usage_obj = api.nova.Usage(self.usages.first())
     quotas = self.quota_usages.first()
     api.keystone.tenant_list(IsA(http.HttpRequest), admin=True) \
                 .AndReturn(self.tenants.list())
     api.usage_list(IsA(http.HttpRequest),
                   datetime.datetime(now.year, now.month, 1, 0, 0, 0),
                   Func(usage.almost_now)) \
                   .AndReturn([usage_obj])
     api.nova.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quotas)
     self.mox.ReplayAll()
     res = self.client.get(reverse('horizon:admin:overview:index'))
     self.assertTemplateUsed(res, 'admin/overview/usage.html')
     self.assertTrue(isinstance(res.context['usage'], usage.GlobalUsage))
     self.assertContains(
         res, '<td class="sortable normal_column">test_tenant'
         '</td>'
         '<td class="sortable normal_column">%s</td>'
         '<td class="sortable normal_column">%s</td>'
         '<td class="sortable normal_column">%s</td>'
         '<td class="sortable normal_column">%.2f</td>'
         '<td class="sortable normal_column">%.2f</td>' %
         (usage_obj.vcpus, usage_obj.disk_gb_hours,
          mbformat(usage_obj.memory_mb), usage_obj.vcpu_hours,
          usage_obj.total_local_gb_usage))
Exemple #2
0
 def test_usage_csv(self):
     now = timezone.now()
     usage_obj = [api.nova.NovaUsage(u) for u in self.usages.list()]
     api.keystone.tenant_list(IsA(http.HttpRequest)) \
                 .AndReturn([self.tenants.list(), False])
     api.nova.usage_list(IsA(http.HttpRequest),
                         datetime.datetime(now.year, now.month, 1, 0, 0, 0),
                         Func(usage.almost_now)) \
         .AndReturn(usage_obj)
     api.nova.tenant_absolute_limits(IsA(http.HttpRequest))\
         .AndReturn(self.limits['absolute'])
     self.mox.ReplayAll()
     csv_url = reverse('horizon:admin:overview:index') + "?format=csv"
     res = self.client.get(csv_url)
     self.assertTemplateUsed(res, 'admin/overview/usage.csv')
     self.assertTrue(isinstance(res.context['usage'], usage.GlobalUsage))
     hdr = 'Project Name,VCPUs,Ram (MB),Disk (GB),Usage (Hours)'
     self.assertContains(res, '%s\r\n' % (hdr))
     for obj in usage_obj:
         row = u'{0},{1},{2},{3},{4:.2f}\r\n'.format(obj.project_name,
                                                     obj.vcpus,
                                                     obj.memory_mb,
                                                     obj.disk_gb_hours,
                                                     obj.vcpu_hours)
     self.assertContains(res, row)
def test_BaseAPI_put_object(mox):
    """Test the operation of put_object."""
    def validate_header(hdrs):
        assert hdrs['Content-Type'] == 'application/json'
        return True

    def validate_data(data):
        real_data = json.loads(data)
        assert real_data == {'a': 1, 'b': 2}
        return True

    sut = BaseAPI(url='https://example.com', token='ABCDEFGH', org_key='A1B2C3D4')
    mox.StubOutWithMock(sut.session, 'http_request')
    sut.session.http_request('PUT', '/path', headers=Func(validate_header), data=Func(validate_data)) \
        .AndReturn(StubResponse({'zyx': 100}))
    mox.ReplayAll()
    rc = sut.put_object('/path', {'a': 1, 'b': 2})
    assert rc.json() == {'zyx': 100}
    mox.VerifyAll()
Exemple #4
0
    def test_unauthorized(self):
        exc = self.exceptions.keystone_unauthorized
        now = timezone.now()
        self.mox.StubOutWithMock(api, 'usage_get')
        api.usage_get(IsA(http.HttpRequest), self.tenant.id,
                      datetime.datetime(now.year, now.month, 1, 0, 0, 0),
                      Func(usage.almost_now)) \
                      .AndRaise(exc)
        self.mox.ReplayAll()

        url = reverse('horizon:project:overview:index')
        res = self.client.get(url)
        self.assertRedirects(res, reverse("login") + "?next=" + url)
Exemple #5
0
    def test_usage_exception(self):
        now = timezone.now()
        self.mox.StubOutWithMock(api, 'usage_get')
        timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
        api.usage_get(IsA(http.HttpRequest),
                      self.tenant.id,
                      timestamp,
                      Func(usage.almost_now)) \
                      .AndRaise(self.exceptions.nova)
        self.mox.ReplayAll()

        res = self.client.get(reverse('horizon:nova:overview:index'))
        self.assertTemplateUsed(res, 'nova/overview/usage.html')
        self.assertEqual(res.context['usage'].usage_list, [])
Exemple #6
0
    def test_usage(self):
        now = timezone.now()
        usage_obj = api.nova.Usage(self.usages.first())
        self.mox.StubOutWithMock(api, 'usage_get')
        api.usage_get(IsA(http.HttpRequest), self.tenant.id,
                      datetime.datetime(now.year, now.month, 1, 0, 0, 0),
                      Func(usage.almost_now)) \
                      .AndReturn(usage_obj)
        self.mox.ReplayAll()

        res = self.client.get(reverse('horizon:nova:overview:index'))
        self.assertTemplateUsed(res, 'nova/overview/usage.html')
        self.assertTrue(isinstance(res.context['usage'], usage.TenantUsage))
        self.assertContains(res, 'form-horizontal')
Exemple #7
0
    def test_usage_exception_usage(self):
        now = timezone.now()
        quota_data = self.quota_usages.first()
        timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
        api.nova.usage_get(IsA(http.HttpRequest),
                           self.tenant.id,
                           timestamp,
                           Func(usage.almost_now)) \
                           .AndRaise(self.exceptions.nova)
        quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
        self.mox.ReplayAll()

        res = self.client.get(reverse('horizon:project:overview:index'))
        self.assertTemplateUsed(res, 'project/overview/usage.html')
        self.assertEqual(res.context['usage'].usage_list, [])
Exemple #8
0
    def test_unauthorized(self):
        exc = self.exceptions.nova_unauthorized
        now = timezone.now()
        self.mox.StubOutWithMock(api.nova, 'usage_get')
        self.mox.StubOutWithMock(api.nova, 'tenant_absolute_limits')
        api.nova.usage_get(IsA(http.HttpRequest), self.tenant.id,
                           datetime.datetime(now.year, now.month, 1, 0, 0, 0),
                           Func(usage.almost_now)) \
                           .AndRaise(exc)
        api.nova.tenant_absolute_limits(IsA(http.HttpRequest))\
                           .AndReturn(self.limits['absolute'])
        self.mox.ReplayAll()

        url = reverse('horizon:project:overview:index')
        res = self.client.get(url)
        self.assertTemplateUsed(res, 'project/overview/usage.html')
        self.assertMessageCount(res, error=1)
        self.assertContains(res, 'Unauthorized:')
Exemple #9
0
    def test_usage_default_tenant(self):
        now = timezone.now()
        usage_obj = api.nova.NovaUsage(self.usages.first())
        self.mox.StubOutWithMock(api.nova, 'usage_get')
        self.mox.StubOutWithMock(api.nova, 'tenant_absolute_limits')
        timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
        api.nova.usage_get(IsA(http.HttpRequest),
                           self.tenant.id,
                           timestamp,
                           Func(usage.almost_now)) \
                           .AndReturn(usage_obj)
        api.nova.tenant_absolute_limits(IsA(http.HttpRequest))\
                           .AndReturn(self.limits['absolute'])
        self.mox.ReplayAll()

        res = self.client.get(reverse('horizon:project:overview:index'))
        self.assertTemplateUsed(res, 'project/overview/usage.html')
        self.assertTrue(isinstance(res.context['usage'], usage.ProjectUsage))
Exemple #10
0
    def test_usage_exception_quota(self):
        now = timezone.now()
        usage_obj = api.nova.NovaUsage(self.usages.first())
        self.mox.StubOutWithMock(api.nova, 'usage_get')
        self.mox.StubOutWithMock(api.nova, 'tenant_absolute_limits')
        timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
        api.nova.usage_get(IsA(http.HttpRequest),
                           self.tenant.id,
                           timestamp,
                           Func(usage.almost_now)) \
                           .AndReturn(usage_obj)
        api.nova.tenant_absolute_limits(IsA(http.HttpRequest))\
                           .AndRaise(self.exceptions.nova)
        self.mox.ReplayAll()

        res = self.client.get(reverse('horizon:project:overview:index'))
        self.assertTemplateUsed(res, 'project/overview/usage.html')
        self.assertEqual(res.context['usage'].quotas, {})
Exemple #11
0
    def test_usage(self):
        now = timezone.now()
        usage_obj = api.nova.NovaUsage(self.usages.first())
        quota_data = self.quota_usages.first()
        project = self.tenants.first()
        api.nova.usage_get(IsA(http.HttpRequest), self.tenant.id,
                           datetime.datetime(now.year, now.month, 1, 0, 0, 0),
                           Func(usage.almost_now)) \
                           .AndReturn(usage_obj)
        quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
        api.keystone.tenant_get(IsA(http.HttpRequest),
                                project.id).AndReturn(project)
        self.mox.ReplayAll()

        res = self.client.get(reverse('horizon:project:overview:index'))
        self.assertTemplateUsed(res, 'project/overview/usage.html')
        self.assertTrue(isinstance(res.context['usage'], usage.ProjectUsage))
        self.assertContains(res, 'form-horizontal')
Exemple #12
0
    def test_usage_csv(self):
        now = timezone.now()
        usage_obj = api.nova.Usage(self.usages.first())
        quotas = self.quota_usages.first()
        self.mox.StubOutWithMock(api, 'usage_get')
        self.mox.StubOutWithMock(api.nova, 'tenant_quota_usages')
        timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
        api.usage_get(IsA(http.HttpRequest),
                      self.tenant.id,
                      timestamp,
                      Func(usage.almost_now)) \
                      .AndReturn(usage_obj)
        api.nova.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quotas)

        self.mox.ReplayAll()
        res = self.client.get(
            reverse('horizon:project:overview:index') + "?format=csv")
        self.assertTemplateUsed(res, 'project/overview/usage.csv')
        self.assertTrue(isinstance(res.context['usage'], usage.TenantUsage))
Exemple #13
0
 def test_usage_csv(self):
     now = timezone.now()
     usage_obj = api.nova.Usage(self.usages.first())
     api.keystone.tenant_list(IsA(http.HttpRequest), admin=True) \
                 .AndReturn(self.tenants.list())
     api.usage_list(IsA(http.HttpRequest),
                   datetime.datetime(now.year, now.month, 1, 0, 0, 0),
                   Func(usage.almost_now)) \
                   .AndReturn([usage_obj])
     self.mox.ReplayAll()
     csv_url = reverse('horizon:syspanel:overview:index') + "?format=csv"
     res = self.client.get(csv_url)
     self.assertTemplateUsed(res, 'syspanel/overview/usage.csv')
     self.assertTrue(isinstance(res.context['usage'], usage.GlobalUsage))
     self.assertContains(
         res, 'Tenant,VCPUs,RamMB,DiskGB,Usage(Hours)\n'
         '%s,%s,%s,%s,%f' %
         (usage_obj.tenant_id, usage_obj.vcpus, usage_obj.memory_mb,
          usage_obj.disk_gb_hours, usage_obj.vcpu_hours))
Exemple #14
0
 def test_usage_csv(self):
     now = timezone.now()
     usage_obj = api.nova.NovaUsage(self.usages.first())
     quota_data = self.quota_usages.first()
     api.keystone.tenant_list(IsA(http.HttpRequest)) \
                 .AndReturn(self.tenants.list())
     api.nova.usage_list(IsA(http.HttpRequest),
                         datetime.datetime(now.year, now.month, 1, 0, 0, 0),
                         Func(usage.almost_now)) \
                         .AndReturn([usage_obj, usage_obj])
     quotas.tenant_quota_usages(IsA(http.HttpRequest)).AndReturn(quota_data)
     self.mox.ReplayAll()
     csv_url = reverse('horizon:admin:overview:index') + "?format=csv"
     res = self.client.get(csv_url)
     self.assertTemplateUsed(res, 'admin/overview/usage.csv')
     self.assertTrue(isinstance(res.context['usage'], usage.GlobalUsage))
     hdr = 'Tenant,VCPUs,RamMB,DiskGB,Usage(Hours)'
     row = '%s,%s,%s,%s,%.2f' % (
         usage_obj.tenant_id, usage_obj.vcpus, usage_obj.memory_mb,
         usage_obj.disk_gb_hours, usage_obj.vcpu_hours)
     self.assertContains(res, '%s\n%s\n%s\n' % (hdr, row, row))
def test_http_request_happy_path(mox):
    """Test the happy-path case of http_request."""
    def validate_headers(hdrs):
        assert hdrs['X-Auth-Token'] == 'ABCDEFGH'
        assert hdrs['User-Agent'].startswith("CBC_SDK/")
        assert hdrs['X-Test'] == 'yes'
        return True

    creds = Credentials({'url': 'https://example.com', 'token': 'ABCDEFGH'})
    conn = Connection(creds)
    mox.StubOutWithMock(conn.session, 'request')
    conn.session.request('GET',
                         'https://example.com/path',
                         headers=Func(validate_headers),
                         verify=True,
                         proxies=conn.proxies,
                         timeout=conn._timeout).AndReturn(
                             StubResponse({'ok': True}))
    mox.ReplayAll()
    resp = conn.http_request('get', '/path', headers={'X-Test': 'yes'})
    assert resp.json()['ok']
    mox.VerifyAll()
Exemple #16
0
def test_BaseAPI_post_multipart(mox):
    """Test the operation of post_multipart."""
    def validate_header(hdrs):
        assert 'Content-Type' not in hdrs
        return True

    def validate_files(files):
        assert len(files) == 2
        assert files['name'][0] == 'name.txt'
        assert files['name'][1] == 'Cheeseburger'
        assert files['name'][2] == 'text/plain'
        assert files['config'][0] is None
        assert files['config'][1] == 'abc\ndef\nghi'
        assert files['config'][2] is None
        return True

    trans_table = {
        'name': {
            'filename': 'name.txt',
            'type': 'text/plain'
        },
        'config': {}
    }
    sut = BaseAPI(url='https://example.com',
                  token='ABCDEFGH',
                  org_key='A1B2C3D4')
    mox.StubOutWithMock(sut.session, 'http_request')
    sut.session.http_request('POST', '/path', headers=Func(validate_header), data=None, files=Func(validate_files)) \
        .AndReturn(StubResponse({'zyx': 100}))
    mox.ReplayAll()
    rc = sut.post_multipart('/path',
                            trans_table,
                            name='Cheeseburger',
                            config='abc\ndef\nghi',
                            notused='Not used')
    assert rc.json() == {'zyx': 100}
    mox.VerifyAll()