stats: don't return booleans: it violates the schema. Add a test.

This commit is contained in:
Brian Warner 2008-12-04 15:01:24 -07:00
parent 7cfc74bcc9
commit 7c4edac582
2 changed files with 25 additions and 1 deletions

View File

@ -866,6 +866,8 @@ class StorageServer(service.MultiService, Referenceable):
fileutil.rm_dir(self.incomingdir)
def get_stats(self):
# remember: RIStatsProvider requires that our return dict
# contains numeric values.
stats = { 'storage_server.allocated': self.allocated_size(), }
for category,ld in self.get_latencies().items():
for name,v in ld.items():
@ -896,7 +898,7 @@ class StorageServer(service.MultiService, Referenceable):
except AttributeError:
# os.statvfs is only available on unix
pass
stats["storage_server.accepting_immutable_shares"] = writeable
stats["storage_server.accepting_immutable_shares"] = int(writeable)
return stats

View File

@ -403,6 +403,28 @@ class SystemTest(SystemTestMixin, unittest.TestCase):
return d
d.addCallback(_upload_resumable)
def _grab_stats(ignored):
# the StatsProvider doesn't normally publish a FURL:
# instead it passes a live reference to the StatsGatherer
# (if and when it connects). To exercise the remote stats
# interface, we manually publish client0's StatsProvider
# and use client1 to query it.
sp = self.clients[0].stats_provider
sp_furl = self.clients[0].tub.registerReference(sp)
d = self.clients[1].tub.getReference(sp_furl)
d.addCallback(lambda sp_rref: sp_rref.callRemote("get_stats"))
def _got_stats(stats):
#print "STATS"
#from pprint import pprint
#pprint(stats)
s = stats["stats"]
self.failUnlessEqual(s["storage_server.accepting_immutable_shares"], 1)
c = stats["counters"]
self.failUnlessEqual(c["storage_server.allocate"], 2)
d.addCallback(_got_stats)
return d
d.addCallback(_grab_stats)
return d
def _find_shares(self, basedir):