ExecutableFinderTest.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. /*
  3. * This file is part of the Symfony package.
  4. *
  5. * (c) Fabien Potencier <fabien@symfony.com>
  6. *
  7. * For the full copyright and license information, please view the LICENSE
  8. * file that was distributed with this source code.
  9. */
  10. namespace Symfony\Component\Process\Tests;
  11. use Symfony\Component\Process\ExecutableFinder;
  12. /**
  13. * @author Chris Smith <chris@cs278.org>
  14. */
  15. class ExecutableFinderTest extends \PHPUnit_Framework_TestCase
  16. {
  17. private $path;
  18. public function tearDown()
  19. {
  20. if ($this->path) {
  21. // Restore path if it was changed.
  22. putenv('PATH='.$this->path);
  23. }
  24. }
  25. private function setPath($path)
  26. {
  27. $this->path = getenv('PATH');
  28. putenv('PATH='.$path);
  29. }
  30. public function testFind()
  31. {
  32. if (!defined('PHP_BINARY')) {
  33. $this->markTestSkipped('Requires the PHP_BINARY constant');
  34. }
  35. if (ini_get('open_basedir')) {
  36. $this->markTestSkipped('Cannot test when open_basedir is set');
  37. }
  38. $this->setPath(dirname(PHP_BINARY));
  39. $finder = new ExecutableFinder();
  40. $result = $finder->find($this->getPhpBinaryName());
  41. $this->assertSamePath(PHP_BINARY, $result);
  42. }
  43. public function testFindWithDefault()
  44. {
  45. if (ini_get('open_basedir')) {
  46. $this->markTestSkipped('Cannot test when open_basedir is set');
  47. }
  48. $expected = 'defaultValue';
  49. $this->setPath('');
  50. $finder = new ExecutableFinder();
  51. $result = $finder->find('foo', $expected);
  52. $this->assertEquals($expected, $result);
  53. }
  54. public function testFindWithExtraDirs()
  55. {
  56. if (!defined('PHP_BINARY')) {
  57. $this->markTestSkipped('Requires the PHP_BINARY constant');
  58. }
  59. if (ini_get('open_basedir')) {
  60. $this->markTestSkipped('Cannot test when open_basedir is set');
  61. }
  62. $this->setPath('');
  63. $extraDirs = array(dirname(PHP_BINARY));
  64. $finder = new ExecutableFinder();
  65. $result = $finder->find($this->getPhpBinaryName(), null, $extraDirs);
  66. $this->assertSamePath(PHP_BINARY, $result);
  67. }
  68. public function testFindWithOpenBaseDir()
  69. {
  70. if (!defined('PHP_BINARY')) {
  71. $this->markTestSkipped('Requires the PHP_BINARY constant');
  72. }
  73. if (defined('PHP_WINDOWS_VERSION_BUILD')) {
  74. $this->markTestSkipped('Cannot run test on windows');
  75. }
  76. if (ini_get('open_basedir')) {
  77. $this->markTestSkipped('Cannot test when open_basedir is set');
  78. }
  79. ini_set('open_basedir', dirname(PHP_BINARY).PATH_SEPARATOR.'/');
  80. $finder = new ExecutableFinder();
  81. $result = $finder->find($this->getPhpBinaryName());
  82. $this->assertSamePath(PHP_BINARY, $result);
  83. }
  84. public function testFindProcessInOpenBasedir()
  85. {
  86. if (ini_get('open_basedir')) {
  87. $this->markTestSkipped('Cannot test when open_basedir is set');
  88. }
  89. if (!defined('PHP_BINARY')) {
  90. $this->markTestSkipped('Requires the PHP_BINARY constant');
  91. }
  92. $execPath = __DIR__.'/SignalListener.php';
  93. $this->setPath('');
  94. ini_set('open_basedir', PHP_BINARY.PATH_SEPARATOR.'/');
  95. $finder = new ExecutableFinder();
  96. $result = $finder->find($this->getPhpBinaryName(), false);
  97. $this->assertSamePath(PHP_BINARY, $result);
  98. }
  99. private function assertSamePath($expected, $tested)
  100. {
  101. if (defined('PHP_WINDOWS_VERSION_BUILD')) {
  102. $this->assertEquals(strtolower($expected), strtolower($tested));
  103. } else {
  104. $this->assertEquals($expected, $tested);
  105. }
  106. }
  107. private function getPhpBinaryName()
  108. {
  109. return basename(PHP_BINARY, defined('PHP_WINDOWS_VERSION_BUILD') ? '.exe' : '');
  110. }
  111. }