diff options
-rw-r--r-- | lib/private/app/dependencyanalyzer.php | 16 | ||||
-rw-r--r-- | lib/private/app/platform.php | 16 | ||||
-rw-r--r-- | settings/controller/appsettingscontroller.php | 2 | ||||
-rw-r--r-- | tests/data/app/expected-info.json | 3 | ||||
-rw-r--r-- | tests/data/app/valid-info.xml | 6 | ||||
-rw-r--r-- | tests/lib/app/dependencyanalyzer.php | 32 |
6 files changed, 72 insertions, 3 deletions
diff --git a/lib/private/app/dependencyanalyzer.php b/lib/private/app/dependencyanalyzer.php index c76181926e2..7fd181c076c 100644 --- a/lib/private/app/dependencyanalyzer.php +++ b/lib/private/app/dependencyanalyzer.php @@ -33,6 +33,7 @@ class DependencyAnalyzer { */ public function analyze() { $this->analysePhpVersion(); + $this->analyseSupportedDatabases(); return $this->missing; } @@ -55,4 +56,19 @@ class DependencyAnalyzer { } } + private function analyseSupportedDatabases() { + if (!array_key_exists('database', $this->dependencies)) { + return; + } + + $supportedDatabases = $this->dependencies['database']; + if (empty($supportedDatabases)) { + return; + } + $currentDatabase = $this->system->getDatabase(); + if (!in_array($currentDatabase, $supportedDatabases)) { + $this->missing[] = (string)$this->l->t('Following databases are supported: %s', join(', ', $supportedDatabases)); + } + } + } diff --git a/lib/private/app/platform.php b/lib/private/app/platform.php index 292159337a0..39f8a2979f9 100644 --- a/lib/private/app/platform.php +++ b/lib/private/app/platform.php @@ -10,8 +10,24 @@ namespace OC\App; +use OCP\IConfig; + class Platform { + + function __construct(IConfig $config) { + $this->config = $config; + } + public function getPhpVersion() { return phpversion(); } + + public function getDatabase() { + $dbType = $this->config->getSystemValue('dbtype', 'sqlite'); + if ($dbType === 'sqlite3') { + $dbType = 'sqlite'; + } + + return $dbType; + } } diff --git a/settings/controller/appsettingscontroller.php b/settings/controller/appsettingscontroller.php index 1f7e3b259fe..3ad52bd2187 100644 --- a/settings/controller/appsettingscontroller.php +++ b/settings/controller/appsettingscontroller.php @@ -127,7 +127,7 @@ class AppSettingsController extends Controller { $app['canUnInstall'] = !$app['active'] && $app['removable']; // analyse dependencies - $dependencyAnalyzer = new DependencyAnalyzer($app, new Platform(), $this->l10n); + $dependencyAnalyzer = new DependencyAnalyzer($app, new Platform($this->config), $this->l10n); $missing = $dependencyAnalyzer->analyze(); $app['canInstall'] = empty($missing); diff --git a/tests/data/app/expected-info.json b/tests/data/app/expected-info.json index 50e81a48fd2..9be6062220f 100644 --- a/tests/data/app/expected-info.json +++ b/tests/data/app/expected-info.json @@ -19,6 +19,7 @@ "dependencies": { "php": { "min-version": 5.4 - } + }, + "database":["sqlite", "mysql"] } } diff --git a/tests/data/app/valid-info.xml b/tests/data/app/valid-info.xml index 81abb276902..3a40e62d147 100644 --- a/tests/data/app/valid-info.xml +++ b/tests/data/app/valid-info.xml @@ -20,6 +20,10 @@ </types> <ocsid>166047</ocsid> <dependencies> - <php><min-version>5.4</min-version></php> + <php> + <min-version>5.4</min-version> + </php> + <database>sqlite</database> + <database>mysql</database> </dependencies> </info> diff --git a/tests/lib/app/dependencyanalyzer.php b/tests/lib/app/dependencyanalyzer.php index d0c2919f47a..25f2ad8caa8 100644 --- a/tests/lib/app/dependencyanalyzer.php +++ b/tests/lib/app/dependencyanalyzer.php @@ -27,10 +27,14 @@ class DependencyAnalyzer extends \PHPUnit_Framework_TestCase { public function setUp() { $this->platformMock = $this->getMockBuilder('\OC\App\Platform') + ->disableOriginalConstructor() ->getMock(); $this->platformMock->expects($this->any()) ->method('getPhpVersion') ->will( $this->returnValue('5.4.3')); + $this->platformMock->expects($this->any()) + ->method('getDatabase') + ->will( $this->returnValue('mysql')); $this->l10nMock = $this->getMockBuilder('\OCP\IL10N') ->disableOriginalConstructor() ->getMock(); @@ -64,6 +68,34 @@ class DependencyAnalyzer extends \PHPUnit_Framework_TestCase { $this->assertEquals($expectedMissing, $missing); } + /** + * @dataProvider providesDatabases + */ + public function testDatabases($expectedMissing, $databases) { + $app = array( + 'dependencies' => array( + ) + ); + if (!is_null($databases)) { + $app['dependencies']['database'] = $databases; + } + $analyser = new \OC\App\DependencyAnalyzer($app, $this->platformMock, $this->l10nMock); + $missing = $analyser->analyze(); + + $this->assertTrue(is_array($missing)); + $this->assertEquals(count($expectedMissing), count($missing)); + $this->assertEquals($expectedMissing, $missing); + } + + function providesDatabases() { + return array( + // non BC - in case on databases are defined -> all are supported + array(array(), null), + array(array(), array()), + array(array('Following databases are supported: sqlite, postgres'), array('sqlite', 'postgres')), + ); + } + function providesPhpVersion() { return array( array(array(), null, null), |