+ def value_stored(self, result, value):
+ self.stored -= 1
+ if self.stored == 0:
+ self.get_values()
+
+ def store_values(self, result):
+ self.stored = 0
+ for i in range(len(self.l)):
+ for j in range(0, i+1):
+ self.stored += 1
+ d = self.l[j].storeValue(sha.new(str(self.startport+i)).digest(), str((self.startport+i)*(j+1)))
+ d.addCallback(self.value_stored, self.startport+i)
+
+ def check_values(self, result, values):
+ self.checked -= 1
+ self.failUnless(len(result) == len(values))
+ for v in result:
+ self.failUnless(v in values)
+ if self.checked == 0:
+ self.lastDefer.callback(1)
+
+ def get_values(self):
+ self.checked = 0
+ for i in range(len(self.l)):
+ for j in random.sample(xrange(len(self.l)), 4):
+ self.checked += 1
+ d = self.l[i].getValue(sha.new(str(self.startport+j)).digest())
+ check = []
+ for k in range(self.startport+j, (self.startport+j)*(j+1)+1, self.startport+j):
+ check.append(str(k))
+ d.addCallback(self.check_values, check)
+
+ def store_join(self, result, next_node):
+ d = self.l[next_node].join()
+ if next_node + 1 < len(self.l):
+ d.addCallback(self.store_join, next_node + 1)
+ else:
+ d.addCallback(self.store_values)
+
+ def test_store(self):
+ from twisted.internet.base import DelayedCall
+ DelayedCall.debug = True
+ self.lastDefer = defer.Deferred()
+ d = self.l[0].join()
+ d.addCallback(self.store_join, 1)
+ return self.lastDefer
+