Exemplo n.º 1
0
 public function testReadingPhp()
 {
     $dbData = new dbDataProcessor();
     $hashStep = dbWriter::HASH_STEP;
     $dbData->addCarrierInterval(new ipSegment(1, 4), "carrier1");
     $dbData->addCarrierInterval(new ipSegment(2 * $hashStep, 3 * $hashStep - 1), "carrier2");
     $opts = new optionsMock();
     $dbStream = new dbStream(dirname(__FILE__) . "/tmp/test1.db", false);
     $dbWriter = new dbWriter($opts, $dbData, $dbStream);
     $dbWriter->writeDb();
     $dbReader = new dbReader($dbStream);
     $dbReader->readAll();
     $dbReader->checkConsistency();
     $dbStream->close();
     $dbCarrier = new CarrierDbPhp(dirname(__FILE__) . "/tmp/test1.db");
     $info = $dbCarrier->getDbInfo();
     $this->assertEquals(dbWriter::STRUCT_VERSION, $info['structVersion']);
     $this->assertEquals(1, $info['buildVersion']);
     $this->assertTrue(time() - $info['buildTimestamp'] < 10);
     // меньше 10 секунд назад
     $this->assertEquals(2, $info['recCount']);
     $this->assertEquals(NULL, $dbCarrier->get("0.0.0.0"));
     $this->assertEquals("carrier1", $dbCarrier->get("0.0.0.1"));
     $this->assertEquals("carrier1", $dbCarrier->get("0.0.0.2"));
     $this->assertEquals("carrier1", $dbCarrier->get("0.0.0.4"));
     $this->assertEquals(NULL, $dbCarrier->get("0.0.0.5"));
     $ipSeg = new ipSegment(floor(1.5 * $hashStep), floor(2.5 * $hashStep));
     $this->assertEquals(NULL, $dbCarrier->get($ipSeg->getStartIpString()));
     $this->assertEquals("carrier2", $dbCarrier->get($ipSeg->getEndIpString()));
     $ipSeg = new ipSegment(3 * $hashStep - 1, 3 * $hashStep);
     $this->assertEquals("carrier2", $dbCarrier->get($ipSeg->getStartIpString()));
     $this->assertEquals(NULL, $dbCarrier->get($ipSeg->getEndIpString()));
 }
 public function testData2()
 {
     $dbData = new dbDataProcessor();
     $dbData->addCarrierInterval(new ipSegment(1, 3), "name1");
     $dbData->addCarrierInterval(new ipSegment(4, 5), "name1");
     $dbData->addCarrierInterval(new ipSegment(7, 8), "name2");
     $dbData->addCarrierInterval(new ipSegment(8, 9), "name2");
     $etalon = array(dbDataProcessor::IP_START_POS => 1, dbDataProcessor::IP_END_POS => 5, dbDataProcessor::CODE_POS => "name1");
     $this->assertEquals($etalon, $dbData->resetData());
     $etalon = array(dbDataProcessor::IP_START_POS => 7, dbDataProcessor::IP_END_POS => 9, dbDataProcessor::CODE_POS => "name2");
     $this->assertEquals($etalon, $dbData->getNext());
     $this->assertEquals(false, $dbData->getNext());
     $this->assertEquals(2, $dbData->getCount());
 }
Exemplo n.º 3
0
 public function testWriteDb()
 {
     $dbData = new dbDataProcessor();
     $hashStep = dbWriter::HASH_STEP;
     $dbData->addCarrierInterval(new ipSegment(0, 1 * $hashStep), "carrier1");
     $dbData->addCarrierInterval(new ipSegment(2 * $hashStep, 3 * $hashStep - 1), "carrier2");
     $dbData->addCarrierInterval(new ipSegment(4 * $hashStep, 5 * $hashStep + 1), "carrier3");
     $dbData->addCarrierInterval(new ipSegment(6 * $hashStep - 1, 7 * $hashStep - 1), "carrier4");
     $dbData->addCarrierInterval(new ipSegment(8 * $hashStep + 1, 9 * $hashStep - 1), "carrier5");
     $dbData->addCarrierInterval(new ipSegment(9 * $hashStep, 10 * $hashStep), "carrier6");
     $opts = new optionsMock();
     $dbStream = new dbStream(dirname(__FILE__) . "/tmp/test2.db", false);
     $dbWriter = new dbWriter($opts, $dbData, $dbStream);
     $dbWriter->writeDb();
     $dbReader = new dbReader($dbStream);
     $dbReader->readAll();
     $dbReader->checkConsistency();
     $header = $dbReader->getHeader();
     $this->assertEquals("DBCA", $header['header']);
     $this->assertEquals(dbWriter::STRUCT_VERSION, $header['structVersion']);
     $this->assertEquals(1, $header['buildVersion']);
     $this->assertTrue(time() - $header['dateTime'] < 10);
     // меньше 10 секунд назад
     $this->assertEquals(6, $header['count']);
     $this->assertEquals("carrier1", $dbReader->getContentByPos(0));
     $this->assertEquals("carrier2", $dbReader->getContentByPos(1));
     $this->assertEquals("carrier3", $dbReader->getContentByPos(2));
     $this->assertEquals("carrier4", $dbReader->getContentByPos(3));
     $this->assertEquals("carrier5", $dbReader->getContentByPos(4));
     $this->assertEquals("carrier6", $dbReader->getContentByPos(5));
     //В комментах пример для HASH_STEP = 128
     $etalon = array(array(array(0, $hashStep, 20)), array(array(0, $hashStep, 20)), array(array(2 * $hashStep, 3 * $hashStep - 1, 32)), array(), array(array(4 * $hashStep, 5 * $hashStep + 1, 44)), array(array(4 * $hashStep, 5 * $hashStep + 1, 44), array(6 * $hashStep - 1, 7 * $hashStep - 1, 56)), array(array(6 * $hashStep - 1, 7 * $hashStep - 1, 56)), array(), array(array(8 * $hashStep + 1, 9 * $hashStep - 1, 68)), array(array(9 * $hashStep, 10 * $hashStep, 80)), array(array(9 * $hashStep, 10 * $hashStep, 80)));
     for ($i = 0; $i < count($etalon); $i++) {
         $this->assertEquals($etalon[$i], $dbReader->getHashListByPos($i));
     }
     $this->assertEquals(false, $dbReader->getHashListByPos($i));
 }
Exemplo n.º 4
0
if (empty($options['configFile'])) {
    echo "Usage: --configFile=<value>";
    exit;
}
$jsonOpts = array('connTypeCsv' => array("isFileName" => 1, "desc" => "имя файла csv с соединениями"), 'ispNameCsv' => array("isFileName" => 1, "desc" => "имя файла csv с именами провайдеров"), 'countryCodeCsv' => array("isFileName" => 1, "desc" => "имя файла csv с названиями стран"), 'translateCsv' => array("isFileName" => 1, "desc" => "имя файла csv с переводами провайдеров"), 'outputCsv' => array("desc" => "имя файла csv в который будут складываться коды провайдеров"), 'outputDb' => array("desc" => "имя файла с итоговой базой"), collectorOptions::VERSION_NAME => array("desc" => "текущая версия БД с провайдерами"));
echo "INFO: Получение опций\n";
$opts = new collectorOptions($jsonOpts, $options['configFile']);
echo "INFO: Подготовка файлов\n";
$connCsvParser = new csvParser($opts->connTypeCsv);
$ispNameCsvParser = new csvParser($opts->ispNameCsv, false);
//Нет заголовка у csv
$countryCodeCsvParser = new csvParser($opts->countryCodeCsv);
$translateCsvParser = new csvParser($opts->translateCsv);
$collectorIterator = new collectorIterator($connCsvParser, $ispNameCsvParser, $countryCodeCsvParser, $translateCsvParser);
$carrierCsvWriter = new carrierCsvWriter($opts->outputCsv);
$dbDataProcessor = new dbDataProcessor();
echo "INFO: Обработка данных\n";
$i = 0;
while ($row = $collectorIterator->getNext()) {
    $carrierCsvWriter->addNext($row);
    $dbDataProcessor->addCarrierInterval($row['ipSeg'], $carrierCsvWriter->getCode($row));
    $i++;
    if ($i % 1000 == 0) {
        echo "INFO: обработано {$i} записей\n";
    }
}
unset($carrierCsvWriter);
echo "INFO: Запись базы\n";
$dbStream = new dbStream($opts->outputDb, false);
$dbWriter = new dbWriter($opts, $dbDataProcessor, $dbStream);
$dbWriter->writeDb();