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)]); }