%PDF- %PDF-
| Direktori : /data/www_bck/varak.cloud_bck/tracker.varak.cloud/vendor/samdark/sitemap/tests/ |
| Current File : //data/www_bck/varak.cloud_bck/tracker.varak.cloud/vendor/samdark/sitemap/tests/SitemapTest.php |
<?php
namespace samdark\sitemap\tests;
use SebastianBergmann\Timer\Timer;
use samdark\sitemap\Sitemap;
class SitemapTest extends \PHPUnit_Framework_TestCase
{
/**
* Asserts validity of simtemap according to XSD schema
* @param string $fileName
* @param bool $xhtml
*/
protected function assertIsValidSitemap($fileName, $xhtml = false)
{
$xsdFileName = $xhtml ? 'sitemap_xhtml.xsd' : 'sitemap.xsd';
$xml = new \DOMDocument();
$xml->load($fileName);
$this->assertTrue($xml->schemaValidate(__DIR__ . '/' . $xsdFileName));
}
protected function assertIsOneMemberGzipFile($fileName)
{
$gzipMemberStartSequence = pack('H*', '1f8b08');
$content = file_get_contents($fileName);
$isOneMemberGzipFile = (strpos($content, $gzipMemberStartSequence, 1) === false);
$this->assertTrue($isOneMemberGzipFile, "There are more than one gzip member in $fileName");
}
public function testWritingFile()
{
$fileName = __DIR__ . '/sitemap_regular.xml';
$sitemap = new Sitemap($fileName);
$sitemap->addItem('http://example.com/mylink1');
$sitemap->addItem('http://example.com/mylink2', time());
$sitemap->addItem('http://example.com/mylink3', time(), Sitemap::HOURLY);
$sitemap->addItem('http://example.com/mylink4', time(), Sitemap::DAILY, 0.3);
$sitemap->write();
$this->assertTrue(file_exists($fileName));
$this->assertIsValidSitemap($fileName);
unlink($fileName);
}
public function testMultipleFiles()
{
$sitemap = new Sitemap(__DIR__ . '/sitemap_multi.xml');
$sitemap->setMaxUrls(2);
for ($i = 0; $i < 20; $i++) {
$sitemap->addItem('http://example.com/mylink' . $i, time());
}
$sitemap->write();
$expectedFiles = array(
__DIR__ . '/' .'sitemap_multi.xml',
__DIR__ . '/' .'sitemap_multi_2.xml',
__DIR__ . '/' .'sitemap_multi_3.xml',
__DIR__ . '/' .'sitemap_multi_4.xml',
__DIR__ . '/' .'sitemap_multi_5.xml',
__DIR__ . '/' .'sitemap_multi_6.xml',
__DIR__ . '/' .'sitemap_multi_7.xml',
__DIR__ . '/' .'sitemap_multi_8.xml',
__DIR__ . '/' .'sitemap_multi_9.xml',
__DIR__ . '/' .'sitemap_multi_10.xml',
);
foreach ($expectedFiles as $expectedFile) {
$this->assertTrue(file_exists($expectedFile), "$expectedFile does not exist!");
$this->assertIsValidSitemap($expectedFile);
unlink($expectedFile);
}
$urls = $sitemap->getSitemapUrls('http://example.com/');
$this->assertEquals(10, count($urls), print_r($urls, true));
$this->assertContains('http://example.com/sitemap_multi.xml', $urls);
$this->assertContains('http://example.com/sitemap_multi_10.xml', $urls);
}
public function testMultiLanguageSitemap()
{
$fileName = __DIR__ . '/sitemap_multi_language.xml';
$sitemap = new Sitemap($fileName, true);
$sitemap->addItem('http://example.com/mylink1');
$sitemap->addItem(array(
'ru' => 'http://example.com/ru/mylink2',
'en' => 'http://example.com/en/mylink2',
), time());
$sitemap->addItem(array(
'ru' => 'http://example.com/ru/mylink3',
'en' => 'http://example.com/en/mylink3',
), time(), Sitemap::HOURLY);
$sitemap->addItem(array(
'ru' => 'http://example.com/ru/mylink4',
'en' => 'http://example.com/en/mylink4',
), time(), Sitemap::DAILY, 0.3);
$sitemap->write();
$this->assertTrue(file_exists($fileName));
$this->assertIsValidSitemap($fileName, true);
unlink($fileName);
}
public function testFrequencyValidation()
{
$this->setExpectedException('InvalidArgumentException');
$fileName = __DIR__ . '/sitemap.xml';
$sitemap = new Sitemap($fileName);
$sitemap->addItem('http://example.com/mylink1');
$sitemap->addItem('http://example.com/mylink2', time(), 'invalid');
unlink($fileName);
}
public function testPriorityValidation()
{
$fileName = __DIR__ . '/sitemap.xml';
$sitemap = new Sitemap($fileName);
$exceptionCaught = false;
try {
$sitemap->addItem('http://example.com/mylink1');
$sitemap->addItem('http://example.com/mylink2', time(), 'always', 2.0);
} catch (\InvalidArgumentException $e) {
$exceptionCaught = true;
}
unlink($fileName);
$this->assertTrue($exceptionCaught, 'Expected InvalidArgumentException wasn\'t thrown.');
}
public function testLocationValidation()
{
$fileName = __DIR__ . '/sitemap.xml';
$sitemap = new Sitemap($fileName);
$exceptionCaught = false;
try {
$sitemap->addItem('http://example.com/mylink1');
$sitemap->addItem('notlink', time());
} catch (\InvalidArgumentException $e) {
$exceptionCaught = true;
}
unlink($fileName);
$this->assertTrue($exceptionCaught, 'Expected InvalidArgumentException wasn\'t thrown.');
}
public function testMultiLanguageLocationValidation()
{
$fileName = __DIR__ . '/sitemap.xml';
$sitemap = new Sitemap($fileName);
$sitemap->addItem(array(
'ru' => 'http://example.com/mylink1',
'en' => 'http://example.com/mylink2',
));
$exceptionCaught = false;
try {
$sitemap->addItem(array(
'ru' => 'http://example.com/mylink3',
'en' => 'notlink',
), time());
} catch (\InvalidArgumentException $e) {
$exceptionCaught = true;
}
unlink($fileName);
$this->assertTrue($exceptionCaught, 'Expected InvalidArgumentException wasn\'t thrown.');
}
public function testWritingFileGzipped()
{
$fileName = __DIR__ . '/sitemap_gzipped.xml.gz';
$sitemap = new Sitemap($fileName);
$sitemap->setUseGzip(true);
$sitemap->addItem('http://example.com/mylink1');
$sitemap->addItem('http://example.com/mylink2', time());
$sitemap->addItem('http://example.com/mylink3', time(), Sitemap::HOURLY);
$sitemap->addItem('http://example.com/mylink4', time(), Sitemap::DAILY, 0.3);
$sitemap->write();
$this->assertTrue(file_exists($fileName));
$finfo = new \finfo(FILEINFO_MIME_TYPE);
$this->assertEquals('application/x-gzip', $finfo->file($fileName));
$this->assertIsValidSitemap('compress.zlib://' . $fileName);
$this->assertIsOneMemberGzipFile($fileName);
unlink($fileName);
}
public function testMultipleFilesGzipped()
{
$sitemap = new Sitemap(__DIR__ . '/sitemap_multi_gzipped.xml.gz');
$sitemap->setUseGzip(true);
$sitemap->setMaxUrls(2);
for ($i = 0; $i < 20; $i++) {
$sitemap->addItem('http://example.com/mylink' . $i, time());
}
$sitemap->write();
$expectedFiles = array(
__DIR__ . '/' .'sitemap_multi_gzipped.xml.gz',
__DIR__ . '/' .'sitemap_multi_gzipped_2.xml.gz',
__DIR__ . '/' .'sitemap_multi_gzipped_3.xml.gz',
__DIR__ . '/' .'sitemap_multi_gzipped_4.xml.gz',
__DIR__ . '/' .'sitemap_multi_gzipped_5.xml.gz',
__DIR__ . '/' .'sitemap_multi_gzipped_6.xml.gz',
__DIR__ . '/' .'sitemap_multi_gzipped_7.xml.gz',
__DIR__ . '/' .'sitemap_multi_gzipped_8.xml.gz',
__DIR__ . '/' .'sitemap_multi_gzipped_9.xml.gz',
__DIR__ . '/' .'sitemap_multi_gzipped_10.xml.gz',
);
$finfo = new \finfo(FILEINFO_MIME_TYPE);
foreach ($expectedFiles as $expectedFile) {
$this->assertTrue(file_exists($expectedFile), "$expectedFile does not exist!");
$this->assertEquals('application/x-gzip', $finfo->file($expectedFile));
$this->assertIsValidSitemap('compress.zlib://' . $expectedFile);
$this->assertIsOneMemberGzipFile($expectedFile);
unlink($expectedFile);
}
$urls = $sitemap->getSitemapUrls('http://example.com/');
$this->assertEquals(10, count($urls), print_r($urls, true));
$this->assertContains('http://example.com/sitemap_multi_gzipped.xml.gz', $urls);
$this->assertContains('http://example.com/sitemap_multi_gzipped_10.xml.gz', $urls);
}
public function testFileSizeLimit()
{
$sitemap = new Sitemap(__DIR__ . '/sitemap_multi.xml');
$sizeLimit = 1036;
$sitemap->setMaxBytes($sizeLimit);
$sitemap->setBufferSize(1);
for ($i = 0; $i < 20; $i++) {
$sitemap->addItem('http://example.com/mylink' . $i, time());
}
$sitemap->write();
$expectedFiles = array(
__DIR__ . '/' .'sitemap_multi.xml',
__DIR__ . '/' .'sitemap_multi_2.xml',
__DIR__ . '/' .'sitemap_multi_3.xml',
);
$this->assertEquals($sizeLimit, filesize($expectedFiles[1]));
foreach ($expectedFiles as $expectedFile) {
$this->assertTrue(file_exists($expectedFile), "$expectedFile does not exist!");
$this->assertIsValidSitemap($expectedFile);
$this->assertLessThanOrEqual($sizeLimit, filesize($expectedFile), "$expectedFile exceeds the size limit");
unlink($expectedFile);
}
$urls = $sitemap->getSitemapUrls('http://example.com/');
$this->assertEquals(3, count($urls), print_r($urls, true));
$this->assertContains('http://example.com/sitemap_multi.xml', $urls);
$this->assertContains('http://example.com/sitemap_multi_3.xml', $urls);
}
public function testSmallSizeLimit()
{
$fileName = __DIR__ . '/sitemap_regular.xml';
$sitemap = new Sitemap($fileName);
$sitemap->setMaxBytes(0);
$sitemap->setBufferSize(1);
$exceptionCaught = false;
try {
$sitemap->addItem('http://example.com/mylink1');
$sitemap->write();
} catch (\OverflowException $e) {
$exceptionCaught = true;
}
unlink($fileName);
$this->assertTrue($exceptionCaught, 'Expected OverflowException wasn\'t thrown.');
}
public function testBufferSizeImpact()
{
if (getenv('TRAVIS') == 'true') {
$this->markTestSkipped('Can not reliably test performance on travis-ci.');
return;
}
$fileName = __DIR__ . '/sitemap_big.xml';
$times = array();
foreach (array(1000, 10) as $bufferSize) {
$startTime = microtime(true);
$sitemap = new Sitemap($fileName);
$sitemap->setBufferSize($bufferSize);
for ($i = 0; $i < 50000; $i++) {
$sitemap->addItem('http://example.com/mylink' . $i, time());
}
$sitemap->write();
$times[] = microtime(true) - $startTime;
unlink($fileName);
}
$this->assertLessThan($times[0] * 1.2, $times[1]);
}
}