Esempio n. 1
0
 function __construct()
 {
     parent::__construct('Kademlia Bucket Test');
     $settings = new Kademlia\Settings();
     $settings->own_node_id = Kademlia\Node::randomNodeId();
     $this->settings = $settings;
 }
Esempio n. 2
0
 static function constructNode($overwrite_data = array(), $overwrite_host = NULL)
 {
     $valid_host = "8.8.8.8";
     $valid_data = ["id" => $first_node = Kademlia\Node::randomNodeId()];
     $host = $overwrite_host !== NULL ? $overwrite_host : $valid_host;
     $data = array_merge($valid_data, $overwrite_data);
     return new Kademlia\Node($data, $host);
 }
Esempio n. 3
0
 public function testSetsOwnNodeIdWhenNodeNotFound()
 {
     $settings = new Kademlia\Settings();
     $settings->id = NULL;
     $bootstrap = new Kademlia\Bootstrap($settings, $this->node_list);
     $callback = new TestCallback();
     $bootstrap->enqueue()->allDone([$callback, 'callMe']);
     var_dump($bootstrap->find_node_task);
     $bootstrap->find_node_task->emit('success', Kademlia\Node::randomNodeId());
 }
Esempio n. 4
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)]);
 }
Esempio n. 6
0
 public function parseNodeList($encoded_result = '{}')
 {
     $result = @json_decode($encoded_result, true);
     if ($result === NULL) {
         $result = [];
     }
     $nodes = [];
     if (!is_array($result['nodes'])) {
         $result['nodes'] = [];
     }
     foreach ($result['nodes'] as $data) {
         $n = new \Kademlia\Node($data);
         assert(count($data['protocols']) > 0);
         if (count($n->data['protocols']) === 0) {
             print_r($result['nodes']);
             assert(false);
         }
         if ($n->isValid()) {
             array_push($nodes, $n);
         }
     }
     return new \Kademlia\NodeList($nodes);
 }