Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/build
diff options
context:
space:
mode:
authorRobin Appelman <robin@icewind.nl>2017-09-27 18:46:24 +0300
committerMorris Jobke <hey@morrisjobke.de>2017-12-08 18:34:33 +0300
commit74b5ce8fd4311f0d6f6a59e0636d343807b79d74 (patch)
tree30e2a3f407b94909080aaa7d536c9fe13d8cc731 /build
parentac2c26ffcbe63e64156fc7e0b0be4e3466430dcf (diff)
Some tests for the remote cloud api
Signed-off-by: Robin Appelman <robin@icewind.nl>
Diffstat (limited to 'build')
-rw-r--r--build/integration/config/behat.yml13
-rw-r--r--build/integration/features/bootstrap/BasicStructure.php5
-rw-r--r--build/integration/features/bootstrap/RemoteContext.php147
-rw-r--r--build/integration/remoteapi_features/remote.feature37
4 files changed, 201 insertions, 1 deletions
diff --git a/build/integration/config/behat.yml b/build/integration/config/behat.yml
index 3573f9d6a6b..428d4d45b78 100644
--- a/build/integration/config/behat.yml
+++ b/build/integration/config/behat.yml
@@ -85,7 +85,18 @@ default:
- admin
- admin
regular_user_password: what_for
-
+ remoteapi:
+ paths:
+ - %paths.base%/../remoteapi_features
+ contexts:
+ - FeatureContext:
+ baseUrl: http://localhost:8080/ocs/
+ admin:
+ - admin
+ - admin
+ regular_user_password: 123456
+ - RemoteContext:
+ remote: http://localhost:8080
extensions:
jarnaiz\JUnitFormatter\JUnitFormatterExtension:
filename: report.xml
diff --git a/build/integration/features/bootstrap/BasicStructure.php b/build/integration/features/bootstrap/BasicStructure.php
index 03392ff6619..f2449242bee 100644
--- a/build/integration/features/bootstrap/BasicStructure.php
+++ b/build/integration/features/bootstrap/BasicStructure.php
@@ -62,6 +62,11 @@ trait BasicStructure {
/** @var string */
private $requestToken;
+ protected $adminUser;
+ protected $regularUser;
+ protected $localBaseUrl;
+ protected $remoteBaseUrl;
+
public function __construct($baseUrl, $admin, $regular_user_password) {
// Initialize your context here
diff --git a/build/integration/features/bootstrap/RemoteContext.php b/build/integration/features/bootstrap/RemoteContext.php
new file mode 100644
index 00000000000..7e413021381
--- /dev/null
+++ b/build/integration/features/bootstrap/RemoteContext.php
@@ -0,0 +1,147 @@
+<?php
+/**
+ * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl>
+ *
+ * @license GNU AGPL version 3 or any later version
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+
+use Behat\Behat\Context\Context;
+
+require __DIR__ . '/../../vendor/autoload.php';
+
+/**
+ * Remote context.
+ */
+class RemoteContext implements Context {
+ /** @var \OC\Remote\Instance */
+ protected $remoteInstance;
+
+ /** @var \OC\Remote\Credentials */
+ protected $credentails;
+
+ /** @var \OC\Remote\User */
+ protected $userResult;
+
+ protected $remoteUrl;
+
+ protected $lastException;
+
+ public function __construct($remote) {
+ require_once __DIR__ . '/../../../../lib/base.php';
+ $this->remoteUrl = $remote;
+ }
+
+ protected function getApiClient() {
+ return new \OC\Remote\Api\OCS($this->remoteInstance, $this->credentails, \OC::$server->getHTTPClientService());
+ }
+
+ /**
+ * @Given /^using remote server "(REMOTE|NON_EXISTING)"$/
+ *
+ * @param string $remoteServer "NON_EXISTING" or "REMOTE"
+ */
+ public function selectRemoteInstance($remoteServer) {
+ if ($remoteServer == "REMOTE") {
+ $baseUri = $this->remoteUrl;
+ } else {
+ $baseUri = 'nonexistingnextcloudserver.local';
+ }
+ $this->lastException = null;
+ try {
+ $this->remoteInstance = new \OC\Remote\Instance($baseUri, \OC::$server->getMemCacheFactory()->createLocal(), \OC::$server->getHTTPClientService());
+ // trigger the status request
+ $this->remoteInstance->getProtocol();
+ } catch (\Exception $e) {
+ $this->lastException = $e;
+ }
+ }
+
+ /**
+ * @Then /^the remote version should be "([^"]*)"$/
+ * @param string $version
+ */
+ public function theRemoteVersionShouldBe($version) {
+ if ($version === '__current_version__') {
+ $version = \OC::$server->getConfig()->getSystemValue('version', '0.0.0.0');
+ }
+
+ PHPUnit_Framework_Assert::assertEquals($version, $this->remoteInstance->getVersion());
+ }
+
+ /**
+ * @Then /^the remote protocol should be "([^"]*)"$/
+ * @param string $protocol
+ */
+ public function theRemoteProtocolShouldBe($protocol) {
+ PHPUnit_Framework_Assert::assertEquals($protocol, $this->remoteInstance->getProtocol());
+ }
+
+ /**
+ * @Given /^using credentials "([^"]*)", "([^"]*)"/
+ * @param string $user
+ * @param string $password
+ */
+ public function usingCredentials($user, $password) {
+ $this->credentails = new \OC\Remote\Credentials($user, $password);
+ }
+
+ /**
+ * @When /^getting the remote user info for "([^"]*)"$/
+ * @param string $user
+ */
+ public function remoteUserInfo($user) {
+ $this->lastException = null;
+ try {
+ $this->userResult = $this->getApiClient()->getUser($user);
+ } catch (\Exception $e) {
+ $this->lastException = $e;
+ }
+ }
+
+ /**
+ * @Then /^the remote user should have userid "([^"]*)"$/
+ * @param string $user
+ */
+ public function remoteUserId($user) {
+ PHPUnit_Framework_Assert::assertEquals($user, $this->userResult->getUserId());
+ }
+
+ /**
+ * @Then /^the request should throw a "([^"]*)"$/
+ * @param string $class
+ */
+ public function lastError($class) {
+ PHPUnit_Framework_Assert::assertEquals($class, get_class($this->lastException));
+ }
+
+ /**
+ * @Then /^the capability "([^"]*)" is "([^"]*)"$/
+ * @param string $key
+ * @param string $value
+ */
+ public function hasCapability($key, $value) {
+ $capabilities = $this->getApiClient()->getCapabilities();
+ $current = $capabilities;
+ $parts = explode('.', $key);
+ foreach ($parts as $part) {
+ if ($current !== null) {
+ $current = isset($current[$part]) ? $current[$part] : null;
+ }
+ }
+ PHPUnit_Framework_Assert::assertEquals($value, $current);
+ }
+}
diff --git a/build/integration/remoteapi_features/remote.feature b/build/integration/remoteapi_features/remote.feature
new file mode 100644
index 00000000000..72daf8226cd
--- /dev/null
+++ b/build/integration/remoteapi_features/remote.feature
@@ -0,0 +1,37 @@
+Feature: remote
+
+ Scenario: Get status of remote server
+ Given using remote server "REMOTE"
+ Then the remote version should be "__current_version__"
+ And the remote protocol should be "http"
+
+ Scenario: Get status of a non existing server
+ Given using remote server "NON_EXISTING"
+ Then the request should throw a "OC\Remote\Api\NotFoundException"
+
+ Scenario: Get user info for a remote user
+ Given using remote server "REMOTE"
+ And user "user0" exists
+ And using credentials "user0", "123456"
+ When getting the remote user info for "user0"
+ Then the remote user should have userid "user0"
+
+ Scenario: Get user info for a non existing remote user
+ Given using remote server "REMOTE"
+ And user "user0" exists
+ And using credentials "user0", "123456"
+ When getting the remote user info for "user_non_existing"
+ Then the request should throw a "OC\Remote\Api\NotFoundException"
+
+ Scenario: Get user info with invalid credentials
+ Given using remote server "REMOTE"
+ And user "user0" exists
+ And using credentials "user0", "invalid"
+ When getting the remote user info for "user0"
+ Then the request should throw a "OC\ForbiddenException"
+
+ Scenario: Get capability of remote server
+ Given using remote server "REMOTE"
+ And user "user0" exists
+ And using credentials "user0", "invalid"
+ Then the capability "theming.name" is "Nextcloud"