123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675 |
- <?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.
- */
- namespace Composer\Test\Util;
- use Composer\Util\Perforce;
- use Composer\Util\ProcessExecutor;
- /**
- * @author Matt Whittom <Matt.Whittom@veteransunited.com>
- */
- class PerforceTest extends \PHPUnit_Framework_TestCase
- {
- protected $perforce;
- protected $processExecutor;
- public function setUp()
- {
- $this->processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
- $repoConfig = array(
- "depot" => "depot",
- "branch" => "branch",
- "p4user" => "user",
- "unique_perforce_client_name" => "TEST"
- );
- $this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, true);
- }
- public function testGetClientWithoutStream()
- {
- $client = $this->perforce->getClient();
- $hostname = gethostname();
- $timestamp = time();
- $expected = "composer_perforce_TEST_depot";
- $this->assertEquals($expected, $client);
- }
- public function testGetClientFromStream()
- {
- $this->setPerforceToStream();
- $client = $this->perforce->getClient();
- $expected = "composer_perforce_TEST_depot_branch";
- $this->assertEquals($expected, $client);
- }
- public function testGetStreamWithoutStream()
- {
- $stream = $this->perforce->getStream();
- $this->assertEquals("//depot", $stream);
- }
- public function testGetStreamWithStream()
- {
- $this->setPerforceToStream();
- $stream = $this->perforce->getStream();
- $this->assertEquals("//depot/branch", $stream);
- }
- public function testGetStreamWithoutLabelWithStreamWithoutLabel()
- {
- $stream = $this->perforce->getStreamWithoutLabel("//depot/branch");
- $this->assertEquals("//depot/branch", $stream);
- }
- public function testGetStreamWithoutLabelWithStreamWithLabel()
- {
- $stream = $this->perforce->getStreamWithoutLabel("//depot/branching@label");
- $this->assertEquals("//depot/branching", $stream);
- }
- public function testGetClientSpec()
- {
- $clientSpec = $this->perforce->getP4ClientSpec();
- $expected = "path/composer_perforce_TEST_depot.p4.spec";
- $this->assertEquals($expected, $clientSpec);
- }
- public function testGenerateP4Command()
- {
- $command = "do something";
- $p4Command = $this->perforce->generateP4Command($command);
- $expected = "p4 -u user -c composer_perforce_TEST_depot -p port do something";
- $this->assertEquals($expected, $p4Command);
- }
- public function testQueryP4UserWithUserAlreadySet()
- {
- $io = $this->getMock('Composer\IO\IOInterface');
- $repoConfig = array("depot" => "depot", "branch" => "branch", "p4user" => "TEST_USER");
- $this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, true, "TEST");
- $this->perforce->queryP4user($io);
- $this->assertEquals("TEST_USER", $this->perforce->getUser());
- }
- public function testQueryP4UserWithUserSetInP4VariablesWithWindowsOS()
- {
- $repoConfig = array("depot" => "depot", "branch" => "branch");
- $this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, true, "TEST");
- $io = $this->getMock('Composer\IO\IOInterface');
- $expectedCommand = "p4 set";
- $this->processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will(
- $this->returnCallback(
- function ($command, &$output) {
- $output = "P4USER=TEST_P4VARIABLE_USER\n";
- return true;
- }
- )
- );
- $this->perforce->queryP4user($io);
- $this->assertEquals("TEST_P4VARIABLE_USER", $this->perforce->getUser());
- }
- public function testQueryP4UserWithUserSetInP4VariablesNotWindowsOS()
- {
- $repoConfig = array("depot" => "depot", "branch" => "branch");
- $this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, false, "TEST");
- $io = $this->getMock('Composer\IO\IOInterface');
- $expectedCommand = 'echo $P4USER';
- $this->processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will(
- $this->returnCallback(
- function ($command, &$output) {
- $output = "TEST_P4VARIABLE_USER\n";
- return true;
- }
- )
- );
- $this->perforce->queryP4user($io);
- $this->assertEquals("TEST_P4VARIABLE_USER", $this->perforce->getUser());
- }
- public function testQueryP4UserQueriesForUser()
- {
- $repoConfig = array("depot" => "depot", "branch" => "branch");
- $this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, false, "TEST");
- $io = $this->getMock('Composer\IO\IOInterface');
- $expectedQuestion = "Enter P4 User:";
- $io->expects($this->at(0))
- ->method('ask')
- ->with($this->equalTo($expectedQuestion))
- ->will($this->returnValue("TEST_QUERY_USER"));
- $this->perforce->queryP4user($io);
- $this->assertEquals("TEST_QUERY_USER", $this->perforce->getUser());
- }
- public function testQueryP4UserStoresResponseToQueryForUserWithWindows()
- {
- $repoConfig = array("depot" => "depot", "branch" => "branch");
- $this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, true, "TEST");
- $io = $this->getMock('Composer\IO\IOInterface');
- $expectedQuestion = "Enter P4 User:";
- $io->expects($this->at(0))
- ->method('ask')
- ->with($this->equalTo($expectedQuestion))
- ->will($this->returnValue("TEST_QUERY_USER"));
- $expectedCommand = "p4 set P4USER=TEST_QUERY_USER";
- $this->processExecutor->expects($this->at(1))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will($this->returnValue(0));
- $this->perforce->queryP4user($io);
- }
- public function testQueryP4UserStoresResponseToQueryForUserWithoutWindows()
- {
- $repoConfig = array("depot" => "depot", "branch" => "branch");
- $this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, false, "TEST");
- $io = $this->getMock('Composer\IO\IOInterface');
- $expectedQuestion = "Enter P4 User:";
- $io->expects($this->at(0))
- ->method('ask')
- ->with($this->equalTo($expectedQuestion))
- ->will($this->returnValue("TEST_QUERY_USER"));
- $expectedCommand = "export P4USER=TEST_QUERY_USER";
- $this->processExecutor->expects($this->at(1))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will($this->returnValue(0));
- $this->perforce->queryP4user($io);
- }
- public function testQueryP4PasswordWithPasswordAlreadySet()
- {
- $repoConfig = array(
- "depot" => "depot",
- "branch" => "branch",
- "p4user" => "user",
- "p4password" => "TEST_PASSWORD"
- );
- $this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, false, "TEST");
- $io = $this->getMock('Composer\IO\IOInterface');
- $password = $this->perforce->queryP4Password($io);
- $this->assertEquals("TEST_PASSWORD", $password);
- }
- public function testQueryP4PasswordWithPasswordSetInP4VariablesWithWindowsOS()
- {
- $io = $this->getMock('Composer\IO\IOInterface');
- $expectedCommand = "p4 set";
- $this->processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will(
- $this->returnCallback(
- function ($command, &$output) {
- $output = "P4PASSWD=TEST_P4VARIABLE_PASSWORD\n";
- return true;
- }
- )
- );
- $password = $this->perforce->queryP4Password($io);
- $this->assertEquals("TEST_P4VARIABLE_PASSWORD", $password);
- }
- public function testQueryP4PasswordWithPasswordSetInP4VariablesNotWindowsOS()
- {
- $repoConfig = array("depot" => "depot", "branch" => "branch", "p4user" => "user");
- $this->perforce = new Perforce($repoConfig, "port", "path", $this->processExecutor, false, "TEST");
- $io = $this->getMock('Composer\IO\IOInterface');
- $expectedCommand = 'echo $P4PASSWD';
- $this->processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will(
- $this->returnCallback(
- function ($command, &$output) {
- $output = "TEST_P4VARIABLE_PASSWORD\n";
- return true;
- }
- )
- );
- $password = $this->perforce->queryP4Password($io);
- $this->assertEquals("TEST_P4VARIABLE_PASSWORD", $password);
- }
- public function testQueryP4PasswordQueriesForPassword()
- {
- $io = $this->getMock('Composer\IO\IOInterface');
- $expectedQuestion = "Enter password for Perforce user user: ";
- $io->expects($this->at(0))
- ->method('askAndHideAnswer')
- ->with($this->equalTo($expectedQuestion))
- ->will($this->returnValue("TEST_QUERY_PASSWORD"));
- $password = $this->perforce->queryP4Password($io);
- $this->assertEquals("TEST_QUERY_PASSWORD", $password);
- }
- public function testWriteP4ClientSpecWithoutStream()
- {
- $stream = fopen("php://memory", 'w+');
- $this->perforce->writeClientSpecToFile($stream);
- rewind($stream);
- $expectedArray = $this->getExpectedClientSpec(false);
- try {
- foreach ($expectedArray as $expected) {
- $this->assertStringStartsWith($expected, fgets($stream));
- }
- $this->assertFalse(fgets($stream));
- } catch (Exception $e) {
- fclose($stream);
- throw $e;
- }
- fclose($stream);
- }
- public function testWriteP4ClientSpecWithStream()
- {
- $this->setPerforceToStream();
- $stream = fopen("php://memory", 'w+');
- $this->perforce->writeClientSpecToFile($stream);
- rewind($stream);
- $expectedArray = $this->getExpectedClientSpec(true);
- try {
- foreach ($expectedArray as $expected) {
- $this->assertStringStartsWith($expected, fgets($stream));
- }
- $this->assertFalse(fgets($stream));
- } catch (Exception $e) {
- fclose($stream);
- throw $e;
- }
- fclose($stream);
- }
- public function testIsLoggedIn()
- {
- $expectedCommand = "p4 -u user -p port login -s";
- $this->processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand), $this->equalTo(null))
- ->will($this->returnValue(0));
- $this->perforce->isLoggedIn();
- }
- public function testConnectClient()
- {
- $expectedCommand = "p4 -u user -c composer_perforce_TEST_depot -p port client -i < path/composer_perforce_TEST_depot.p4.spec";
- $this->processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand), $this->equalTo(null))
- ->will($this->returnValue(0));
- $this->perforce->connectClient();
- }
- public function testGetBranchesWithStream()
- {
- $this->setPerforceToStream();
- $expectedCommand = "p4 -u user -c composer_perforce_TEST_depot_branch -p port streams //depot/...";
- $this->processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will(
- $this->returnCallback(
- function ($command, &$output) {
- $output = "Stream //depot/branch mainline none 'branch'\n";
- return true;
- }
- )
- );
- $branches = $this->perforce->getBranches();
- $this->assertEquals("//depot/branch", $branches['master']);
- }
- public function testGetBranchesWithoutStream()
- {
- $branches = $this->perforce->getBranches();
- $this->assertEquals("//depot", $branches['master']);
- }
- public function testGetTagsWithoutStream()
- {
- $expectedCommand = "p4 -u user -c composer_perforce_TEST_depot -p port labels";
- $this->processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will(
- $this->returnCallback(
- function ($command, &$output) {
- $output = "Label 0.0.1 2013/07/31 'First Label!'\nLabel 0.0.2 2013/08/01 'Second Label!'\n";
- return true;
- }
- )
- );
- $tags = $this->perforce->getTags();
- $this->assertEquals("//depot@0.0.1", $tags['0.0.1']);
- $this->assertEquals("//depot@0.0.2", $tags['0.0.2']);
- }
- public function testGetTagsWithStream()
- {
- $this->setPerforceToStream();
- $expectedCommand = "p4 -u user -c composer_perforce_TEST_depot_branch -p port labels";
- $this->processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will(
- $this->returnCallback(
- function ($command, &$output) {
- $output = "Label 0.0.1 2013/07/31 'First Label!'\nLabel 0.0.2 2013/08/01 'Second Label!'\n";
- return true;
- }
- )
- );
- $tags = $this->perforce->getTags();
- $this->assertEquals("//depot/branch@0.0.1", $tags['0.0.1']);
- $this->assertEquals("//depot/branch@0.0.2", $tags['0.0.2']);
- }
- public function testCheckStreamWithoutStream()
- {
- $result = $this->perforce->checkStream("depot");
- $this->assertFalse($result);
- $this->assertFalse($this->perforce->isStream());
- }
- public function testCheckStreamWithStream()
- {
- $this->processExecutor->expects($this->any())->method('execute')
- ->will(
- $this->returnCallback(
- function ($command, &$output) {
- $output = "Depot depot 2013/06/25 stream /p4/1/depots/depot/... 'Created by Me'";
- return true;
- }
- )
- );
- $result = $this->perforce->checkStream("depot");
- $this->assertTrue($result);
- $this->assertTrue($this->perforce->isStream());
- }
- public function testGetComposerInformationWithoutLabelWithoutStream()
- {
- $expectedCommand = "p4 -u user -c composer_perforce_TEST_depot -p port print //depot/composer.json";
- $this->processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will(
- $this->returnCallback(
- function ($command, &$output) {
- $output = PerforceTest::getComposerJson();
- return true;
- }
- )
- );
- $result = $this->perforce->getComposerInformation("//depot");
- $expected = array(
- "name" => "test/perforce",
- "description" => "Basic project for testing",
- "minimum-stability" => "dev",
- "autoload" => array("psr-0" => array())
- );
- $this->assertEquals($expected, $result);
- }
- public function testGetComposerInformationWithLabelWithoutStream()
- {
- $expectedCommand = "p4 -u user -p port files //depot/composer.json@0.0.1";
- $this->processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will(
- $this->returnCallback(
- function ($command, &$output) {
- $output = "//depot/composer.json#1 - branch change 10001 (text)";
- return true;
- }
- )
- );
- $expectedCommand = "p4 -u user -c composer_perforce_TEST_depot -p port print //depot/composer.json@10001";
- $this->processExecutor->expects($this->at(1))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will(
- $this->returnCallback(
- function ($command, &$output) {
- $output = PerforceTest::getComposerJson();
- return true;
- }
- )
- );
- $result = $this->perforce->getComposerInformation("//depot@0.0.1");
- $expected = array(
- "name" => "test/perforce",
- "description" => "Basic project for testing",
- "minimum-stability" => "dev",
- "autoload" => array("psr-0" => array())
- );
- $this->assertEquals($expected, $result);
- }
- public function testGetComposerInformationWithoutLabelWithStream()
- {
- $this->setPerforceToStream();
- $expectedCommand = "p4 -u user -c composer_perforce_TEST_depot_branch -p port print //depot/branch/composer.json";
- $this->processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will(
- $this->returnCallback(
- function ($command, &$output) {
- $output = PerforceTest::getComposerJson();
- return true;
- }
- )
- );
- $result = $this->perforce->getComposerInformation("//depot/branch");
- $expected = array(
- "name" => "test/perforce",
- "description" => "Basic project for testing",
- "minimum-stability" => "dev",
- "autoload" => array("psr-0" => array())
- );
- $this->assertEquals($expected, $result);
- }
- public function testGetComposerInformationWithLabelWithStream()
- {
- $this->setPerforceToStream();
- $expectedCommand = "p4 -u user -p port files //depot/branch/composer.json@0.0.1";
- $this->processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will(
- $this->returnCallback(
- function ($command, &$output) {
- $output = "//depot/composer.json#1 - branch change 10001 (text)";
- return true;
- }
- )
- );
- $expectedCommand = "p4 -u user -c composer_perforce_TEST_depot_branch -p port print //depot/branch/composer.json@10001";
- $this->processExecutor->expects($this->at(1))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will(
- $this->returnCallback(
- function ($command, &$output) {
- $output = PerforceTest::getComposerJson();
- return true;
- }
- )
- );
- $result = $this->perforce->getComposerInformation("//depot/branch@0.0.1");
- $expected = array(
- "name" => "test/perforce",
- "description" => "Basic project for testing",
- "minimum-stability" => "dev",
- "autoload" => array("psr-0" => array())
- );
- $this->assertEquals($expected, $result);
- }
- public function testSyncCodeBaseWithoutStream()
- {
- $expectedCommand = "p4 -u user -c composer_perforce_TEST_depot -p port sync -f @label";
- $this->processExecutor->expects($this->at(1))
- ->method('execute')
- ->with($this->equalTo($expectedCommand), $this->equalTo(null))
- ->will($this->returnValue(0));
- $this->perforce->syncCodeBase("label");
- }
- public function testSyncCodeBaseWithStream()
- {
- $this->setPerforceToStream();
- $expectedCommand = "p4 -u user -c composer_perforce_TEST_depot_branch -p port sync -f @label";
- $this->processExecutor->expects($this->at(1))
- ->method('execute')
- ->with($this->equalTo($expectedCommand))
- ->will($this->returnValue(0));
- $this->perforce->syncCodeBase("label");
- }
- public function testCheckServerExists()
- {
- $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
- $expectedCommand = "p4 -p perforce.does.exist:port info -s";
- $processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand), $this->equalTo(null))
- ->will($this->returnValue(0));
- $result = $this->perforce->checkServerExists("perforce.does.exist:port", $processExecutor);
- $this->assertTrue($result);
- }
- public function testCheckServerExistsWithFailure()
- {
- $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
- $expectedCommand = "p4 -p perforce.does.not.exist:port info -s";
- $processExecutor->expects($this->at(0))
- ->method('execute')
- ->with($this->equalTo($expectedCommand), $this->equalTo(null))
- ->will($this->returnValue("Perforce client error:"));
- $result = $this->perforce->checkServerExists("perforce.does.not.exist:port", $processExecutor);
- $this->assertTrue($result);
- }
- public static function getComposerJson()
- {
- $composer_json = array(
- '{',
- '"name": "test/perforce",',
- '"description": "Basic project for testing",',
- '"minimum-stability": "dev",',
- '"autoload": {',
- '"psr-0" : {',
- '}',
- '}',
- '}'
- );
- return implode($composer_json);
- }
- private function getExpectedClientSpec($withStream)
- {
- $expectedArray = array(
- "Client: composer_perforce_TEST_depot",
- "\n",
- "Update:",
- "\n",
- "Access:",
- "Owner: user",
- "\n",
- "Description:",
- " Created by user from composer.",
- "\n",
- "Root: path",
- "\n",
- "Options: noallwrite noclobber nocompress unlocked modtime rmdir",
- "\n",
- "SubmitOptions: revertunchanged",
- "\n",
- "LineEnd: local",
- "\n"
- );
- if ($withStream) {
- $expectedArray[] = "Stream:";
- $expectedArray[] = " //depot/branch";
- } else {
- $expectedArray[] = "View: //depot/... //composer_perforce_TEST_depot/depot/...";
- }
- return $expectedArray;
- }
- private function setPerforceToStream()
- {
- $this->perforce->setStream("//depot/branch");
- }
- }
|