Merge pull request #21066 from owncloud/behat_capabilities_changing_server_configuration

Added new capabilities test with changes in server configuration
This commit is contained in:
Thomas Müller 2016-01-07 17:07:29 +01:00
commit 6a796ff3cc
6 changed files with 434 additions and 38 deletions

View File

@ -0,0 +1,12 @@
<?xml version="1.0"?>
<info>
<id>testing</id>
<name>QA Testing</name>
<description>This app is only for testing! It is dangerous to have it enabled in a live instance</description>
<licence>AGPL</licence>
<author>Joas Schilling</author>
<version>0.1.0</version>
<dependencies>
<owncloud min-version="9.0" />
</dependencies>
</info>

View File

@ -0,0 +1,46 @@
<?php
/**
* @author Joas Schilling <nickvergessen@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* 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, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCA\Testing\AppInfo;
use OCA\Testing\Config;
use OCP\API;
$config = new Config(
\OC::$server->getConfig(),
\OC::$server->getRequest()
);
API::register(
'post',
'/apps/testing/api/v1/app/{appid}/{configkey}',
[$config, 'setAppValue'],
'testing',
API::ADMIN_AUTH
);
API::register(
'delete',
'/apps/testing/api/v1/app/{appid}/{configkey}',
[$config, 'deleteAppValue'],
'testing',
API::ADMIN_AUTH
);

70
apps/testing/config.php Normal file
View File

@ -0,0 +1,70 @@
<?php
/**
* @author Joas Schilling <nickvergessen@owncloud.com>
*
* @copyright Copyright (c) 2015, ownCloud, Inc.
* @license AGPL-3.0
*
* This code is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License, version 3,
* as published by the Free Software Foundation.
*
* 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, version 3,
* along with this program. If not, see <http://www.gnu.org/licenses/>
*
*/
namespace OCA\Testing;
use OCP\IConfig;
use OCP\IRequest;
class Config {
/** @var IConfig */
private $config;
/** @var IRequest */
private $request;
/**
* @param IConfig $config
* @param IRequest $request
*/
public function __construct(IConfig $config, IRequest $request) {
$this->config = $config;
$this->request = $request;
}
/**
* @param array $parameters
* @return \OC_OCS_Result
*/
public function setAppValue($parameters) {
$app = $parameters['appid'];
$configKey = $parameters['configkey'];
$value = $this->request->getParam('value');
$this->config->setAppValue($app, $configKey, $value);
return new \OC_OCS_Result();
}
/**
* @param array $parameters
* @return \OC_OCS_Result
*/
public function deleteAppValue($parameters) {
$app = $parameters['appid'];
$configKey = $parameters['configkey'];
$this->config->deleteAppValue($app, $configKey);
return new \OC_OCS_Result();
}
}

View File

@ -7,25 +7,211 @@ Feature: capabilities
When sending "GET" to "/cloud/capabilities" When sending "GET" to "/cloud/capabilities"
Then the HTTP status code should be "200" Then the HTTP status code should be "200"
And fields of capabilities match with And fields of capabilities match with
| capability | feature | value_or_subfeature | value | | capability | path_to_element | value |
| core | pollinterval | 60 | | | core | pollinterval | 60 |
| core | webdav-root | remote.php/webdav | | | core | webdav-root | remote.php/webdav |
| files_sharing | api_enabled | 1 | | | files_sharing | api_enabled | 1 |
| files_sharing | public | enabled | 1 | | files_sharing | public@@@enabled | 1 |
| files_sharing | public | upload | 1 | | files_sharing | public@@@upload | 1 |
| files_sharing | resharing | 1 | | | files_sharing | resharing | 1 |
| files_sharing | federation | outgoing | 1 | | files_sharing | federation@@@outgoing | 1 |
| files_sharing | federation | incoming | 1 | | files_sharing | federation@@@incoming | 1 |
| files | bigfilechunking | 1 | | | files | bigfilechunking | 1 |
| files | undelete | 1 | | | files | undelete | 1 |
| files | versioning | 1 | | | files | versioning | 1 |
Scenario: Changing public upload
Given As an "admin"
And parameter "shareapi_allow_public_upload" of app "core" is set to "no"
When sending "GET" to "/cloud/capabilities"
Then the HTTP status code should be "200"
And fields of capabilities match with
| capability | path_to_element | value |
| core | pollinterval | 60 |
| core | webdav-root | remote.php/webdav |
| files_sharing | api_enabled | 1 |
| files_sharing | public@@@enabled | 1 |
| files_sharing | public@@@upload | EMPTY |
| files_sharing | resharing | 1 |
| files_sharing | federation@@@outgoing | 1 |
| files_sharing | federation@@@incoming | 1 |
| files | bigfilechunking | 1 |
| files | undelete | 1 |
| files | versioning | 1 |
Scenario: Disabling share api
Given As an "admin"
And parameter "shareapi_enabled" of app "core" is set to "no"
When sending "GET" to "/cloud/capabilities"
Then the HTTP status code should be "200"
And fields of capabilities match with
| capability | path_to_element | value |
| core | pollinterval | 60 |
| core | webdav-root | remote.php/webdav |
| files_sharing | api_enabled | EMPTY |
| files_sharing | public@@@enabled | EMPTY |
| files_sharing | public@@@upload | EMPTY |
| files_sharing | resharing | EMPTY |
| files_sharing | federation@@@outgoing | 1 |
| files_sharing | federation@@@incoming | 1 |
| files | bigfilechunking | 1 |
| files | undelete | 1 |
| files | versioning | 1 |
Scenario: Disabling public links
Given As an "admin"
And parameter "shareapi_allow_links" of app "core" is set to "no"
When sending "GET" to "/cloud/capabilities"
Then the HTTP status code should be "200"
And fields of capabilities match with
| capability | path_to_element | value |
| core | pollinterval | 60 |
| core | webdav-root | remote.php/webdav |
| files_sharing | api_enabled | 1 |
| files_sharing | public@@@enabled | EMPTY |
| files_sharing | public@@@upload | EMPTY |
| files_sharing | resharing | 1 |
| files_sharing | federation@@@outgoing | 1 |
| files_sharing | federation@@@incoming | 1 |
| files | bigfilechunking | 1 |
| files | undelete | 1 |
| files | versioning | 1 |
Scenario: Changing resharing
Given As an "admin"
And parameter "shareapi_allow_resharing" of app "core" is set to "no"
When sending "GET" to "/cloud/capabilities"
Then the HTTP status code should be "200"
And fields of capabilities match with
| capability | path_to_element | value |
| core | pollinterval | 60 |
| core | webdav-root | remote.php/webdav |
| files_sharing | api_enabled | 1 |
| files_sharing | public@@@enabled | 1 |
| files_sharing | public@@@upload | 1 |
| files_sharing | resharing | EMPTY |
| files_sharing | federation@@@outgoing | 1 |
| files_sharing | federation@@@incoming | 1 |
| files | bigfilechunking | 1 |
| files | undelete | 1 |
| files | versioning | 1 |
Scenario: Changing federation outgoing
Given As an "admin"
And parameter "outgoing_server2server_share_enabled" of app "files_sharing" is set to "no"
When sending "GET" to "/cloud/capabilities"
Then the HTTP status code should be "200"
And fields of capabilities match with
| capability | path_to_element | value |
| core | pollinterval | 60 |
| core | webdav-root | remote.php/webdav |
| files_sharing | api_enabled | 1 |
| files_sharing | public@@@enabled | 1 |
| files_sharing | public@@@upload | 1 |
| files_sharing | resharing | 1 |
| files_sharing | federation@@@outgoing | EMPTY |
| files_sharing | federation@@@incoming | 1 |
| files | bigfilechunking | 1 |
| files | undelete | 1 |
| files | versioning | 1 |
Scenario: Changing federation incoming
Given As an "admin"
And parameter "incoming_server2server_share_enabled" of app "files_sharing" is set to "no"
When sending "GET" to "/cloud/capabilities"
Then the HTTP status code should be "200"
And fields of capabilities match with
| capability | path_to_element | value |
| core | pollinterval | 60 |
| core | webdav-root | remote.php/webdav |
| files_sharing | api_enabled | 1 |
| files_sharing | public@@@enabled | 1 |
| files_sharing | public@@@upload | 1 |
| files_sharing | resharing | 1 |
| files_sharing | federation@@@outgoing | 1 |
| files_sharing | federation@@@incoming | EMPTY |
| files | bigfilechunking | 1 |
| files | undelete | 1 |
| files | versioning | 1 |
Scenario: Changing password enforce
Given As an "admin"
And parameter "shareapi_enforce_links_password" of app "core" is set to "yes"
When sending "GET" to "/cloud/capabilities"
Then the HTTP status code should be "200"
And fields of capabilities match with
| capability | path_to_element | value |
| core | pollinterval | 60 |
| core | webdav-root | remote.php/webdav |
| files_sharing | api_enabled | 1 |
| files_sharing | public@@@enabled | 1 |
| files_sharing | public@@@upload | 1 |
| files_sharing | public@@@password@@@enforced | 1 |
| files_sharing | resharing | 1 |
| files_sharing | federation@@@outgoing | 1 |
| files_sharing | federation@@@incoming | 1 |
| files | bigfilechunking | 1 |
| files | undelete | 1 |
| files | versioning | 1 |
Scenario: Changing public notifications
Given As an "admin"
And parameter "shareapi_allow_public_notification" of app "core" is set to "yes"
When sending "GET" to "/cloud/capabilities"
Then the HTTP status code should be "200"
And fields of capabilities match with
| capability | path_to_element | value |
| core | pollinterval | 60 |
| core | webdav-root | remote.php/webdav |
| files_sharing | api_enabled | 1 |
| files_sharing | public@@@enabled | 1 |
| files_sharing | public@@@upload | 1 |
| files_sharing | public@@@send_mail | 1 |
| files_sharing | resharing | 1 |
| files_sharing | federation@@@outgoing | 1 |
| files_sharing | federation@@@incoming | 1 |
| files | bigfilechunking | 1 |
| files | undelete | 1 |
| files | versioning | 1 |
Scenario: Changing expire date
Given As an "admin"
And parameter "shareapi_default_expire_date" of app "core" is set to "yes"
When sending "GET" to "/cloud/capabilities"
Then the HTTP status code should be "200"
And fields of capabilities match with
| capability | path_to_element | value |
| core | pollinterval | 60 |
| core | webdav-root | remote.php/webdav |
| files_sharing | api_enabled | 1 |
| files_sharing | public@@@enabled | 1 |
| files_sharing | public@@@upload | 1 |
| files_sharing | public@@@expire_date@@@enabled | 1 |
| files_sharing | resharing | 1 |
| files_sharing | federation@@@outgoing | 1 |
| files_sharing | federation@@@incoming | 1 |
| files | bigfilechunking | 1 |
| files | undelete | 1 |
| files | versioning | 1 |
Scenario: Changing expire date enforcing
Given As an "admin"
And parameter "shareapi_default_expire_date" of app "core" is set to "yes"
And parameter "shareapi_enforce_expire_date" of app "core" is set to "yes"
When sending "GET" to "/cloud/capabilities"
Then the HTTP status code should be "200"
And fields of capabilities match with
| capability | path_to_element | value |
| core | pollinterval | 60 |
| core | webdav-root | remote.php/webdav |
| files_sharing | api_enabled | 1 |
| files_sharing | public@@@enabled | 1 |
| files_sharing | public@@@upload | 1 |
| files_sharing | public@@@expire_date@@@enabled | 1 |
| files_sharing | public@@@expire_date@@@enforced | 1 |
| files_sharing | resharing | 1 |
| files_sharing | federation@@@outgoing | 1 |
| files_sharing | federation@@@incoming | 1 |
| files | bigfilechunking | 1 |
| files | undelete | 1 |
| files | versioning | 1 |

View File

@ -2,6 +2,10 @@
use Behat\Behat\Context\Context; use Behat\Behat\Context\Context;
use Behat\Behat\Context\SnippetAcceptingContext; use Behat\Behat\Context\SnippetAcceptingContext;
use Behat\Behat\Hook\Scope\AfterScenarioScope;
use Behat\Behat\Hook\Scope\BeforeScenarioScope;
use GuzzleHttp\Client;
use GuzzleHttp\Message\ResponseInterface;
require __DIR__ . '/../../vendor/autoload.php'; require __DIR__ . '/../../vendor/autoload.php';
@ -14,34 +18,117 @@ class CapabilitiesContext implements Context, SnippetAcceptingContext {
use Provisioning; use Provisioning;
use Sharing; use Sharing;
/**
* @Given /^parameter "([^"]*)" of app "([^"]*)" is set to "([^"]*)"$/
*/
public function serverParameterIsSetTo($parameter, $app, $value){
$user = $this->currentUser;
$this->currentUser = 'admin';
$this->modifyServerConfig($app, $parameter, $value);
$this->currentUser = $user;
}
/** /**
* @Then /^fields of capabilities match with$/ * @Then /^fields of capabilities match with$/
* @param \Behat\Gherkin\Node\TableNode|null $formData * @param \Behat\Gherkin\Node\TableNode|null $formData
*/ */
public function checkCapabilitiesResponse($formData){ public function checkCapabilitiesResponse(\Behat\Gherkin\Node\TableNode $formData){
if ($formData instanceof \Behat\Gherkin\Node\TableNode) {
$fd = $formData->getHash();
}
$capabilitiesXML = $this->response->xml()->data->capabilities; $capabilitiesXML = $this->response->xml()->data->capabilities;
foreach ($fd as $row) { foreach ($formData->getHash() as $row) {
if ($row['value'] === ''){ $path_to_element = explode('@@@', $row['path_to_element']);
$answeredValue = (string)$capabilitiesXML->$row['capability']->$row['feature']; $answeredValue = $capabilitiesXML->$row['capability'];
PHPUnit_Framework_Assert::assertEquals( for ($i = 0; $i < count($path_to_element); $i++){
$answeredValue, $answeredValue = $answeredValue->$path_to_element[$i];
$row['value_or_subfeature'],
"Failed field " . $row['capability'] . " " . $row['feature']
);
} else{
$answeredValue = (string)$capabilitiesXML->$row['capability']->$row['feature']->$row['value_or_subfeature'];
PHPUnit_Framework_Assert::assertEquals(
$answeredValue,
$row['value'],
"Failed field: " . $row['capability'] . " " . $row['feature'] . " " . $row['value_or_subfeature']
);
} }
$answeredValue = (string)$answeredValue;
PHPUnit_Framework_Assert::assertEquals(
$row['value']==="EMPTY" ? '' : $row['value'],
$answeredValue,
"Failed field " . $row['capability'] . " " . $row['path_to_element']
);
} }
} }
protected function resetAppConfigs() {
$this->modifyServerConfig('core', 'shareapi_enabled', 'yes');
$this->modifyServerConfig('core', 'shareapi_allow_links', 'yes');
$this->modifyServerConfig('core', 'shareapi_allow_public_upload', 'yes');
$this->modifyServerConfig('core', 'shareapi_allow_resharing', 'yes');
$this->modifyServerConfig('files_sharing', 'outgoing_server2server_share_enabled', 'yes');
$this->modifyServerConfig('files_sharing', 'incoming_server2server_share_enabled', 'yes');
$this->modifyServerConfig('core', 'shareapi_enforce_links_password', 'no');
$this->modifyServerConfig('core', 'shareapi_allow_public_notification', 'no');
$this->modifyServerConfig('core', 'shareapi_default_expire_date', 'no');
$this->modifyServerConfig('core', 'shareapi_enforce_expire_date', 'no');
}
/**
* @BeforeScenario
*
* Enable the testing app before the first scenario of the feature and
* reset the configs before each scenario
* @param BeforeScenarioScope $event
*/
public function prepareParameters(BeforeScenarioScope $event){
$user = $this->currentUser;
$this->currentUser = 'admin';
$scenarios = $event->getFeature()->getScenarios();
if ($event->getScenario() === reset($scenarios)) {
$this->setStatusTestingApp(true);
}
$this->resetAppConfigs();
$this->currentUser = $user;
}
/**
* @AfterScenario
*
* Reset the values after the last scenario of the feature and disable the testing app
* @param AfterScenarioScope $event
*/
public function undoChangingParameters(AfterScenarioScope $event) {
$scenarios = $event->getFeature()->getScenarios();
if ($event->getScenario() === end($scenarios)) {
$user = $this->currentUser;
$this->currentUser = 'admin';
$this->resetAppConfigs();
$this->setStatusTestingApp(false);
$this->currentUser = $user;
}
}
/**
* @param string $app
* @param string $parameter
* @param string $value
*/
protected function modifyServerConfig($app, $parameter, $value) {
$body = new \Behat\Gherkin\Node\TableNode([['value', $value]]);
$this->sendingToWith('post', "/apps/testing/api/v1/app/{$app}/{$parameter}", $body);
$this->theHTTPStatusCodeShouldBe('200');
$this->theOCSStatusCodeShouldBe('100');
}
protected function setStatusTestingApp($enabled) {
$this->sendingTo(($enabled ? 'post' : 'delete'), '/cloud/apps/testing');
$this->theHTTPStatusCodeShouldBe('200');
$this->theOCSStatusCodeShouldBe('100');
$this->sendingTo('get', '/cloud/apps?filter=enabled');
$this->theHTTPStatusCodeShouldBe('200');
if ($enabled) {
PHPUnit_Framework_Assert::assertContains('testing', $this->response->getBody()->getContents());
} else {
PHPUnit_Framework_Assert::assertNotContains('testing', $this->response->getBody()->getContents());
}
}
} }

View File

@ -291,8 +291,3 @@ Feature: provisioning
Then the OCS status code should be "100" Then the OCS status code should be "100"
And the HTTP status code should be "200" And the HTTP status code should be "200"
And app "files_external" is disabled And app "files_external" is disabled