diff options
author | Jörn Friedrich Dreyer <jfd@butonic.de> | 2012-08-25 00:05:07 +0200 |
---|---|---|
committer | Jörn Friedrich Dreyer <jfd@butonic.de> | 2012-08-25 00:05:07 +0200 |
commit | c8255a170c2d7449b4e7728edd2237eea71dca80 (patch) | |
tree | e5a3854ec472be9700064bc7b689b8adf7c7f692 /tests | |
parent | 0c0ae928dcd483211a92303eb2b202453d02a86e (diff) | |
parent | 46d6fd15e4cc02d45079ffc688be0684e61f1434 (diff) | |
download | nextcloud-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.png | bin | 3559 -> 2882 bytes | |||
-rw-r--r-- | tests/index.php | 51 | ||||
-rw-r--r-- | tests/lib/archive.php | 8 | ||||
-rw-r--r-- | tests/lib/cache.php | 79 | ||||
-rw-r--r-- | tests/lib/cache/apc.php | 36 | ||||
-rw-r--r-- | tests/lib/cache/file.php | 63 | ||||
-rw-r--r-- | tests/lib/cache/xcache.php | 35 | ||||
-rw-r--r-- | tests/lib/filestorage.php | 33 | ||||
-rw-r--r-- | tests/lib/filesystem.php | 12 | ||||
-rw-r--r-- | tests/lib/share/backend.php | 69 | ||||
-rw-r--r-- | tests/lib/share/share.php | 380 | ||||
-rw-r--r-- | tests/lib/user/backend.php | 10 | ||||
-rw-r--r-- | tests/lib/user/database.php | 1 |
13 files changed, 760 insertions, 17 deletions
diff --git a/tests/data/logo-wide.png b/tests/data/logo-wide.png Binary files differindex b2c16a0f60a..648cb7e6156 100644 --- a/tests/data/logo-wide.png +++ b/tests/data/logo-wide.png 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 |