PageRenderTime 59ms CodeModel.GetById 31ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/Gitty/Remote/FtpAdapterTest.php

https://github.com/fabiang/gitty
PHP | 378 lines | 245 code | 37 blank | 96 comment | 0 complexity | 288891126884778c1dec11f332c3dfa5 MD5 | raw file
Possible License(s): GPL-3.0
  1. <?php
  2. namespace Gitty\Tests\Gitty\Remote;
  3. use \Gitty as Gitty;
  4. require_once 'PHPUnit/Framework.php';
  5. require_once 'PHPUnit/Framework/TestCase.php';
  6. require_once \dirname(__FILE__).'/../../../library/Gitty/Repositories.php';
  7. require_once \dirname(__FILE__).'/../../../library/Gitty/Config.php';
  8. require_once \dirname(__FILE__).'/../../../library/Gitty/Config/Ini.php';
  9. require_once \dirname(__FILE__).'/../../../library/Gitty/Remote.php';
  10. require_once \dirname(__FILE__).'/../../../library/Gitty/Remote/AdapterAbstract.php';
  11. require_once \dirname(__FILE__).'/../../../library/Gitty/Remote/Adapter/Ftp.php';
  12. require_once \dirname(__FILE__).'/../../../library/Gitty/Remote/Exception.php';
  13. class FtpAdapterTest extends \PHPUnit_Framework_TestCase
  14. {
  15. protected $config = null;
  16. public function setUp()
  17. {
  18. $workingConfig = new Gitty\Config\Ini(
  19. \dirname(__FILE__).'/../../data/workingExample.ini'
  20. );
  21. $remoteData = $workingConfig->projects->myproject->deployment->hostnamecom;
  22. $this->config = $remoteData;
  23. }
  24. public function tearDown()
  25. {
  26. $this->config = null;
  27. }
  28. /**
  29. * @covers Gitty\Remote\Adapter\Ftp::close
  30. */
  31. public function testClose()
  32. {
  33. $config = $this->config;
  34. $config->port = 21;
  35. $config->revisitionFileName = 'myRevFile.txt';
  36. $remote = new Gitty\Remote\Adapter\Ftp($config);
  37. $remote->close();
  38. $remote->init();
  39. $remote->close();
  40. }
  41. /**
  42. * @covers Gitty\Remote\Adapter\Ftp::cleanUp
  43. */
  44. public function testCleanUp()
  45. {
  46. $remote = new Gitty\Remote\Adapter\Ftp($this->config);
  47. $remote->init();
  48. $remote->cleanUp();
  49. }
  50. /**
  51. * @covers Gitty\Remote\Adapter\Ftp::__destruct
  52. */
  53. public function testDestruct()
  54. {
  55. $remote = new Gitty\Remote\Adapter\Ftp($this->config);
  56. unset($remote);
  57. }
  58. /**
  59. * @expectedException Gitty\Remote\Exception
  60. * @covers Gitty\Remote\Adapter\Ftp::init
  61. * @covers Gitty\Remote\Exception
  62. */
  63. public function testInvalidHostName()
  64. {
  65. $config = clone $this->config;
  66. $config->hostname = \uniqid().'______.local';
  67. $remote = new Gitty\Remote\Adapter\Ftp($config);
  68. try {
  69. $remote->init();
  70. } catch (Gitty\Remote\Exception $e) {
  71. $remote->close();
  72. throw $e;
  73. }
  74. }
  75. /**
  76. * @expectedException Gitty\Remote\Exception
  77. * @dataProvider provideInvalidLogins
  78. * @covers Gitty\Remote\Adapter\Ftp::init
  79. * @covers Gitty\Remote\Exception
  80. */
  81. public function testInvalidLogin($hostname, $port = 21, $username, $password, $path)
  82. {
  83. $config = new Gitty\Config(
  84. array(
  85. 'hostname' => $hostname,
  86. 'port' => $port,
  87. 'username' => $username,
  88. 'password' => $password,
  89. 'path' => $path
  90. )
  91. );
  92. $remote = new Gitty\Remote\Adapter\Ftp($config);
  93. try {
  94. $remote->init();
  95. } catch (Gitty\Remote\Exception $e) {
  96. $remote->close();
  97. throw $e;
  98. }
  99. }
  100. /**
  101. * @covers Gitty\Remote\Adapter\Ftp::getServerRevisitionId
  102. * @covers Gitty\Remote\Adapter\Ftp::putServerRevisitionId
  103. */
  104. public function testGetServerRevisitionId()
  105. {
  106. $config = clone $this->config;
  107. $config->revisitionFileName = 'myRevFile.txt';
  108. $remote = new Gitty\Remote\Adapter\Ftp($config);
  109. $remote->unlink($config->revisitionFileName);
  110. $remote->close();
  111. $this->assertEquals(null, $remote->getServerRevisitionId());
  112. $remote->close();
  113. $remote->putServerRevisitionId('test');
  114. $this->assertEquals('test', $remote->getServerRevisitionId());
  115. $remote->unlink($config->revisitionFileName);
  116. $remote->close();
  117. }
  118. /**
  119. * @covers Gitty\Remote\Adapter\Ftp::copy
  120. */
  121. public function testCopyUnknownFile()
  122. {
  123. $remote = new Gitty\Remote\Adapter\Ftp($this->config);
  124. $remote->init();
  125. $this->assertEquals(null, $remote->copy(\uniqid().'/unknown.txt', '/foo/bar'));
  126. $remote->close();
  127. }
  128. /**
  129. * @covers Gitty\Remote\Adapter\Ftp::getAdapterName
  130. */
  131. public function testGetAdapterName()
  132. {
  133. $remote = new Gitty\Remote\Adapter\Ftp($this->config);
  134. $this->assertEquals('Ftp', $remote->getAdapterName());
  135. $remote->close();
  136. }
  137. /**
  138. * @covers Gitty\Remote\Adapter\Ftp::__construct
  139. * @covers Gitty\Remote\Adapter\Ftp::getPort
  140. * @covers Gitty\Remote\AdapterAbstract::__get
  141. */
  142. public function testPortSetting()
  143. {
  144. $config = clone $this->config;
  145. $config->port = 21;
  146. $remote = new Gitty\Remote\Adapter\Ftp($config);
  147. $this->assertEquals($config->port, $remote->getPort());
  148. $this->assertEquals($config->port, $remote->port);
  149. $remote->close();
  150. }
  151. /**
  152. * @covers Gitty\Remote\AdapterAbstract::__get
  153. * @covers Gitty\Remote\AdapterAbstract::getRevisitionFileName
  154. * @covers Gitty\Remote\Adapter\Ftp::__construct
  155. */
  156. public function testRevisitionFileNameSetting()
  157. {
  158. $config = clone $this->config;
  159. $config->revisitionFileName = \uniqid();
  160. $remote = new Gitty\Remote\Adapter\Ftp($config);
  161. $this->assertEquals($config->revisitionFileName, $remote->getRevisitionFileName());
  162. $this->assertEquals($config->revisitionFileName, $remote->revisitionFileName);
  163. $remote->close();
  164. }
  165. /**
  166. * @covers Gitty\Remote\AdapterAbstract::__get
  167. * @covers Gitty\Remote\Adapter\Ftp::getHostname
  168. * @covers Gitty\Remote\Adapter\Ftp::getUsername
  169. * @covers Gitty\Remote\Adapter\Ftp::getPassword
  170. * @covers Gitty\Remote\Adapter\Ftp::getPath
  171. */
  172. public function testOtherConfigurationOptions()
  173. {
  174. $config = $this->config;
  175. $remote = new Gitty\Remote\Adapter\Ftp($config);
  176. $config_array = $config->toArray();
  177. $this->assertEquals(
  178. $config_array,
  179. array(
  180. 'adapter' => strtolower($remote->getAdapterName()),
  181. 'hostname' => $remote->getHostname(),
  182. 'username' => $remote->getUsername(),
  183. 'password' => $remote->getPassword(),
  184. 'path' => $remote->getPath()
  185. )
  186. );
  187. $this->assertEquals(
  188. $config_array,
  189. array(
  190. 'adapter' => strtolower($remote->getAdapterName()),
  191. 'hostname' => $remote->hostname,
  192. 'username' => $remote->username,
  193. 'password' => $remote->password,
  194. 'path' => $remote->path
  195. )
  196. );
  197. }
  198. /**
  199. * @covers Gitty\Remote\AdapterAbstract::__get
  200. * @covers Gitty\Remote\AdapterAbstract::__set
  201. * @covers Gitty\Remote\AdapterAbstract::getRevisitionFileName
  202. * @covers Gitty\Remote\AdapterAbstract::setRevisitionFileName
  203. * @covers Gitty\Remote\AdapterAbstract::getOptions
  204. * @covers Gitty\Remote\AdapterAbstract::setOptions
  205. * @covers Gitty\Remote\AdapterAbstract::toArray
  206. * @covers Gitty\Remote\Adapter\Ftp::getHostname
  207. * @covers Gitty\Remote\Adapter\Ftp::getUsername
  208. * @covers Gitty\Remote\Adapter\Ftp::getPassword
  209. * @covers Gitty\Remote\Adapter\Ftp::getPath
  210. * @covers Gitty\Remote\Adapter\Ftp::getPort
  211. * @covers Gitty\Remote\Adapter\Ftp::setHostname
  212. * @covers Gitty\Remote\Adapter\Ftp::setUsername
  213. * @covers Gitty\Remote\Adapter\Ftp::setPassword
  214. * @covers Gitty\Remote\Adapter\Ftp::setPath
  215. * @covers Gitty\Remote\Adapter\Ftp::setPort
  216. */
  217. public function testConfigurationOptionsSetting()
  218. {
  219. $methods = array(
  220. 'revisitionFileName',
  221. 'hostname',
  222. 'username',
  223. 'password',
  224. 'path'
  225. );
  226. $remote = new Gitty\Remote\Adapter\Ftp($this->config);
  227. foreach ($methods as $method) {
  228. $set = 'set'.\ucfirst($method);
  229. $get = 'get'.\ucfirst($method);
  230. $uid = \uniqid();
  231. $remote->$set($uid);
  232. $this->assertEquals($uid, $remote->$get());
  233. }
  234. foreach ($methods as $method) {
  235. $uid = \uniqid();
  236. $remote->$method = $uid;
  237. $this->assertEquals($uid, $remote->$method);
  238. }
  239. //port
  240. $uid = \uniqid();
  241. $remote->setPort($uid);
  242. $this->assertEquals($remote->getPort(), (int)$uid);
  243. $remote->port = $uid;
  244. $this->assertEquals($remote->port, (int)$uid);
  245. // test setting and getting all options
  246. $methods[] = 'port';
  247. $data = array();
  248. foreach ($methods as $method) {
  249. $data[$method] = $remote->$method;
  250. }
  251. $this->assertEquals($data, $remote->getOptions());
  252. $data['hostname'] = 'foobar.de';
  253. $data['username'] = 'foobar';
  254. $remote->setOptions($data);
  255. $this->assertEquals($data, $remote->getOptions());
  256. $this->assertEquals($data, $remote->toArray());
  257. // test if invalid options are skipped
  258. $data[\uniqid()] = \uniqid();
  259. $remote->setOptions($data);
  260. $this->assertNotEquals($data, $remote->getOptions());
  261. }
  262. /**
  263. * also tests auto init of connection
  264. *
  265. * @dataProvider provideFtpFunctions
  266. * @covers Gitty\Remote\Adapter\Ftp::init
  267. * @covers Gitty\Remote\Adapter\Ftp::rmDir
  268. * @covers Gitty\Remote\Adapter\Ftp::put
  269. * @covers Gitty\Remote\Adapter\Ftp::rename
  270. * @covers Gitty\Remote\Adapter\Ftp::unlink
  271. * @covers Gitty\Remote\Adapter\Ftp::copy
  272. */
  273. public function testFtpFunctions($function, $params)
  274. {
  275. $remote = new Gitty\Remote\Adapter\Ftp($this->config);
  276. \call_user_func_array(array($remote, $function), $params);
  277. $remote->cleanUp();
  278. $remote->close();
  279. }
  280. /**
  281. * @expectedException Gitty\Remote\Exception
  282. * @covers Gitty\Remote\AdapterAbstract::__set
  283. * @covers Gitty\Remote\Exception
  284. */
  285. public function testInvalidSet()
  286. {
  287. $remote = new Gitty\Remote\Adapter\Ftp($this->config);
  288. $uid = \uniqid();
  289. $remote->$uid = 1;
  290. }
  291. /**
  292. * @expectedException Gitty\Remote\Exception
  293. * @covers Gitty\Remote\AdapterAbstract::__get
  294. * @covers Gitty\Remote\Exception
  295. */
  296. public function testInvalidGet()
  297. {
  298. $remote = new Gitty\Remote\Adapter\Ftp($this->config);
  299. $uid = \uniqid();
  300. $foo = $remote->$uid;
  301. }
  302. /**
  303. * @covers Gitty\Remote\Adapter\Ftp::__toString
  304. */
  305. public function testToString()
  306. {
  307. $config = $this->config;
  308. $remote = new Gitty\Remote\Adapter\Ftp($config);
  309. $test = "(FTP) {$config->hostname}:" . (isset($config->port) ? $config->port : 21);
  310. $this->assertEquals($test, (string)$remote);
  311. }
  312. /**
  313. * data provider
  314. */
  315. public static function provideInvalidLogins()
  316. {
  317. return array(
  318. array('ftp.mozilla.org', 21, 'username_'.uniqid(), 'password_'.uniqid(), '/'),
  319. array('ftp.sun.com', 21, 'username_'.uniqid(), 'password_'.uniqid(), '/'),
  320. array('ftp.kernel.org', 21, 'username_'.uniqid(), 'password_'.uniqid(), '/'),
  321. );
  322. }
  323. public function provideFtpFunctions()
  324. {
  325. $file_path = \realpath(\dirname(__FILE__).'/../../data/example/');
  326. return array(
  327. array('put', array(\fopen($file_path.'/file1.txt', 'r'), 'file1.txt')),
  328. array('put', array(\fopen($file_path.'/file2.txt', 'r'), 'file2.txt')),
  329. array('put', array(\fopen($file_path.'/copy/file2.txt', 'r'), 'copy/file2.txt')),
  330. array('put', array(\file_get_contents($file_path.'/renamed.txt'), 'foobar.txt')),
  331. array('rename', array('file1.txt', 'renamed.txt')),
  332. array('unlink', array('file2.txt')),
  333. array('copy', array('renamed.txt', 'copied.txt')),
  334. array('copy', array('copied.txt', 'copy/foobar/copied.txt')),
  335. array('unlink', array('copy/file2.txt')),
  336. array('unlink', array('copy/copied.txt')),
  337. array('unlink', array('copy/renamed.txt')),
  338. array('unlink', array('copy/foobar/copied.txt')),
  339. );
  340. }
  341. }