from amiko.core import log, nodestate, messages from amiko.utils import serializable import largenetwork_setup verbose = '-v' in sys.argv class NodeState_IgnoreMakeRoute(nodestate.NodeState): def handleMessage(self, msg): if msg.__class__ == messages.MakeRoute: return [] return nodestate.NodeState.handleMessage(self, msg) serializable.registerClass(NodeState_IgnoreMakeRoute) class Test(unittest.TestCase): def setUp(self): self.nodes = [] def tearDown(self): for n in self.nodes: n.stop() def printNodeInfo(self, i, data): print
def setUp(self): self.registeredClassesBackup = serializable.registeredClasses serializable.registeredClasses = {} serializable.registerClass(C)
def haveRouteIncoming(self, msg): ret = self.object.haveRouteIncoming(msg) #Filter out the Lock message: return [r for r in ret if r.__class__ != messages.Lock] def haveRouteOutgoing(self, msg): ret = self.object.haveRouteOutgoing(msg) #Filter out the Lock message: return [r for r in ret if r.__class__ != messages.Lock] def __getattr__(self, name): #For all attributes not defined here, forward the object's attributes: return getattr(self.object, name) serializable.registerClass(PayerLink_NoLock) class NodeState_NoLock(nodestate.NodeState): def msg_makePayer(self, msg): ret = nodestate.NodeState.msg_makePayer(self, msg) #Insert proxy object: self.payerLink = PayerLink_NoLock(object=self.payerLink) return ret serializable.registerClass(NodeState_NoLock)
#Let us receive the same message again in 10 seconds from now return \ [ messages.TimeoutMessage(timestamp=time.time() + 10.0, message=msg) ] elif msg.__class__ == messages.HaveNoRoute and self.hasReceivedLock: return [] #ignore HaveNoRoute from our "victim" elif msg.__class__ == messages.NodeStateTimeout_Lock: return [] #don't have a time-out ourselves #else: fall-through; do normal handling of the Lock message return nodestate.NodeState.handleMessage(self, msg) serializable.registerClass(NodeState_LockDelay) class Test(unittest.TestCase): def setUp(self): self.nodes = [] def tearDown(self): for n in self.nodes: n.stop() def printNodeInfo(self, i, data): print print '===========================' print 'Node %d:' % i print '==========================='
class PayeeLink_NoCommit(serializable.Serializable): serializableAttributes = {'object': None} def lockOutgoing(self, msg): #By raising an exception, Amiko Pay interprets the Lock message as #invalid, and turns it into a NOP. So, the entire payee node considers #this transaction as being still in a reserved state. raise Exception('Exception raised by test code (intended)') def __getattr__(self, name): #For all attributes not defined here, forward the object's attributes: return getattr(self.object, name) serializable.registerClass(PayeeLink_NoCommit) class NodeState_NoCommit(nodestate.NodeState): def msg_request(self, msg): ret = nodestate.NodeState.msg_request(self, msg) #Insert proxy object: payeeLinkID = ret[0].value self.payeeLinks[payeeLinkID] = PayeeLink_NoCommit( object=self.payeeLinks[payeeLinkID]) return ret serializable.registerClass(NodeState_NoCommit)
self.state.append(('getOutgoingCommitTimeout', routeID)) return 2016 def __getattr__(self, name): if name.startswith('__'): raise AttributeError(name) def generic_method(*args, **kwargs): #print self, (name, args, kwargs) self.state.append((name, args, kwargs)) return [name], [] return generic_method serializable.registerClass(DummyChannel) class Test(unittest.TestCase): def setUp(self): self.link = link.Link(remoteID='remote', localID='local', channels=[]) def test_defaultAttributes(self): 'Test default attributes' self.assertEqual(self.link.remoteID, 'remote') self.assertEqual(self.link.localID, 'local') self.assertEqual(self.link.channels, []) def test_msg_ownDeposit(self): 'test msg_ownDeposit'
class PayeeLink_NoCommit(serializable.Serializable): serializableAttributes = {'object': None} def lockOutgoing(self, msg): #By raising an exception, Amiko Pay interprets the Lock message as #invalid, and turns it into a NOP. So, the entire payee node considers #this transaction as being still in a reserved state. raise Exception('Exception raised by test code (intended)') def __getattr__(self, name): #For all attributes not defined here, forward the object's attributes: return getattr(self.object, name) serializable.registerClass(PayeeLink_NoCommit) class NodeState_NoCommit(nodestate.NodeState): def msg_request(self, msg): ret = nodestate.NodeState.msg_request(self, msg) #Insert proxy object: payeeLinkID = ret[0].value self.payeeLinks[payeeLinkID] = PayeeLink_NoCommit(object=self.payeeLinks[payeeLinkID]) return ret serializable.registerClass(NodeState_NoCommit)
ret = self.object.haveRouteIncoming(msg) #Filter out the Lock message: return [r for r in ret if r.__class__ != messages.Lock] def haveRouteOutgoing(self, msg): ret = self.object.haveRouteOutgoing(msg) #Filter out the Lock message: return [r for r in ret if r.__class__ != messages.Lock] def __getattr__(self, name): #For all attributes not defined here, forward the object's attributes: return getattr(self.object, name) serializable.registerClass(PayerLink_NoLock) class NodeState_NoLock(nodestate.NodeState): def msg_makePayer(self, msg): ret = nodestate.NodeState.msg_makePayer(self, msg) #Insert proxy object: self.payerLink = PayerLink_NoLock(object=self.payerLink) return ret serializable.registerClass(NodeState_NoLock)
self.hasReceivedLock = True #Let us receive the same message again in 10 seconds from now return \ [ messages.TimeoutMessage(timestamp=time.time() + 10.0, message=msg) ] elif msg.__class__ == messages.HaveNoRoute and self.hasReceivedLock: return [] #ignore HaveNoRoute from our "victim" elif msg.__class__ == messages.NodeStateTimeout_Lock: return [] #don't have a time-out ourselves #else: fall-through; do normal handling of the Lock message return nodestate.NodeState.handleMessage(self, msg) serializable.registerClass(NodeState_LockDelay) class Test(unittest.TestCase): def setUp(self): self.nodes = [] def tearDown(self): for n in self.nodes: n.stop() def printNodeInfo(self, i, data): print
return 2016 def __getattr__(self, name): if name.startswith('__'): raise AttributeError(name) def generic_method(*args, **kwargs): #print self, (name, args, kwargs) self.state.append((name, args, kwargs)) return [name], [] return generic_method serializable.registerClass(DummyChannel) class Test(unittest.TestCase): def setUp(self): self.link = link.Link(remoteID='remote', localID='local', channels=[]) def test_defaultAttributes(self): 'Test default attributes' self.assertEqual(self.link.remoteID, 'remote') self.assertEqual(self.link.localID, 'local') self.assertEqual(self.link.channels, [])