public function testMainCollect() { $dataConn = array(array('network_start_ip' => 1, 'network_last_ip' => 2, 'connection_type' => 'Dsl'), array('network_start_ip' => 3, 'network_last_ip' => 9, 'connection_type' => 'Cellular')); $dataIspName = array(array(4, 6, 'ISP1'), array(7, 9, 'ISP2')); $dataCountry = array(array('startIpNum' => 2, 'endIpNum' => 4, 'country' => 'RU'), array('startIpNum' => 5, 'endIpNum' => 6, 'country' => 'EN'), array('startIpNum' => 7, 'endIpNum' => 9, 'country' => 'AL')); $dataTranslate = array(array('ispName' => 'ISP2', 'translate' => 'Провайдер2')); $connCsvParser = new csvParserMock($dataConn); $ispNameCsvParser = new csvParserMock($dataIspName); $countryCodeCsvParser = new csvParserMock($dataCountry); $translateCsvParser = new csvParserMock($dataTranslate); $collIterator = new collectorIterator($connCsvParser, $ispNameCsvParser, $countryCodeCsvParser, $translateCsvParser); $result = array(); while ($data = $collIterator->getNext()) { $result[] = $data; } $etalon = array(array("ipSeg" => new ipSegment(4, 4), 'ispNameEn' => 'ISP1', 'countryCode' => 'RU', 'ispNameRu' => null), array("ipSeg" => new ipSegment(5, 6), 'ispNameEn' => 'ISP1', 'countryCode' => 'EN', 'ispNameRu' => null), array("ipSeg" => new ipSegment(7, 9), 'ispNameEn' => 'ISP2', 'countryCode' => 'AL', 'ispNameRu' => 'Провайдер2')); $this->assertEquals($etalon, $result); }
} $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(); $dbStream->close(); unset($dbStream); unset($dbWriter);