public function testSetCharset() { if (!extension_loaded('iconv') || !function_exists('iconv')) { $this->markTestSkipped('iconv is not enabled.'); } $this->assertEquals(array(Communicator::CHARSET_REMOTE => null, Communicator::CHARSET_LOCAL => null), $this->object->setCharset(array(Communicator::CHARSET_REMOTE => 'windows-1251', Communicator::CHARSET_LOCAL => 'UTF-8'))); $addRequest = new Request('/queue/simple/add'); $addRequest->setArgument('name', TEST_QUEUE_NAME)->setArgument('target', '0.0.0.0/0'); $addRequest->setArgument('comment', 'ПРИМЕР'); $responses = $this->object->sendSync($addRequest); $this->assertEquals(1, count($responses), 'There should be only one response.'); if (count($responses) === 1 && $responses[-1]->getType() === Response::TYPE_FINAL) { $appropriateCharsets = $this->object->setCharset(array(Communicator::CHARSET_REMOTE => 'ISO-8859-1', Communicator::CHARSET_LOCAL => 'UTF-8')); $printRequest = new Request('/queue/simple/print'); $printRequest->setQuery(Query::where('name', TEST_QUEUE_NAME)); $responses = $this->object->sendSync($printRequest); $this->assertEquals(TEST_QUEUE_NAME, $responses[0]->getProperty('name')); $this->assertNotEquals('ПРИМЕР', $responses[0]->getProperty('comment')); $this->object->setCharset($appropriateCharsets); $this->assertNotEquals('ПРИМЕР', $responses[0]->getProperty('comment')); $responses = $this->object->sendSync($printRequest); $this->assertEquals(TEST_QUEUE_NAME, $responses[0]->getProperty('name')); $this->assertEquals('ПРИМЕР', $responses[0]->getProperty('comment')); $this->object->setCharset('ISO-8859-1', Communicator::CHARSET_REMOTE); $responses = $this->object->sendSync($printRequest); $this->assertNotEquals('ПРИМЕР', $responses[0]->getProperty('comment')); $this->object->setCharset('ISO-8859-1', Communicator::CHARSET_LOCAL); $responses = $this->object->sendSync($printRequest); $this->assertNotEquals('ПРИМЕР', $responses[0]->getProperty('comment')); $this->object->setCharset($appropriateCharsets); $responses = $this->object->sendSync($printRequest); $this->assertEquals('ПРИМЕР', $responses[0]->getProperty('comment')); $this->object->setStreamingResponses(true); $responses = $this->object->sendSync($printRequest); $this->assertEquals('ПРИМЕР', stream_get_contents($responses[0]->getProperty('comment'))); $this->object->setCharset('ISO-8859-1', Communicator::CHARSET_REMOTE); $responses = $this->object->sendSync($printRequest); $this->assertNotEquals('ПРИМЕР', stream_get_contents($responses[0]->getProperty('comment'))); $this->object->setCharset('windows-1251'); $responses = $this->object->sendSync($printRequest); $this->assertNotEquals('ПРИМЕР', stream_get_contents($responses[0]->getProperty('comment'))); $testQueueNameStream = fopen('php://temp', 'r+b'); fwrite($testQueueNameStream, TEST_QUEUE_NAME); rewind($testQueueNameStream); $printRequest->setQuery(Query::where('name', $testQueueNameStream)); $responses = $this->object->sendSync($printRequest); $this->assertNotEquals('ПРИМЕР', stream_get_contents($responses[0]->getProperty('comment'))); $this->object->setCharset($appropriateCharsets); $responses = $this->object->sendSync($printRequest); $this->assertEquals('ПРИМЕР', stream_get_contents($responses[0]->getProperty('comment'))); $removeRequest = new Request('/queue/simple/remove'); $removeRequest->setArgument('numbers', TEST_QUEUE_NAME); $responses = $this->object->sendSync($removeRequest); } }
exit; } $dnshost = $argv[5]; $list = $argv[4]; $hostname = $argv[1]; $user = $argv[2]; $pass = $argv[3]; $dnsip = array(); $dnsrecord = dns_get_record($dnshost, DNS_A); foreach ($dnsrecord as $p) { $dnsip[] = $p["ip"]; } $c = new RouterOS\Client($hostname, $user, $pass); $req = new RouterOS\Request("/ip/firewall/address-list/print"); $query = RouterOS\Query::where("list", $list)->andWhere("comment", $dnshost); $req->setQuery($query); $resp = $c->sendSync($req); $todelete = array(); $toadd = $dnsip; foreach ($resp as $r) { if ($r->getType() === RouterOS\Response::TYPE_DATA) { $pos = array_search($r->getProperty("address"), $toadd); if ($pos === FALSE) { $todelete[] = $r->getProperty(".id"); } else { unset($toadd[$pos]); } } } foreach ($toadd as $ip) { echo "Adding {$ip}...\n";
public function testSendSyncReturningResponseLargeDataException() { //Required for this test $memoryLimit = ini_set('memory_limit', -1); try { $comment = fopen('php://temp', 'r+b'); $fillerString = str_repeat('t', 0xffffff); //fwrite($comment, $fillerString); for ($i = 0; $i < 256; $i++) { fwrite($comment, $fillerString); } unset($fillerString); fwrite($comment, str_repeat('t', 0xfe)); $argL = (double) sprintf('%u', ftell($comment)); rewind($comment); $maxArgL = 0xffffffff - strlen('?comment='); $this->assertGreaterThan($maxArgL, $argL, '$comment is not long enough.'); rewind($comment); $printRequest = new Request('/ip/arp/print'); $printRequest->setQuery(Query::where('comment', $comment)); $this->object->sendSync($printRequest); fclose($comment); //Clearing out for other tests. ini_set('memory_limit', $memoryLimit); $this->fail('Lengths above 0xFFFFFFFF should not be supported.'); } catch (LengthException $e) { fclose($comment); //Clearing out for other tests. ini_set('memory_limit', $memoryLimit); $this->assertEquals(LengthException::CODE_UNSUPPORTED, $e->getCode(), 'Improper exception thrown.'); } }