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))
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()
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)
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, [])
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')
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, [])
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:')
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))
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, {})
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')
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))
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))
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()
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()