Esempio n. 1
0
 public function testDistance()
 {
     $data_a = ['id' => str_repeat('FF', N / 8)];
     $node_a = KademliaTestFactory::constructNode($data_a);
     $zeros = Kademlia\Node::hexId2bin(str_repeat('00', N / 8));
     $this->assertEqual($node_a->distanceTo($node_a), $zeros);
     $data_b = ['id' => str_repeat('FF', N / 8)];
     $data_b['id'][2 * N / 8 - 1] = 'E';
     $node_b = KademliaTestFactory::constructNode($data_b);
     $one = Kademlia\Node::hexid2bin(str_repeat('0', 2 * N / 8 - 1) . '1');
     $this->assertEqual($node_a->distanceTo($node_b), $one);
 }
 public function testCallsFindValueForNodes()
 {
     $mock_protocol =& new MockProtocol();
     $mock_task =& new MockTask();
     $mock_settings =& new MockSettings();
     $mock_settings->own_node_id = Kademlia\Node::randomNodeId();
     $mock_settings->returns('instantiateProtocolById', $mock_protocol);
     $mock_protocol->setReturnValue('sendFindRequest', $mock_task);
     $mock_nodes = [];
     $M = $mock_settings->alpha + 10;
     for ($i = 0; $i < $M; $i++) {
         $mock_nodes[$i] =& new MockNode();
         $mock_nodes[$i]->returns('favoriteProtocolId', 0);
         $mock_node_id = str_repeat('00', N / 8);
         $mock_node_id[N / 8 - 1 - $i] = '1';
         $mock_nodes[$i]->returns('idBin', Kademlia\Node::hexId2bin($mock_node_id));
     }
     $needle_id = str_repeat('00', N / 8);
     $needle_id = Kademlia\Node::hexId2bin($needle_id);
     $task = new Kademlia\FindValue($mock_settings, $needle_id, new Kademlia\NodeList($mock_nodes));
     $task->enqueue();
     $mock_protocol->expectOnce('sendFindRequest', [Kademlia\Find::VALUE, array_slice($mock_nodes, 0, $mock_settings->alpha)]);
 }