Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .drone.yml
Original file line number Diff line number Diff line change
Expand Up @@ -599,6 +599,15 @@ pipeline:
when:
matrix:
TESTS: integration-trashbin
integration-remote-api:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
- ./occ maintenance:install --admin-pass=admin --data-dir=/dev/shm/nc_int
- cd build/integration
- ./run.sh remoteapi_features/remote.feature
when:
matrix:
TESTS: integration-remote-api
acceptance-access-levels:
image: nextcloudci/integration-php7.0:integration-php7.0-6
commands:
Expand Down Expand Up @@ -801,6 +810,7 @@ matrix:
- TESTS: integration-transfer-ownership-features
- TESTS: integration-ldap-features
- TESTS: integration-trashbin
- TESTS: integration-remote-api
- TESTS: acceptance
TESTS-ACCEPTANCE: access-levels
- TESTS: acceptance
Expand Down
13 changes: 12 additions & 1 deletion build/integration/config/behat.yml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
5 changes: 5 additions & 0 deletions build/integration/features/bootstrap/BasicStructure.php
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
147 changes: 147 additions & 0 deletions build/integration/features/bootstrap/RemoteContext.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
<?php
/**
* @copyright Copyright (c) 2017 Robin Appelman <[email protected]>
*
* @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);
}
}
37 changes: 37 additions & 0 deletions build/integration/remoteapi_features/remote.feature
Original file line number Diff line number Diff line change
@@ -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"
17 changes: 17 additions & 0 deletions lib/composer/composer/autoload_classmap.php
Original file line number Diff line number Diff line change
Expand Up @@ -246,6 +246,14 @@
'OCP\\OCS\\IDiscoveryService' => $baseDir . '/lib/public/OCS/IDiscoveryService.php',
'OCP\\PreConditionNotMetException' => $baseDir . '/lib/public/PreConditionNotMetException.php',
'OCP\\Preview\\IProvider' => $baseDir . '/lib/public/Preview/IProvider.php',
'OCP\\Remote\\Api\\IApiCollection' => $baseDir . '/lib/public/Remote/Api/IApiCollection.php',
'OCP\\Remote\\Api\\IApiFactory' => $baseDir . '/lib/public/Remote/Api/IApiFactory.php',
'OCP\\Remote\\Api\\ICapabilitiesApi' => $baseDir . '/lib/public/Remote/Api/ICapabilitiesApi.php',
'OCP\\Remote\\Api\\IUserApi' => $baseDir . '/lib/public/Remote/Api/IUserApi.php',
'OCP\\Remote\\ICredentials' => $baseDir . '/lib/public/Remote/ICredentials.php',
'OCP\\Remote\\IInstance' => $baseDir . '/lib/public/Remote/IInstance.php',
'OCP\\Remote\\IInstanceFactory' => $baseDir . '/lib/public/Remote/IInstanceFactory.php',
'OCP\\Remote\\IUser' => $baseDir . '/lib/public/Remote/IUser.php',
'OCP\\Response' => $baseDir . '/lib/public/Response.php',
'OCP\\RichObjectStrings\\Definitions' => $baseDir . '/lib/public/RichObjectStrings/Definitions.php',
'OCP\\RichObjectStrings\\IValidator' => $baseDir . '/lib/public/RichObjectStrings/IValidator.php',
Expand Down Expand Up @@ -779,6 +787,15 @@
'OC\\Preview\\WatcherConnector' => $baseDir . '/lib/private/Preview/WatcherConnector.php',
'OC\\Preview\\XBitmap' => $baseDir . '/lib/private/Preview/XBitmap.php',
'OC\\RedisFactory' => $baseDir . '/lib/private/RedisFactory.php',
'OC\\Remote\\Api\\ApiBase' => $baseDir . '/lib/private/Remote/Api/ApiBase.php',
'OC\\Remote\\Api\\ApiCollection' => $baseDir . '/lib/private/Remote/Api/ApiCollection.php',
'OC\\Remote\\Api\\ApiFactory' => $baseDir . '/lib/private/Remote/Api/ApiFactory.php',
'OC\\Remote\\Api\\NotFoundException' => $baseDir . '/lib/private/Remote/Api/NotFoundException.php',
'OC\\Remote\\Api\\OCS' => $baseDir . '/lib/private/Remote/Api/OCS.php',
'OC\\Remote\\Credentials' => $baseDir . '/lib/private/Remote/Credentials.php',
'OC\\Remote\\Instance' => $baseDir . '/lib/private/Remote/Instance.php',
'OC\\Remote\\InstanceFactory' => $baseDir . '/lib/private/Remote/InstanceFactory.php',
'OC\\Remote\\User' => $baseDir . '/lib/private/Remote/User.php',
'OC\\Repair' => $baseDir . '/lib/private/Repair.php',
'OC\\RepairException' => $baseDir . '/lib/private/RepairException.php',
'OC\\Repair\\CleanTags' => $baseDir . '/lib/private/Repair/CleanTags.php',
Expand Down
17 changes: 17 additions & 0 deletions lib/composer/composer/autoload_static.php
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,14 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OCP\\OCS\\IDiscoveryService' => __DIR__ . '/../../..' . '/lib/public/OCS/IDiscoveryService.php',
'OCP\\PreConditionNotMetException' => __DIR__ . '/../../..' . '/lib/public/PreConditionNotMetException.php',
'OCP\\Preview\\IProvider' => __DIR__ . '/../../..' . '/lib/public/Preview/IProvider.php',
'OCP\\Remote\\Api\\IApiCollection' => __DIR__ . '/../../..' . '/lib/public/Remote/Api/IApiCollection.php',
'OCP\\Remote\\Api\\IApiFactory' => __DIR__ . '/../../..' . '/lib/public/Remote/Api/IApiFactory.php',
'OCP\\Remote\\Api\\ICapabilitiesApi' => __DIR__ . '/../../..' . '/lib/public/Remote/Api/ICapabilitiesApi.php',
'OCP\\Remote\\Api\\IUserApi' => __DIR__ . '/../../..' . '/lib/public/Remote/Api/IUserApi.php',
'OCP\\Remote\\ICredentials' => __DIR__ . '/../../..' . '/lib/public/Remote/ICredentials.php',
'OCP\\Remote\\IInstance' => __DIR__ . '/../../..' . '/lib/public/Remote/IInstance.php',
'OCP\\Remote\\IInstanceFactory' => __DIR__ . '/../../..' . '/lib/public/Remote/IInstanceFactory.php',
'OCP\\Remote\\IUser' => __DIR__ . '/../../..' . '/lib/public/Remote/IUser.php',
'OCP\\Response' => __DIR__ . '/../../..' . '/lib/public/Response.php',
'OCP\\RichObjectStrings\\Definitions' => __DIR__ . '/../../..' . '/lib/public/RichObjectStrings/Definitions.php',
'OCP\\RichObjectStrings\\IValidator' => __DIR__ . '/../../..' . '/lib/public/RichObjectStrings/IValidator.php',
Expand Down Expand Up @@ -809,6 +817,15 @@ class ComposerStaticInit53792487c5a8370acc0b06b1a864ff4c
'OC\\Preview\\WatcherConnector' => __DIR__ . '/../../..' . '/lib/private/Preview/WatcherConnector.php',
'OC\\Preview\\XBitmap' => __DIR__ . '/../../..' . '/lib/private/Preview/XBitmap.php',
'OC\\RedisFactory' => __DIR__ . '/../../..' . '/lib/private/RedisFactory.php',
'OC\\Remote\\Api\\ApiBase' => __DIR__ . '/../../..' . '/lib/private/Remote/Api/ApiBase.php',
'OC\\Remote\\Api\\ApiCollection' => __DIR__ . '/../../..' . '/lib/private/Remote/Api/ApiCollection.php',
'OC\\Remote\\Api\\ApiFactory' => __DIR__ . '/../../..' . '/lib/private/Remote/Api/ApiFactory.php',
'OC\\Remote\\Api\\NotFoundException' => __DIR__ . '/../../..' . '/lib/private/Remote/Api/NotFoundException.php',
'OC\\Remote\\Api\\OCS' => __DIR__ . '/../../..' . '/lib/private/Remote/Api/OCS.php',
'OC\\Remote\\Credentials' => __DIR__ . '/../../..' . '/lib/private/Remote/Credentials.php',
'OC\\Remote\\Instance' => __DIR__ . '/../../..' . '/lib/private/Remote/Instance.php',
'OC\\Remote\\InstanceFactory' => __DIR__ . '/../../..' . '/lib/private/Remote/InstanceFactory.php',
'OC\\Remote\\User' => __DIR__ . '/../../..' . '/lib/private/Remote/User.php',
'OC\\Repair' => __DIR__ . '/../../..' . '/lib/private/Repair.php',
'OC\\RepairException' => __DIR__ . '/../../..' . '/lib/private/RepairException.php',
'OC\\Repair\\CleanTags' => __DIR__ . '/../../..' . '/lib/private/Repair/CleanTags.php',
Expand Down
Loading