Beispiel #1
0
 public function testMsgDbDefault()
 {
     $uuid1 = '10000000-1000-4001-8001-1000000000';
     $uuid2 = '20000000-2000-4002-8002-20000000';
     @unlink('test_data/bucket_root.yml');
     $runName = uniqid('', true);
     $prvFileName = 'testfile_cronjob_id_rsa_' . date('Ymd_His') . '_' . $runName . '.prv';
     $pubFileName = 'testfile_cronjob_id_rsa_' . date('Ymd_His') . '_' . $runName . '.pub';
     $settignsFileName = 'testfile_cronjob_settings_' . date('Ymd_His') . '_' . $runName . '.pub';
     file_put_contents('test_data/' . $prvFileName, static::NODE_LOCAL_SSL_KEY_PRV);
     file_put_contents('test_data/' . $pubFileName, static::NODE_LOCAL_SSL_KEY_PUB);
     $settings = new Settings('test_data/' . $settignsFileName);
     $settings->data['datadir'] = 'test_data';
     $settings->data['node']['id'] = Node::genIdHexStr(static::NODE_LOCAL_SSL_KEY_PUB);
     $settings->data['node']['sslKeyPrvPass'] = '******';
     $settings->data['node']['sslKeyPrvPath'] = 'test_data/' . $prvFileName;
     $settings->data['node']['sslKeyPubPath'] = 'test_data/' . $pubFileName;
     $settings->data['node']['bridge']['client']['enabled'] = false;
     #$settings->setDataChanged(true);
     #$settings->save();
     $localNode = new Node();
     $localNode->setIdHexStr($settings->data['node']['id']);
     $localNode->setUri($settings->data['node']['uriLocal']);
     $localNode->setSslKeyPub(file_get_contents($settings->data['node']['sslKeyPubPath']));
     $this->assertEquals(static::NODE_LOCAL_SSL_KEY_PUB, $localNode->getSslKeyPub());
     // @codingStandardsIgnoreStart
     #$this->assertEquals('FC_WwG2GdTmCLSKhpEmJso6pejm9c6oACjX', Node::genSslKeyFingerprint($localNode->getSslKeyPub()));
     $this->assertEquals('FC_6t6Z9dYVWEDfEzGQGDSAteLQsFE8SDwZFK2PoiQuM2ezFUA2yNpBPiT9oBwvFBfzDWZzZF5sxBtcSd', Node::genSslKeyFingerprint($localNode->getSslKeyPub()));
     // @codingStandardsIgnoreEnd
     $nodes = array();
     $nodes[0] = new Node();
     $nodes[0]->setIdHexStr($uuid1 . '00');
     $nodes[0]->setUri('tcp://127.0.0.0:25000');
     $nodes[0]->setSslKeyPub(static::NODE0_SSL_KEY_PUB);
     $nodes[1] = new Node();
     $nodes[1]->setIdHexStr($uuid1 . '01');
     $nodes[1]->setUri('tcp://127.0.0.1:25000');
     $nodes[2] = new Node();
     $nodes[2]->setIdHexStr($uuid1 . '02');
     $nodes[2]->setUri('tcp://127.0.0.2:25000');
     $nodes[2]->setSslKeyPub(static::NODE2_SSL_KEY_PUB);
     $nodes[3] = new Node();
     $nodes[3]->setIdHexStr($uuid1 . '03');
     $nodes[3]->setUri('tcp://127.0.0.3:25000');
     $nodes[4] = new Node();
     $nodes[4]->setIdHexStr($uuid1 . '04');
     $nodes[4]->setUri('tcp://127.0.0.4:25000');
     $nodes[4]->setSslKeyPub(static::NODE4_SSL_KEY_PUB);
     $nodes[5] = new Node();
     $nodes[5]->setIdHexStr($uuid1 . '05');
     $nodes[5]->setUri('tcp://127.0.0.5:25000');
     $nodes[5]->setSslKeyPub(static::NODE5_SSL_KEY_PUB);
     $table = new Table();
     $table->setDatadirBasePath($settings->data['datadir']);
     $table->setLocalNode($localNode);
     $table->nodeEnclose($nodes[0]);
     $table->nodeEnclose($nodes[1]);
     $table->nodeEnclose($nodes[2]);
     #$table->nodeEnclose($nodes[3]); // Test not in table.
     #$table->nodeEnclose($nodes[4]);
     #$table->nodeEnclose($nodes[5]);
     $msgs = array();
     for ($nodeNo = 1000; $nodeNo <= 1011; $nodeNo++) {
         $msg = new Msg();
         $msg->setId($uuid2 . $nodeNo);
         $this->assertEquals($uuid2 . $nodeNo, $msg->getId());
         $msg->setSrcNodeId($settings->data['node']['id']);
         $msg->setSrcSslKeyPub($table->getLocalNode()->getSslKeyPub());
         $msg->setSrcUserNickname($settings->data['user']['nickname']);
         $msg->setText('this is  a test. ' . date('Y-m-d H:i:s'));
         $msg->setSslKeyPrvPath($settings->data['node']['sslKeyPrvPath'], $settings->data['node']['sslKeyPrvPass']);
         $msg->setStatus('O');
         $msg->setDstNodeId($nodes[0]->getIdHexStr());
         $msg->setEncryptionMode('D');
         $msg->setDstSslPubKey($nodes[0]->getSslKeyPub());
         $msgs[$nodeNo] = $msg;
         #fwrite(STDOUT, __METHOD__.' msg setup: '.$nodeNo.''.PHP_EOL);
     }
     $msgs[1001]->setDstNodeId($nodes[1]->getIdHexStr());
     $msgs[1001]->setEncryptionMode('S');
     $msgs[1001]->setDstSslPubKey($table->getLocalNode()->getSslKeyPub());
     $this->assertEquals('S', $msgs[1001]->getEncryptionMode());
     $msgs[1002]->setDstNodeId($nodes[2]->getIdHexStr());
     $msgs[1002]->setEncryptionMode('S');
     $msgs[1002]->setDstSslPubKey($table->getLocalNode()->getSslKeyPub());
     $this->assertEquals('S', $msgs[1002]->getEncryptionMode());
     $msgs[1003]->setDstNodeId($nodes[3]->getIdHexStr());
     $msgs[1003]->setEncryptionMode('S');
     $msgs[1003]->setDstSslPubKey($table->getLocalNode()->getSslKeyPub());
     $this->assertEquals('S', $msgs[1003]->getEncryptionMode());
     $msgs[1004]->setSentNodes(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
     $this->assertEquals(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), $msgs[1004]->getSentNodes());
     $msgs[1005]->setStatus('U');
     $msgs[1006]->setStatus('S');
     $msgs[1007]->setStatus('S');
     $msgs[1007]->setSentNodes(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21));
     $msgs[1008]->setStatus('S');
     $msgs[1008]->setForwardCycles(110);
     $msgs[1008]->setSentNodes(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10));
     $msgs[1009]->setStatus('S');
     $msgs[1009]->setSentNodes(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, $uuid1 . '00'));
     $msgs[1010]->setRelayNodeId($uuid1 . '01');
     $msgs[1011]->setSrcNodeId($nodes[4]->getIdHexStr());
     $msgs[1011]->setDstNodeId($nodes[5]->getIdHexStr());
     $msgs[1011]->setStatus('U');
     $msgDb = new MsgDb();
     $msgDb->setDatadirBasePath($settings->data['datadir']);
     $cronjobLog = new Logger('cronjob');
     #$cronjobLog->pushHandler(new LoggerStreamHandler('php://stdout', Logger::DEBUG));
     $cronjob = new Cronjob();
     $cronjob->setLog($cronjobLog);
     $cronjob->setMsgDb($msgDb);
     $cronjob->setSettings($settings);
     $cronjob->setTable($table);
     // Encrypt
     foreach ($msgs as $msgId => $msg) {
         #fwrite(STDOUT, __METHOD__.' encrypt: '.$msgId.PHP_EOL);
         $encrypted = false;
         try {
             $encrypted = $msg->encrypt();
         } catch (Exception $e) {
             print 'ERROR: ' . $e->getMessage() . PHP_EOL;
         }
         $this->assertTrue($encrypted);
         $rv = $cronjob->getMsgDb()->msgAdd($msg);
     }
     $this->assertEquals(12, $cronjob->getMsgDb()->getMsgsCount());
     // Init Nodes
     #fwrite(STDOUT, __METHOD__.' init nodes'.PHP_EOL);
     $cronjob->msgDbInitNodes();
     $cronjobMsgs = $cronjob->getMsgDb()->getMsgs();
     #foreach($cronjobMsgs as $msgId => $msg){
     #	$logOut = $msg->getId().', '.$msg->getStatus().', '.$msg->getEncryptionMode();
     #	fwrite(STDOUT, __METHOD__.' cronjobMsgs: '.$logOut.PHP_EOL);
     #}
     $this->assertEquals(12, count($cronjobMsgs));
     $this->assertEquals($msgs[1000], $cronjobMsgs[$uuid2 . '1000']);
     $this->assertEquals($msgs[1001], $cronjobMsgs[$uuid2 . '1001']);
     $this->assertEquals($msgs[1002], $cronjobMsgs[$uuid2 . '1002']);
     $this->assertEquals($msgs[1003], $cronjobMsgs[$uuid2 . '1003']);
     $this->assertEquals($msgs[1004], $cronjobMsgs[$uuid2 . '1004']);
     $this->assertEquals($msgs[1005], $cronjobMsgs[$uuid2 . '1005']);
     $this->assertEquals($msgs[1006], $cronjobMsgs[$uuid2 . '1006']);
     $this->assertEquals($msgs[1007], $cronjobMsgs[$uuid2 . '1007']);
     $this->assertEquals($msgs[1008], $cronjobMsgs[$uuid2 . '1008']);
     $this->assertEquals($msgs[1009], $cronjobMsgs[$uuid2 . '1009']);
     $this->assertEquals($msgs[1010], $cronjobMsgs[$uuid2 . '1010']);
     $this->assertEquals($msgs[1011], $cronjobMsgs[$uuid2 . '1011']);
     $this->assertEquals('D', $cronjobMsgs[$uuid2 . '1000']->getEncryptionMode());
     $this->assertEquals('S', $cronjobMsgs[$uuid2 . '1001']->getEncryptionMode());
     $this->assertEquals('D', $cronjobMsgs[$uuid2 . '1002']->getEncryptionMode());
     $this->assertEquals('S', $cronjobMsgs[$uuid2 . '1003']->getEncryptionMode());
     $this->assertEquals('D', $cronjobMsgs[$uuid2 . '1004']->getEncryptionMode());
     $this->assertEquals('D', $cronjobMsgs[$uuid2 . '1005']->getEncryptionMode());
     $this->assertEquals('D', $cronjobMsgs[$uuid2 . '1006']->getEncryptionMode());
     $this->assertEquals('D', $cronjobMsgs[$uuid2 . '1007']->getEncryptionMode());
     $this->assertEquals('D', $cronjobMsgs[$uuid2 . '1008']->getEncryptionMode());
     $this->assertEquals('D', $cronjobMsgs[$uuid2 . '1009']->getEncryptionMode());
     $this->assertEquals('D', $cronjobMsgs[$uuid2 . '1010']->getEncryptionMode());
     $this->assertEquals('D', $cronjobMsgs[$uuid2 . '1011']->getEncryptionMode());
     $updateMsgs = $cronjob->msgDbSendAll();
     /*foreach($updateMsgs as $msgId => $msg){
     			$logOut = '/'.$msg['obj']->getId().'/';
     			$logOut .= ' /'.$msg['obj']->getStatus().'/';
     			$logOut .= ' /'.$msg['obj']->getEncryptionMode().'/'.' '.count($msg['nodes']);
     			fwrite(STDOUT, __METHOD__.' update msg: '.$logOut.PHP_EOL);
     			#ve($msg['nodes']);
     		}*/
     $this->assertEquals(6, count($updateMsgs));
     $this->assertEquals('O', $msgs[1000]->getStatus());
     $this->assertEquals('O', $msgs[1002]->getStatus());
     $this->assertEquals('U', $msgs[1005]->getStatus());
     $this->assertEquals('S', $msgs[1006]->getStatus());
     $this->assertEquals('O', $msgs[1010]->getStatus());
     $this->assertEquals('U', $msgs[1011]->getStatus());
     $this->assertEquals('D', $msgs[1000]->getEncryptionMode());
     $this->assertEquals('D', $msgs[1002]->getEncryptionMode());
     $this->assertEquals('D', $msgs[1005]->getEncryptionMode());
     $this->assertEquals('D', $msgs[1006]->getEncryptionMode());
     $this->assertEquals('D', $msgs[1010]->getEncryptionMode());
     $this->assertEquals('D', $msgs[1011]->getEncryptionMode());
     $this->assertTrue(array_key_exists($uuid2 . '1000', $updateMsgs));
     $this->assertTrue(array_key_exists($uuid2 . '1002', $updateMsgs));
     $this->assertTrue(array_key_exists($uuid2 . '1005', $updateMsgs));
     $this->assertTrue(array_key_exists($uuid2 . '1006', $updateMsgs));
     $this->assertTrue(array_key_exists($uuid2 . '1010', $updateMsgs));
     $this->assertTrue(array_key_exists($uuid2 . '1011', $updateMsgs));
     $this->assertEquals(3, count($updateMsgs[$uuid2 . '1000']['nodes']));
     $this->assertEquals(3, count($updateMsgs[$uuid2 . '1002']['nodes']));
     $this->assertEquals(3, count($updateMsgs[$uuid2 . '1005']['nodes']));
     $this->assertEquals(3, count($updateMsgs[$uuid2 . '1006']['nodes']));
     $this->assertEquals(2, count($updateMsgs[$uuid2 . '1010']['nodes']));
     $this->assertEquals(3, count($updateMsgs[$uuid2 . '1011']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '00', $updateMsgs[$uuid2 . '1000']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '01', $updateMsgs[$uuid2 . '1000']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '02', $updateMsgs[$uuid2 . '1000']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '00', $updateMsgs[$uuid2 . '1002']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '01', $updateMsgs[$uuid2 . '1002']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '02', $updateMsgs[$uuid2 . '1002']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '00', $updateMsgs[$uuid2 . '1005']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '01', $updateMsgs[$uuid2 . '1005']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '02', $updateMsgs[$uuid2 . '1005']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '00', $updateMsgs[$uuid2 . '1006']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '01', $updateMsgs[$uuid2 . '1006']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '02', $updateMsgs[$uuid2 . '1006']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '00', $updateMsgs[$uuid2 . '1010']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '02', $updateMsgs[$uuid2 . '1010']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '00', $updateMsgs[$uuid2 . '1011']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '01', $updateMsgs[$uuid2 . '1011']['nodes']));
     $this->assertTrue(array_key_exists($uuid1 . '02', $updateMsgs[$uuid2 . '1011']['nodes']));
 }