import StringIO
from twisted.python import log
from twisted.internet import defer
from twisted.trial import unittest
from axiom import store, attributes, scheduler, iaxiom
from axiom.dependency import installOn
from xmantissa import stats
from epsilon.extime import Time
from epsilon import juice
class StatCollectorTest(unittest.TestCase):
def testStatCollectionAndRecording(self):
s = store.Store()
s.parent = s #should this break something? it should break something.
installOn(scheduler.Scheduler(store=s), s)
svc = stats.StatsService(store=s)
installOn(svc, s)
log.msg(interface=iaxiom.IStatEvent, stat_foo=17)
s.findUnique(stats.StatSampler).run()
minutebucket = list(s.query(stats.StatBucket, attributes.AND(stats.StatBucket.type == u"foo",
stats.StatBucket.interval == u"minute")))
self.assertEquals(len(minutebucket), 1)
self.assertEquals(minutebucket[0].value, 17)
svc.stopService()
class FakeProtocol(juice.Juice):
sent = False
def sendBoxCommand(self, command, box, requiresAnswer=True):
self.sent = True
class RemoteStatCollectorTest(unittest.TestCase):
def testUpdates(self):
r = stats.RemoteStatsObserver(hostname="fred", port=1)
r.protocol = FakeProtocol(False)
r.statUpdate(Time(), [("candy bars", 17), ("enchiladas", 2)])
self.assertEquals(r.protocol.sent, True)
def testConnecting(self):
self.connected = False
def win(_):
self.connected = True
return defer.Deferred()
f = stats.RemoteStatsObserver._connectToStatsServer
stats.RemoteStatsObserver._connectToStatsServer = win
r = stats.RemoteStatsObserver (hostname="fred", port=1)
r.activate()
r.statUpdate(Time(), [("candy bars", 17), ("enchiladas", 2)])
self.assertEquals(self.connected, True)
stats.RemoteStatsObserver._connectToStatsServer = f
syntax highlighted by Code2HTML, v. 0.9.1