stacktach/tests/unit/test_stacktach.py
2013-01-25 16:03:58 -05:00

189 lines
7.4 KiB
Python

import datetime
import os
import sys
import unittest
import mox
import utils
utils.setup_sys_path()
from utils import INSTANCE_ID_1
from utils import INSTANCE_ID_2
from utils import MESSAGE_ID_1
from utils import MESSAGE_ID_2
from utils import REQUEST_ID_1
from utils import REQUEST_ID_2
from utils import REQUEST_ID_3
from stacktach import views
class StacktachLifecycleTestCase(unittest.TestCase):
def setUp(self):
self.mox = mox.Mox()
views.STACKDB = self.mox.CreateMockAnything()
def tearDown(self):
self.mox.UnsetStubs()
def test_start_kpi_tracking_not_update(self):
raw = self.mox.CreateMockAnything()
raw.event = 'compute.instance.create.start'
self.mox.ReplayAll()
views.start_kpi_tracking(None, raw)
self.mox.VerifyAll()
def test_start_kpi_tracking_not_from_api(self):
raw = self.mox.CreateMockAnything()
raw.event = 'compute.instance.update'
raw.host = 'compute'
self.mox.ReplayAll()
views.start_kpi_tracking(None, raw)
self.mox.VerifyAll()
def test_start_kpi_tracking(self):
lifecycle = self.mox.CreateMockAnything()
tracker = self.mox.CreateMockAnything()
when = utils.decimal_utcnow()
raw = utils.create_raw(self.mox, when, 'compute.instance.update',
host='api')
views.STACKDB.create_request_tracker(lifecycle=lifecycle,
request_id=REQUEST_ID_1,
start=when,
last_timing=None,
duration=str(0.0))\
.AndReturn(tracker)
views.STACKDB.save(tracker)
self.mox.ReplayAll()
views.start_kpi_tracking(lifecycle, raw)
self.mox.VerifyAll()
def test_update_kpi_no_trackers(self):
raw = self.mox.CreateMockAnything()
raw.request_id = REQUEST_ID_1
views.STACKDB.find_request_trackers(request_id=REQUEST_ID_1)\
.AndReturn([])
self.mox.ReplayAll()
views.update_kpi(None, raw)
self.mox.VerifyAll()
def test_update_kpi(self):
lifecycle = self.mox.CreateMockAnything()
end = utils.decimal_utcnow()
raw = self.mox.CreateMockAnything()
raw.request_id = REQUEST_ID_1
raw.when=end
timing = utils.create_timing(self.mox, 'compute.instance.create',
lifecycle, end_when=end)
start = utils.decimal_utcnow()
tracker = utils.create_tracker(self.mox, REQUEST_ID_1, lifecycle,
start)
views.STACKDB.find_request_trackers(request_id=REQUEST_ID_1)\
.AndReturn([tracker])
views.STACKDB.save(tracker)
self.mox.ReplayAll()
views.update_kpi(timing, raw)
self.assertEqual(tracker.request_id, REQUEST_ID_1)
self.assertEqual(tracker.lifecycle, lifecycle)
self.assertEqual(tracker.last_timing, timing)
self.assertEqual(tracker.start, start)
self.assertEqual(tracker.duration, end-start)
self.mox.VerifyAll()
def test_aggregate_lifecycle_no_instance(self):
raw = self.mox.CreateMockAnything()
raw.instance = None
self.mox.ReplayAll()
views.aggregate_lifecycle(raw)
self.mox.VerifyAll()
def test_aggregate_lifecycle_start(self):
event_name = 'compute.instance.create'
event = '%s.start' % event_name
when = datetime.datetime.utcnow()
raw = utils.create_raw(self.mox, when, event, state='building')
views.STACKDB.find_lifecycles(instance=INSTANCE_ID_1).AndReturn([])
lifecycle = self.mox.CreateMockAnything()
lifecycle.instance = INSTANCE_ID_1
views.STACKDB.create_lifecycle(instance=INSTANCE_ID_1).AndReturn(lifecycle)
views.STACKDB.save(lifecycle)
views.STACKDB.find_timings(name=event_name, lifecycle=lifecycle).AndReturn([])
timing = utils.create_timing(self.mox, event_name, lifecycle)
views.STACKDB.create_timing(lifecycle=lifecycle, name=event_name).AndReturn(timing)
views.STACKDB.save(timing)
self.mox.ReplayAll()
views.aggregate_lifecycle(raw)
self.assertEqual(lifecycle.last_raw, raw)
self.assertEqual(lifecycle.last_state, 'building')
self.assertEqual(lifecycle.last_task_state, '')
self.assertEqual(timing.name, event_name)
self.assertEqual(timing.lifecycle, lifecycle)
self.assertEqual(timing.start_raw, raw)
self.assertEqual(timing.start_when, when)
self.mox.VerifyAll()
def test_aggregate_lifecycle_end(self):
event_name = 'compute.instance.create'
start_event = '%s.end' % event_name
end_event = '%s.end' % event_name
start_when = datetime.datetime.utcnow()
end_when = datetime.datetime.utcnow()
start_raw = utils.create_raw(self.mox, start_when, start_event,
state='building')
end_raw = utils.create_raw(self.mox, end_when, end_event,
old_task='build')
lifecycle = utils.create_lifecycle(self.mox, INSTANCE_ID_1,
'active', '', start_raw)
views.STACKDB.find_lifecycles(instance=INSTANCE_ID_1).AndReturn([lifecycle])
views.STACKDB.save(lifecycle)
timing = utils.create_timing(self.mox, event_name, lifecycle,
start_raw=start_raw,
start_when=start_when)
views.STACKDB.find_timings(name=event_name, lifecycle=lifecycle).AndReturn([timing])
self.mox.StubOutWithMock(views, "update_kpi")
views.update_kpi(timing, end_raw)
views.STACKDB.save(timing)
self.mox.ReplayAll()
views.aggregate_lifecycle(end_raw)
self.assertEqual(lifecycle.last_raw, end_raw)
self.assertEqual(lifecycle.last_state, 'active')
self.assertEqual(lifecycle.last_task_state, 'build')
self.assertEqual(timing.name, event_name)
self.assertEqual(timing.lifecycle, lifecycle)
self.assertEqual(timing.start_raw, start_raw)
self.assertEqual(timing.start_when, start_when)
self.assertEqual(timing.end_raw, end_raw)
self.assertEqual(timing.end_when, end_when)
self.assertEqual(timing.diff, end_when-start_when)
self.mox.VerifyAll()
def test_aggregate_lifecycle_update(self):
event = 'compute.instance.update'
when = datetime.datetime.utcnow()
raw = utils.create_raw(self.mox, when, event, old_task='reboot')
views.STACKDB.find_lifecycles(instance=INSTANCE_ID_1).AndReturn([])
lifecycle = self.mox.CreateMockAnything()
lifecycle.instance = INSTANCE_ID_1
views.STACKDB.create_lifecycle(instance=INSTANCE_ID_1).AndReturn(lifecycle)
views.STACKDB.save(lifecycle)
self.mox.StubOutWithMock(views, "start_kpi_tracking")
views.start_kpi_tracking(lifecycle, raw)
self.mox.ReplayAll()
views.aggregate_lifecycle(raw)
self.assertEqual(lifecycle.last_raw, raw)
self.assertEqual(lifecycle.last_state, 'active')
self.assertEqual(lifecycle.last_task_state, 'reboot')
self.mox.VerifyAll()