function test_checkPackageContents()
 {
     $oPackageManager = new OX_PluginManager();
     /*
     define('OX_PLUGIN_ERROR_PACKAGE_DEFINITION_NOT_FOUND'   ,   -1);
     define('OX_PLUGIN_ERROR_PACKAGE_EXTRACT_FAILED'         ,   -2);
     define('OX_PLUGIN_ERROR_PACKAGE_PARSE_FAILED'           ,   -3);
     define('OX_PLUGIN_ERROR_PACKAGE_VERSION_NOT_FOUND'      ,   -4);
     define('OX_PLUGIN_ERROR_PLUGIN_DEFINITION_MISSING'      ,   -5);
     define('OX_PLUGIN_ERROR_PACKAGE_CONTENTS_MISMATCH'      ,   -6);
     define('OX_PLUGIN_ERROR_PLUGIN_EXTRACT_FAILED'          ,   -7);
     define('OX_PLUGIN_ERROR_PLUGIN_PARSE_FAILED'            ,   -8);
     define('OX_PLUGIN_ERROR_FILE_COUNT_MISMATCH'            ,   -9);
     define('OX_PLUGIN_ERROR_ILLEGAL_FILE'                   ,   -10);
     define('OX_PLUGIN_ERROR_PLUGIN_DECLARATION_MISMATCH'    ,   -11);
     */
     $result = $oPackageManager->_checkPackageContents('testPluginPackage.xml', MAX_PATH . $this->testpathData . 'zipBad_FileIllegal/testPluginPackage.zip');
     $this->assertFalse($result);
     $this->assertEqual($oPackageManager->errcode, OX_PLUGIN_ERROR_ILLEGAL_FILE);
     $result = $oPackageManager->_checkPackageContents('testPluginPackage.xml', MAX_PATH . $this->testpathData . 'zipBad_FileExtra/testPluginPackage.zip');
     $this->assertFalse($result);
     $this->assertEqual($oPackageManager->errcode, OX_PLUGIN_ERROR_FILE_COUNT_MISMATCH);
     $result = $oPackageManager->_checkPackageContents('testPluginPackage.xml', MAX_PATH . $this->testpathData . 'zipBad_FileMisnamed/testPluginPackage.zip');
     $this->assertFalse($result);
     $this->assertEqual($oPackageManager->errcode, OX_PLUGIN_ERROR_PLUGIN_DECLARATION_MISMATCH);
     $GLOBALS['_MAX']['CONF']['plugins']['testPluginPackage'] = 1;
     $result = $oPackageManager->_checkPackageContents('testPluginPackage.xml', MAX_PATH . $this->testpathData . 'zipGood/testPluginPackage.zip');
     $this->assertFalse($result);
     $this->assertEqual($oPackageManager->errcode, OX_PLUGIN_ERROR_PACKAGE_NAME_EXISTS);
     unset($GLOBALS['_MAX']['CONF']['plugins']['testPluginPackage']);
     $GLOBALS['_MAX']['CONF']['pluginGroupComponents']['testPlugin'] = 1;
     $result = $oPackageManager->_checkPackageContents('testPluginPackage.xml', MAX_PATH . $this->testpathData . 'zipGood/testPluginPackage.zip');
     $this->assertFalse($result);
     $this->assertEqual($oPackageManager->errcode, OX_PLUGIN_ERROR_PLUGIN_NAME_EXISTS);
     unset($GLOBALS['_MAX']['CONF']['pluginGroupComponents']['testPlugin']);
     $result = $oPackageManager->_checkPackageContents('testPluginPackage.xml', MAX_PATH . $this->testpathData . 'zipGood/testPluginPackage.zip');
     $this->assertTrue($result);
     $this->assertEqual(count($oPackageManager->aParse), 2);
     $this->assertTrue(isset($oPackageManager->aParse['package']));
     $this->assertTrue(isset($oPackageManager->aParse['plugins']));
     $this->assertEqual(count($oPackageManager->aParse['plugins']), 1);
     $this->assertEqual($oPackageManager->errcode, OX_PLUGIN_ERROR_PACKAGE_OK);
     $result = $oPackageManager->_checkPackageContents('testPluginPackage.xml', MAX_PATH . $this->testpathData . 'zipGoodTrans/testPluginPackage.zip');
     $this->assertTrue($result);
     $this->assertEqual(count($oPackageManager->aParse), 2);
     $this->assertTrue(isset($oPackageManager->aParse['package']));
     $this->assertTrue(isset($oPackageManager->aParse['plugins']));
     $this->assertEqual(count($oPackageManager->aParse['plugins']), 1);
     $this->assertEqual($oPackageManager->errcode, OX_PLUGIN_ERROR_PACKAGE_OK);
 }
 function test_upgradeConfig()
 {
     $oPkgMgr = new OX_PluginManager();
     $zipFile = $this->aUpload['tmp_name'];
     // version 2 package should be installed
     // put the version 3 package in place
     $this->_switchFiles(3);
     $this->assertTrue($oPkgMgr->_checkPackageContents($this->packageName . '.xml', $zipFile, true));
     $aPlugin = $oPkgMgr->aParse['plugins'][1];
     $this->assertEqual($aPlugin['version'], '0.0.3');
     // Test 2 : upgrade to version 0.0.3 ; this involves 0 upgrade or schema packages, just a version stamp
     $oUpgrader = new OX_Plugin_UpgradeComponentGroup($aPlugin, $oPkgMgr);
     $this->assertTrue($oUpgrader->canUpgrade());
     $this->assertEqual($oUpgrader->existing_installation_status, OA_STATUS_CAN_UPGRADE);
     // decompress the zip file, 2nd param indicates overwrite previous files
     $oPkgMgr->_unpack($this->aUpload, true);
     // now that the files are in place, the upgrader can do a schema integrity check
     $this->assertTrue($oUpgrader->canUpgrade());
     $this->assertEqual($oUpgrader->existing_installation_status, OA_STATUS_CAN_UPGRADE);
     $this->assertEqual(count($oUpgrader->aPackageList), 0);
     $aConf =& $GLOBALS['_MAX']['CONF'][$aPlugin['name']];
     // _upgradeConfig calls _upgradeSettings() and _upgradePreferences
     // Test 1 Settings
     // set non-default settings
     $aConf['setting1'] = 'testval1';
     $aConf['setting2'] = 'testval2';
     $aConf['setting3'] = 'testval3';
     $this->assertTrue($oUpgrader->_upgradeSettings());
     // old settings should have original values
     // new setting should have default value
     // deprecated setting should no longer exist
     $aConf =& $GLOBALS['_MAX']['CONF'][$aPlugin['name']];
     $this->assertEqual(count($aConf), 3);
     $this->assertEqual($aConf['setting1'], 'testval1');
     $this->assertEqual($aConf['setting2'], 'testval2');
     $this->assertFalse(isset($aConf['setting3']));
     $this->assertEqual($aConf['setting4'], 'setval4');
     // Test 2 Preferences
     $oDbh = OA_DB::singleton();
     $qryPrefs = 'preference_name LIKE ' . $oDbh->quote('%' . $prefix . '%');
     $prefix = $aPlugin['name'] . '_';
     $doPreferences = OA_Dal::factoryDO('preferences');
     $doPreferences->whereAdd($qryPrefs);
     $doPreferences->find();
     while ($doPreferences->fetch()) {
         $doAccount_Preference_Assoc = OA_Dal::factoryDO('account_preference_assoc');
         $doAccount_Preference_Assoc->whereAdd('preference_id = ' . $doPreferences->preference_id);
         $aPrefsOld[$doPreferences->preference_name] = array('permission' => $doPreferences->account_type, 'id' => $doPreferences->preference_id, 'acct_assoc' => $doAccount_Preference_Assoc->getAll());
     }
     $this->assertEqual(count($aPrefsOld), 2);
     $this->assertFalse(isset($aPrefsOld[$prefix . 'preference3']));
     $this->assertTrue(isset($aPrefsOld[$prefix . 'preference1']));
     $this->assertTrue(isset($aPrefsOld[$prefix . 'preference2']));
     $this->assertEqual($aPrefsOld[$prefix . 'preference1']['permission'], 'MANAGER');
     $this->assertEqual($aPrefsOld[$prefix . 'preference2']['permission'], 'ADMIN');
     $this->assertTrue(isset($aPrefsOld[$prefix . 'preference1']['acct_assoc']));
     $this->assertTrue(isset($aPrefsOld[$prefix . 'preference2']['acct_assoc']));
     $this->assertEqual($aPrefsOld[$prefix . 'preference1']['acct_assoc'][0]['account_id'], '0');
     $this->assertEqual($aPrefsOld[$prefix . 'preference2']['acct_assoc'][0]['account_id'], '0');
     $this->assertTrue($oUpgrader->_upgradePreferences());
     $doPreferences = OA_Dal::factoryDO('preferences');
     $doPreferences->whereAdd($qryPrefs);
     $doPreferences->find();
     while ($doPreferences->fetch()) {
         $doAccount_Preference_Assoc = OA_Dal::factoryDO('account_preference_assoc');
         $doAccount_Preference_Assoc->whereAdd('preference_id = ' . $doPreferences->preference_id);
         $aPrefsNew[$doPreferences->preference_name] = array('permission' => $doPreferences->account_type, 'id' => $doPreferences->preference_id, 'acct_assoc' => $doAccount_Preference_Assoc->getAll());
     }
     $this->assertEqual(count($aPrefsNew), 2);
     $this->assertFalse(isset($aPrefsNew[$prefix . 'preference2']));
     $this->assertTrue(isset($aPrefsNew[$prefix . 'preference1']));
     $this->assertTrue(isset($aPrefsNew[$prefix . 'preference3']));
     $this->assertEqual($aPrefsNew[$prefix . 'preference1']['permission'], 'MANAGER');
     $this->assertEqual($aPrefsNew[$prefix . 'preference3']['permission'], 'ADMIN');
     $this->assertTrue(isset($aPrefsNew[$prefix . 'preference1']['acct_assoc']));
     $this->assertTrue(isset($aPrefsNew[$prefix . 'preference3']['acct_assoc']));
     $this->assertEqual($aPrefsNew[$prefix . 'preference1']['acct_assoc'][0]['account_id'], '0');
     $this->assertEqual($aPrefsNew[$prefix . 'preference3']['acct_assoc'][0]['account_id'], '0');
     $doAccount_Preference_Assoc = OA_Dal::factoryDO('account_preference_assoc');
     $doAccount_Preference_Assoc->preference_id = $aPrefsOld['testPlugin_preference2']['id'];
     $this->assertFalse($doAccount_Preference_Assoc->find());
     $oPkgMgr->uninstallPackage($this->packageName);
 }