fixes/improves some more tests for ldap backend
[tine20] / tests / tine20 / Tinebase / ControllerTest.php
1 <?php
2 /**
3  * Tine 2.0 - http://www.tine20.org
4  * 
5  * @package     Tinebase
6  * @subpackage  Account
7  * @license     http://www.gnu.org/licenses/agpl.html
8  * @copyright   Copyright (c) 2010-2011 Metaways Infosystems GmbH (http://www.metaways.de)
9  * @author      Philipp Schüle <p.schuele@metaways.de>
10  * 
11  * @todo make testLoginAndLogout work (needs to run in separate process)
12  */
13
14 /**
15  * Test helper
16  */
17 require_once dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'TestHelper.php';
18
19 /**
20  * Test class for Tinebase_Controller
21  */
22 class Tinebase_ControllerTest extends PHPUnit_Framework_TestCase
23 {
24     /**
25      * controller instance
26      * 
27      * @var Tinebase_Controller
28      */
29     protected $_instance = NULL;
30     
31     /**
32      * Sets up the fixture.
33      * This method is called before a test is executed.
34      *
35      * @access protected
36      */
37     protected function setUp()
38     {
39         $this->_instance = Tinebase_Controller::getInstance();
40     }
41
42     /**
43      * Tears down the fixture
44      * This method is called after a test is executed.
45      *
46      * @access protected
47      */
48     protected function tearDown()
49     {
50         Tinebase_Config::getInstance()->maintenanceMode = 0;
51     }
52     
53     /**
54      * testMaintenanceModeLoginFail
55      */
56     public function testMaintenanceModeLoginFail()
57     {
58         if (Tinebase_User::getConfiguredBackend() === Tinebase_User::LDAP) {
59             $this->markTestSkipped('FIXME: Does not work with LDAP backend (full test suite run)');
60         }
61
62         Tinebase_Config::getInstance()->maintenanceMode = 1;
63
64         try {
65             $this->_instance->login(
66                 'sclever',
67                 Tinebase_Helper::array_value('password', TestServer::getInstance()->getTestCredentials()),
68                 new \Zend\Http\PhpEnvironment\Request()
69             );
70             $this->fail('expected maintenance mode exception');
71         } catch (Tinebase_Exception_MaintenanceMode $temm) {
72             $this->assertEquals('Installation is in maintenance mode. Please try again later', $temm->getMessage());
73         }
74     }
75
76     /**
77      * testCleanupCache
78      */
79     public function testCleanupCache()
80     {
81         $this->_instance->cleanupCache(Zend_Cache::CLEANING_MODE_ALL);
82         
83         $cache = Tinebase_Core::getCache();
84         $oldLifetime = $cache->getOption('lifetime');
85         $cache->setLifetime(1);
86         $cacheId = Tinebase_Helper::convertCacheId('testCleanupCache');
87         $cache->save('value', $cacheId);
88         sleep(3);
89         
90         // cleanup with CLEANING_MODE_OLD
91         $this->_instance->cleanupCache();
92         $cache->setLifetime($oldLifetime);
93         
94         $this->assertFalse($cache->load($cacheId));
95         
96         // check for cache files
97         $config = Tinebase_Core::getConfig();
98         
99         if ($config->caching && $config->caching->backend == 'File' && $config->caching->path) {
100             $cacheFile = $this->_lookForCacheFile($config->caching->path);
101             $this->assertEquals(NULL, $cacheFile, 'found cache file: ' . $cacheFile);
102         }
103     }
104     
105     /**
106      * look for cache files
107      * 
108      * @param string $_path
109      * @param boolean $_firstLevel
110      * @return string|NULL
111      */
112     protected function _lookForCacheFile($_path, $_firstLevel = TRUE)
113     {
114         foreach (new DirectoryIterator($_path) as $item) {
115             if ($item->isDir() && preg_match('/^zend_cache/', $item->getFileName())) {
116                 //echo 'scanning ' . $item->getFileName();
117                 if ($this->_lookForCacheFile($item->getPathname(), FALSE)) {
118                     // file found in subdir
119                     return $item->getPathname();
120                 }
121             } else if ($item->isFile() && ! $_firstLevel) {
122                 // file found
123                 return $item->getPathname();
124             }
125         }
126         
127         return NULL;
128     }
129 }