summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorJörn Friedrich Dreyer <jfd@butonic.de>2012-08-25 00:05:07 +0200
committerJörn Friedrich Dreyer <jfd@butonic.de>2012-08-25 00:05:07 +0200
commitc8255a170c2d7449b4e7728edd2237eea71dca80 (patch)
treee5a3854ec472be9700064bc7b689b8adf7c7f692 /tests
parent0c0ae928dcd483211a92303eb2b202453d02a86e (diff)
parent46d6fd15e4cc02d45079ffc688be0684e61f1434 (diff)
downloadnextcloud-server-c8255a170c2d7449b4e7728edd2237eea71dca80.tar.gz
nextcloud-server-c8255a170c2d7449b4e7728edd2237eea71dca80.zip
Merge branch 'master' of git://gitorious.org/owncloud/owncloud into oracle-support
Conflicts: 3rdparty/Sabre/CardDAV/Plugin.php 3rdparty/smb4php/smb.php apps/bookmarks/ajax/addBookmark.php apps/bookmarks/ajax/editBookmark.php apps/bookmarks/appinfo/migrate.php apps/calendar/ajax/calendar/edit.form.php apps/calendar/ajax/changeview.php apps/calendar/ajax/import/import.php apps/calendar/ajax/settings/guesstimezone.php apps/calendar/ajax/settings/setfirstday.php apps/calendar/ajax/settings/settimeformat.php apps/calendar/ajax/share/changepermission.php apps/calendar/ajax/share/share.php apps/calendar/ajax/share/unshare.php apps/calendar/appinfo/app.php apps/calendar/appinfo/remote.php apps/calendar/appinfo/update.php apps/calendar/appinfo/version apps/calendar/js/calendar.js apps/calendar/l10n/da.php apps/calendar/l10n/de.php apps/calendar/l10n/fi_FI.php apps/calendar/l10n/gl.php apps/calendar/l10n/he.php apps/calendar/l10n/hr.php apps/calendar/l10n/ja_JP.php apps/calendar/l10n/lb.php apps/calendar/l10n/lt_LT.php apps/calendar/l10n/nb_NO.php apps/calendar/l10n/pl.php apps/calendar/l10n/pt_PT.php apps/calendar/l10n/ro.php apps/calendar/l10n/ru.php apps/calendar/l10n/sv.php apps/calendar/l10n/zh_CN.php apps/calendar/l10n/zh_TW.php apps/calendar/lib/app.php apps/calendar/lib/calendar.php apps/calendar/lib/object.php apps/calendar/lib/share.php apps/calendar/templates/part.choosecalendar.rowfields.php apps/calendar/templates/part.import.php apps/calendar/templates/settings.php apps/contacts/ajax/activation.php apps/contacts/ajax/addressbook/delete.php apps/contacts/ajax/contact/add.php apps/contacts/ajax/contact/addproperty.php apps/contacts/ajax/contact/delete.php apps/contacts/ajax/contact/deleteproperty.php apps/contacts/ajax/contact/saveproperty.php apps/contacts/ajax/createaddressbook.php apps/contacts/ajax/cropphoto.php apps/contacts/ajax/currentphoto.php apps/contacts/ajax/importaddressbook.php apps/contacts/ajax/oc_photo.php apps/contacts/ajax/savecrop.php apps/contacts/ajax/selectaddressbook.php apps/contacts/ajax/updateaddressbook.php apps/contacts/ajax/uploadimport.php apps/contacts/ajax/uploadphoto.php apps/contacts/appinfo/migrate.php apps/contacts/appinfo/remote.php apps/contacts/css/contacts.css apps/contacts/import.php apps/contacts/index.php apps/contacts/js/contacts.js apps/contacts/l10n/ca.php apps/contacts/l10n/cs_CZ.php apps/contacts/l10n/da.php apps/contacts/l10n/de.php apps/contacts/l10n/el.php apps/contacts/l10n/eo.php apps/contacts/l10n/es.php apps/contacts/l10n/et_EE.php apps/contacts/l10n/eu.php apps/contacts/l10n/fa.php apps/contacts/l10n/fi_FI.php apps/contacts/l10n/fr.php apps/contacts/l10n/he.php apps/contacts/l10n/hr.php apps/contacts/l10n/hu_HU.php apps/contacts/l10n/ia.php apps/contacts/l10n/it.php apps/contacts/l10n/ja_JP.php apps/contacts/l10n/ko.php apps/contacts/l10n/lb.php apps/contacts/l10n/mk.php apps/contacts/l10n/nb_NO.php apps/contacts/l10n/nl.php apps/contacts/l10n/pl.php apps/contacts/l10n/pt_BR.php apps/contacts/l10n/pt_PT.php apps/contacts/l10n/ro.php apps/contacts/l10n/ru.php apps/contacts/l10n/sk_SK.php apps/contacts/l10n/sl.php apps/contacts/l10n/sv.php apps/contacts/l10n/th_TH.php apps/contacts/l10n/tr.php apps/contacts/l10n/zh_CN.php apps/contacts/l10n/zh_TW.php apps/contacts/lib/addressbook.php apps/contacts/lib/hooks.php apps/contacts/lib/vcard.php apps/contacts/photo.php apps/contacts/templates/part.contact.php apps/contacts/templates/part.contacts.php apps/contacts/templates/part.cropphoto.php apps/contacts/templates/part.importaddressbook.php apps/contacts/templates/part.selectaddressbook.php apps/contacts/thumbnail.php apps/files/ajax/download.php apps/files/ajax/newfile.php apps/files/ajax/timezone.php apps/files/appinfo/update.php apps/files/appinfo/version apps/files/index.php apps/files/js/fileactions.js apps/files/js/filelist.js apps/files/js/files.js apps/files/l10n/ar.php apps/files/l10n/bg_BG.php apps/files/l10n/ca.php apps/files/l10n/cs_CZ.php apps/files/l10n/da.php apps/files/l10n/de.php apps/files/l10n/el.php apps/files/l10n/eo.php apps/files/l10n/es.php apps/files/l10n/et_EE.php apps/files/l10n/eu.php apps/files/l10n/fa.php apps/files/l10n/fi_FI.php apps/files/l10n/fr.php apps/files/l10n/gl.php apps/files/l10n/he.php apps/files/l10n/hr.php apps/files/l10n/hu_HU.php apps/files/l10n/ia.php apps/files/l10n/id.php apps/files/l10n/it.php apps/files/l10n/ja_JP.php apps/files/l10n/ko.php apps/files/l10n/lb.php apps/files/l10n/lt_LT.php apps/files/l10n/mk.php apps/files/l10n/ms_MY.php apps/files/l10n/nb_NO.php apps/files/l10n/nl.php apps/files/l10n/nn_NO.php apps/files/l10n/pl.php apps/files/l10n/pt_BR.php apps/files/l10n/pt_PT.php apps/files/l10n/ro.php apps/files/l10n/ru.php apps/files/l10n/sk_SK.php apps/files/l10n/sl.php apps/files/l10n/sr.php apps/files/l10n/sr@latin.php apps/files/l10n/sv.php apps/files/l10n/th_TH.php apps/files/l10n/tr.php apps/files/l10n/uk.php apps/files/l10n/zh_CN.php apps/files/l10n/zh_TW.php apps/files_archive/js/archive.js apps/files_encryption/lib/cryptstream.php apps/files_encryption/lib/proxy.php apps/files_encryption/tests/proxy.php apps/files_external/appinfo/app.php apps/files_external/lib/smb.php apps/files_external/lib/streamwrapper.php apps/files_external/tests/config.php apps/files_external/tests/smb.php apps/files_sharing/ajax/email.php apps/files_sharing/ajax/getitem.php apps/files_sharing/ajax/setpermissions.php apps/files_sharing/ajax/share.php apps/files_sharing/ajax/toggleresharing.php apps/files_sharing/ajax/unshare.php apps/files_sharing/ajax/userautocomplete.php apps/files_sharing/js/settings.js apps/files_sharing/js/share.js apps/files_sharing/lib_share.php apps/files_sharing/settings.php apps/files_sharing/sharedstorage.php apps/files_sharing/templates/settings.php apps/files_versions/ajax/rollbackVersion.php apps/files_versions/versions.php apps/gallery/ajax/thumbnail.php apps/gallery/appinfo/app.php apps/gallery/appinfo/update.php apps/gallery/appinfo/version apps/gallery/css/styles.css apps/gallery/index.php apps/gallery/js/pictures.js apps/gallery/l10n/ca.php apps/gallery/l10n/cs_CZ.php apps/gallery/l10n/de.php apps/gallery/l10n/el.php apps/gallery/l10n/es.php apps/gallery/l10n/fi_FI.php apps/gallery/l10n/fr.php apps/gallery/l10n/it.php apps/gallery/l10n/pl.php apps/gallery/l10n/pt_PT.php apps/gallery/l10n/ru.php apps/gallery/l10n/sl.php apps/gallery/l10n/sv.php apps/gallery/l10n/th_TH.php apps/gallery/l10n/tr.php apps/gallery/l10n/zh_CN.php apps/gallery/lib/album.php apps/gallery/lib/hooks_handlers.php apps/gallery/lib/managers.php apps/gallery/lib/photo.php apps/gallery/lib/tiles.php apps/gallery/lib/tiles_test.php apps/gallery/templates/index.php apps/media/lib_ampache.php apps/media/lib_collection.php apps/media/lib_media.php apps/remoteStorage/lib_remoteStorage.php apps/tasks/ajax/addtaskform.php apps/tasks/ajax/edittask.php apps/user_ldap/appinfo/update.php apps/user_ldap/group_ldap.php apps/user_ldap/lib_ldap.php apps/user_ldap/settings.php apps/user_ldap/templates/settings.php apps/user_ldap/user_ldap.php apps/user_migrate/appinfo/app.php apps/user_migrate/templates/settings.php apps/user_webfinger/host-meta.php config/config.sample.php core/js/js.js core/l10n/da.php core/l10n/de.php core/l10n/fi_FI.php core/l10n/gl.php core/l10n/he.php core/l10n/hr.php core/l10n/id.php core/l10n/ja_JP.php core/l10n/lb.php core/l10n/lt_LT.php core/l10n/nb_NO.php core/l10n/pl.php core/l10n/pt_PT.php core/l10n/ro.php core/l10n/ru.php core/l10n/sv.php core/lostpassword/index.php core/templates/layout.user.php core/templates/login.php db_structure.xml index.php l10n/af/calendar.po l10n/af/contacts.po l10n/af/core.po l10n/af/files.po l10n/af/settings.po l10n/ar/calendar.po l10n/ar/contacts.po l10n/ar/core.po l10n/ar/files.po l10n/ar/media.po l10n/ar/settings.po l10n/bg_BG/calendar.po l10n/bg_BG/contacts.po l10n/bg_BG/core.po l10n/bg_BG/files.po l10n/bg_BG/media.po l10n/bg_BG/settings.po l10n/ca/calendar.po l10n/ca/contacts.po l10n/ca/core.po l10n/ca/files.po l10n/ca/gallery.po l10n/ca/settings.po l10n/cs_CZ/calendar.po l10n/cs_CZ/contacts.po l10n/cs_CZ/core.po l10n/cs_CZ/files.po l10n/cs_CZ/gallery.po l10n/cs_CZ/settings.po l10n/da/calendar.po l10n/da/contacts.po l10n/da/core.po l10n/da/files.po l10n/da/settings.po l10n/de/calendar.po l10n/de/contacts.po l10n/de/core.po l10n/de/files.po l10n/de/gallery.po l10n/de/settings.po l10n/el/calendar.po l10n/el/contacts.po l10n/el/core.po l10n/el/files.po l10n/el/gallery.po l10n/el/settings.po l10n/eo/calendar.po l10n/eo/contacts.po l10n/eo/core.po l10n/eo/files.po l10n/eo/media.po l10n/eo/settings.po l10n/es/calendar.po l10n/es/contacts.po l10n/es/core.po l10n/es/files.po l10n/es/gallery.po l10n/es/settings.po l10n/et_EE/calendar.po l10n/et_EE/contacts.po l10n/et_EE/core.po l10n/et_EE/files.po l10n/et_EE/settings.po l10n/eu/calendar.po l10n/eu/contacts.po l10n/eu/core.po l10n/eu/files.po l10n/eu/settings.po l10n/fa/calendar.po l10n/fa/contacts.po l10n/fa/core.po l10n/fa/files.po l10n/fa/settings.po l10n/fi_FI/calendar.po l10n/fi_FI/contacts.po l10n/fi_FI/core.po l10n/fi_FI/files.po l10n/fi_FI/gallery.po l10n/fi_FI/settings.po l10n/fr/calendar.po l10n/fr/contacts.po l10n/fr/core.po l10n/fr/files.po l10n/fr/gallery.po l10n/fr/media.po l10n/fr/settings.po l10n/gl/calendar.po l10n/gl/contacts.po l10n/gl/core.po l10n/gl/files.po l10n/gl/settings.po l10n/he/calendar.po l10n/he/contacts.po l10n/he/core.po l10n/he/files.po l10n/he/settings.po l10n/hr/calendar.po l10n/hr/contacts.po l10n/hr/core.po l10n/hr/files.po l10n/hr/settings.po l10n/hu_HU/calendar.po l10n/hu_HU/contacts.po l10n/hu_HU/core.po l10n/hu_HU/files.po l10n/hu_HU/settings.po l10n/hy/calendar.po l10n/hy/contacts.po l10n/hy/core.po l10n/hy/files.po l10n/hy/settings.po l10n/ia/calendar.po l10n/ia/contacts.po l10n/ia/core.po l10n/ia/files.po l10n/ia/settings.po l10n/id/calendar.po l10n/id/contacts.po l10n/id/core.po l10n/id/files.po l10n/id/settings.po l10n/it/calendar.po l10n/it/contacts.po l10n/it/core.po l10n/it/files.po l10n/it/gallery.po l10n/it/settings.po l10n/ja_JP/calendar.po l10n/ja_JP/contacts.po l10n/ja_JP/core.po l10n/ja_JP/files.po l10n/ja_JP/settings.po l10n/ko/calendar.po l10n/ko/contacts.po l10n/ko/core.po l10n/ko/files.po l10n/ko/settings.po l10n/lb/calendar.po l10n/lb/contacts.po l10n/lb/core.po l10n/lb/files.po l10n/lb/settings.po l10n/lt_LT/calendar.po l10n/lt_LT/contacts.po l10n/lt_LT/core.po l10n/lt_LT/files.po l10n/lt_LT/settings.po l10n/mk/calendar.po l10n/mk/contacts.po l10n/mk/core.po l10n/mk/files.po l10n/mk/settings.po l10n/ms_MY/calendar.po l10n/ms_MY/contacts.po l10n/ms_MY/core.po l10n/ms_MY/files.po l10n/ms_MY/settings.po l10n/nb_NO/calendar.po l10n/nb_NO/contacts.po l10n/nb_NO/core.po l10n/nb_NO/files.po l10n/nb_NO/settings.po l10n/nl/calendar.po l10n/nl/contacts.po l10n/nl/core.po l10n/nl/files.po l10n/nl/settings.po l10n/nn_NO/calendar.po l10n/nn_NO/contacts.po l10n/nn_NO/core.po l10n/nn_NO/files.po l10n/nn_NO/settings.po l10n/pl/calendar.po l10n/pl/contacts.po l10n/pl/core.po l10n/pl/files.po l10n/pl/gallery.po l10n/pl/settings.po l10n/pt_BR/calendar.po l10n/pt_BR/contacts.po l10n/pt_BR/core.po l10n/pt_BR/files.po l10n/pt_BR/settings.po l10n/pt_PT/calendar.po l10n/pt_PT/contacts.po l10n/pt_PT/core.po l10n/pt_PT/files.po l10n/pt_PT/gallery.po l10n/pt_PT/settings.po l10n/ro/calendar.po l10n/ro/contacts.po l10n/ro/core.po l10n/ro/files.po l10n/ro/settings.po l10n/ru/calendar.po l10n/ru/contacts.po l10n/ru/core.po l10n/ru/files.po l10n/ru/gallery.po l10n/ru/settings.po l10n/sk_SK/calendar.po l10n/sk_SK/contacts.po l10n/sk_SK/core.po l10n/sk_SK/files.po l10n/sk_SK/settings.po l10n/sl/calendar.po l10n/sl/contacts.po l10n/sl/core.po l10n/sl/files.po l10n/sl/gallery.po l10n/sl/settings.po l10n/sr/calendar.po l10n/sr/contacts.po l10n/sr/core.po l10n/sr/files.po l10n/sr/settings.po l10n/sr@latin/calendar.po l10n/sr@latin/contacts.po l10n/sr@latin/core.po l10n/sr@latin/files.po l10n/sr@latin/settings.po l10n/sv/calendar.po l10n/sv/contacts.po l10n/sv/core.po l10n/sv/files.po l10n/sv/gallery.po l10n/sv/media.po l10n/sv/settings.po l10n/templates/bookmarks.pot l10n/templates/calendar.pot l10n/templates/contacts.pot l10n/templates/core.pot l10n/templates/files.pot l10n/templates/gallery.pot l10n/templates/media.pot l10n/templates/settings.pot l10n/th_TH/calendar.po l10n/th_TH/contacts.po l10n/th_TH/core.po l10n/th_TH/files.po l10n/th_TH/gallery.po l10n/th_TH/settings.po l10n/tr/calendar.po l10n/tr/contacts.po l10n/tr/core.po l10n/tr/files.po l10n/tr/gallery.po l10n/tr/settings.po l10n/uk/calendar.po l10n/uk/contacts.po l10n/uk/core.po l10n/uk/files.po l10n/uk/media.po l10n/uk/settings.po l10n/zh_CN/calendar.po l10n/zh_CN/contacts.po l10n/zh_CN/core.po l10n/zh_CN/files.po l10n/zh_CN/gallery.po l10n/zh_CN/settings.po l10n/zh_TW/calendar.po l10n/zh_TW/contacts.po l10n/zh_TW/core.po l10n/zh_TW/files.po l10n/zh_TW/settings.po lib/app.php lib/base.php lib/connector/sabre/file.php lib/connector/sabre/locks.php lib/connector/sabre/node.php lib/db.php lib/filecache.php lib/fileproxy/quota.php lib/files.php lib/filestorage/local.php lib/filesystemview.php lib/group/database.php lib/helper.php lib/installer.php lib/json.php lib/l10n.php lib/migrate.php lib/mimetypes.fixlist.php lib/ocs.php lib/preferences.php lib/public/json.php lib/public/util.php lib/template.php lib/user.php lib/user/database.php lib/util.php lib/vcategories.php ocs/providers.php settings/admin.php settings/ajax/lostpassword.php settings/ajax/removeuser.php settings/ajax/setbackgroundjobsmode.php settings/ajax/setlanguage.php settings/ajax/setquota.php settings/ajax/togglegroups.php settings/apps.php settings/css/settings.css settings/js/apps.js settings/js/users.js settings/l10n/bg_BG.php settings/l10n/ca.php settings/l10n/cs_CZ.php settings/l10n/da.php settings/l10n/de.php settings/l10n/el.php settings/l10n/eo.php settings/l10n/es.php settings/l10n/et_EE.php settings/l10n/eu.php settings/l10n/fa.php settings/l10n/fi_FI.php settings/l10n/fr.php settings/l10n/gl.php settings/l10n/he.php settings/l10n/hr.php settings/l10n/hu_HU.php settings/l10n/it.php settings/l10n/ja_JP.php settings/l10n/ko.php settings/l10n/lt_LT.php settings/l10n/mk.php settings/l10n/ms_MY.php settings/l10n/nb_NO.php settings/l10n/nl.php settings/l10n/nn_NO.php settings/l10n/pl.php settings/l10n/pt_BR.php settings/l10n/pt_PT.php settings/l10n/ru.php settings/l10n/sk_SK.php settings/l10n/sl.php settings/l10n/sv.php settings/l10n/th_TH.php settings/l10n/tr.php settings/l10n/zh_CN.php settings/personal.php settings/templates/admin.php settings/templates/users.php
Diffstat (limited to 'tests')
-rw-r--r--tests/data/logo-wide.pngbin3559 -> 2882 bytes
-rw-r--r--tests/index.php51
-rw-r--r--tests/lib/archive.php8
-rw-r--r--tests/lib/cache.php79
-rw-r--r--tests/lib/cache/apc.php36
-rw-r--r--tests/lib/cache/file.php63
-rw-r--r--tests/lib/cache/xcache.php35
-rw-r--r--tests/lib/filestorage.php33
-rw-r--r--tests/lib/filesystem.php12
-rw-r--r--tests/lib/share/backend.php69
-rw-r--r--tests/lib/share/share.php380
-rw-r--r--tests/lib/user/backend.php10
-rw-r--r--tests/lib/user/database.php1
13 files changed, 760 insertions, 17 deletions
diff --git a/tests/data/logo-wide.png b/tests/data/logo-wide.png
index b2c16a0f60a..648cb7e6156 100644
--- a/tests/data/logo-wide.png
+++ b/tests/data/logo-wide.png
Binary files differ
diff --git a/tests/index.php b/tests/index.php
index ad98048a683..0be27ee3fd7 100644
--- a/tests/index.php
+++ b/tests/index.php
@@ -26,33 +26,64 @@ require_once 'simpletest/mock_objects.php';
require_once 'simpletest/collector.php';
require_once 'simpletest/default_reporter.php';
+$testSuiteName="ownCloud Unit Test Suite";
+
+// prepare the reporter
+if(OC::$CLI){
+ $reporter=new TextReporter;
+ $test=isset($_SERVER['argv'][1])?$_SERVER['argv'][1]:false;
+ if($test=='xml'){
+ $reporter= new XmlReporter;
+ $test=false;
+
+ if(isset($_SERVER['argv'][2])){
+ $testSuiteName=$testSuiteName." (".$_SERVER['argv'][2].")";
+ }
+ }
+}else{
+ $reporter=new HtmlReporter;
+ $test=isset($_GET['test'])?$_GET['test']:false;
+}
+
+// test suite instance
+$testSuite=new TestSuite($testSuiteName);
+
//load core test cases
-loadTests(dirname(__FILE__));
+loadTests(dirname(__FILE__), $testSuite, $test);
//load app test cases
+
+//
+// TODO: define a list of apps to be enabled + enable them
+//
+
$apps=OC_App::getEnabledApps();
foreach($apps as $app){
if(is_dir(OC::$SERVERROOT.'/apps/'.$app.'/tests')){
- loadTests(OC::$SERVERROOT.'/apps/'.$app.'/tests');
+ loadTests(OC::$SERVERROOT.'/apps/'.$app.'/tests', $testSuite, $test);
}
}
-function loadTests($dir=''){
- $test=isset($_GET['test'])?$_GET['test']:false;
+// run the suite
+if($testSuite->getSize()>0){
+ $testSuite->run($reporter);
+}
+
+// helper below
+function loadTests($dir,$testSuite, $test){
if($dh=opendir($dir)){
while($name=readdir($dh)){
if($name[0]!='.'){//no hidden files, '.' or '..'
$file=$dir.'/'.$name;
if(is_dir($file)){
- loadTests($file);
+ loadTests($file, $testSuite, $test);
}elseif(substr($file,-4)=='.php' and $file!=__FILE__){
$name=getTestName($file);
if($test===false or $test==$name or substr($name,0,strlen($test))==$test){
- $testCase=new TestSuite($name);
- $testCase->addFile($file);
- if($testCase->getSize()>0){
- $testCase->run(new HtmlReporter());
- }
+ $extractor = new SimpleFileLoader();
+ $loadedSuite=$extractor->load($file);
+ if ($loadedSuite->getSize() > 0)
+ $testSuite->add($loadedSuite);
}
}
}
diff --git a/tests/lib/archive.php b/tests/lib/archive.php
index 1779127c932..1711be58e01 100644
--- a/tests/lib/archive.php
+++ b/tests/lib/archive.php
@@ -130,4 +130,12 @@ abstract class Test_Archive extends UnitTestCase {
$this->instance->remove('target.txt');
$this->assertFalse($this->instance->fileExists('target.txt'));
}
+ public function testRecursive(){
+ $dir=OC::$SERVERROOT.'/apps/files_archive/tests/data';
+ $this->instance=$this->getNew();
+ $this->instance->addRecursive('/dir',$dir);
+ $this->assertTrue($this->instance->fileExists('/dir/lorem.txt'));
+ $this->assertTrue($this->instance->fileExists('/dir/data.zip'));
+ $this->assertTrue($this->instance->fileExists('/dir/data.tar.gz'));
+ }
}
diff --git a/tests/lib/cache.php b/tests/lib/cache.php
new file mode 100644
index 00000000000..511999be956
--- /dev/null
+++ b/tests/lib/cache.php
@@ -0,0 +1,79 @@
+<?php
+/**
+ * Copyright (c) 2012 Robin Appelman <icewind@owncloud.com>
+ * This file is licensed under the Affero General Public License version 3 or
+ * later.
+ * See the COPYING-README file.
+ */
+
+abstract class Test_Cache extends UnitTestCase {
+ /**
+ * @var OC_Cache cache;
+ */
+ protected $instance;
+
+ public function tearDown(){
+ $this->instance->clear();
+ }
+
+ function testSimple(){
+ $this->assertNull($this->instance->get('value1'));
+ $this->assertFalse($this->instance->hasKey('value1'));
+
+ $value='foobar';
+ $this->instance->set('value1',$value);
+ $this->assertTrue($this->instance->hasKey('value1'));
+ $received=$this->instance->get('value1');
+ $this->assertEqual($value,$received,'Value recieved from cache not equal to the original');
+ $value='ipsum lorum';
+ $this->instance->set('value1',$value);
+ $received=$this->instance->get('value1');
+ $this->assertEqual($value,$received,'Value not overwritten by second set');
+
+ $value2='foobar';
+ $this->instance->set('value2',$value2);
+ $received2=$this->instance->get('value2');
+ $this->assertTrue($this->instance->hasKey('value1'));
+ $this->assertTrue($this->instance->hasKey('value2'));
+ $this->assertEqual($value,$received,'Value changed while setting other variable');
+ $this->assertEqual($value2,$received2,'Second value not equal to original');
+
+ $this->assertFalse($this->instance->hasKey('not_set'));
+ $this->assertNull($this->instance->get('not_set'),'Unset value not equal to null');
+
+ $this->assertTrue($this->instance->remove('value1'));
+ $this->assertFalse($this->instance->hasKey('value1'));
+ }
+
+ function testClear(){
+ $value='ipsum lorum';
+ $this->instance->set('1_value1',$value);
+ $this->instance->set('1_value2',$value);
+ $this->instance->set('2_value1',$value);
+ $this->instance->set('3_value1',$value);
+
+ $this->assertTrue($this->instance->clear('1_'));
+ $this->assertFalse($this->instance->hasKey('1_value1'));
+ $this->assertFalse($this->instance->hasKey('1_value2'));
+ $this->assertTrue($this->instance->hasKey('2_value1'));
+ $this->assertTrue($this->instance->hasKey('3_value1'));
+
+ $this->assertTrue($this->instance->clear());
+ $this->assertFalse($this->instance->hasKey('1_value1'));
+ $this->assertFalse($this->instance->hasKey('1_value2'));
+ $this->assertFalse($this->instance->hasKey('2_value1'));
+ $this->assertFalse($this->instance->hasKey('3_value1'));
+ }
+
+ function testTTL(){
+ $value='foobar';
+ $this->instance->set('value1',$value,1);
+ $value2='foobar';
+ $this->instance->set('value2',$value2);
+ sleep(2);
+ $this->assertFalse($this->instance->hasKey('value1'));
+ $this->assertNull($this->instance->get('value1'));
+ $this->assertTrue($this->instance->hasKey('value2'));
+ $this->assertEqual($value2,$this->instance->get('value2'));
+ }
+}
diff --git a/tests/lib/cache/apc.php b/tests/lib/cache/apc.php
new file mode 100644
index 00000000000..ab8eb188664
--- /dev/null
+++ b/tests/lib/cache/apc.php
@@ -0,0 +1,36 @@
+<?php
+/**
+* ownCloud
+*
+* @author Robin Appelman
+* @copyright 2012 Robin Appelman icewind@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+class Test_Cache_APC extends Test_Cache {
+ function skip() {
+ $this->skipUnless(function_exists('apc_store'));
+ }
+
+ public function setUp(){
+ $this->instance=new OC_Cache_APC();
+ }
+
+ function testTTL(){
+ // ttl doesn't work correctly in the same request
+ // see https://bugs.php.net/bug.php?id=58084
+ }
+}
diff --git a/tests/lib/cache/file.php b/tests/lib/cache/file.php
new file mode 100644
index 00000000000..28778efb68c
--- /dev/null
+++ b/tests/lib/cache/file.php
@@ -0,0 +1,63 @@
+<?php
+/**
+* ownCloud
+*
+* @author Robin Appelman
+* @copyright 2012 Robin Appelman icewind@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+class Test_Cache_File extends Test_Cache {
+ private $user;
+
+ function skip() {
+ //$this->skipUnless(OC_User::isLoggedIn());
+ }
+
+ public function setUp(){
+ //clear all proxies and hooks so we can do clean testing
+ OC_FileProxy::clearProxies();
+ OC_Hook::clear('OC_Filesystem');
+
+ //enable only the encryption hook if needed
+ if(OC_App::isEnabled('files_encryption')){
+ OC_FileProxy::register(new OC_FileProxy_Encryption());
+ }
+
+ //set up temporary storage
+ OC_Filesystem::clearMounts();
+ OC_Filesystem::mount('OC_Filestorage_Temporary',array(),'/');
+
+ OC_User::clearBackends();
+ OC_User::useBackend(new OC_User_Dummy());
+
+ //login
+ OC_User::createUser('test', 'test');
+
+ $this->user=OC_User::getUser();
+ OC_User::setUserId('test');
+
+ //set up the users dir
+ $rootView=new OC_FilesystemView('');
+ $rootView->mkdir('/test');
+
+ $this->instance=new OC_Cache_File();
+ }
+
+ public function tearDown(){
+ OC_User::setUserId($this->user);
+ }
+}
diff --git a/tests/lib/cache/xcache.php b/tests/lib/cache/xcache.php
new file mode 100644
index 00000000000..cc2077076ce
--- /dev/null
+++ b/tests/lib/cache/xcache.php
@@ -0,0 +1,35 @@
+<?php
+/**
+* ownCloud
+*
+* @author Robin Appelman
+* @copyright 2012 Robin Appelman icewind@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*
+*/
+
+class Test_Cache_XCache extends Test_Cache {
+ function skip() {
+ $this->skipUnless(function_exists('xcache_get'));
+ }
+
+ public function setUp(){
+ $this->instance=new OC_Cache_XCache();
+ }
+
+ function testTTL(){
+ // ttl doesn't work correctly in the same request
+ }
+}
diff --git a/tests/lib/filestorage.php b/tests/lib/filestorage.php
index f71b658253a..0a8715600d5 100644
--- a/tests/lib/filestorage.php
+++ b/tests/lib/filestorage.php
@@ -31,13 +31,13 @@ abstract class Test_FileStorage extends UnitTestCase {
*/
public function testRoot(){
$this->assertTrue($this->instance->file_exists('/'),'Root folder does not exist');
- $this->assertTrue($this->instance->is_readable('/'),'Root folder is not readable');
+ $this->assertTrue($this->instance->isReadable('/'),'Root folder is not readable');
$this->assertTrue($this->instance->is_dir('/'),'Root folder is not a directory');
$this->assertFalse($this->instance->is_file('/'),'Root folder is a file');
$this->assertEqual('dir',$this->instance->filetype('/'));
//without this, any further testing would be useless, not an acutal requirement for filestorage though
- $this->assertTrue($this->instance->is_writable('/'),'Root folder is not writable');
+ $this->assertTrue($this->instance->isUpdatable('/'),'Root folder is not writable');
}
public function testDirectories(){
@@ -50,8 +50,8 @@ abstract class Test_FileStorage extends UnitTestCase {
$this->assertFalse($this->instance->is_file('/folder'));
$this->assertEqual('dir',$this->instance->filetype('/folder'));
$this->assertEqual(0,$this->instance->filesize('/folder'));
- $this->assertTrue($this->instance->is_readable('/folder'));
- $this->assertTrue($this->instance->is_writable('/folder'));
+ $this->assertTrue($this->instance->isReadable('/folder'));
+ $this->assertTrue($this->instance->isUpdatable('/folder'));
$dh=$this->instance->opendir('/');
$content=array();
@@ -129,19 +129,32 @@ abstract class Test_FileStorage extends UnitTestCase {
$this->assertEqual(file_get_contents($textFile),$this->instance->file_get_contents('/target.txt'));
}
- public function testLocalFile(){
+ public function testLocal(){
$textFile=OC::$SERVERROOT.'/tests/data/lorem.txt';
$this->instance->file_put_contents('/lorem.txt',file_get_contents($textFile));
$localFile=$this->instance->getLocalFile('/lorem.txt');
$this->assertTrue(file_exists($localFile));
$this->assertEqual(file_get_contents($localFile),file_get_contents($textFile));
+
+ $this->instance->mkdir('/folder');
+ $this->instance->file_put_contents('/folder/lorem.txt',file_get_contents($textFile));
+ $this->instance->file_put_contents('/folder/bar.txt','asd');
+ $this->instance->mkdir('/folder/recursive');
+ $this->instance->file_put_contents('/folder/recursive/file.txt','foo');
+ $localFolder=$this->instance->getLocalFolder('/folder');
+
+ $this->assertTrue(is_dir($localFolder));
+ $this->assertTrue(file_exists($localFolder.'/lorem.txt'));
+ $this->assertEqual(file_get_contents($localFolder.'/lorem.txt'),file_get_contents($textFile));
+ $this->assertEqual(file_get_contents($localFolder.'/bar.txt'),'asd');
+ $this->assertEqual(file_get_contents($localFolder.'/recursive/file.txt'),'foo');
}
public function testStat(){
$textFile=OC::$SERVERROOT.'/tests/data/lorem.txt';
$ctimeStart=time();
$this->instance->file_put_contents('/lorem.txt',file_get_contents($textFile));
- $this->assertTrue($this->instance->is_readable('/lorem.txt'));
+ $this->assertTrue($this->instance->isReadable('/lorem.txt'));
$ctimeEnd=time();
$cTime=$this->instance->filectime('/lorem.txt');
$mTime=$this->instance->filemtime('/lorem.txt');
@@ -149,6 +162,9 @@ abstract class Test_FileStorage extends UnitTestCase {
$this->assertTrue(($ctimeStart-1)<=$cTime);
$this->assertTrue($cTime<=($ctimeEnd+1));
}
+ $this->assertTrue($this->instance->hasUpdated('/lorem.txt',$ctimeStart-1));
+ $this->assertTrue($this->instance->hasUpdated('/',$ctimeStart-1));
+
$this->assertTrue(($ctimeStart-1)<=$mTime);
$this->assertTrue($mTime<=($ctimeEnd+1));
$this->assertEqual(filesize($textFile),$this->instance->filesize('/lorem.txt'));
@@ -168,6 +184,8 @@ abstract class Test_FileStorage extends UnitTestCase {
$this->assertTrue(($mtimeStart-1)<=$mTime);
$this->assertTrue($mTime<=($mtimeEnd+1));
$this->assertEqual($cTime,$originalCTime);
+
+ $this->assertTrue($this->instance->hasUpdated('/lorem.txt',$mtimeStart-1));
if($this->instance->touch('/lorem.txt',100)!==false){
$mTime=$this->instance->filemtime('/lorem.txt');
@@ -184,6 +202,9 @@ abstract class Test_FileStorage extends UnitTestCase {
$mTime=$this->instance->filemtime('/lorem.txt');
$this->assertTrue(($mtimeStart-1)<=$mTime);
$this->assertTrue($mTime<=($mtimeEnd+1));
+
+ $this->instance->unlink('/lorem.txt');
+ $this->assertTrue($this->instance->hasUpdated('/',$mtimeStart-1));
}
public function testSearch(){
diff --git a/tests/lib/filesystem.php b/tests/lib/filesystem.php
index 3e28d8c06e5..72af0835788 100644
--- a/tests/lib/filesystem.php
+++ b/tests/lib/filesystem.php
@@ -59,6 +59,18 @@ class Test_Filesystem extends UnitTestCase{
$this->assertEqual('/',OC_Filesystem::getMountPoint('/some'));
$this->assertEqual('folder',OC_Filesystem::getInternalPath('/some/folder'));
}
+
+ public function testNormalize(){
+ $this->assertEqual('/path',OC_Filesystem::normalizePath('/path/'));
+ $this->assertEqual('/path/',OC_Filesystem::normalizePath('/path/',false));
+ $this->assertEqual('/path',OC_Filesystem::normalizePath('path'));
+ $this->assertEqual('/path',OC_Filesystem::normalizePath('\path'));
+ $this->assertEqual('/foo/bar',OC_Filesystem::normalizePath('/foo//bar/'));
+ $this->assertEqual('/foo/bar',OC_Filesystem::normalizePath('/foo////bar'));
+ if(class_exists('Normalizer')){
+ $this->assertEqual("/foo/bar\xC3\xBC",OC_Filesystem::normalizePath("/foo/baru\xCC\x88"));
+ }
+ }
}
?> \ No newline at end of file
diff --git a/tests/lib/share/backend.php b/tests/lib/share/backend.php
new file mode 100644
index 00000000000..4ee59963d5d
--- /dev/null
+++ b/tests/lib/share/backend.php
@@ -0,0 +1,69 @@
+<?php
+/**
+* ownCloud
+*
+* @author Michael Gapczynski
+* @copyright 2012 Michael Gapczynski mtgap@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+class Test_Share_Backend implements OCP\Share_Backend {
+
+ const FORMAT_SOURCE = 0;
+ const FORMAT_TARGET = 1;
+ const FORMAT_PERMISSIONS = 2;
+
+ private $testItem1 = 'test.txt';
+ private $testItem2 = 'share.txt';
+
+ public function isValidSource($itemSource, $uidOwner) {
+ if ($itemSource == $this->testItem1 || $itemSource == $this->testItem2) {
+ return true;
+ }
+ }
+
+ public function generateTarget($itemSource, $shareWith, $exclude = null) {
+ // Always make target be test.txt to cause conflicts
+ $target = 'test.txt';
+ if (isset($exclude)) {
+ $pos = strrpos($target, '.');
+ $name = substr($target, 0, $pos);
+ $ext = substr($target, $pos);
+ $append = '';
+ $i = 1;
+ while (in_array($name.$append.$ext, $exclude)) {
+ $append = $i;
+ $i++;
+ }
+ $target = $name.$append.$ext;
+ }
+ return $target;
+ }
+
+ public function formatItems($items, $format, $parameters = null) {
+ $testItems = array();
+ foreach ($items as $item) {
+ if ($format == self::FORMAT_SOURCE) {
+ $testItems[] = $item['item_source'];
+ } else if ($format == self::FORMAT_TARGET) {
+ $testItems[] = $item['item_target'];
+ } else if ($format == self::FORMAT_PERMISSIONS) {
+ $testItems[] = $item['permissions'];
+ }
+ }
+ return $testItems;
+ }
+
+}
diff --git a/tests/lib/share/share.php b/tests/lib/share/share.php
new file mode 100644
index 00000000000..785591829de
--- /dev/null
+++ b/tests/lib/share/share.php
@@ -0,0 +1,380 @@
+<?php
+/**
+* ownCloud
+*
+* @author Michael Gapczynski
+* @copyright 2012 Michael Gapczynski mtgap@owncloud.com
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+* License as published by the Free Software Foundation; either
+* version 3 of the License, or any later version.
+*
+* This library is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+*
+* You should have received a copy of the GNU Affero General Public
+* License along with this library. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+class Test_Share extends UnitTestCase {
+
+ protected $itemType;
+ protected $userBackend;
+ protected $user1;
+ protected $user2;
+ protected $groupBackend;
+ protected $group1;
+ protected $group2;
+
+
+ public function setUp() {
+ OC_User::clearBackends();
+ OC_User::useBackend('dummy');
+ $this->user1 = uniqid('user_');
+ $this->user2 = uniqid('user_');
+ $this->user3 = uniqid('user_');
+ $this->user4 = uniqid('user_');
+ OC_User::createUser($this->user1, 'pass');
+ OC_User::createUser($this->user2, 'pass');
+ OC_User::createUser($this->user3, 'pass');
+ OC_User::createUser($this->user4, 'pass');
+ OC_User::setUserId($this->user1);
+ OC_Group::clearBackends();
+ OC_Group::useBackend(new OC_Group_Dummy);
+ $this->group1 = uniqid('group_');
+ $this->group2 = uniqid('group_');
+ OC_Group::createGroup($this->group1);
+ OC_Group::createGroup($this->group2);
+ OC_Group::addToGroup($this->user1, $this->group1);
+ OC_Group::addToGroup($this->user2, $this->group1);
+ OC_Group::addToGroup($this->user3, $this->group1);
+ OC_Group::addToGroup($this->user2, $this->group2);
+ OC_Group::addToGroup($this->user4, $this->group2);
+ OCP\Share::registerBackend('test', 'Test_Share_Backend');
+ }
+
+ public function tearDown() {
+ $query = OC_DB::prepare('DELETE FROM *PREFIX*share WHERE item_type = ?');
+ $query->execute(array('test'));
+ }
+
+ public function testShareInvalidShareType() {
+ $this->expectException(new Exception('Share type foobar is not valid for test.txt'));
+ OCP\Share::shareItem('test', 'test.txt', 'foobar', $this->user2, OCP\Share::PERMISSION_READ);
+ }
+
+ public function testInvalidItemType() {
+ $message = 'Sharing backend for foobar not found';
+ try {
+ OCP\Share::shareItem('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ try {
+ OCP\Share::getItemsSharedWith('foobar');
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ try {
+ OCP\Share::getItemSharedWith('foobar', 'test.txt');
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ try {
+ OCP\Share::getItemSharedWithBySource('foobar', 'test.txt');
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ try {
+ OCP\Share::getItemShared('foobar', 'test.txt');
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ try {
+ OCP\Share::unshare('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ try {
+ OCP\Share::setPermissions('foobar', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_UPDATE);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ }
+
+ public function testShareWithUser() {
+ // Invalid shares
+ $message = 'Sharing test.txt failed, because the user '.$this->user1.' is the item owner';
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ $message = 'Sharing test.txt failed, because the user foobar does not exist';
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, 'foobar', OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ $message = 'Sharing foobar failed, because the sharing backend for test could not find its source';
+ try {
+ OCP\Share::shareItem('test', 'foobar', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Valid share
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+ $this->assertEqual(OCP\Share::getItemShared('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+
+ // Attempt to share again
+ OC_User::setUserId($this->user1);
+ $message = 'Sharing test.txt failed, because this item is already shared with '.$this->user2;
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Attempt to share back
+ OC_User::setUserId($this->user2);
+ $message = 'Sharing test.txt failed, because the user '.$this->user1.' is the original sharer';
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Unshare
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2));
+
+ // Attempt reshare without share permission
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+ OC_User::setUserId($this->user2);
+ $message = 'Sharing test.txt failed, because resharing is not allowed';
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Owner grants share and update permission
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE | OCP\Share::PERMISSION_SHARE));
+
+ // Attempt reshare with escalated permissions
+ OC_User::setUserId($this->user2);
+ $message = 'Sharing test.txt failed, because the permissions exceed permissions granted to '.$this->user2;
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_DELETE);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Valid reshare
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE));
+ $this->assertEqual(OCP\Share::getItemShared('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+ OC_User::setUserId($this->user3);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE));
+
+ // Attempt to escalate permissions
+ OC_User::setUserId($this->user2);
+ $message = 'Setting permissions for test.txt failed, because the permissions exceed permissions granted to '.$this->user2;
+ try {
+ OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_DELETE);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Remove update permission
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE));
+ OC_User::setUserId($this->user3);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ));
+
+ // Remove share permission
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ));
+ OC_User::setUserId($this->user3);
+ $this->assertFalse(OCP\Share::getItemSharedWith('test', 'test.txt'));
+
+ // Reshare again, and then have owner unshare
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::setPermissions('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE));
+ OC_User::setUserId($this->user2);
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ));
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2));
+ OC_User::setUserId($this->user2);
+ $this->assertFalse(OCP\Share::getItemSharedWith('test', 'test.txt'));
+ OC_User::setUserId($this->user3);
+ $this->assertFalse(OCP\Share::getItemSharedWith('test', 'test.txt'));
+
+ // Attempt target conflict
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+ OC_User::setUserId($this->user3);
+ $this->assertTrue(OCP\Share::shareItem('test', 'share.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt', 'test1.txt'));
+
+ // Remove user
+ OC_User::deleteUser($this->user1);
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test1.txt'));
+ }
+
+ public function testShareWithGroup() {
+ // Invalid shares
+ $message = 'Sharing test.txt failed, because the group foobar does not exist';
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, 'foobar', OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+ $message = 'Sharing test.txt failed, because '.$this->user1.' is not a member of the group '.$this->group2;
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group2, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Valid share
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\Share::PERMISSION_READ));
+ $this->assertEqual(OCP\Share::getItemShared('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+ OC_User::setUserId($this->user3);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_SOURCE), array('test.txt'));
+
+ // Attempt to share again
+ OC_User::setUserId($this->user1);
+ $message = 'Sharing test.txt failed, because this item is already shared with '.$this->group1;
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Attempt to share back to owner of group share
+ OC_User::setUserId($this->user2);
+ $message = 'Sharing test.txt failed, because the user '.$this->user1.' is the original sharer';
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user1, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Attempt to share back to group
+ $message = 'Sharing test.txt failed, because this item is already shared with '.$this->group1;
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Attempt to share back to member of group
+ $message ='Sharing test.txt failed, because this item is already shared with '.$this->user3;
+ try {
+ OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user3, OCP\Share::PERMISSION_READ);
+ $this->fail('Exception was expected: '.$message);
+ } catch (Exception $exception) {
+ $this->assertEqual($exception->getMessage(), $message);
+ }
+
+ // Unshare
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1));
+
+ // Valid share with same person - user then group
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_DELETE | OCP\Share::PERMISSION_SHARE));
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt'));
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE | OCP\Share::PERMISSION_DELETE | OCP\Share::PERMISSION_SHARE));
+ OC_User::setUserId($this->user3);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt'));
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE));
+
+ // Valid reshare
+ OC_User::setUserId($this->user2);
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, OCP\Share::PERMISSION_READ));
+ OC_User::setUserId($this->user4);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt'));
+
+ // Unshare from user only
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE));
+ OC_User::setUserId($this->user4);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array());
+
+ // Valid share with same person - group then user
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user2, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_DELETE));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt'));
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_UPDATE | OCP\Share::PERMISSION_DELETE));
+
+ // Unshare from group only
+ OC_User::setUserId($this->user1);
+ $this->assertTrue(OCP\Share::unshare('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemSharedWith('test', 'test.txt', Test_Share_Backend::FORMAT_PERMISSIONS), array(OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_DELETE));
+
+ // Attempt user specific target conflict
+ OC_User::setUserId($this->user3);
+ $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_GROUP, $this->group1, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE));
+ OC_User::setUserId($this->user2);
+ $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt', 'test1.txt'));
+
+// // Valid reshare TODO Broken
+// $this->assertTrue(OCP\Share::shareItem('test', 'test.txt', OCP\Share::SHARE_TYPE_USER, $this->user4, OCP\Share::PERMISSION_READ | OCP\Share::PERMISSION_SHARE));
+// OC_User::setUserId($this->user4);
+// $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test1.txt'));
+//
+// // Remove user from group
+// OC_Group::removeFromGroup($this->user2, $this->group1);
+// OC_User::setUserId($this->user2);
+// $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array('test.txt'));
+// OC_User::setUserId($this->user4);
+// $this->assertEqual(OCP\Share::getItemsSharedWith('test', Test_Share_Backend::FORMAT_TARGET), array());
+
+ // Add user to group
+
+ // Remove group
+ }
+
+}
diff --git a/tests/lib/user/backend.php b/tests/lib/user/backend.php
index 5dab5afb186..984249e84eb 100644
--- a/tests/lib/user/backend.php
+++ b/tests/lib/user/backend.php
@@ -20,6 +20,16 @@
*
*/
+/**
+ * Abstract class to provide the basis of backend-specific unit test classes.
+ *
+ * All subclasses MUST assign a backend property in setUp() which implements
+ * user operations (add, remove, etc.). Test methods in this class will then be
+ * run on each separate subclass and backend therein.
+ *
+ * For an example see /tests/lib/user/dummy.php
+ */
+
abstract class Test_User_Backend extends UnitTestCase {
/**
* @var OC_User_Backend $backend
diff --git a/tests/lib/user/database.php b/tests/lib/user/database.php
index b2fcce93c5b..f484ffa78f7 100644
--- a/tests/lib/user/database.php
+++ b/tests/lib/user/database.php
@@ -21,7 +21,6 @@
*/
class Test_User_Database extends Test_User_Backend {
- private $user=array();
/**
* get a new unique user name
* test cases can override this in order to clean up created user