PageRenderTime 26ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/OX/Plugin/tests/integration/PluginManager.plg.test.php

https://bitbucket.org/valmy/openx
PHP | 299 lines | 196 code | 51 blank | 52 comment | 3 complexity | 1462c4a9ac0fb561bcf32a6cac5a82df MD5 | raw file
  1. <?php
  2. /*
  3. +---------------------------------------------------------------------------+
  4. | OpenX v2.8 |
  5. | ========== |
  6. | |
  7. | Copyright (c) 2003-2009 OpenX Limited |
  8. | For contact details, see: http://www.openx.org/ |
  9. | |
  10. | This program is free software; you can redistribute it and/or modify |
  11. | it under the terms of the GNU General Public License as published by |
  12. | the Free Software Foundation; either version 2 of the License, or |
  13. | (at your option) any later version. |
  14. | |
  15. | This program is distributed in the hope that it will be useful, |
  16. | but WITHOUT ANY WARRANTY; without even the implied warranty of |
  17. | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
  18. | GNU General Public License for more details. |
  19. | |
  20. | You should have received a copy of the GNU General Public License |
  21. | along with this program; if not, write to the Free Software |
  22. | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
  23. +---------------------------------------------------------------------------+
  24. $Id$
  25. */
  26. require_once LIB_PATH.'/Plugin/PluginManager.php';
  27. /**
  28. * A class for testing the Test_OX_PluginManager class.
  29. *
  30. * @package Plugins
  31. * @author Monique Szpak <monique.szpak@openx.org>
  32. * @subpackage TestSuite
  33. */
  34. class Test_OX_PluginManager extends UnitTestCase
  35. {
  36. var $testpathData = '/lib/OX/Plugin/tests/data/';
  37. var $testpathPackages = '/lib/OX/Plugin/tests/data/plugins/etc/';
  38. var $testpathPluginsAdmin = '/lib/OX/Plugin/tests/data/www/admin/plugins/';
  39. var $testpathPlugins = '/lib/OX/Plugin/tests/data/plugins/';
  40. var $testpathDataObjects = '/var/';
  41. /**
  42. * The constructor method.
  43. */
  44. function Test_OX_PluginManager()
  45. {
  46. $this->UnitTestCase();
  47. }
  48. function setUp()
  49. {
  50. // try to clean up in case of previous failure
  51. $oPkgMgr = new OX_PluginManager();
  52. $oPkgMgr->uninstallPackage('testPluginPackage');
  53. unset($GLOBALS['_MAX']['CONF']['plugins']['testPluginPackage']);
  54. unset($GLOBALS['_MAX']['CONF']['pluginGroupComponents']['testPlugin']);
  55. }
  56. function tearDown()
  57. {
  58. TestEnv::clearMenuCache();
  59. }
  60. function test_checkPackageContents()
  61. {
  62. $oPackageManager = new OX_PluginManager();
  63. /*
  64. define('OX_PLUGIN_ERROR_PACKAGE_DEFINITION_NOT_FOUND' , -1);
  65. define('OX_PLUGIN_ERROR_PACKAGE_EXTRACT_FAILED' , -2);
  66. define('OX_PLUGIN_ERROR_PACKAGE_PARSE_FAILED' , -3);
  67. define('OX_PLUGIN_ERROR_PACKAGE_VERSION_NOT_FOUND' , -4);
  68. define('OX_PLUGIN_ERROR_PLUGIN_DEFINITION_MISSING' , -5);
  69. define('OX_PLUGIN_ERROR_PACKAGE_CONTENTS_MISMATCH' , -6);
  70. define('OX_PLUGIN_ERROR_PLUGIN_EXTRACT_FAILED' , -7);
  71. define('OX_PLUGIN_ERROR_PLUGIN_PARSE_FAILED' , -8);
  72. define('OX_PLUGIN_ERROR_FILE_COUNT_MISMATCH' , -9);
  73. define('OX_PLUGIN_ERROR_ILLEGAL_FILE' , -10);
  74. define('OX_PLUGIN_ERROR_PLUGIN_DECLARATION_MISMATCH' , -11);
  75. */
  76. $result = $oPackageManager->_checkPackageContents('testPluginPackage.xml', MAX_PATH.$this->testpathData.'zipBad_FileIllegal/testPluginPackage.zip');
  77. $this->assertFalse($result);
  78. $this->assertEqual($oPackageManager->errcode, OX_PLUGIN_ERROR_ILLEGAL_FILE);
  79. $result = $oPackageManager->_checkPackageContents('testPluginPackage.xml', MAX_PATH.$this->testpathData.'zipBad_FileExtra/testPluginPackage.zip');
  80. $this->assertFalse($result);
  81. $this->assertEqual($oPackageManager->errcode, OX_PLUGIN_ERROR_FILE_COUNT_MISMATCH);
  82. $result = $oPackageManager->_checkPackageContents('testPluginPackage.xml', MAX_PATH.$this->testpathData.'zipBad_FileMisnamed/testPluginPackage.zip');
  83. $this->assertFalse($result);
  84. $this->assertEqual($oPackageManager->errcode, OX_PLUGIN_ERROR_PLUGIN_DECLARATION_MISMATCH);
  85. $GLOBALS['_MAX']['CONF']['plugins']['testPluginPackage'] = 1;
  86. $result = $oPackageManager->_checkPackageContents('testPluginPackage.xml', MAX_PATH.$this->testpathData.'zipGood/testPluginPackage.zip');
  87. $this->assertFalse($result);
  88. $this->assertEqual($oPackageManager->errcode, OX_PLUGIN_ERROR_PACKAGE_NAME_EXISTS);
  89. unset($GLOBALS['_MAX']['CONF']['plugins']['testPluginPackage']);
  90. $GLOBALS['_MAX']['CONF']['pluginGroupComponents']['testPlugin'] = 1;
  91. $result = $oPackageManager->_checkPackageContents('testPluginPackage.xml', MAX_PATH.$this->testpathData.'zipGood/testPluginPackage.zip');
  92. $this->assertFalse($result);
  93. $this->assertEqual($oPackageManager->errcode, OX_PLUGIN_ERROR_PLUGIN_NAME_EXISTS);
  94. unset($GLOBALS['_MAX']['CONF']['pluginGroupComponents']['testPlugin']);
  95. $result = $oPackageManager->_checkPackageContents('testPluginPackage.xml', MAX_PATH.$this->testpathData.'zipGood/testPluginPackage.zip');
  96. $this->assertTrue($result);
  97. $this->assertEqual(count($oPackageManager->aParse),2);
  98. $this->assertTrue(isset($oPackageManager->aParse['package']));
  99. $this->assertTrue(isset($oPackageManager->aParse['plugins']));
  100. $this->assertEqual(count($oPackageManager->aParse['plugins']),1);
  101. $this->assertEqual($oPackageManager->errcode, OX_PLUGIN_ERROR_PACKAGE_OK);
  102. }
  103. function test_decompressFile()
  104. {
  105. @unlink(MAX_PATH.'/var/ziptest/foo.xml');
  106. @unlink(MAX_PATH.'/var/ziptest/etc/bar.xml');
  107. @rmdir(MAX_PATH.'/var/ziptest/etc');
  108. @rmdir(MAX_PATH.'/var/ziptest');
  109. $oPackageManager = new OX_PluginManager();
  110. $oPackageManager->pathPackages = $this->testpathPackages;
  111. $oPackageManager->aErrors = array();
  112. $this->assertFalse($oPackageManager->_decompressFile(MAX_PATH.$this->testpathData.'ziptest.zip', '/foo'));
  113. $this->assertEqual(count($oPackageManager->aErrors),3);
  114. $oPackageManager->aErrors = array();
  115. $this->assertEqual(count($oPackageManager->_decompressFile(MAX_PATH.$this->testpathData.'ziptest.zip', MAX_PATH.'/var/')),3);
  116. $this->assertEqual(count($oPackageManager->aErrors),0);
  117. $this->assertTrue(file_exists(MAX_PATH.'/var/ziptest/foo.xml'));
  118. $this->assertTrue(file_exists(MAX_PATH.'/var/ziptest/etc/bar.xml'));
  119. @unlink(MAX_PATH.'/var/ziptest/foo.xml');
  120. @unlink(MAX_PATH.'/var/ziptest/etc/bar.xml');
  121. @rmdir(MAX_PATH.'/var/ziptest/etc');
  122. @rmdir(MAX_PATH.'/var/ziptest');
  123. }
  124. function test_installPackage()
  125. {
  126. $oPkgMgr = new OX_PluginManager();
  127. $file = MAX_PATH.$this->testpathData.'zipInstallTest/testPluginPackage.zip';
  128. $oPkgMgr->clearErrors();
  129. //install
  130. $this->assertTrue($oPkgMgr->installPackage(array('tmp_name'=>$file, 'name'=>'testPluginPackage.zip')));
  131. if (count($oPkgMgr->aErrors))
  132. {
  133. foreach ($oPkgMgr->aErrors AS $error)
  134. {
  135. $this->fail($error);
  136. }
  137. }
  138. $path = MAX_PATH.$oPkgMgr->pathPluginsAdmin.'testPlugin/';
  139. $this->assertTrue(file_exists($path.'templates/testPlugin.html'));
  140. $this->assertTrue(file_exists($path.'images/testPlugin1.jpg'));
  141. $this->assertTrue(file_exists($path.'images/testPlugin2.jpg'));
  142. $this->assertTrue(file_exists($path.'testPlugin-common.php'));
  143. $this->assertTrue(file_exists($path.'testPlugin-index.php'));
  144. $this->assertTrue(file_exists($path.'testPlugin-page.php'));
  145. $this->assertTrue(isset($GLOBALS['_MAX']['CONF']['plugins']['testPluginPackage']));
  146. $this->assertTrue(isset($GLOBALS['_MAX']['CONF']['pluginGroupComponents']['testPlugin']));
  147. $this->assertTrue(isset($GLOBALS['_MAX']['CONF']['testPlugin']));
  148. $this->assertTrue(isset($GLOBALS['_MAX']['CONF']['testPlugin']['setting1']));
  149. $this->assertTrue(isset($GLOBALS['_MAX']['CONF']['testPlugin']['setting2']));
  150. $this->assertTrue(isset($GLOBALS['_MAX']['CONF']['testPlugin']['setting3']));
  151. $doAppVar = OA_Dal::factoryDO('application_variable');
  152. $doAppVar->name = 'tables_testplugin';
  153. $doAppVar->find(true);
  154. $this->assertEqual($doAppVar->value,'001');
  155. $doAppVar = OA_Dal::factoryDO('application_variable');
  156. $doAppVar->name = 'testPlugin_version';
  157. $doAppVar->find(true);
  158. $this->assertEqual($doAppVar->value,'0.0.1');
  159. $doPrefs = OA_Dal::factoryDO('preferences');
  160. $doPrefs->preference_name = 'testPlugin_preference1';
  161. $doPrefs->find(true);
  162. $this->assertEqual($doPrefs->account_type,OA_ACCOUNT_MANAGER);
  163. $doPrefs = OA_Dal::factoryDO('preferences');
  164. $doPrefs->preference_name = 'testPlugin_preference2';
  165. $doPrefs->find(true);
  166. $this->assertEqual($doPrefs->account_type,OA_ACCOUNT_ADMIN);
  167. $aTables = OA_DB_Table::listOATablesCaseSensitive('testPlugin_table');
  168. $this->assertIsA($aTables,'array');
  169. $doTestPluginTable = OA_Dal::factoryDO('testPlugin_table');
  170. $this->assertIsA($doTestPluginTable,'DataObjects_Testplugin_table');
  171. $this->assertEqual($id = $doTestPluginTable->insert(),1);
  172. $this->assertTrue($doTestPluginTable->delete());
  173. //uninstall
  174. $oPkgMgr->clearErrors();
  175. $this->assertTrue($oPkgMgr->uninstallPackage('testPluginPackage'));
  176. if (count($oPkgMgr->aErrors))
  177. {
  178. foreach ($oPkgMgr->aErrors AS $error)
  179. {
  180. $this->fail($error);
  181. }
  182. }
  183. $path = MAX_PATH.$oPkgMgr->pathPluginsAdmin.'testPlugin/';
  184. $this->assertFalse(file_exists($path.'templates/testPlugin.html'));
  185. $this->assertFalse(file_exists($path.'images/testPlugin1.jpg'));
  186. $this->assertFalse(file_exists($path.'images/testPlugin2.jpg'));
  187. $this->assertFalse(file_exists($path.'testPlugin-common.php'));
  188. $this->assertFalse(file_exists($path.'testPlugin-index.php'));
  189. $this->assertFalse(file_exists($path.'testPlugin-page.php'));
  190. $this->assertFalse(isset($GLOBALS['_MAX']['CONF']['plugins']['testPluginPackage']));
  191. $this->assertFalse(isset($GLOBALS['_MAX']['CONF']['pluginGroupComponents']['testPlugin']));
  192. $this->assertFalse(isset($GLOBALS['_MAX']['CONF']['testPlugin']));
  193. $this->assertFalse(isset($GLOBALS['_MAX']['CONF']['testPlugin']['setting1']));
  194. $this->assertFalse(isset($GLOBALS['_MAX']['CONF']['testPlugin']['setting2']));
  195. $this->assertFalse(isset($GLOBALS['_MAX']['CONF']['testPlugin']['setting3']));
  196. $doAppVar = OA_Dal::factoryDO('application_variable');
  197. $doAppVar->name = 'tables_testplugin';
  198. $doAppVar->find(true);
  199. $this->assertNull($doAppVar->value, 'Expected null got '.$doAppVar->value);
  200. $doAppVar = OA_Dal::factoryDO('application_variable');
  201. $doAppVar->name = 'testPlugin_version';
  202. $doAppVar->find(true);
  203. $this->assertNull($doAppVar->value, 'Expected null got '.$doAppVar->value);
  204. $doPrefs = OA_Dal::factoryDO('preferences');
  205. $doPrefs->preference_name = 'testPlugin_preference1';
  206. $doPrefs->find(true);
  207. $this->assertNull($doPrefs->account_type, 'Expected null got '.$doPrefs->account_type);
  208. $doPrefs = OA_Dal::factoryDO('preferences');
  209. $doPrefs->preference_name = 'testPlugin_preference2';
  210. $doPrefs->find(true);
  211. $this->assertNull($doPrefs->account_type, 'Expected null got '.$doPrefs->account_type);
  212. $aTables = OA_DB_Table::listOATablesCaseSensitive('testplugin_table');
  213. $this->assertEqual(count($aTables),0);
  214. TestEnv::restoreConfig();
  215. }
  216. function test_getPackageDiagnostics()
  217. {
  218. $oPkgMgr = new OX_PluginManager();
  219. $file = MAX_PATH.$this->testpathData.'zipDiagnosticTest/testPluginPackage.zip';
  220. unset($GLOBALS['_MAX']['CONF']['plugins']['testPluginPackage']);
  221. unset($GLOBALS['_MAX']['CONF']['pluginGroupComponents']['testPlugin001']);
  222. //install
  223. $this->assertTrue($oPkgMgr->installPackage(array('tmp_name'=>$file, 'name'=>'testPluginPackage.zip')));
  224. if (count($oPkgMgr->aErrors))
  225. {
  226. foreach ($oPkgMgr->aErrors AS $error)
  227. {
  228. $this->fail($error);
  229. }
  230. }
  231. $aResultGood = $oPkgMgr->getPackageDiagnostics('testPluginPackage');
  232. $this->assertFalse($aResultGood['plugin']['error']);
  233. unlink(MAX_PATH.$oPkgMgr->pathPluginsAdmin.'testPlugin001/'.'testPlugin-common.php');
  234. $oPkgMgr->_unregisterSettings('testPlugin001', false);
  235. unset($GLOBALS['_MAX']['CONF']['testPlugin001']);
  236. unset($GLOBALS['_MAX']['CONF']['testPlugin001']['setting1']);
  237. $oPkgMgr->_unregisterPluginVersion('testPlugin001');
  238. $oPkgMgr->_unregisterSchemaVersion('testPlugin001');
  239. $oPkgMgr->_unregisterPreferences('testPlugin001',$aResultGood['groups'][0]['install']['config']['preferences']);
  240. $oPkgMgr->_dropTables('testPlugin', $aResultGood['groups'][0]['install']['database']['mdb2schema']);
  241. $aResultBad = $oPkgMgr->getPackageDiagnostics('testPluginPackage');
  242. $this->assertTrue($aResultBad['groups'][1]['error']);
  243. //uninstall
  244. $this->assertTrue($oPkgMgr->uninstallPackage('testPluginPackage'));
  245. TestEnv::restoreConfig();
  246. }
  247. }
  248. ?>