commit 6306a4e3b5670cd68fd450cd9ed39f88c2b528ac Author: Arturo Filastò hellais@torproject.org Date: Wed May 2 22:14:37 2012 +0200
Properly accept assets when running tests --- oonicli.py | 20 ++++++++++---------- plugins/skel.py | 2 +- plugoo/tests.py | 6 ++++-- plugoo/work.py | 42 +++++++++++++++++++++++------------------- 4 files changed, 38 insertions(+), 32 deletions(-)
diff --git a/oonicli.py b/oonicli.py index 0a9c1cc..c2d01d2 100755 --- a/oonicli.py +++ b/oonicli.py @@ -9,7 +9,7 @@ #
import sys -from plugoo import tests, work +from plugoo import tests, work, assets
from twisted.python import usage from twisted.plugin import getPlugins @@ -62,20 +62,20 @@ class StupidAsset(object): self.idx += 1 return self.idx
+ def runTest(test, options): - pprint(test) - wgen = work.WorkGenerator(StupidAsset, plugoo[test].__class__, - dict(options), - start=options['resume']) + asset = None + if options['asset']: + print options['asset'] + asset = assets.Asset(options['asset']) + print asset + + wgen = work.WorkGenerator(asset, plugoo[test].__class__, + dict(options), start=options['resume'])
worker = work.Worker() for x in wgen: - print "------" - print "Work unit" - print "------" - print x.serialize() worker.push(x) - print "------"
reactor.run()
diff --git a/plugins/skel.py b/plugins/skel.py index 41420b1..0427239 100644 --- a/plugins/skel.py +++ b/plugins/skel.py @@ -4,7 +4,7 @@ from twisted.plugin import IPlugin from plugoo.tests import ITest, TwistedTest
class SkelArgs(usage.Options): - optParameters = [['assets', 'a', None, 'Asset file'], + optParameters = [['asset', 'a', None, 'Asset file'], ['resume', 'r', 0, 'Resume at this index']]
class SkelTest(TwistedTest): diff --git a/plugoo/tests.py b/plugoo/tests.py index 41363ee..e74586c 100644 --- a/plugoo/tests.py +++ b/plugoo/tests.py @@ -171,10 +171,11 @@ class TwistedTest(object): #self.ooninet = ooninet
def __repr__(self): - return "<TwistedTest %s %s %s>" % (self.arguments, self.asset, self.node) + return "<TwistedTest %s %s>" % (self.arguments, self.asset)
def finished(self, result): #self.ooninet.report(result) + print "FINIHSED" self.end_time = datetime.now() result['start_time'] = self.start_time result['end_time'] = self.end_time @@ -182,6 +183,7 @@ class TwistedTest(object): return self.d.callback(result)
def startTest(self): + print "Starting test" self.d = defer.Deferred() result = {} reactor.callLater(2.0, self.finished, result) @@ -189,7 +191,7 @@ class TwistedTest(object):
class TwistedTestFactory(object):
- test = StupidTest + test = None
def __init__(self, assets, node, idx=0): diff --git a/plugoo/work.py b/plugoo/work.py index 809e9bd..7be4758 100644 --- a/plugoo/work.py +++ b/plugoo/work.py @@ -31,13 +31,10 @@ class Worker(object): self._queued = []
def _run(self, r): - print "RUNNING" self._running -= 1 if self._running < self.maxconcurrent and self._queued: workunit, d = self._queued.pop(0) for work in workunit: - print "Going over workunits bis" - print work self._running += 1 actuald = work.startTest().addBoth(self._run) if isinstance(r, failure.Failure): @@ -51,11 +48,8 @@ class Worker(object): return r
def push(self, workunit): - print "PUSHING" if self._running < self.maxconcurrent: for work in workunit: - print "Going over work units" - print dir(work) self._running += 1 work.startTest().addBoth(self._run) return @@ -83,11 +77,13 @@ class WorkUnit(object): test = None arguments = None
- def __init__(self, node, asset, test, idx, arguments=None): + def __init__(self, asset, test, idx, arguments=None): self.asset = asset - self.assetGenerator = iter(asset) + if not asset: + self.assetGenerator = iter([1]) + else: + self.assetGenerator = iter(asset) self.Test = test - self.node = node self.arguments = arguments self.idx = idx
@@ -109,14 +105,9 @@ class WorkUnit(object): """ try: asset = self.assetGenerator.next() - print "Next shit.." - print asset ret = self.Test(asset, self.arguments) - print type(ret) - print repr(ret) return ret except StopIteration: - print "Stopped iteration!" raise StopIteration
@@ -127,14 +118,14 @@ class WorkGenerator(object): This shall be run on the machine running OONI-cli. The returned WorkUnits can either be run locally or on a remote OONI Node or Network Node. """ - node = LocalNode size = 10
def __init__(self, asset, test, arguments=None, start=None): - self.assetGenerator = asset() + self.assetGenerator = asset self.Test = test self.arguments = arguments self.idx = 0 + self.end = False if start: self.skip(start)
@@ -148,11 +139,24 @@ class WorkGenerator(object): self.idx += 1
def next(self): + if self.end: + raise StopIteration + + if not self.assetGenerator: + self.end = True + return WorkUnit(None, self.Test, self.idx, self.arguments) + # Plank asset p_asset = [] for i in xrange(0, self.size): - p_asset.append(self.assetGenerator.next()) - self.idx += 1 - return WorkUnit(self.node, p_asset, self.Test, self.idx, self.arguments) + try: + asset = self.assetGenerator.next() + p_asset.append(asset) + print asset + except StopIteration: + self.end = True + break
+ self.idx += 1 + return WorkUnit(p_asset, self.Test, self.idx, self.arguments)