Removes Horizon's "time" module.
The module was an unnecessary hack for lazy test-writing. Implements blueprint remove-horizon-time-module. Change-Id: Ibeabd2b1689619a8e00c3346cef9401e5850d375
This commit is contained in:
parent
359a71e0b0
commit
b9be56f209
@ -34,14 +34,6 @@ INDEX_URL = reverse('horizon:nova:instances_and_volumes:index')
|
|||||||
|
|
||||||
|
|
||||||
class InstanceViewTests(test.TestCase):
|
class InstanceViewTests(test.TestCase):
|
||||||
def setUp(self):
|
|
||||||
super(InstanceViewTests, self).setUp()
|
|
||||||
self.now = self.override_times()
|
|
||||||
|
|
||||||
def tearDown(self):
|
|
||||||
super(InstanceViewTests, self).tearDown()
|
|
||||||
self.reset_times()
|
|
||||||
|
|
||||||
@test.create_stubs({api: ('server_list',
|
@test.create_stubs({api: ('server_list',
|
||||||
'flavor_list',
|
'flavor_list',
|
||||||
'server_delete',
|
'server_delete',
|
||||||
|
@ -23,7 +23,6 @@ import datetime
|
|||||||
from django import http
|
from django import http
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from mox import IsA
|
from mox import IsA
|
||||||
from novaclient import exceptions as nova_exceptions
|
|
||||||
|
|
||||||
from horizon import api
|
from horizon import api
|
||||||
from horizon import test
|
from horizon import test
|
||||||
@ -34,17 +33,12 @@ INDEX_URL = reverse('horizon:nova:overview:index')
|
|||||||
|
|
||||||
|
|
||||||
class UsageViewTests(test.TestCase):
|
class UsageViewTests(test.TestCase):
|
||||||
def tearDown(self):
|
|
||||||
super(UsageViewTests, self).tearDown()
|
|
||||||
self.reset_times() # override_times is called in the tests
|
|
||||||
|
|
||||||
def test_usage(self):
|
def test_usage(self):
|
||||||
now = self.override_times()
|
now = datetime.datetime.utcnow()
|
||||||
usage_obj = api.nova.Usage(self.usages.first())
|
usage_obj = api.nova.Usage(self.usages.first())
|
||||||
self.mox.StubOutWithMock(api, 'usage_get')
|
self.mox.StubOutWithMock(api, 'usage_get')
|
||||||
api.usage_get(IsA(http.HttpRequest), self.tenant.id,
|
api.usage_get(IsA(http.HttpRequest), self.tenant.id,
|
||||||
datetime.datetime(now.year, now.month, 1,
|
datetime.datetime(now.year, now.month, 1, 0, 0, 0),
|
||||||
now.hour, now.minute, now.second),
|
|
||||||
datetime.datetime(now.year, now.month, now.day, now.hour,
|
datetime.datetime(now.year, now.month, now.day, now.hour,
|
||||||
now.minute, now.second)) \
|
now.minute, now.second)) \
|
||||||
.AndReturn(usage_obj)
|
.AndReturn(usage_obj)
|
||||||
@ -56,12 +50,10 @@ class UsageViewTests(test.TestCase):
|
|||||||
self.assertContains(res, 'form-horizontal')
|
self.assertContains(res, 'form-horizontal')
|
||||||
|
|
||||||
def test_usage_csv(self):
|
def test_usage_csv(self):
|
||||||
now = self.override_times()
|
now = datetime.datetime.utcnow()
|
||||||
usage_obj = api.nova.Usage(self.usages.first())
|
usage_obj = api.nova.Usage(self.usages.first())
|
||||||
self.mox.StubOutWithMock(api, 'usage_get')
|
self.mox.StubOutWithMock(api, 'usage_get')
|
||||||
timestamp = datetime.datetime(now.year, now.month, 1,
|
timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
|
||||||
now.hour, now.minute,
|
|
||||||
now.second)
|
|
||||||
api.usage_get(IsA(http.HttpRequest),
|
api.usage_get(IsA(http.HttpRequest),
|
||||||
self.tenant.id,
|
self.tenant.id,
|
||||||
timestamp,
|
timestamp,
|
||||||
@ -76,10 +68,9 @@ class UsageViewTests(test.TestCase):
|
|||||||
self.assertTrue(isinstance(res.context['usage'], usage.TenantUsage))
|
self.assertTrue(isinstance(res.context['usage'], usage.TenantUsage))
|
||||||
|
|
||||||
def test_usage_exception(self):
|
def test_usage_exception(self):
|
||||||
now = self.override_times()
|
now = datetime.datetime.utcnow()
|
||||||
self.mox.StubOutWithMock(api, 'usage_get')
|
self.mox.StubOutWithMock(api, 'usage_get')
|
||||||
timestamp = datetime.datetime(now.year, now.month, 1, now.hour,
|
timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
|
||||||
now.minute, now.second)
|
|
||||||
api.usage_get(IsA(http.HttpRequest),
|
api.usage_get(IsA(http.HttpRequest),
|
||||||
self.tenant.id,
|
self.tenant.id,
|
||||||
timestamp,
|
timestamp,
|
||||||
@ -93,12 +84,10 @@ class UsageViewTests(test.TestCase):
|
|||||||
self.assertEqual(res.context['usage'].usage_list, [])
|
self.assertEqual(res.context['usage'].usage_list, [])
|
||||||
|
|
||||||
def test_usage_default_tenant(self):
|
def test_usage_default_tenant(self):
|
||||||
now = self.override_times()
|
now = datetime.datetime.utcnow()
|
||||||
usage_obj = api.nova.Usage(self.usages.first())
|
usage_obj = api.nova.Usage(self.usages.first())
|
||||||
self.mox.StubOutWithMock(api, 'usage_get')
|
self.mox.StubOutWithMock(api, 'usage_get')
|
||||||
timestamp = datetime.datetime(now.year, now.month, 1,
|
timestamp = datetime.datetime(now.year, now.month, 1, 0, 0, 0)
|
||||||
now.hour, now.minute,
|
|
||||||
now.second)
|
|
||||||
api.usage_get(IsA(http.HttpRequest),
|
api.usage_get(IsA(http.HttpRequest),
|
||||||
self.tenant.id,
|
self.tenant.id,
|
||||||
timestamp,
|
timestamp,
|
||||||
|
@ -34,20 +34,15 @@ INDEX_URL = reverse('horizon:nova:overview:index')
|
|||||||
|
|
||||||
|
|
||||||
class UsageViewTests(test.BaseAdminViewTests):
|
class UsageViewTests(test.BaseAdminViewTests):
|
||||||
def tearDown(self):
|
|
||||||
super(UsageViewTests, self).tearDown()
|
|
||||||
self.reset_times() # override_times is called in the tests
|
|
||||||
|
|
||||||
@test.create_stubs({api: ('usage_list',),
|
@test.create_stubs({api: ('usage_list',),
|
||||||
api.keystone: ('tenant_list',)})
|
api.keystone: ('tenant_list',)})
|
||||||
def test_usage(self):
|
def test_usage(self):
|
||||||
now = self.override_times()
|
now = datetime.datetime.utcnow()
|
||||||
usage_obj = api.nova.Usage(self.usages.first())
|
usage_obj = api.nova.Usage(self.usages.first())
|
||||||
api.keystone.tenant_list(IsA(http.HttpRequest), admin=True) \
|
api.keystone.tenant_list(IsA(http.HttpRequest), admin=True) \
|
||||||
.AndReturn(self.tenants.list())
|
.AndReturn(self.tenants.list())
|
||||||
api.usage_list(IsA(http.HttpRequest),
|
api.usage_list(IsA(http.HttpRequest),
|
||||||
datetime.datetime(now.year, now.month, 1,
|
datetime.datetime(now.year, now.month, 1, 0, 0, 0),
|
||||||
now.hour, now.minute, now.second),
|
|
||||||
datetime.datetime(now.year, now.month, now.day, now.hour,
|
datetime.datetime(now.year, now.month, now.day, now.hour,
|
||||||
now.minute, now.second)) \
|
now.minute, now.second)) \
|
||||||
.AndReturn([usage_obj])
|
.AndReturn([usage_obj])
|
||||||
@ -71,13 +66,12 @@ class UsageViewTests(test.BaseAdminViewTests):
|
|||||||
@test.create_stubs({api: ('usage_list',),
|
@test.create_stubs({api: ('usage_list',),
|
||||||
api.keystone: ('tenant_list',)})
|
api.keystone: ('tenant_list',)})
|
||||||
def test_usage_csv(self):
|
def test_usage_csv(self):
|
||||||
now = self.override_times()
|
now = datetime.datetime.utcnow()
|
||||||
usage_obj = api.nova.Usage(self.usages.first())
|
usage_obj = api.nova.Usage(self.usages.first())
|
||||||
api.keystone.tenant_list(IsA(http.HttpRequest), admin=True) \
|
api.keystone.tenant_list(IsA(http.HttpRequest), admin=True) \
|
||||||
.AndReturn(self.tenants.list())
|
.AndReturn(self.tenants.list())
|
||||||
api.usage_list(IsA(http.HttpRequest),
|
api.usage_list(IsA(http.HttpRequest),
|
||||||
datetime.datetime(now.year, now.month, 1,
|
datetime.datetime(now.year, now.month, 1, 0, 0, 0),
|
||||||
now.hour, now.minute, now.second),
|
|
||||||
datetime.datetime(now.year, now.month, now.day, now.hour,
|
datetime.datetime(now.year, now.month, now.day, now.hour,
|
||||||
now.minute, now.second)) \
|
now.minute, now.second)) \
|
||||||
.AndReturn([usage_obj])
|
.AndReturn([usage_obj])
|
||||||
|
@ -18,7 +18,6 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
import datetime
|
|
||||||
import os
|
import os
|
||||||
|
|
||||||
import cloudfiles as swift_client
|
import cloudfiles as swift_client
|
||||||
@ -41,10 +40,6 @@ from horizon import middleware
|
|||||||
from horizon import users
|
from horizon import users
|
||||||
from horizon.tests.test_data.utils import load_test_data
|
from horizon.tests.test_data.utils import load_test_data
|
||||||
|
|
||||||
from .time import time
|
|
||||||
from .time import today
|
|
||||||
from .time import utcnow
|
|
||||||
|
|
||||||
|
|
||||||
# Makes output of failing mox tests much easier to read.
|
# Makes output of failing mox tests much easier to read.
|
||||||
wsgi.WSGIRequest.__repr__ = lambda self: "<class 'django.http.HttpRequest'>"
|
wsgi.WSGIRequest.__repr__ = lambda self: "<class 'django.http.HttpRequest'>"
|
||||||
@ -156,21 +151,6 @@ class TestCase(django_test.TestCase):
|
|||||||
authorized_tenants=authorized_tenants,
|
authorized_tenants=authorized_tenants,
|
||||||
request=self.request)
|
request=self.request)
|
||||||
|
|
||||||
def override_times(self):
|
|
||||||
""" Overrides the "current" time with immutable values. """
|
|
||||||
now = datetime.datetime.utcnow()
|
|
||||||
time.override_time = \
|
|
||||||
datetime.time(now.hour, now.minute, now.second)
|
|
||||||
today.override_time = datetime.date(now.year, now.month, now.day)
|
|
||||||
utcnow.override_time = now
|
|
||||||
return now
|
|
||||||
|
|
||||||
def reset_times(self):
|
|
||||||
""" Undoes the changes made by ``override_times``. """
|
|
||||||
time.override_time = None
|
|
||||||
today.override_time = None
|
|
||||||
utcnow.override_time = None
|
|
||||||
|
|
||||||
def assertRedirectsNoFollow(self, response, expected_url):
|
def assertRedirectsNoFollow(self, response, expected_url):
|
||||||
"""
|
"""
|
||||||
Asserts that the given response issued a 302 redirect without
|
Asserts that the given response issued a 302 redirect without
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
import datetime
|
|
||||||
|
|
||||||
|
|
||||||
def time(hour=0, minute=0, second=0, microsecond=0):
|
|
||||||
'''Overrideable version of datetime.datetime.today'''
|
|
||||||
if time.override_time:
|
|
||||||
return time.override_time
|
|
||||||
return datetime.time(hour, minute, second, microsecond)
|
|
||||||
|
|
||||||
time.override_time = None
|
|
||||||
|
|
||||||
|
|
||||||
def today():
|
|
||||||
'''Overridable version of datetime.datetime.today'''
|
|
||||||
if today.override_time:
|
|
||||||
return today.override_time
|
|
||||||
return datetime.date.today()
|
|
||||||
|
|
||||||
today.override_time = None
|
|
||||||
|
|
||||||
|
|
||||||
def utcnow():
|
|
||||||
'''Overridable version of datetime.datetime.utcnow'''
|
|
||||||
if utcnow.override_time:
|
|
||||||
return utcnow.override_time
|
|
||||||
return datetime.datetime.utcnow()
|
|
||||||
|
|
||||||
utcnow.override_time = None
|
|
@ -10,7 +10,6 @@ from django.utils.translation import ugettext as _
|
|||||||
from horizon import api
|
from horizon import api
|
||||||
from horizon import exceptions
|
from horizon import exceptions
|
||||||
from horizon import forms
|
from horizon import forms
|
||||||
from horizon import time
|
|
||||||
|
|
||||||
|
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
@ -27,15 +26,15 @@ class BaseUsage(object):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def today(self):
|
def today(self):
|
||||||
return time.today()
|
return datetime.date.today()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_datetime(date, now=False):
|
def get_datetime(date, now=False):
|
||||||
if now:
|
if now:
|
||||||
now = time.utcnow()
|
now = datetime.datetime.utcnow()
|
||||||
current_time = time.time(now.hour, now.minute, now.second)
|
current_time = datetime.time(now.hour, now.minute, now.second)
|
||||||
else:
|
else:
|
||||||
current_time = time.time()
|
current_time = datetime.time()
|
||||||
return datetime.datetime.combine(date, current_time)
|
return datetime.datetime.combine(date, current_time)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@ -46,8 +45,8 @@ class BaseUsage(object):
|
|||||||
def get_end(year, month, day=1):
|
def get_end(year, month, day=1):
|
||||||
period = relativedelta(months=1)
|
period = relativedelta(months=1)
|
||||||
date_end = BaseUsage.get_start(year, month, day) + period
|
date_end = BaseUsage.get_start(year, month, day) + period
|
||||||
if date_end > time.today():
|
if date_end > datetime.date.today():
|
||||||
date_end = time.today()
|
date_end = datetime.date.today()
|
||||||
return date_end
|
return date_end
|
||||||
|
|
||||||
def get_instances(self):
|
def get_instances(self):
|
||||||
@ -83,7 +82,7 @@ class BaseUsage(object):
|
|||||||
raise NotImplementedError("You must define a get_usage method.")
|
raise NotImplementedError("You must define a get_usage method.")
|
||||||
|
|
||||||
def summarize(self, start, end):
|
def summarize(self, start, end):
|
||||||
if start <= end <= time.today():
|
if start <= end <= datetime.date.today():
|
||||||
# Convert to datetime.datetime just for API call.
|
# Convert to datetime.datetime just for API call.
|
||||||
start = BaseUsage.get_datetime(start)
|
start = BaseUsage.get_datetime(start)
|
||||||
end = BaseUsage.get_datetime(end, now=True)
|
end = BaseUsage.get_datetime(end, now=True)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user