Skip to content
Extraits de code Groupes Projets
HttpTest.php 6,25 ko
Newer Older
  • Learn to ignore specific revisions
  •  * Piwik - free/libre analytics platform
    
     *
     * @link http://piwik.org
     * @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
     */
    
    
    namespace Piwik\Tests\Integration;
    
    
     * @group Core
    
     * @group HttpTest
     */
    
    class HttpTest extends \PHPUnit_Framework_TestCase
    
    {
        /**
         * Dataprovider for testFetchRemoteFile
         */
        public function getMethodsToTest()
        {
            return array(
    
    Matthieu Napoli's avatar
    Matthieu Napoli a validé
                'curl' => array('curl'),
                'fopen' => array('fopen'),
                'socket' => array('socket'),
    
            );
        }
    
        /**
         * @dataProvider getMethodsToTest
         */
    
        public function testFetchRemoteFile($method)
    
            $this->assertNotNull(Http::getTransportMethod());
    
    Matthieu Napoli's avatar
    Matthieu Napoli a validé
            $result = Http::sendHttpRequestBy($method, Fixture::getRootUrl() . 'piwik.js', 30);
    
            $this->assertTrue(strpos($result, 'Piwik') !== false);
    
        }
    
        public function testFetchApiLatestVersion()
        {
            $destinationPath = PIWIK_USER_PATH . '/tmp/latest/LATEST';
    
    Matthieu Napoli's avatar
    Matthieu Napoli a validé
            Http::fetchRemoteFile(Fixture::getRootUrl(), $destinationPath, 3);
    
            $this->assertFileExists($destinationPath);
    
            $this->assertGreaterThan(0, filesize($destinationPath));
    
        }
    
        public function testFetchLatestZip()
        {
            $destinationPath = PIWIK_USER_PATH . '/tmp/latest/latest.zip';
    
            Http::fetchRemoteFile(Fixture::getRootUrl() . 'tests/PHPUnit/Integration/Http/fixture.zip', $destinationPath, 3, 30);
    
            $this->assertFileExists($destinationPath);
    
            $this->assertGreaterThan(0, filesize($destinationPath));
    
        public function testCustomByteRange($method)
    
    Matthieu Napoli's avatar
    Matthieu Napoli a validé
            if ($method == 'fopen') {
                return; // not supported w/ this method
            }
    
    
            $result = Http::sendHttpRequestBy(
    
                Fixture::getRootUrl() . '/piwik.js',
    
                $userAgent = null,
                $destinationPath = null,
                $file = null,
                $followDepth = 0,
                $acceptLanguage = false,
                $acceptInvalidSslCertificate = false,
                $byteRange = array(10, 20),
                $getExtendedInfo = true
            );
    
    
    Matthieu Napoli's avatar
    Matthieu Napoli a validé
            $this->assertEquals(206, $result['status']);
            $this->assertTrue(isset($result['headers']['Content-Range']));
            $this->assertEquals('bytes 10-20/', substr($result['headers']['Content-Range'], 0, 12));
            $this->assertTrue(in_array($result['headers']['Content-Type'], array('application/x-javascript', 'application/javascript')));
    
        public function testHEADOperation($method)
    
            if ($method == 'fopen') {
                return; // not supported w/ this method
            }
    
    
            $result = Http::sendHttpRequestBy(
    
                Fixture::getRootUrl() . 'tests/PHPUnit/Integration/Http/fixture.zip',
    
                $userAgent = null,
                $destinationPath = null,
                $file = null,
                $followDepth = 0,
                $acceptLanguage = false,
                $acceptInvalidSslCertificate = false,
                $byteRange = false,
                $getExtendedInfo = true,
                $httpMethod = 'HEAD'
            );
    
            $this->assertEquals('', $result['data']);
            $this->assertEquals(200, $result['status']);
    
            $this->assertTrue(isset($result['headers']['Content-Length']), "Content-Length header not set!");
            $this->assertTrue(is_numeric($result['headers']['Content-Length']), "Content-Length header not numeric!");
    
    Matthieu Napoli's avatar
    Matthieu Napoli a validé
            $this->assertTrue(in_array($result['headers']['Content-Type'], array('application/zip', 'application/x-zip-compressed')));
    
        /**
         * @dataProvider getMethodsToTest
         */
        public function testHttpAuthentication($method)
        {
            $result = Http::sendHttpRequestBy(
                $method,
                Fixture::getRootUrl() . 'tests/PHPUnit/Integration/Http/HttpAuthentication.php',
                30,
                $userAgent = null,
                $destinationPath = null,
                $file = null,
                $followDepth = 0,
                $acceptLanguage = false,
                $acceptInvalidSslCertificate = false,
                $byteRange = false,
                $getExtendedInfo = true,
                $httpMethod = 'GET',
                $httpUsername = 'test',
                $httpPassword = 'test'
            );
    
            $this->assertEquals('Authentication successful', $result['data']);
            $this->assertEquals(200, $result['status']);
        }
    
        /**
         * @dataProvider getMethodsToTest
         */
        public function testHttpAuthenticationInvalid($method)
        {
            $result = Http::sendHttpRequestBy(
                $method,
                Fixture::getRootUrl() . 'tests/PHPUnit/Integration/Http/HttpAuthentication.php',
                30,
                $userAgent = null,
                $destinationPath = null,
                $file = null,
                $followDepth = 0,
                $acceptLanguage = false,
                $acceptInvalidSslCertificate = false,
                $byteRange = false,
                $getExtendedInfo = true,
                $httpMethod = 'GET',
                $httpUsername = '',
                $httpPassword = ''
            );
    
            $this->assertEquals(401, $result['status']);
        }
    
    
        /**
         * @dataProvider getMethodsToTest
         */
        public function testHttpsWorksWithValidCertificate($method)
    
            $result = Http::sendHttpRequestBy($method, 'https://builds.piwik.org/LATEST', 10);
    
    
            $this->assertStringMatchesFormat('%d.%d.%d', $result);
        }
    
         * @expectedExceptionMessage curl_exec: SSL
    
        public function testCurlHttpsFailsWithInvalidCertificate()
    
        {
            Http::sendHttpRequestBy('curl', 'https://divezone.net', 10);
        }
    
    
        /**
         * @expectedException \Exception
    
         * @expectedExceptionMessage failed to open stream
    
         */
        public function testFopenHttpsFailsWithInvalidCertificate()
        {
            Http::sendHttpRequestBy('fopen', 'https://divezone.net', 10);
        }
    
        /**
         * We check that HTTPS is not supported with the "socket" method
         */
        public function testSocketHttpsWorksEvenWithInvalidCertificate()
        {
            $result = Http::sendHttpRequestBy('socket', 'https://divezone.net', 10);
            $this->assertNotEmpty($result);
        }