
Added instance hours report Initial version of report to calculate unit hours used for nova instances Breakdown by flavor, flavor class, account/billing types and by tenant. Moved license so script has shebang as the first line Add tenant info cache. Refactor Instance hr report. Added cache table for basic tenant info for reports. Refactor instance_hours report to use table. Improve performance of tenant info update. use bulk sql operations to speed up the tenant info update, as it's taking ~40s/1000 tenants to update on a decent machine. Fix some tests broken by rebase. Fix unittests broken by rebase. Also, renumber migration due to collision. Add Apache license header to new files. Fixed bug with fetching deployment information in reconciler. Reverted old method for fetching current usage's deployment and added new method to fetch latest deployment information for a request_id. Made the field mismatch error message more readable Refactored nova and glance verifier tests the exists are updated with 201 send_status as part of stacktach down repair mechanism Revert "Fixed bug with fetching deployment information in" Revert "Adding host and deployment info to missing exists entries in the nova usage audit" Revert "Added column headers for host and deployment in json reports" Only log ERROR on last retry fixed the wrong status name for sent_failed variable in audit report fixing documentation for urls that are not available for glance deprecating stacky urls (usage, deletes, exists) that are not used anymore Revert "Revert "Added column headers for host and deployment in json reports"" Revert "Revert "Adding host and deployment info to missing exists entries in the nova usage audit"" Revert "Revert "Fixed bug with fetching deployment information in"" Cell and compute info added for verification failures as well. If that is not present(request_id is not populated for an InstanceUsage entry), the cells display '-' Add tox support for move to stackforge Add tox support for move to stackforge Change-Id: Id94c2a7f1f9061e972e90c3f54e39c9dec11943b
1455 lines
63 KiB
Python
1455 lines
63 KiB
Python
# Copyright (c) 2012 - Rackspace Inc.
|
|
#
|
|
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
# of this software and associated documentation files (the "Software"), to
|
|
# deal in the Software without restriction, including without limitation the
|
|
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
# sell copies of the Software, and to permit persons to whom the Software is
|
|
# furnished to do so, subject to the following conditions:
|
|
#
|
|
# The above copyright notice and this permission notice shall be included in
|
|
# all copies or substantial portions of the Software.
|
|
#
|
|
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
# IN THE SOFTWARE.
|
|
import ast
|
|
|
|
import datetime
|
|
import decimal
|
|
import json
|
|
from django.core.exceptions import FieldError
|
|
|
|
import mox
|
|
|
|
from stacktach import datetime_to_decimal as dt
|
|
from stacktach import models
|
|
from stacktach import stacky_server
|
|
import utils
|
|
from utils import INSTANCE_ID_1, INSTANCE_TYPE_ID_1
|
|
from utils import INSTANCE_FLAVOR_ID_1
|
|
from utils import INSTANCE_ID_2
|
|
from utils import REQUEST_ID_1
|
|
|
|
from tests.unit import StacktachBaseTestCase
|
|
|
|
|
|
class StackyServerTestCase(StacktachBaseTestCase):
|
|
def setUp(self):
|
|
self.mox = mox.Mox()
|
|
self.mox.StubOutWithMock(models, 'RawData', use_mock_anything=True)
|
|
models.RawData.objects = self.mox.CreateMockAnything()
|
|
self.mox.StubOutWithMock(models, 'Deployment', use_mock_anything=True)
|
|
self.mox.StubOutWithMock(models, 'GlanceRawData',
|
|
use_mock_anything=True)
|
|
models.GlanceRawData.objects = self.mox.CreateMockAnything()
|
|
self.mox.StubOutWithMock(models, 'GenericRawData',
|
|
use_mock_anything=True)
|
|
models.GenericRawData.objects = self.mox.CreateMockAnything()
|
|
models.Deployment.objects = self.mox.CreateMockAnything()
|
|
self.mox.StubOutWithMock(models, 'Lifecycle', use_mock_anything=True)
|
|
models.Lifecycle.objects = self.mox.CreateMockAnything()
|
|
self.mox.StubOutWithMock(models, 'Timing', use_mock_anything=True)
|
|
models.Timing.objects = self.mox.CreateMockAnything()
|
|
self.mox.StubOutWithMock(models, 'RequestTracker',
|
|
use_mock_anything=True)
|
|
models.RequestTracker.objects = self.mox.CreateMockAnything()
|
|
self.mox.StubOutWithMock(models, 'InstanceUsage',
|
|
use_mock_anything=True)
|
|
models.InstanceUsage.objects = self.mox.CreateMockAnything()
|
|
self.mox.StubOutWithMock(models, 'InstanceDeletes',
|
|
use_mock_anything=True)
|
|
models.InstanceDeletes.objects = self.mox.CreateMockAnything()
|
|
self.mox.StubOutWithMock(models, 'InstanceExists',
|
|
use_mock_anything=True)
|
|
models.InstanceExists.objects = self.mox.CreateMockAnything()
|
|
self.mox.StubOutWithMock(models, 'JsonReport', use_mock_anything=True)
|
|
models.JsonReport.objects = self.mox.CreateMockAnything()
|
|
|
|
def tearDown(self):
|
|
self.mox.UnsetStubs()
|
|
|
|
def _create_raw(self):
|
|
raw = self.mox.CreateMockAnything()
|
|
raw.when = utils.decimal_utc(datetime.datetime(2013, 7, 17, 10, 16,
|
|
10, 717219))
|
|
raw.instance = INSTANCE_ID_1
|
|
raw.id = 1
|
|
raw.routing_key = 'monitor.info'
|
|
raw.deployment = self.mox.CreateMockAnything()
|
|
raw.deployment.id = 1
|
|
raw.deployment.name = 'deployment'
|
|
raw.event = 'test.start'
|
|
raw.host = 'example.com'
|
|
raw.state = 'active'
|
|
raw.old_state = None
|
|
raw.old_task = None
|
|
raw.publisher = "api.example.com"
|
|
raw.service = 'api'
|
|
raw.host = 'example.com'
|
|
raw.status = 'state'
|
|
raw.request_id = REQUEST_ID_1
|
|
raw.json = '{"key": "value"}'
|
|
raw.uuid = 'uuid'
|
|
raw.tenant = 'tenant'
|
|
return raw
|
|
|
|
def test_get_event_names(self):
|
|
model = self.mox.CreateMockAnything()
|
|
result = self.mox.CreateMockAnything()
|
|
self.mox.StubOutWithMock(stacky_server, '_model_factory')
|
|
stacky_server._model_factory('nova').AndReturn(model)
|
|
model.values('event').AndReturn(result)
|
|
result.distinct().AndReturn(result)
|
|
self.mox.ReplayAll()
|
|
|
|
event_names = stacky_server.get_event_names()
|
|
self.assertEqual(event_names, result)
|
|
|
|
self.mox.VerifyAll()
|
|
|
|
def test_get_host_names_for_nova(self):
|
|
result = self.mox.CreateMockAnything()
|
|
models.RawData.objects.values('host').AndReturn(result)
|
|
result.distinct().AndReturn(result)
|
|
self.mox.ReplayAll()
|
|
|
|
event_names = stacky_server.get_host_names('nova')
|
|
self.assertEqual(event_names, result)
|
|
|
|
self.mox.VerifyAll()
|
|
|
|
def test_get_host_names_for_glance(self):
|
|
result = self.mox.CreateMockAnything()
|
|
models.GlanceRawData.objects.values('host').AndReturn(result)
|
|
result.distinct().AndReturn(result)
|
|
self.mox.ReplayAll()
|
|
|
|
event_names = stacky_server.get_host_names('glance')
|
|
self.assertEqual(event_names, result)
|
|
|
|
self.mox.VerifyAll()
|
|
|
|
def test_get_deployments(self):
|
|
result = self.mox.CreateMockAnything()
|
|
models.Deployment.objects.all().AndReturn(result)
|
|
result.order_by('name').AndReturn(result)
|
|
self.mox.ReplayAll()
|
|
|
|
event_names = stacky_server.get_deployments()
|
|
self.assertEqual(event_names, result)
|
|
|
|
self.mox.VerifyAll()
|
|
|
|
def test_get_timings_for_uuid_start_only(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {}
|
|
lc_result = self.mox.CreateMockAnything()
|
|
lifecycle = self.mox.CreateMockAnything()
|
|
models.Lifecycle.objects.filter(instance=INSTANCE_ID_1)\
|
|
.AndReturn(lc_result)
|
|
lc_result[None:50].AndReturn(lc_result)
|
|
lc_result.__iter__().AndReturn([lifecycle].__iter__())
|
|
t_result = self.mox.CreateMockAnything()
|
|
timing = self.mox.CreateMockAnything()
|
|
models.Timing.objects.filter(lifecycle=lifecycle).AndReturn(t_result)
|
|
t_result.__iter__().AndReturn([timing].__iter__())
|
|
timing.name = 'name'
|
|
timing.start_raw = self.mox.CreateMockAnything()
|
|
timing.end_raw = None
|
|
timing.diff = None
|
|
self.mox.ReplayAll()
|
|
|
|
event_names = stacky_server.get_timings_for_uuid(fake_request,
|
|
INSTANCE_ID_1)
|
|
|
|
self.assertEqual(len(event_names), 2)
|
|
self.assertEqual(event_names[0], ['?', 'Event', 'Time (secs)'])
|
|
self.assertEqual(event_names[1], ['S', 'name', 'n/a'])
|
|
self.mox.VerifyAll()
|
|
|
|
def test_get_timings_for_uuid_end_only(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {}
|
|
lc_result = self.mox.CreateMockAnything()
|
|
lifecycle = self.mox.CreateMockAnything()
|
|
models.Lifecycle.objects.filter(instance=INSTANCE_ID_1) \
|
|
.AndReturn(lc_result)
|
|
lc_result[None:50].AndReturn(lc_result)
|
|
lc_result.__iter__().AndReturn([lifecycle].__iter__())
|
|
t_result = self.mox.CreateMockAnything()
|
|
timing = self.mox.CreateMockAnything()
|
|
models.Timing.objects.filter(lifecycle=lifecycle).AndReturn(t_result)
|
|
t_result.__iter__().AndReturn([timing].__iter__())
|
|
timing.name = 'name'
|
|
timing.start_raw = None
|
|
timing.end_raw = self.mox.CreateMockAnything()
|
|
timing.diff = None
|
|
self.mox.ReplayAll()
|
|
|
|
event_names = stacky_server.get_timings_for_uuid(fake_request,
|
|
INSTANCE_ID_1)
|
|
|
|
self.assertEqual(len(event_names), 2)
|
|
self.assertEqual(event_names[0], ['?', 'Event', 'Time (secs)'])
|
|
self.assertEqual(event_names[1], ['E', 'name', 'n/a'])
|
|
self.mox.VerifyAll()
|
|
|
|
def test_get_timings_for_uuid(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {}
|
|
lc_result = self.mox.CreateMockAnything()
|
|
lifecycle = self.mox.CreateMockAnything()
|
|
models.Lifecycle.objects.filter(instance=INSTANCE_ID_1) \
|
|
.AndReturn(lc_result)
|
|
lc_result[None:50].AndReturn(lc_result)
|
|
lc_result.__iter__().AndReturn([lifecycle].__iter__())
|
|
t_result = self.mox.CreateMockAnything()
|
|
timing = self.mox.CreateMockAnything()
|
|
models.Timing.objects.filter(lifecycle=lifecycle).AndReturn(t_result)
|
|
t_result.__iter__().AndReturn([timing].__iter__())
|
|
timing.name = 'name'
|
|
timing.start_raw = self.mox.CreateMockAnything()
|
|
timing.end_raw = self.mox.CreateMockAnything()
|
|
timing.diff = 20
|
|
self.mox.ReplayAll()
|
|
event_names = stacky_server.get_timings_for_uuid(fake_request,
|
|
INSTANCE_ID_1)
|
|
|
|
self.assertEqual(len(event_names), 2)
|
|
self.assertEqual(event_names[0], ['?', 'Event', 'Time (secs)'])
|
|
self.assertEqual(event_names[1], ['.', 'name', '0d 00:00:20'])
|
|
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_deployments(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
deployment1 = self.mox.CreateMockAnything()
|
|
deployment1.id = 1
|
|
deployment1.name = 'dep1'
|
|
deployment2 = self.mox.CreateMockAnything()
|
|
deployment2.id = 2
|
|
deployment2.name = 'dep2'
|
|
deployments = [deployment1, deployment2]
|
|
self.mox.StubOutWithMock(stacky_server, 'get_deployments')
|
|
stacky_server.get_deployments().AndReturn(deployments)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_deployments(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 3)
|
|
self.assertEqual(json_resp[0], ['#', 'Name'])
|
|
self.assertEqual(json_resp[1], [1, 'dep1'])
|
|
self.assertEqual(json_resp[2], [2, 'dep2'])
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_events_of_a_single_service(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'service': 'nova'}
|
|
event1 = {'event': 'some.event.1'}
|
|
event2 = {'event': 'some.event.2'}
|
|
events = [event1, event2]
|
|
self.mox.StubOutWithMock(stacky_server, 'get_event_names')
|
|
stacky_server.get_event_names(service='nova').AndReturn(events)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_events(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 3)
|
|
self.assertEqual(json_resp[0], ['Event Name'])
|
|
self.assertEqual(json_resp[1], ['some.event.1'])
|
|
self.assertEqual(json_resp[2], ['some.event.2'])
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_events_of_all_services(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'service': 'all'}
|
|
event1 = {'event': 'some.event.1'}
|
|
event2 = {'event': 'some.event.2'}
|
|
events = [event1, event2]
|
|
self.mox.StubOutWithMock(stacky_server, 'get_event_names')
|
|
stacky_server.get_event_names('nova').AndReturn(events)
|
|
stacky_server.get_event_names('glance').AndReturn(events)
|
|
stacky_server.get_event_names('generic').AndReturn(events)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_events(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 7)
|
|
self.assertEqual(json_resp[0], ['Event Name'])
|
|
self.assertEqual(json_resp[1], ['some.event.1'])
|
|
self.assertEqual(json_resp[2], ['some.event.2'])
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_hosts(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'service': 'service'}
|
|
host1 = {'host': 'www.demo.com'}
|
|
host2 = {'host': 'www.example.com'}
|
|
hosts = [host1, host2]
|
|
self.mox.StubOutWithMock(stacky_server, 'get_host_names')
|
|
stacky_server.get_host_names('service').AndReturn(hosts)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_hosts(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 3)
|
|
self.assertEqual(json_resp[0], ['Host Name'])
|
|
self.assertEqual(json_resp[1], ['www.demo.com'])
|
|
self.assertEqual(json_resp[2], ['www.example.com'])
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_uuid(self):
|
|
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
|
|
"State", "State'", "Task'"], [1, " ",
|
|
"2013-07-17 10:16:10.717219", "deployment",
|
|
"test.start", "example.com", "active", None, None]]
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'uuid': INSTANCE_ID_1}
|
|
result = self.mox.CreateMockAnything()
|
|
models.RawData.objects.select_related().AndReturn(result)
|
|
result.filter(instance=INSTANCE_ID_1).AndReturn(result)
|
|
result.order_by('when').AndReturn(result)
|
|
raw = self._create_raw()
|
|
result[None:50].AndReturn(result)
|
|
result.__iter__().AndReturn([raw].__iter__())
|
|
raw.search_results([], mox.IgnoreArg(), ' ').AndReturn(search_result)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_uuid(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 2)
|
|
header = ["#", "?", "When", "Deployment", "Event", "Host",
|
|
"State", "State'", "Task'"]
|
|
self.assertEqual(json_resp[0], header)
|
|
datetime = dt.dt_from_decimal(raw.when)
|
|
body = [1, " ", str(datetime), "deployment", "test.start",
|
|
"example.com", "active", None, None]
|
|
self.assertEqual(json_resp[1], body)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_uuid_when_filters(self):
|
|
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
|
|
"State", "State'", "Task'"], [1, " ",
|
|
"2013-07-17 10:16:10.717219", "deployment",
|
|
"test.start", "example.com", "active", None, None]]
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'uuid': INSTANCE_ID_1,
|
|
'when_min': '1.1',
|
|
'when_max': '2.1'}
|
|
result = self.mox.CreateMockAnything()
|
|
models.RawData.objects.select_related().AndReturn(result)
|
|
result.filter(instance=INSTANCE_ID_1,
|
|
when__gte=decimal.Decimal('1.1'),
|
|
when__lte=decimal.Decimal('2.1')).AndReturn(result)
|
|
result.order_by('when').AndReturn(result)
|
|
raw = self._create_raw()
|
|
result[None:50].AndReturn(result)
|
|
result.__iter__().AndReturn([raw].__iter__())
|
|
raw.search_results([], mox.IgnoreArg(), ' ').AndReturn(search_result)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_uuid(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 2)
|
|
header = ["#", "?", "When", "Deployment", "Event", "Host",
|
|
"State", "State'", "Task'"]
|
|
self.assertEqual(json_resp[0], header)
|
|
datetime = dt.dt_from_decimal(raw.when)
|
|
body = [1, " ", str(datetime), "deployment", "test.start",
|
|
"example.com", "active", None, None]
|
|
self.assertEqual(json_resp[1], body)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_uuid_for_glance(self):
|
|
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
|
|
"Status"], [1, " ",
|
|
"2013-07-17 10:16:10.717219", "deployment",
|
|
"test.start", "example.com", "state"]]
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'uuid': INSTANCE_ID_1, 'service': 'glance'}
|
|
result = self.mox.CreateMockAnything()
|
|
models.GlanceRawData.objects.select_related().AndReturn(result)
|
|
result.filter(uuid=INSTANCE_ID_1).AndReturn(result)
|
|
result.order_by('when').AndReturn(result)
|
|
raw = self._create_raw()
|
|
result[None:50].AndReturn(result)
|
|
result.__iter__().AndReturn([raw].__iter__())
|
|
raw.search_results([], mox.IgnoreArg(), ' ').AndReturn(search_result)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_uuid(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 2)
|
|
header = ["#", "?", "When", "Deployment", "Event", "Host",
|
|
"Status"]
|
|
self.assertEqual(json_resp[0], header)
|
|
datetime = dt.dt_from_decimal(raw.when)
|
|
body = [1, " ", str(datetime), "deployment", "test.start",
|
|
"example.com", "state"]
|
|
self.assertEqual(json_resp[1], body)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_uuid_for_glance_when_filters(self):
|
|
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
|
|
"Status"], [1, " ",
|
|
"2013-07-17 10:16:10.717219", "deployment",
|
|
"test.start", "example.com", "state"]]
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'uuid': INSTANCE_ID_1,
|
|
'when_min': '1.1',
|
|
'when_max': '2.1',
|
|
'service': 'glance'}
|
|
result = self.mox.CreateMockAnything()
|
|
models.GlanceRawData.objects.select_related().AndReturn(result)
|
|
result.filter(uuid=INSTANCE_ID_1,
|
|
when__gte=decimal.Decimal('1.1'),
|
|
when__lte=decimal.Decimal('2.1')).AndReturn(result)
|
|
result.order_by('when').AndReturn(result)
|
|
raw = self._create_raw()
|
|
result[None:50].AndReturn(result)
|
|
result.__iter__().AndReturn([raw].__iter__())
|
|
raw.search_results([], mox.IgnoreArg(), ' ').AndReturn(search_result)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_uuid(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 2)
|
|
header = ["#", "?", "When", "Deployment", "Event", "Host",
|
|
"Status"]
|
|
self.assertEqual(json_resp[0], header)
|
|
datetime = dt.dt_from_decimal(raw.when)
|
|
body = [1, " ", str(datetime), "deployment", "test.start",
|
|
"example.com", "state"]
|
|
self.assertEqual(json_resp[1], body)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_uuid_bad_uuid(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'uuid': "obviouslybaduuid"}
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_uuid(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 400)
|
|
resp_json = json.loads(resp.content)
|
|
self.assertEqual(len(resp_json), 2)
|
|
self.assertEqual(resp_json[0], ['Error', 'Message'])
|
|
msg = 'obviouslybaduuid is not uuid-like'
|
|
self.assertEqual(resp_json[1], ['Bad Request', msg])
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_timings_uuid_bad_uuid(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'uuid': "obviouslybaduuid"}
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_timings_uuid(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 400)
|
|
resp_json = json.loads(resp.content)
|
|
self.assertEqual(len(resp_json), 2)
|
|
self.assertEqual(resp_json[0], ['Error', 'Message'])
|
|
msg = 'obviouslybaduuid is not uuid-like'
|
|
self.assertEqual(resp_json[1], ['Bad Request', msg])
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_timings(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'name': 'test.event'}
|
|
results = self.mox.CreateMockAnything()
|
|
models.Timing.objects.select_related().AndReturn(results)
|
|
results.filter(name='test.event').AndReturn(results)
|
|
results.exclude(mox.IgnoreArg()).AndReturn(results)
|
|
results.order_by('diff').AndReturn(results)
|
|
timing1 = self.mox.CreateMockAnything()
|
|
timing1.lifecycle = self.mox.CreateMockAnything()
|
|
timing1.lifecycle.instance = INSTANCE_ID_1
|
|
timing1.diff = 10
|
|
timing2 = self.mox.CreateMockAnything()
|
|
timing2.lifecycle = self.mox.CreateMockAnything()
|
|
timing2.lifecycle.instance = INSTANCE_ID_2
|
|
timing2.diff = 20
|
|
results[None:50].AndReturn(results)
|
|
results.__iter__().AndReturn([timing1, timing2].__iter__())
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_timings(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 3)
|
|
header = ["test.event", "Time"]
|
|
self.assertEqual(json_resp[0], header)
|
|
self.assertEqual(json_resp[1], [INSTANCE_ID_1, '0d 00:00:10'])
|
|
self.assertEqual(json_resp[2], [INSTANCE_ID_2, '0d 00:00:20'])
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_timings_end_when_min(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'name': 'test.event', 'end_when_min': '1.1'}
|
|
results = self.mox.CreateMockAnything()
|
|
models.Timing.objects.select_related().AndReturn(results)
|
|
results.filter(name='test.event',
|
|
end_when__gte=decimal.Decimal('1.1')).AndReturn(results)
|
|
results.exclude(mox.IgnoreArg()).AndReturn(results)
|
|
results.order_by('diff').AndReturn(results)
|
|
timing1 = self.mox.CreateMockAnything()
|
|
timing1.lifecycle = self.mox.CreateMockAnything()
|
|
timing1.lifecycle.instance = INSTANCE_ID_1
|
|
timing1.diff = 10
|
|
timing2 = self.mox.CreateMockAnything()
|
|
timing2.lifecycle = self.mox.CreateMockAnything()
|
|
timing2.lifecycle.instance = INSTANCE_ID_2
|
|
timing2.diff = 20
|
|
results[None:50].AndReturn(results)
|
|
results.__iter__().AndReturn([timing1, timing2].__iter__())
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_timings(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 3)
|
|
header = ["test.event", "Time"]
|
|
self.assertEqual(json_resp[0], header)
|
|
self.assertEqual(json_resp[1], [INSTANCE_ID_1, '0d 00:00:10'])
|
|
self.assertEqual(json_resp[2], [INSTANCE_ID_2, '0d 00:00:20'])
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_timings_end_when_max(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'name': 'test.event', 'end_when_max': '1.1'}
|
|
results = self.mox.CreateMockAnything()
|
|
models.Timing.objects.select_related().AndReturn(results)
|
|
results.filter(name='test.event',
|
|
end_when__lte=decimal.Decimal('1.1')).AndReturn(results)
|
|
results.exclude(mox.IgnoreArg()).AndReturn(results)
|
|
results.order_by('diff').AndReturn(results)
|
|
timing1 = self.mox.CreateMockAnything()
|
|
timing1.lifecycle = self.mox.CreateMockAnything()
|
|
timing1.lifecycle.instance = INSTANCE_ID_1
|
|
timing1.diff = 10
|
|
timing2 = self.mox.CreateMockAnything()
|
|
timing2.lifecycle = self.mox.CreateMockAnything()
|
|
timing2.lifecycle.instance = INSTANCE_ID_2
|
|
timing2.diff = 20
|
|
results[None:50].AndReturn(results)
|
|
results.__iter__().AndReturn([timing1, timing2].__iter__())
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_timings(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 3)
|
|
header = ["test.event", "Time"]
|
|
self.assertEqual(json_resp[0], header)
|
|
self.assertEqual(json_resp[1], [INSTANCE_ID_1, '0d 00:00:10'])
|
|
self.assertEqual(json_resp[2], [INSTANCE_ID_2, '0d 00:00:20'])
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_timings_end_when_max_when_min(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'name': 'test.event',
|
|
'end_when_min': '1.1',
|
|
'end_when_max': '2.1'}
|
|
results = self.mox.CreateMockAnything()
|
|
models.Timing.objects.select_related().AndReturn(results)
|
|
results.filter(name='test.event',
|
|
end_when__gte=decimal.Decimal('1.1'),
|
|
end_when__lte=decimal.Decimal('2.1')).AndReturn(results)
|
|
results.exclude(mox.IgnoreArg()).AndReturn(results)
|
|
results.order_by('diff').AndReturn(results)
|
|
timing1 = self.mox.CreateMockAnything()
|
|
timing1.lifecycle = self.mox.CreateMockAnything()
|
|
timing1.lifecycle.instance = INSTANCE_ID_1
|
|
timing1.diff = 10
|
|
timing2 = self.mox.CreateMockAnything()
|
|
timing2.lifecycle = self.mox.CreateMockAnything()
|
|
timing2.lifecycle.instance = INSTANCE_ID_2
|
|
timing2.diff = 20
|
|
results[None:50].AndReturn(results)
|
|
results.__iter__().AndReturn([timing1, timing2].__iter__())
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_timings(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 3)
|
|
header = ["test.event", "Time"]
|
|
self.assertEqual(json_resp[0], header)
|
|
self.assertEqual(json_resp[1], [INSTANCE_ID_1, '0d 00:00:10'])
|
|
self.assertEqual(json_resp[2], [INSTANCE_ID_2, '0d 00:00:20'])
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_summary(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
self.mox.StubOutWithMock(stacky_server, 'get_event_names')
|
|
events = [{'event': 'test.start'}, {'event': 'test.end'}]
|
|
stacky_server.get_event_names().AndReturn(events)
|
|
fake_request.GET = {'name': 'test.event'}
|
|
results = self.mox.CreateMockAnything()
|
|
models.Timing.objects.filter(name='test').AndReturn(results)
|
|
results.exclude(mox.IgnoreArg()).AndReturn(results)
|
|
results.exclude(diff__lt=0).AndReturn(results)
|
|
timing1 = self.mox.CreateMockAnything()
|
|
timing1.lifecycle = self.mox.CreateMockAnything()
|
|
timing1.lifecycle.instance = INSTANCE_ID_1
|
|
timing1.diff = 10
|
|
timing2 = self.mox.CreateMockAnything()
|
|
timing2.lifecycle = self.mox.CreateMockAnything()
|
|
timing2.lifecycle.instance = INSTANCE_ID_2
|
|
timing2.diff = 20
|
|
results[None:50].AndReturn(results)
|
|
results.__len__().AndReturn(2)
|
|
results.__iter__().AndReturn([timing1, timing2].__iter__())
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_summary(fake_request)
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 2)
|
|
self.assertEqual(json_resp[0], ["Event", "N", "Min", "Max", "Avg"])
|
|
self.assertEqual(json_resp[1], [u'test', 2, u'0d 00:00:10.0',
|
|
u'0d 00:00:20.0', u'0d 00:00:15'])
|
|
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_request(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'request_id': REQUEST_ID_1}
|
|
raw = self._create_raw()
|
|
results = self.mox.CreateMockAnything()
|
|
models.RawData.objects.filter(request_id=REQUEST_ID_1).AndReturn(results)
|
|
results.order_by('when').AndReturn(results)
|
|
results[None:50].AndReturn(results)
|
|
results.__iter__().AndReturn([raw].__iter__())
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_request(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 2)
|
|
self.assertEqual(json_resp[0], ["#", "?", "When", "Deployment",
|
|
"Event", "Host", "State", "State'",
|
|
"Task'"])
|
|
self.assertEqual(json_resp[1][0], 1)
|
|
self.assertEqual(json_resp[1][1], u' ')
|
|
self.assertEqual(json_resp[1][2], str(dt.dt_from_decimal(raw.when)))
|
|
self.assertEqual(json_resp[1][3], u'deployment')
|
|
self.assertEqual(json_resp[1][4], u'test.start')
|
|
self.assertEqual(json_resp[1][5], u'example.com')
|
|
self.assertEqual(json_resp[1][6], u'active')
|
|
self.assertEqual(json_resp[1][7], None)
|
|
self.assertEqual(json_resp[1][8], None)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_request_when_filters(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'request_id': REQUEST_ID_1,
|
|
'when_min': '1.1',
|
|
'when_max': '2.1'}
|
|
raw = self._create_raw()
|
|
results = self.mox.CreateMockAnything()
|
|
when_min = decimal.Decimal('1.1')
|
|
when_max = decimal.Decimal('2.1')
|
|
models.RawData.objects.filter(request_id=REQUEST_ID_1,
|
|
when__gte=when_min,
|
|
when__lte=when_max).AndReturn(results)
|
|
results.order_by('when').AndReturn(results)
|
|
results[None:50].AndReturn(results)
|
|
results.__iter__().AndReturn([raw].__iter__())
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_request(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 2)
|
|
self.assertEqual(json_resp[0], ["#", "?", "When", "Deployment",
|
|
"Event", "Host", "State", "State'",
|
|
"Task'"])
|
|
self.assertEqual(json_resp[1][0], 1)
|
|
self.assertEqual(json_resp[1][1], u' ')
|
|
self.assertEqual(json_resp[1][2], str(dt.dt_from_decimal(raw.when)))
|
|
self.assertEqual(json_resp[1][3], u'deployment')
|
|
self.assertEqual(json_resp[1][4], u'test.start')
|
|
self.assertEqual(json_resp[1][5], u'example.com')
|
|
self.assertEqual(json_resp[1][6], u'active')
|
|
self.assertEqual(json_resp[1][7], None)
|
|
self.assertEqual(json_resp[1][8], None)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_request_bad_request_id(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'request_id': "obviouslybaduuid"}
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_request(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 400)
|
|
resp_json = json.loads(resp.content)
|
|
self.assertEqual(len(resp_json), 2)
|
|
self.assertEqual(resp_json[0], ['Error', 'Message'])
|
|
msg = 'obviouslybaduuid is not request-id-like'
|
|
self.assertEqual(resp_json[1], ['Bad Request', msg])
|
|
self.mox.VerifyAll()
|
|
|
|
def _assert_on_show_nova(self, json_resp, raw):
|
|
self.assertEqual(len(json_resp), 3)
|
|
values = json_resp[0]
|
|
self.assertEqual(len(values), 12)
|
|
self.assertEqual(values[0], ["Key", "Value"])
|
|
self.assertEqual(values[1], ["#", raw.id])
|
|
self.assertEqual(values[2], ["When",
|
|
str(dt.dt_from_decimal(raw.when))])
|
|
self.assertEqual(values[3], ["Deployment", raw.deployment.name])
|
|
self.assertEqual(values[4], ["Category", raw.routing_key])
|
|
self.assertEqual(values[5], ["Publisher", raw.publisher])
|
|
self.assertEqual(values[6], ["State", raw.state])
|
|
self.assertEqual(values[7], ["Event", raw.event])
|
|
self.assertEqual(values[8], ["Service", raw.service])
|
|
self.assertEqual(values[9], ["Host", raw.host])
|
|
self.assertEqual(values[10],["UUID", raw.instance])
|
|
self.assertEqual(values[11], ["Req ID", raw.request_id])
|
|
|
|
def _assert_on_show_glance(self, json_resp, raw):
|
|
self.assertEqual(len(json_resp), 3)
|
|
values = json_resp[0]
|
|
self.assertEqual(len(values), 12)
|
|
self.assertEqual(values[0], ["Key", "Value"])
|
|
self.assertEqual(values[1], ["#", raw.id])
|
|
self.assertEqual(values[2], ["When",
|
|
str(dt.dt_from_decimal(raw.when))])
|
|
self.assertEqual(values[3], ["Deployment", raw.deployment.name])
|
|
self.assertEqual(values[4], ["Category", raw.routing_key])
|
|
self.assertEqual(values[5], ["Publisher", raw.publisher])
|
|
self.assertEqual(values[6], ["Status", raw.status])
|
|
self.assertEqual(values[7], ["Event", raw.event])
|
|
self.assertEqual(values[8], ["Service", raw.service])
|
|
self.assertEqual(values[9], ["Host", raw.host])
|
|
self.assertEqual(values[10],["UUID", raw.uuid])
|
|
self.assertEqual(values[11], ["Req ID", raw.request_id])
|
|
|
|
def test_do_show(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {}
|
|
raw = self._create_raw()
|
|
models.RawData.objects.get(id=1).AndReturn(raw)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_show(fake_request, 1)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self._assert_on_show_nova(json_resp, raw)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_show_for_glance_rawdata(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'service':'glance'}
|
|
raw = self._create_raw()
|
|
models.GlanceRawData.objects.get(id=1).AndReturn(raw)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_show(fake_request, 1)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self._assert_on_show_glance(json_resp, raw)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_show_for_generic_rawdata(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'service':'generic'}
|
|
raw = self._create_raw()
|
|
models.GenericRawData.objects.get(id=1).AndReturn(raw)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_show(fake_request, 1)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self._assert_on_show_nova(json_resp, raw)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_show_should_return_empty_result_on_object_not_found_exception(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {}
|
|
|
|
raw = self._create_raw()
|
|
models.RawData.objects.get(id=1).AndReturn(raw)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_show(fake_request, 1)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self._assert_on_show_nova(json_resp, raw)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_watch_for_glance(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'service': 'glance'}
|
|
self.mox.StubOutWithMock(stacky_server, 'get_deployments')
|
|
deployment1 = self.mox.CreateMockAnything()
|
|
deployment1.id = 1
|
|
deployment1.name = 'dep1'
|
|
deployments = [deployment1]
|
|
stacky_server.get_deployments().AndReturn(deployments)
|
|
self.mox.StubOutWithMock(stacky_server, 'get_event_names')
|
|
events = [{'event': 'test.start'}, {'event': 'test.end'}]
|
|
stacky_server.get_event_names().AndReturn(events)
|
|
results = self.mox.CreateMockAnything()
|
|
models.GlanceRawData.objects.order_by('when').AndReturn(results)
|
|
results.filter(when__gt=mox.IgnoreArg()).AndReturn(results)
|
|
results.filter(when__lte=mox.IgnoreArg()).AndReturn(results)
|
|
results.__iter__().AndReturn([self._create_raw()].__iter__())
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_watch(fake_request, 0)
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 3)
|
|
self.assertEqual(json_resp[0], [10, 1, 15, 20, 10, 36])
|
|
self.assertEqual(json_resp[1][0][0], 1)
|
|
self.assertEqual(json_resp[1][0][1], u' ')
|
|
time_str = "%s %s" % (json_resp[1][0][2], json_resp[1][0][3])
|
|
datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S.%f")
|
|
self.assertEqual(json_resp[1][0][4], u'dep1')
|
|
self.assertEqual(json_resp[1][0][5], u'test.start')
|
|
self.assertEqual(json_resp[1][0][6], u'%s' % 'uuid')
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_watch(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {}
|
|
self.mox.StubOutWithMock(stacky_server, 'get_deployments')
|
|
deployment1 = self.mox.CreateMockAnything()
|
|
deployment1.id = 1
|
|
deployment1.name = 'dep1'
|
|
deployments = [deployment1]
|
|
stacky_server.get_deployments().AndReturn(deployments)
|
|
self.mox.StubOutWithMock(stacky_server, 'get_event_names')
|
|
events = [{'event': 'test.start'}, {'event': 'test.end'}]
|
|
stacky_server.get_event_names().AndReturn(events)
|
|
results = self.mox.CreateMockAnything()
|
|
model = self.mox.CreateMockAnything()
|
|
self.mox.StubOutWithMock(stacky_server, '_model_factory')
|
|
stacky_server._model_factory('nova').AndReturn(model)
|
|
model.order_by('when').AndReturn(results)
|
|
results.filter(when__gt=mox.IgnoreArg()).AndReturn(results)
|
|
results.filter(when__lte=mox.IgnoreArg()).AndReturn(results)
|
|
results.__iter__().AndReturn([self._create_raw()].__iter__())
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_watch(fake_request, 0)
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 3)
|
|
self.assertEqual(json_resp[0], [10, 1, 15, 20, 10, 36])
|
|
self.assertEqual(json_resp[1][0][0], 1)
|
|
self.assertEqual(json_resp[1][0][1], u' ')
|
|
time_str = "%s %s" % (json_resp[1][0][2], json_resp[1][0][3])
|
|
datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S.%f")
|
|
self.assertEqual(json_resp[1][0][4], u'dep1')
|
|
self.assertEqual(json_resp[1][0][5], u'test.start')
|
|
self.assertEqual(json_resp[1][0][6], u'%s' % 'uuid')
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_watch_with_deployment(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'deployment': 1}
|
|
self.mox.StubOutWithMock(stacky_server, 'get_deployments')
|
|
deployment1 = self.mox.CreateMockAnything()
|
|
deployment1.id = 1
|
|
deployment1.name = 'dep1'
|
|
deployments = [deployment1]
|
|
stacky_server.get_deployments().AndReturn(deployments)
|
|
self.mox.StubOutWithMock(stacky_server, 'get_event_names')
|
|
events = [{'event': 'test.start'}, {'event': 'test.end'}]
|
|
stacky_server.get_event_names().AndReturn(events)
|
|
results = self.mox.CreateMockAnything()
|
|
model = self.mox.CreateMockAnything()
|
|
self.mox.StubOutWithMock(stacky_server, '_model_factory')
|
|
stacky_server._model_factory('nova').AndReturn(model)
|
|
model.order_by('when').AndReturn(results)
|
|
|
|
results.filter(deployment=1).AndReturn(results)
|
|
results.filter(when__gt=mox.IgnoreArg()).AndReturn(results)
|
|
results.filter(when__lte=mox.IgnoreArg()).AndReturn(results)
|
|
results.__iter__().AndReturn([self._create_raw()].__iter__())
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_watch(fake_request, 1)
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 3)
|
|
self.assertEqual(json_resp[0], [10, 1, 15, 20, 10, 36])
|
|
self.assertEqual(json_resp[1][0][0], 1)
|
|
self.assertEqual(json_resp[1][0][1], u' ')
|
|
time_str = "%s %s" % (json_resp[1][0][2], json_resp[1][0][3])
|
|
datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S.%f")
|
|
self.assertEqual(json_resp[1][0][4], u'dep1')
|
|
self.assertEqual(json_resp[1][0][5], u'test.start')
|
|
self.assertEqual(json_resp[1][0][6], u'%s' % 'uuid')
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_watch_with_event_name(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'event_name': 'test.start','service': 'nova'}
|
|
self.mox.StubOutWithMock(stacky_server, 'get_deployments')
|
|
deployment1 = self.mox.CreateMockAnything()
|
|
deployment1.id = 1
|
|
deployment1.name = 'dep1'
|
|
deployments = [deployment1]
|
|
stacky_server.get_deployments().AndReturn(deployments)
|
|
self.mox.StubOutWithMock(stacky_server, 'get_event_names')
|
|
events = [{'event': 'test.start'}, {'event': 'test.end'}]
|
|
stacky_server.get_event_names().AndReturn(events)
|
|
results = self.mox.CreateMockAnything()
|
|
models.RawData.objects.order_by('when').AndReturn(results)
|
|
results.filter(event='test.start').AndReturn(results)
|
|
results.filter(when__gt=mox.IgnoreArg()).AndReturn(results)
|
|
results.filter(when__lte=mox.IgnoreArg()).AndReturn(results)
|
|
results.__iter__().AndReturn([self._create_raw()].__iter__())
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_watch(fake_request, 0)
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 3)
|
|
self.assertEqual(json_resp[0], [10, 1, 15, 20, 10, 36])
|
|
self.assertEqual(json_resp[1][0][0], 1)
|
|
self.assertEqual(json_resp[1][0][1], u' ')
|
|
time_str = "%s %s" % (json_resp[1][0][2], json_resp[1][0][3])
|
|
datetime.datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S.%f")
|
|
self.assertEqual(json_resp[1][0][4], u'dep1')
|
|
self.assertEqual(json_resp[1][0][5], u'test.start')
|
|
self.assertEqual(json_resp[1][0][6], u'%s' % 'uuid')
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_kpi(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
results = self.mox.CreateMockAnything()
|
|
models.RequestTracker.objects.select_related().AndReturn(results)
|
|
results.exclude(last_timing=None).AndReturn(results)
|
|
results.exclude(start__lt=mox.IgnoreArg()).AndReturn(results)
|
|
results.order_by('duration').AndReturn(results)
|
|
tracker = self.mox.CreateMockAnything()
|
|
tracker.last_timing = self.mox.CreateMockAnything()
|
|
tracker.last_timing.end_raw = self.mox.CreateMockAnything()
|
|
tracker.last_timing.end_raw.event = 'test.end'
|
|
deployment = self.mox.CreateMockAnything()
|
|
deployment.name = 'dep1'
|
|
tracker.last_timing.end_raw.deployment = deployment
|
|
tracker.lifecycle = self.mox.CreateMockAnything()
|
|
tracker.lifecycle.instance = INSTANCE_ID_1
|
|
tracker.duration = 10
|
|
results.__iter__().AndReturn([tracker].__iter__())
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_kpi(fake_request)
|
|
self.assertEqual(resp.status_code, 200)
|
|
body = resp.content
|
|
body = json.loads(body)
|
|
self.assertEqual(len(body), 2)
|
|
self.assertEqual(body[0], ["Event", "Time", "UUID", "Deployment"])
|
|
time = u'%s' % stacky_server.sec_to_time(10)
|
|
self.assertEqual(body[1], [u'test', time, INSTANCE_ID_1, u'dep1'])
|
|
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_kpi_with_tenant(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
objects = self.mox.CreateMockAnything()
|
|
models.RawData.objects.filter(tenant='55555').AndReturn(objects)
|
|
objects.count().AndReturn(1)
|
|
results = self.mox.CreateMockAnything()
|
|
models.RequestTracker.objects.select_related().AndReturn(results)
|
|
results.exclude(last_timing=None).AndReturn(results)
|
|
results.exclude(start__lt=mox.IgnoreArg()).AndReturn(results)
|
|
results.order_by('duration').AndReturn(results)
|
|
tracker = self.mox.CreateMockAnything()
|
|
tracker.last_timing = self.mox.CreateMockAnything()
|
|
tracker.last_timing.end_raw = self.mox.CreateMockAnything()
|
|
tracker.last_timing.end_raw.event = 'test.end'
|
|
tracker.last_timing.end_raw.tenant = '55555'
|
|
deployment = self.mox.CreateMockAnything()
|
|
deployment.name = 'dep1'
|
|
tracker.last_timing.end_raw.deployment = deployment
|
|
tracker.lifecycle = self.mox.CreateMockAnything()
|
|
tracker.lifecycle.instance = INSTANCE_ID_1
|
|
tracker.duration = 10
|
|
results.__iter__().AndReturn([tracker].__iter__())
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_kpi(fake_request, '55555')
|
|
self.assertEqual(resp.status_code, 200)
|
|
body = resp.content
|
|
body = json.loads(body)
|
|
self.assertEqual(len(body), 2)
|
|
self.assertEqual(body[0], ["Event", "Time", "UUID", "Deployment"])
|
|
time = u'%s' % stacky_server.sec_to_time(10)
|
|
self.assertEqual(body[1], [u'test', time, INSTANCE_ID_1, u'dep1'])
|
|
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_kpi_with_tenant_no_match(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
objects = self.mox.CreateMockAnything()
|
|
models.RawData.objects.filter(tenant='55555').AndReturn(objects)
|
|
objects.count().AndReturn(1)
|
|
results = self.mox.CreateMockAnything()
|
|
models.RequestTracker.objects.select_related().AndReturn(results)
|
|
results.exclude(last_timing=None).AndReturn(results)
|
|
results.exclude(start__lt=mox.IgnoreArg()).AndReturn(results)
|
|
results.order_by('duration').AndReturn(results)
|
|
tracker = self.mox.CreateMockAnything()
|
|
tracker.last_timing = self.mox.CreateMockAnything()
|
|
tracker.last_timing.end_raw = self.mox.CreateMockAnything()
|
|
tracker.last_timing.end_raw.event = 'test.end'
|
|
tracker.last_timing.end_raw.tenant = '55556'
|
|
deployment = self.mox.CreateMockAnything()
|
|
deployment.name = 'dep1'
|
|
tracker.last_timing.end_raw.deployment = deployment
|
|
tracker.lifecycle = self.mox.CreateMockAnything()
|
|
tracker.lifecycle.instance = INSTANCE_ID_1
|
|
tracker.duration = 10
|
|
results.__iter__().AndReturn([tracker].__iter__())
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_kpi(fake_request, '55555')
|
|
self.assertEqual(resp.status_code, 200)
|
|
body = resp.content
|
|
body = json.loads(body)
|
|
self.assertEqual(len(body), 1)
|
|
|
|
self.mox.VerifyAll()
|
|
|
|
def test_do_kpi_tenant_doesnt_exist(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
objects = self.mox.CreateMockAnything()
|
|
models.RawData.objects.filter(tenant='55555').AndReturn(objects)
|
|
objects.count().AndReturn(0)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.do_kpi(fake_request, '55555')
|
|
self.assertEqual(resp.status_code, 404)
|
|
body = resp.content
|
|
body = json.loads(body)
|
|
self.assertEqual(len(body), 2)
|
|
self.assertEqual(body[0], ['Error', 'Message'])
|
|
msg = 'Could not find raws for tenant 55555'
|
|
self.assertEqual(body[1], ['Not Found', msg])
|
|
|
|
self.mox.VerifyAll()
|
|
|
|
def test_model_factory_for_nova(self):
|
|
self.mox.UnsetStubs()
|
|
nova_model = stacky_server._model_factory('nova')
|
|
self.assertEqual(nova_model.model, models.RawData)
|
|
|
|
def test_model_factory_for_nova(self):
|
|
self.mox.UnsetStubs()
|
|
nova_model = stacky_server._model_factory('glance')
|
|
self.assertEqual(nova_model.model, models.GlanceRawData)
|
|
|
|
def test_model_factory_for_nova(self):
|
|
self.mox.UnsetStubs()
|
|
nova_model = stacky_server._model_factory('generic')
|
|
self.assertEqual(nova_model.model, models.GenericRawData)
|
|
|
|
def _assert_on_search_nova(self, json_resp, raw):
|
|
title = json_resp[0]
|
|
values = json_resp[1]
|
|
self.assertEqual(len(values), 9)
|
|
self.assertEqual([title[0], values[0]],["#", raw.id] )
|
|
self.assertEqual([title[1], values[1]], ['?', ' '])
|
|
self.assertEqual([title[2], values[2]], ["When",
|
|
str(dt.dt_from_decimal(raw.when))])
|
|
self.assertEqual([title[3], values[3]], ["Deployment", raw.deployment.name])
|
|
self.assertEqual([title[4], values[4]], ["Event", raw.event])
|
|
self.assertEqual([title[5], values[5]], ["Host", raw.host])
|
|
self.assertEqual([title[6], values[6]], ["State", raw.state])
|
|
self.assertEqual([title[7], values[7]], ["State'", raw.old_state])
|
|
|
|
def test_search_by_field_for_nova(self):
|
|
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
|
|
"State", "State'", "Task'"], [1, " ",
|
|
"2013-07-17 10:16:10.717219", "deployment",
|
|
"test.start", "example.com", "active", None, None]]
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'field': 'tenant', 'value': 'tenant'}
|
|
raw = self._create_raw()
|
|
results = self.mox.CreateMockAnything()
|
|
models.RawData.objects.filter(tenant='tenant').AndReturn(results)
|
|
results.order_by('-when').AndReturn([raw])
|
|
raw.search_results([], mox.IgnoreArg(), ' ').AndReturn(search_result)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.search(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self._assert_on_search_nova(json_resp, raw)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_search_by_field_for_nova_when_filters(self):
|
|
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
|
|
"State", "State'", "Task'"], [1, " ",
|
|
"2013-07-17 10:16:10.717219", "deployment",
|
|
"test.start", "example.com", "active", None, None]]
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'field': 'tenant', 'value': 'tenant',
|
|
'when_min': '1.1',
|
|
'when_max': '2.1'}
|
|
raw = self._create_raw()
|
|
results = self.mox.CreateMockAnything()
|
|
models.RawData.objects.filter(tenant='tenant',
|
|
when__gte=decimal.Decimal('1.1'),
|
|
when__lte=decimal.Decimal('2.1')).AndReturn(results)
|
|
results.order_by('-when').AndReturn([raw])
|
|
raw.search_results([], mox.IgnoreArg(), ' ').AndReturn(search_result)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.search(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self._assert_on_search_nova(json_resp, raw)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_search_by_field_for_nova_with_limit(self):
|
|
search_result = [["#", "?", "When", "Deployment", "Event", "Host",
|
|
"State", "State'", "Task'"], [1, " ",
|
|
"2013-07-17 10:16:10.717219", "deployment",
|
|
"test.start", "example.com", "active", None, None]]
|
|
search_result_2 = [["#", "?", "When", "Deployment", "Event", "Host",
|
|
"State", "State'", "Task'"], [1, " ",
|
|
"2013-07-17 10:16:10.717219", "deployment",
|
|
"test.start", "example.com", "active", None, None],[2, " ",
|
|
"2013-07-17 10:16:10.717219", "deployment",
|
|
"test.start", "example.com", "active", None, None]]
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'field': 'tenant', 'value': 'tenant', 'limit': '2',
|
|
'service': 'nova'}
|
|
raw1 = self._create_raw()
|
|
raw2 = self._create_raw()
|
|
raw3 = self._create_raw()
|
|
raw2.id = 2
|
|
raw3.id = 3
|
|
results = self.mox.CreateMockAnything()
|
|
models.RawData.objects.filter(tenant='tenant').AndReturn(results)
|
|
results.order_by('-when').AndReturn([raw1, raw2, raw3])
|
|
raw1.search_results([], mox.IgnoreArg(), ' ').AndReturn(search_result)
|
|
raw2.search_results(search_result, mox.IgnoreArg(),' ').AndReturn(search_result_2)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.search(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 200)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEqual(len(json_resp), 3)
|
|
self._assert_on_search_nova(json_resp, raw1)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_search_with_wrong_field_value_returns_400_error_and_a_message(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'field': 'tenant', 'value': 'tenant'}
|
|
models.RawData.objects.filter(tenant='tenant').AndRaise(FieldError)
|
|
self.mox.ReplayAll()
|
|
|
|
resp = stacky_server.search(fake_request)
|
|
|
|
self.assertEqual(resp.status_code, 400)
|
|
json_resp = json.loads(resp.content)
|
|
self.assertEquals(json_resp[0],[u'Error', u'Message'])
|
|
self.assertEquals(json_resp[1],
|
|
[u'Bad Request', u"The requested field"
|
|
u" 'tenant' does not exist for the corresponding object.\nNote: "
|
|
u"The field names of database are case-sensitive."])
|
|
|
|
self.mox.VerifyAll()
|
|
|
|
def test_model_search_default_limit(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {}
|
|
fake_model = self.mox.CreateMockAnything()
|
|
filters = {'field': 'value'}
|
|
results = self.mox.CreateMockAnything()
|
|
fake_model.filter(**filters).AndReturn(results)
|
|
results[None:50].AndReturn(results)
|
|
self.mox.ReplayAll()
|
|
actual_results = stacky_server.model_search(fake_request, fake_model,
|
|
filters)
|
|
self.assertEqual(actual_results, results)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_model_search_default_limit_with_offset(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'offset': '1'}
|
|
fake_model = self.mox.CreateMockAnything()
|
|
filters = {'field': 'value'}
|
|
results = self.mox.CreateMockAnything()
|
|
fake_model.filter(**filters).AndReturn(results)
|
|
results[1:51].AndReturn(results)
|
|
self.mox.ReplayAll()
|
|
actual_results = stacky_server.model_search(fake_request, fake_model,
|
|
filters)
|
|
self.assertEqual(actual_results, results)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_model_search_default_with_limit(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'limit': '1'}
|
|
fake_model = self.mox.CreateMockAnything()
|
|
filters = {'field': 'value'}
|
|
results = self.mox.CreateMockAnything()
|
|
fake_model.filter(**filters).AndReturn(results)
|
|
results[None:1].AndReturn(results)
|
|
self.mox.ReplayAll()
|
|
actual_results = stacky_server.model_search(fake_request, fake_model,
|
|
filters)
|
|
self.assertEqual(actual_results, results)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_model_search_default_with_limit_and_offset(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {'limit': '5',
|
|
'offset': '10'}
|
|
fake_model = self.mox.CreateMockAnything()
|
|
filters = {'field': 'value'}
|
|
results = self.mox.CreateMockAnything()
|
|
fake_model.filter(**filters).AndReturn(results)
|
|
results[10:15].AndReturn(results)
|
|
self.mox.ReplayAll()
|
|
actual_results = stacky_server.model_search(fake_request, fake_model,
|
|
filters)
|
|
self.assertEqual(actual_results, results)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_model_search_related(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {}
|
|
fake_model = self.mox.CreateMockAnything()
|
|
filters = {'field': 'value'}
|
|
results = self.mox.CreateMockAnything()
|
|
fake_model.select_related().AndReturn(results)
|
|
results.filter(**filters).AndReturn(results)
|
|
results[None:50].AndReturn(results)
|
|
self.mox.ReplayAll()
|
|
actual_results = stacky_server.model_search(fake_request, fake_model,
|
|
filters, related=True)
|
|
self.assertEqual(actual_results, results)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_model_order_by(self):
|
|
fake_request = self.mox.CreateMockAnything()
|
|
fake_request.GET = {}
|
|
fake_model = self.mox.CreateMockAnything()
|
|
filters = {'field': 'value'}
|
|
results = self.mox.CreateMockAnything()
|
|
fake_model.filter(**filters).AndReturn(results)
|
|
results.order_by('when').AndReturn(results)
|
|
results[None:50].AndReturn(results)
|
|
self.mox.ReplayAll()
|
|
actual_results = stacky_server.model_search(fake_request, fake_model,
|
|
filters, order_by='when')
|
|
self.assertEqual(actual_results, results)
|
|
self.mox.VerifyAll()
|
|
|
|
|
|
class JsonReportsSearchAPI(StacktachBaseTestCase):
|
|
def setUp(self):
|
|
self.mox = mox.Mox()
|
|
self.model = models.JsonReport.objects
|
|
self.model_search_result = self.mox.CreateMockAnything()
|
|
self.model_search_result.id = '5975'
|
|
self.model_search_result.period_start = datetime.datetime(2014, 1, 18,)
|
|
self.model_search_result.period_end = datetime.datetime(2014, 1, 19)
|
|
self.model_search_result.created = 1388569200
|
|
self.model_search_result.name = 'nova usage audit'
|
|
self.model_search_result.version = 4
|
|
|
|
def tearDown(self):
|
|
self.mox.UnsetStubs()
|
|
|
|
def test_jsonreports_search_order_by_id(self):
|
|
request = self.mox.CreateMockAnything()
|
|
request.GET = {
|
|
'id': 1,
|
|
'name': 'nova_usage_audit',
|
|
'period_start': '2014-01-01 00:00:00',
|
|
'period_end': '2014-01-02 00:00:00',
|
|
'created': '2014-01-01',
|
|
}
|
|
filters = {
|
|
'id__exact': 1,
|
|
'period_start__exact': '2014-01-01 00:00:00',
|
|
'name__exact': 'nova_usage_audit',
|
|
'period_end__exact': '2014-01-02 00:00:00',
|
|
'created__lt': decimal.Decimal('1388620800'),
|
|
'created__gt': decimal.Decimal('1388534400'),
|
|
}
|
|
self.mox.StubOutWithMock(stacky_server, 'model_search')
|
|
stacky_server.model_search(request, self.model, filters,
|
|
order_by='-id').AndReturn(
|
|
[self.model_search_result])
|
|
self.mox.ReplayAll()
|
|
|
|
actual_result = stacky_server.do_jsonreports_search(request).content
|
|
expected_result = [
|
|
['Id', 'Start', 'End', 'Created', 'Name', 'Version'],
|
|
['5975', '2014-01-18 00:00:00', '2014-01-19 00:00:00',
|
|
'2014-01-01 09:40:00', 'nova usage audit', 4]
|
|
]
|
|
|
|
self.assertEquals(ast.literal_eval(actual_result), expected_result)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_jsonreports_search_with_limit_offset(self):
|
|
request = self.mox.CreateMockAnything()
|
|
request.GET = {
|
|
'period_start': '2014-01-01 09:40:00',
|
|
'name': 'nova_usage_audit',
|
|
'limit': 10,
|
|
'offset': 5
|
|
}
|
|
filters = {
|
|
'period_start__exact': '2014-01-01 09:40:00',
|
|
'name__exact': 'nova_usage_audit',
|
|
}
|
|
self.mox.StubOutWithMock(stacky_server, 'model_search')
|
|
stacky_server.model_search(request, self.model, filters,
|
|
order_by='-id').AndReturn(
|
|
[self.model_search_result])
|
|
self.mox.ReplayAll()
|
|
|
|
actual_result = stacky_server.do_jsonreports_search(request).content
|
|
expected_result = \
|
|
[['Id', 'Start', 'End', 'Created', 'Name', 'Version'],
|
|
['5975', '2014-01-18 00:00:00', '2014-01-19 00:00:00',
|
|
'2014-01-01 09:40:00', 'nova usage audit', 4]]
|
|
|
|
self.assertEquals(ast.literal_eval(actual_result), expected_result)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_jsonreports_search_with_invalid_fields(self):
|
|
request = self.mox.CreateMockAnything()
|
|
request.GET = {'invalid_column_1': 'value_1',
|
|
'invalid_column_2': 'value_2',
|
|
'version': 4,
|
|
'json': 'json',
|
|
'period_start': '2014-01-01 00:00:00'}
|
|
self.mox.ReplayAll()
|
|
|
|
actual_result = stacky_server.do_jsonreports_search(request).content
|
|
expected_result = [
|
|
["Error", "Message"],
|
|
["Bad Request", "The requested fields either do not exist for the "
|
|
"corresponding object or are not searchable: invalid_column_1, "
|
|
"invalid_column_2, json, version. Note: The field names of "
|
|
"database are case-sensitive."]
|
|
]
|
|
self.assertEqual(ast.literal_eval(actual_result), expected_result)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_jsonreports_search_with_invalid_period_start(self):
|
|
request = self.mox.CreateMockAnything()
|
|
request.GET = {'period_start': '1234'}
|
|
self.mox.ReplayAll()
|
|
|
|
actual_result = stacky_server.do_jsonreports_search(request).content
|
|
expected_result = [
|
|
["Error", "Message"],
|
|
["Bad Request", "'1234' value has an invalid format. It must be in "
|
|
"YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."]
|
|
]
|
|
self.assertEqual(ast.literal_eval(actual_result), expected_result)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_jsonreports_search_with_invalid_period_end(self):
|
|
request = self.mox.CreateMockAnything()
|
|
request.GET = {'period_end': '1234'}
|
|
self.mox.ReplayAll()
|
|
|
|
actual_result = stacky_server.do_jsonreports_search(request).content
|
|
expected_result = [
|
|
["Error", "Message"],
|
|
["Bad Request", "'1234' value has an invalid format. It must be in "
|
|
"YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ] format."]
|
|
]
|
|
self.assertEqual(ast.literal_eval(actual_result), expected_result)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_jsonreports_search_with_invalid_id(self):
|
|
request = self.mox.CreateMockAnything()
|
|
request.GET = {'id': 'abcd'}
|
|
self.mox.ReplayAll()
|
|
|
|
actual_result = stacky_server.do_jsonreports_search(request).content
|
|
expected_result = [
|
|
["Error", "Message"],
|
|
["Bad Request", "'abcd' value has an invalid format. It must be in "
|
|
"integer format."]
|
|
]
|
|
self.assertEqual(ast.literal_eval(actual_result), expected_result)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_jsonreports_search_with_invalid_created_format(self):
|
|
request = self.mox.CreateMockAnything()
|
|
request.GET = {
|
|
'created': '2014-01-01 00:00:00'
|
|
}
|
|
self.mox.ReplayAll()
|
|
|
|
actual_result = stacky_server.do_jsonreports_search(request).content
|
|
expected_result = [
|
|
["Error", "Message"],
|
|
["Bad Request", "'2014-01-01 00:00:00' value has an invalid format."
|
|
" It must be in YYYY-MM-DD format."]
|
|
]
|
|
|
|
self.assertEqual(ast.literal_eval(actual_result), expected_result)
|
|
self.mox.VerifyAll()
|
|
|
|
def test_jsonreports_search_by_invalid_created_400(self):
|
|
request = self.mox.CreateMockAnything()
|
|
request.GET = {
|
|
'created': '1234'}
|
|
self.mox.ReplayAll()
|
|
|
|
actual_result = stacky_server.do_jsonreports_search(request).content
|
|
expected_result = \
|
|
[
|
|
["Error", "Message"],
|
|
["Bad Request", "'1234' value has an invalid format. It must be in "
|
|
"YYYY-MM-DD format."]
|
|
]
|
|
self.assertEquals(ast.literal_eval(actual_result), expected_result)
|
|
self.mox.VerifyAll()
|