From d28390a6499135dfd30c925d2d0735cb15eced34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Mon, 23 Nov 2015 13:53:57 +0100 Subject: [PATCH 1/5] Adding sync support - including dav tests --- apps/dav/lib/server.php | 1 + .../travis/caldavtest/config/serverinfo.xml | 2 +- .../caldavtest/tests/CardDAV/sync-report.xml | 1602 +++++++++++++++++ apps/dav/tests/travis/carddavtester.sh | 5 +- 4 files changed, 1608 insertions(+), 2 deletions(-) create mode 100644 apps/dav/tests/travis/caldavtest/tests/CardDAV/sync-report.xml diff --git a/apps/dav/lib/server.php b/apps/dav/lib/server.php index 44afcf23df..587c0091e2 100644 --- a/apps/dav/lib/server.php +++ b/apps/dav/lib/server.php @@ -39,6 +39,7 @@ class Server { $this->server->addPlugin(new \OCA\DAV\Connector\Sabre\ExceptionLoggerPlugin('webdav', $logger)); $this->server->addPlugin(new \OCA\DAV\Connector\Sabre\LockPlugin()); $this->server->addPlugin(new \OCA\DAV\Connector\Sabre\ListenerPlugin($dispatcher)); + $this->server->addPlugin(new \Sabre\DAV\Sync\Plugin()); // calendar plugins $this->server->addPlugin(new \Sabre\CalDAV\Plugin()); diff --git a/apps/dav/tests/travis/caldavtest/config/serverinfo.xml b/apps/dav/tests/travis/caldavtest/config/serverinfo.xml index b85a8639e4..24d63d4a3a 100644 --- a/apps/dav/tests/travis/caldavtest/config/serverinfo.xml +++ b/apps/dav/tests/travis/caldavtest/config/serverinfo.xml @@ -569,7 +569,7 @@ $addressbookhome%d: - $addressbooks_uids:$userguid%d: + $addressbooks:$userid%d: diff --git a/apps/dav/tests/travis/caldavtest/tests/CardDAV/sync-report.xml b/apps/dav/tests/travis/caldavtest/tests/CardDAV/sync-report.xml new file mode 100644 index 0000000000..0321e61edb --- /dev/null +++ b/apps/dav/tests/travis/caldavtest/tests/CardDAV/sync-report.xml @@ -0,0 +1,1602 @@ + + + + + + + + + carddav + sync-report + + + + + PUT + $addressbookpath1:/1.vcf + + text/vcard; charset=utf-8 + Resource/CardDAV/vreports/put/1.vcf + + + + PUT + $addressbookpath1:/2.vcf + + text/vcard; charset=utf-8 + Resource/CardDAV/vreports/put/2.vcf + + + + + + + Not on addressbooks + + PROPFIND + $addressbooks:/ +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CardDAV/vreports/sync/1.xml + + + xmlElementMatch + + notexists + $verify-property-prefix:/{DAV:}supported-report-set/{DAV:}supported-report/{DAV:}report/{DAV:}sync-collection + + + + propfindItems + + okprops + {DAV:}supported-report-set + + + badprops + {DAV:}sync-token + + +
+
+ + + On addressbook + + PROPFIND + $addressbookpath1:/ +
+ Depth + 0 +
+ + text/xml; charset=utf-8 + Resource/CardDAV/vreports/sync/1.xml + + + xmlElementMatch + + exists + $verify-property-prefix:/{DAV:}supported-report-set/{DAV:}supported-report/{DAV:}report/{DAV:}sync-collection + + + + + + propfindItems + + okprops + {DAV:}supported-report-set + {DAV:}sync-token + + +
+
+
+ + + + initial query - addressbook depth:1 + + REPORT + $addressbookpath1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CardDAV/vreports/sync/2.xml + + + multistatusItems + + okhrefs + + + 1.vcf + 2.vcf + + +
+
+ + + add new resource + + PUT + $addressbookpath1:/3.vcf + + text/vcard; charset=utf-8 + Resource/CardDAV/vreports/put/3.vcf + + + statusCode + + + + + new resource - addressbook depth:1 + + REPORT + $addressbookpath1:/ +
+ Depth + 1 +
+ + text/xml; charset=utf-8 + Resource/CardDAV/vreports/sync/2.xml + + + multistatusItems + + okhrefs + + + 1.vcf + 2.vcf + 3.vcf + + +
+
+ +
+ + + + + + DELETEALL + $addressbookhome1:/ + $addressbookhome2:/ + $notificationpath1:/ + $notificationpath2:/ + + + +
diff --git a/apps/dav/tests/travis/carddavtester.sh b/apps/dav/tests/travis/carddavtester.sh index a128872f42..fee4d0d74a 100644 --- a/apps/dav/tests/travis/carddavtester.sh +++ b/apps/dav/tests/travis/carddavtester.sh @@ -18,11 +18,14 @@ fi # create test user cd "$SCRIPTPATH/../../../../" OC_PASS=user01 php occ user:add --password-from-env user01 +php occ dav:create-addressbook user01 addressbook OC_PASS=user02 php occ user:add --password-from-env user02 +php occ dav:create-addressbook user02 addressbook cd "$SCRIPTPATH/../../../../" # run the tests cd "$SCRIPTPATH/CalDAVTester" PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail -s "$SCRIPTPATH/caldavtest/config/serverinfo.xml" -o cdt.txt \ - "$SCRIPTPATH/caldavtest/tests/CardDAV/current-user-principal.xml" + "$SCRIPTPATH/caldavtest/tests/CardDAV/current-user-principal.xml" \ + "$SCRIPTPATH/caldavtest/tests/CardDAV/sync-report.xml" From 06c85dd1ebf10a2f268867e75bce26a0ce2ece2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Mon, 23 Nov 2015 14:39:20 +0100 Subject: [PATCH 2/5] Output owncloud.log to the console --- apps/dav/tests/travis/carddavtester.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/apps/dav/tests/travis/carddavtester.sh b/apps/dav/tests/travis/carddavtester.sh index fee4d0d74a..17f7e8eb4a 100644 --- a/apps/dav/tests/travis/carddavtester.sh +++ b/apps/dav/tests/travis/carddavtester.sh @@ -28,4 +28,8 @@ cd "$SCRIPTPATH/CalDAVTester" PYTHONPATH="$SCRIPTPATH/pycalendar/src" python testcaldav.py --print-details-onfail -s "$SCRIPTPATH/caldavtest/config/serverinfo.xml" -o cdt.txt \ "$SCRIPTPATH/caldavtest/tests/CardDAV/current-user-principal.xml" \ "$SCRIPTPATH/caldavtest/tests/CardDAV/sync-report.xml" +RESULT=$? +tail "$SCRIPTPATH/../../../../data-autotest/owncloud.log" + +exit $RESULT From 54f26532de9dc5dbd2b6ef113ba71b1e97863144 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Tue, 24 Nov 2015 22:23:10 +0100 Subject: [PATCH 3/5] Use sqlite --- .travis.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 49a9e07e3f..c599a0c192 100644 --- a/.travis.yml +++ b/.travis.yml @@ -37,7 +37,9 @@ matrix: - php: 5.4 env: DB=pgsql;TC=litmus-v1 - php: 5.4 - env: DB=pgsql;TC=carddavtester + env: DB=sqlite;TC=carddavtester +# - php: 5.4 +# env: DB=pgsql;TC=carddavtester # - php: 5.4 # env: DB=mysql;TC=caldavtester From b02dea29e6b60f174d22be3899370c2f41a3bae3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Wed, 25 Nov 2015 12:27:25 +0100 Subject: [PATCH 4/5] CardDavBackEnd requires principalBackend on ctor --- apps/dav/appinfo/register_command.php | 4 +++- apps/dav/command/createaddressbook.php | 31 +++++++++++++++++--------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/apps/dav/appinfo/register_command.php b/apps/dav/appinfo/register_command.php index 7d57b944fb..1f0df05411 100644 --- a/apps/dav/appinfo/register_command.php +++ b/apps/dav/appinfo/register_command.php @@ -5,6 +5,8 @@ use OCA\DAV\Command\CreateCalendar; $dbConnection = \OC::$server->getDatabaseConnection(); $userManager = OC::$server->getUserManager(); +$config = \OC::$server->getConfig(); + /** @var Symfony\Component\Console\Application $application */ -$application->add(new CreateAddressBook($userManager, $dbConnection)); +$application->add(new CreateAddressBook($userManager, $dbConnection, $config)); $application->add(new CreateCalendar($userManager, $dbConnection)); diff --git a/apps/dav/command/createaddressbook.php b/apps/dav/command/createaddressbook.php index 286871b39e..371ea44121 100644 --- a/apps/dav/command/createaddressbook.php +++ b/apps/dav/command/createaddressbook.php @@ -3,6 +3,8 @@ namespace OCA\DAV\Command; use OCA\DAV\CardDAV\CardDavBackend; +use OCA\DAV\Connector\Sabre\Principal; +use OCP\IConfig; use OCP\IDBConnection; use OCP\IUserManager; use Symfony\Component\Console\Command\Command; @@ -18,26 +20,30 @@ class CreateAddressBook extends Command { /** @var \OCP\IDBConnection */ protected $dbConnection; + /** @var IConfig */ + private $config; + /** * @param IUserManager $userManager * @param IDBConnection $dbConnection */ - function __construct(IUserManager $userManager, IDBConnection $dbConnection) { + function __construct(IUserManager $userManager, IDBConnection $dbConnection, IConfig $config) { parent::__construct(); $this->userManager = $userManager; $this->dbConnection = $dbConnection; + $this->config = $config; } protected function configure() { $this - ->setName('dav:create-addressbook') - ->setDescription('Create a dav addressbook') - ->addArgument('user', - InputArgument::REQUIRED, - 'User for whom the addressbook will be created') - ->addArgument('name', - InputArgument::REQUIRED, - 'Name of the addressbook'); + ->setName('dav:create-addressbook') + ->setDescription('Create a dav addressbook') + ->addArgument('user', + InputArgument::REQUIRED, + 'User for whom the addressbook will be created') + ->addArgument('name', + InputArgument::REQUIRED, + 'Name of the addressbook'); } protected function execute(InputInterface $input, OutputInterface $output) { @@ -45,8 +51,13 @@ class CreateAddressBook extends Command { if (!$this->userManager->userExists($user)) { throw new \InvalidArgumentException("User <$user> in unknown."); } + $principalBackend = new Principal( + $this->config, + $this->userManager + ); + $name = $input->getArgument('name'); - $carddav = new CardDavBackend($this->dbConnection); + $carddav = new CardDavBackend($this->dbConnection, $principalBackend); $carddav->createAddressBook("principals/$user", $name, []); } } From e0fa2f7b7ea5939fd6d445b61ae9ed3e88a9a1fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20M=C3=BCller?= Date: Wed, 25 Nov 2015 20:10:24 +0100 Subject: [PATCH 5/5] Update to sabre dav 3.0.x-dev --- 3rdparty | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty b/3rdparty index 3215390b01..e5d7aad946 160000 --- a/3rdparty +++ b/3rdparty @@ -1 +1 @@ -Subproject commit 3215390b01ab3e76f15825ff126961bbb5a86328 +Subproject commit e5d7aad94652f3fd5c440472d0cf7303ca796439