2012-03-02 19:19:50 +00:00
< ? php
/*
* This file is part of Composer .
*
* ( c ) Nils Adermann < naderman @ naderman . de >
* Jordi Boggiano < j . boggiano @ seld . be >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
2012-03-02 21:08:40 +00:00
namespace Composer\Test\Repository\Vcs ;
2012-03-02 19:19:50 +00:00
use Composer\Repository\Vcs\SvnDriver ;
2012-04-25 15:35:47 +00:00
use Composer\Config ;
2018-11-12 14:23:32 +00:00
use Composer\Test\TestCase ;
2016-01-21 12:01:55 +00:00
use Composer\Util\Filesystem ;
2021-12-31 16:08:31 +00:00
use Composer\Util\ProcessExecutor ;
2012-03-02 19:19:50 +00:00
2016-01-21 12:01:55 +00:00
class SvnDriverTest extends TestCase
2012-03-02 19:19:50 +00:00
{
2021-10-16 08:16:06 +00:00
/**
* @ var string
*/
2016-01-21 12:01:55 +00:00
protected $home ;
2021-10-16 08:16:06 +00:00
/**
* @ var Config
*/
2016-01-21 12:01:55 +00:00
protected $config ;
2021-12-08 16:03:05 +00:00
public function setUp () : void
2016-01-21 12:01:55 +00:00
{
$this -> home = $this -> getUniqueTmpDirectory ();
$this -> config = new Config ();
$this -> config -> merge ( array (
'config' => array (
'home' => $this -> home ,
),
));
}
2021-12-09 16:09:07 +00:00
protected function tearDown () : void
2016-01-21 12:01:55 +00:00
{
2021-12-09 16:09:07 +00:00
parent :: tearDown ();
2016-01-21 12:01:55 +00:00
$fs = new Filesystem ();
$fs -> removeDirectory ( $this -> home );
}
2022-02-18 09:38:54 +00:00
public function testWrongCredentialsInUrl () : void
2012-03-09 16:41:56 +00:00
{
2021-12-09 19:55:26 +00:00
self :: expectException ( 'RuntimeException' );
self :: expectExceptionMessage ( " Repository https://till:secret@corp.svn.local/repo could not be processed, wrong credentials provided (svn: OPTIONS of 'https://corp.svn.local/repo': authorization failed: Could not authenticate to server: rejected Basic challenge (https://corp.svn.local/)) " );
2020-09-10 15:21:11 +00:00
2018-04-12 08:24:56 +00:00
$console = $this -> getMockBuilder ( 'Composer\IO\IOInterface' ) -> getMock ();
2018-11-12 14:34:54 +00:00
$httpDownloader = $this -> getMockBuilder ( 'Composer\Util\HttpDownloader' ) -> disableOriginalConstructor () -> getMock ();
2012-03-09 16:41:56 +00:00
2017-03-08 14:07:29 +00:00
$output = " svn: OPTIONS of 'https://corp.svn.local/repo': " ;
2012-03-09 16:41:56 +00:00
$output .= " authorization failed: Could not authenticate to server: " ;
2016-03-01 13:19:44 +00:00
$output .= " rejected Basic challenge (https://corp.svn.local/) " ;
2012-03-09 16:41:56 +00:00
2021-12-09 16:09:07 +00:00
$process = $this -> getProcessExecutorMock ();
2021-12-31 16:08:31 +00:00
$authedCommand = sprintf (
'svn ls --verbose --non-interactive --username %s --password %s -- %s' ,
ProcessExecutor :: escape ( 'till' ),
ProcessExecutor :: escape ( 'secret' ),
ProcessExecutor :: escape ( 'https://till:secret@corp.svn.local/repo/trunk' )
);
2021-08-19 11:00:30 +00:00
$process -> expects ( array (
2021-12-31 16:08:31 +00:00
array ( 'cmd' => $authedCommand , 'return' => 1 , 'stderr' => $output ),
array ( 'cmd' => $authedCommand , 'return' => 1 , 'stderr' => $output ),
array ( 'cmd' => $authedCommand , 'return' => 1 , 'stderr' => $output ),
array ( 'cmd' => $authedCommand , 'return' => 1 , 'stderr' => $output ),
array ( 'cmd' => $authedCommand , 'return' => 1 , 'stderr' => $output ),
array ( 'cmd' => $authedCommand , 'return' => 1 , 'stderr' => $output ),
2021-12-09 16:09:07 +00:00
array ( 'cmd' => 'svn --version' , 'return' => 0 , 'stdout' => '1.2.3' ),
2021-08-19 11:00:30 +00:00
), true );
2012-03-09 16:41:56 +00:00
2012-08-31 06:12:20 +00:00
$repoConfig = array (
2016-03-01 13:19:44 +00:00
'url' => 'https://till:secret@corp.svn.local/repo' ,
2012-08-31 06:12:20 +00:00
);
2018-11-12 14:34:54 +00:00
$svn = new SvnDriver ( $repoConfig , $console , $this -> config , $httpDownloader , $process );
2012-04-29 18:43:56 +00:00
$svn -> initialize ();
2012-03-09 16:41:56 +00:00
}
2022-02-21 12:42:28 +00:00
public static function supportProvider () : array
2012-03-12 20:27:22 +00:00
{
return array (
array ( 'http://svn.apache.org' , true ),
2012-03-18 15:35:09 +00:00
array ( 'https://svn.sf.net' , true ),
2012-03-12 20:27:22 +00:00
array ( 'svn://example.org' , true ),
array ( 'svn+ssh://example.org' , true ),
);
}
/**
* @ dataProvider supportProvider
2021-10-27 13:29:52 +00:00
*
* @ param string $url
* @ param bool $assertion
2012-03-12 20:27:22 +00:00
*/
2022-02-22 15:47:09 +00:00
public function testSupport ( string $url , bool $assertion ) : void
2012-03-12 20:27:22 +00:00
{
2013-10-28 19:57:02 +00:00
$config = new Config ();
2018-04-12 08:24:56 +00:00
$result = SvnDriver :: supports ( $this -> getMockBuilder ( 'Composer\IO\IOInterface' ) -> getMock (), $config , $url );
2013-10-28 19:57:02 +00:00
$this -> assertEquals ( $assertion , $result );
2012-03-12 20:27:22 +00:00
}
2012-03-02 19:19:50 +00:00
}