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
8 changes: 8 additions & 0 deletions build/integration/features/bootstrap/BasicStructure.php
Original file line number Diff line number Diff line change
Expand Up @@ -360,6 +360,14 @@ public function emptyTrashbin($user) {
$this->theHTTPStatusCodeShouldBe('200');
}

/**
* @When Sleep for :seconds seconds
* @param int $seconds
*/
public function sleepForSeconds($seconds) {
sleep((int)$seconds);
}

/**
* @BeforeSuite
*/
Expand Down
97 changes: 57 additions & 40 deletions build/integration/features/bootstrap/WebDav.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ trait WebDav {

/** @var string*/
private $davPath = "remote.php/webdav";
/** @var boolean*/
private $usingOldDavPath = true;
/** @var ResponseInterface */
private $response;
/** @var map with user as key and another map as value, which has path as key and etag as value */
Expand All @@ -53,19 +55,35 @@ public function usingDavPath($davPath) {
}

/**
* @return string
* @Given /^using old dav path$/
*/
public function getFilesPath($user) {
if ($this->davPath === "remote.php/dav") {
$basePath = '/files/' . $user . '/';
public function usingOldDavPath() {
$this->davPath = "remote.php/webdav";
$this->usingOldDavPath = true;
}

/**
* @Given /^using new dav path$/
*/
public function usingNewDavPath() {
$this->davPath = "remote.php/dav";
$this->usingOldDavPath = false;
}

public function getDavFilesPath($user){
if ($this->usingOldDavPath === true){
return $this->davPath;
} else {
$basePath = '/';
return $this->davPath . '/files/' . $user;
}
return $basePath;
}

public function makeDavRequest($user, $method, $path, $headers, $body = null){
$fullUrl = substr($this->baseUrl, 0, -4) . $this->davPath . "$path";
public function makeDavRequest($user, $method, $path, $headers, $body = null, $type = "files"){
if ( $type === "files" ){
$fullUrl = substr($this->baseUrl, 0, -4) . $this->getDavFilesPath($user) . "$path";
} else if ( $type === "uploads" ){
$fullUrl = substr($this->baseUrl, 0, -4) . $this->davPath . "$path";
}
$client = new GClient();
$options = [];
if ($user === 'admin') {
Expand Down Expand Up @@ -95,7 +113,7 @@ public function makeDavRequest($user, $method, $path, $headers, $body = null){
* @param string $fileDestination
*/
public function userMovedFile($user, $entry, $fileSource, $fileDestination){
$fullUrl = substr($this->baseUrl, 0, -4) . $this->davPath;
$fullUrl = substr($this->baseUrl, 0, -4) . $this->getDavFilesPath($user);
$headers['Destination'] = $fullUrl . $fileDestination;
$this->response = $this->makeDavRequest($user, "MOVE", $fileSource, $headers);
PHPUnit_Framework_Assert::assertEquals(201, $this->response->getStatusCode());
Expand All @@ -108,9 +126,13 @@ public function userMovedFile($user, $entry, $fileSource, $fileDestination){
* @param string $fileDestination
*/
public function userMovesFile($user, $entry, $fileSource, $fileDestination){
$fullUrl = substr($this->baseUrl, 0, -4) . $this->davPath;
$fullUrl = substr($this->baseUrl, 0, -4) . $this->getDavFilesPath($user);
$headers['Destination'] = $fullUrl . $fileDestination;
$this->response = $this->makeDavRequest($user, "MOVE", $fileSource, $headers);
try {
$this->response = $this->makeDavRequest($user, "MOVE", $fileSource, $headers);
} catch (\GuzzleHttp\Exception\ClientException $e) {
$this->response = $e->getResponse();
}
}

/**
Expand All @@ -120,7 +142,7 @@ public function userMovesFile($user, $entry, $fileSource, $fileDestination){
* @param string $fileDestination
*/
public function userCopiesFileTo($user, $fileSource, $fileDestination) {
$fullUrl = substr($this->baseUrl, 0, -4) . $this->davPath;
$fullUrl = substr($this->baseUrl, 0, -4) . $this->getDavFilesPath($user);
$headers['Destination'] = $fullUrl . $fileDestination;
try {
$this->response = $this->makeDavRequest($user, 'COPY', $fileSource, $headers);
Expand Down Expand Up @@ -202,7 +224,11 @@ public function downloadedContentWhenDownloadindShouldBe($fileSource, $range, $c
* @param string $fileName
*/
public function downloadingFile($fileName) {
$this->response = $this->makeDavRequest($this->currentUser, 'GET', $fileName, []);
try {
$this->response = $this->makeDavRequest($this->currentUser, 'GET', $fileName, []);
} catch (\GuzzleHttp\Exception\ClientException $e) {
$this->response = $e->getResponse();
}
}

/**
Expand Down Expand Up @@ -246,12 +272,13 @@ public function downloadedContentShouldStartWith($start) {
}

/**
* @Then /^as "([^"]*)" gets properties of folder "([^"]*)" with$/
* @Then /^as "([^"]*)" gets properties of (file|folder|entry) "([^"]*)" with$/
* @param string $user
* @param string $elementType
* @param string $path
* @param \Behat\Gherkin\Node\TableNode|null $propertiesTable
*/
public function asGetsPropertiesOfFolderWith($user, $path, $propertiesTable) {
public function asGetsPropertiesOfFolderWith($user, $elementType, $path, $propertiesTable) {
$properties = null;
if ($propertiesTable instanceof \Behat\Gherkin\Node\TableNode) {
foreach ($propertiesTable->getRows() as $row) {
Expand Down Expand Up @@ -371,7 +398,7 @@ public function listFolder($user, $path, $folderDepth, $properties = null){
}

public function makeSabrePath($user, $path) {
return $this->encodePath($this->davPath . $this->getFilesPath($user) . ltrim($path, '/'));
return $this->encodePath($this->getDavFilesPath($user) . $path);
}

public function getSabreClient($user) {
Expand Down Expand Up @@ -402,7 +429,7 @@ public function checkElementList($user, $expectedElements){
$elementRows = $expectedElements->getRows();
$elementsSimplified = $this->simplifyArray($elementRows);
foreach($elementsSimplified as $expectedElement) {
$webdavPath = "/" . $this->davPath . $expectedElement;
$webdavPath = "/" . $this->getDavFilesPath($user) . $expectedElement;
if (!array_key_exists($webdavPath,$elementList)){
PHPUnit_Framework_Assert::fail("$webdavPath" . " is not in propfind answer");
}
Expand Down Expand Up @@ -478,7 +505,7 @@ public function userDeletesFile($user, $type, $file) {
*/
public function userCreatedAFolder($user, $destination) {
try {
$this->response = $this->makeDavRequest($user, "MKCOL", $this->getFilesPath($user) . ltrim($destination, $this->getFilesPath($user)), []);
$this->response = $this->makeDavRequest($user, "MKCOL", $destination, []);
} catch (\GuzzleHttp\Exception\ServerException $e) {
// 4xx and 5xx responses cause an exception
$this->response = $e->getResponse();
Expand All @@ -497,8 +524,8 @@ public function userUploadsChunkFileOfWithToWithChecksum($user, $num, $total, $d
{
$num -= 1;
$data = \GuzzleHttp\Stream\Stream::factory($data);
$file = $destination . '-chunking-42-'.$total.'-'.$num;
$this->makeDavRequest($user, 'PUT', $file, ['OC-Chunked' => '1'], $data);
$file = $destination . '-chunking-42-' . $total . '-' . $num;
$this->makeDavRequest($user, 'PUT', $file, ['OC-Chunked' => '1'], $data, "uploads");
}

/**
Expand All @@ -507,7 +534,7 @@ public function userUploadsChunkFileOfWithToWithChecksum($user, $num, $total, $d
public function userCreatesANewChunkingUploadWithId($user, $id)
{
$destination = '/uploads/'.$user.'/'.$id;
$this->makeDavRequest($user, 'MKCOL', $destination, []);
$this->makeDavRequest($user, 'MKCOL', $destination, [], null, "uploads");
}

/**
Expand All @@ -516,20 +543,20 @@ public function userCreatesANewChunkingUploadWithId($user, $id)
public function userUploadsNewChunkFileOfWithToId($user, $num, $data, $id)
{
$data = \GuzzleHttp\Stream\Stream::factory($data);
$destination = '/uploads/'.$user.'/'.$id.'/'.$num;
$this->makeDavRequest($user, 'PUT', $destination, [], $data);
$destination = '/uploads/'. $user .'/'. $id .'/' . $num;
$this->makeDavRequest($user, 'PUT', $destination, [], $data, "uploads");
}

/**
* @Given user :user moves new chunk file with id :id to :dest
*/
public function userMovesNewChunkFileWithIdToMychunkedfile($user, $id, $dest)
{
$source = '/uploads/'.$user.'/'.$id.'/.file';
$destination = substr($this->baseUrl, 0, -4) . $this->davPath . '/files/'.$user.$dest;
$source = '/uploads/' . $user . '/' . $id . '/.file';
$destination = substr($this->baseUrl, 0, -4) . $this->getDavFilesPath($user) . $dest;
$this->makeDavRequest($user, 'MOVE', $source, [
'Destination' => $destination
]);
], null, "uploads");
}


Expand Down Expand Up @@ -588,26 +615,16 @@ public function changeFavStateOfAnElement($user, $path, $favOrUnfav, $folderDept
];
}

$response = $client->proppatch($this->davPath . $this->getFilesPath($user) . ltrim($path, '/'), $properties, $folderDepth);
$response = $client->proppatch($this->getDavFilesPath($user) . $path, $properties, $folderDepth);
return $response;
}

/**
* @Then /^as "([^"]*)" gets properties of file "([^"]*)" with$/
* @param string $user
* @param string $path
* @param \Behat\Gherkin\Node\TableNode|null $propertiesTable
*/
public function asGetsPropertiesOfFileWith($user, $path, $propertiesTable) {
$this->asGetsPropertiesOfFolderWith($user, $path, $propertiesTable);
}

/**
* @Given user :user stores etag of element :path
*/
public function userStoresEtagOfElement($user, $path){
$propertiesTable = new \Behat\Gherkin\Node\TableNode([['{DAV:}getetag']]);
$this->asGetsPropertiesOfFolderWith($user, $path, $propertiesTable);
$this->asGetsPropertiesOfFolderWith($user, 'entry', $path, $propertiesTable);
$pathETAG[$path] = $this->response['{DAV:}getetag'];
$this->storedETAG[$user]= $pathETAG;
print_r($this->storedETAG[$user][$path]);
Expand All @@ -618,7 +635,7 @@ public function userStoresEtagOfElement($user, $path){
*/
public function checkIfETAGHasNotChanged($path, $user){
$propertiesTable = new \Behat\Gherkin\Node\TableNode([['{DAV:}getetag']]);
$this->asGetsPropertiesOfFolderWith($user, $path, $propertiesTable);
$this->asGetsPropertiesOfFolderWith($user, 'entry', $path, $propertiesTable);
PHPUnit_Framework_Assert::assertEquals($this->response['{DAV:}getetag'], $this->storedETAG[$user][$path]);
}

Expand All @@ -627,7 +644,7 @@ public function checkIfETAGHasNotChanged($path, $user){
*/
public function checkIfETAGHasChanged($path, $user){
$propertiesTable = new \Behat\Gherkin\Node\TableNode([['{DAV:}getetag']]);
$this->asGetsPropertiesOfFolderWith($user, $path, $propertiesTable);
$this->asGetsPropertiesOfFolderWith($user, 'entry', $path, $propertiesTable);
PHPUnit_Framework_Assert::assertNotEquals($this->response['{DAV:}getetag'], $this->storedETAG[$user][$path]);
}
}
20 changes: 10 additions & 10 deletions build/integration/features/dav-v2.feature
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,24 @@ Feature: dav-v2
Given using api version "1"

Scenario: moving a file new endpoint way
Given using dav path "remote.php/dav"
Given using new dav path
And As an "admin"
And user "user0" exists
When User "user0" moves file "/files/user0/textfile0.txt" to "/files/user0/FOLDER/textfile0.txt"
When User "user0" moves file "/textfile0.txt" to "/FOLDER/textfile0.txt"
Then the HTTP status code should be "201"

Scenario: download a file with range using new endpoint
Given using dav path "remote.php/dav"
Given using new dav path
And As an "admin"
And user "user0" exists
And As an "user0"
When Downloading file "/files/user0/welcome.txt" with range "bytes=52-78"
When Downloading file "/welcome.txt" with range "bytes=52-78"
Then Downloaded content should be "example file for developers"

Scenario: Downloading a file on the new endpoint should serve security headers
Given using dav path "remote.php/dav/files/admin/"
Given using new dav path
And As an "admin"
When Downloading file "welcome.txt"
When Downloading file "/welcome.txt"
Then The following headers should be set
|Content-Disposition|attachment; filename*=UTF-8''welcome.txt; filename="welcome.txt"|
|Content-Security-Policy|default-src 'none';|
Expand Down Expand Up @@ -55,16 +55,16 @@ Feature: dav-v2
Then the HTTP status code should be "207"

Scenario: Uploading a file having 0B as quota
Given using dav path "remote.php/dav"
Given using new dav path
And As an "admin"
And user "user0" exists
And user "user0" has a quota of "0 B"
And As an "user0"
When User "user0" uploads file "data/textfile.txt" to "/files/user0/asdf.txt"
When User "user0" uploads file "data/textfile.txt" to "/asdf.txt"
Then the HTTP status code should be "507"

Scenario: Uploading a file as recipient using webdav new endpoint having quota
Given using dav path "remote.php/dav"
Given using new dav path
And As an "admin"
And user "user0" exists
And user "user1" exists
Expand All @@ -78,5 +78,5 @@ Feature: dav-v2
| permissions | 31 |
| shareWith | user0 |
And As an "user0"
When User "user0" uploads file "data/textfile.txt" to "/files/user0/testquota/asdf.txt"
When User "user0" uploads file "data/textfile.txt" to "/testquota/asdf.txt"
Then the HTTP status code should be "201"
2 changes: 1 addition & 1 deletion build/integration/features/external-storage.feature
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Feature: external-storage
Background:
Given using api version "1"
Given using dav path "remote.php/webdav"
Given using old dav path

@local_storage
Scenario: Share by link a file inside a local external storage
Expand Down
16 changes: 8 additions & 8 deletions build/integration/features/favorites.feature
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ Feature: favorite
Given using api version "1"

Scenario: Favorite a folder
Given using dav path "remote.php/webdav"
Given using old dav path
And As an "admin"
And user "user0" exists
When user "user0" favorites element "/FOLDER"
Expand All @@ -12,7 +12,7 @@ Feature: favorite
And the single response should contain a property "{http://owncloud.org/ns}favorite" with value "1"

Scenario: Favorite and unfavorite a folder
Given using dav path "remote.php/webdav"
Given using old dav path
And As an "admin"
And user "user0" exists
When user "user0" favorites element "/FOLDER"
Expand All @@ -22,7 +22,7 @@ Feature: favorite
And the single response should contain a property "{http://owncloud.org/ns}favorite" with value ""

Scenario: Favorite a file
Given using dav path "remote.php/webdav"
Given using old dav path
And As an "admin"
And user "user0" exists
When user "user0" favorites element "/textfile0.txt"
Expand All @@ -31,7 +31,7 @@ Feature: favorite
And the single response should contain a property "{http://owncloud.org/ns}favorite" with value "1"

Scenario: Favorite and unfavorite a file
Given using dav path "remote.php/webdav"
Given using old dav path
And As an "admin"
And user "user0" exists
When user "user0" favorites element "/textfile0.txt"
Expand All @@ -41,7 +41,7 @@ Feature: favorite
And the single response should contain a property "{http://owncloud.org/ns}favorite" with value ""

Scenario: Favorite a folder new endpoint
Given using dav path "remote.php/dav"
Given using new dav path
And As an "admin"
And user "user0" exists
When user "user0" favorites element "/FOLDER"
Expand All @@ -50,7 +50,7 @@ Feature: favorite
And the single response should contain a property "{http://owncloud.org/ns}favorite" with value "1"

Scenario: Favorite and unfavorite a folder new endpoint
Given using dav path "remote.php/dav"
Given using new dav path
And As an "admin"
And user "user0" exists
When user "user0" favorites element "/FOLDER"
Expand All @@ -60,7 +60,7 @@ Feature: favorite
And the single response should contain a property "{http://owncloud.org/ns}favorite" with value ""

Scenario: Favorite a file new endpoint
Given using dav path "remote.php/dav"
Given using new dav path
And As an "admin"
And user "user0" exists
When user "user0" favorites element "/textfile0.txt"
Expand All @@ -69,7 +69,7 @@ Feature: favorite
And the single response should contain a property "{http://owncloud.org/ns}favorite" with value "1"

Scenario: Favorite and unfavorite a file new endpoint
Given using dav path "remote.php/dav"
Given using new dav path
And As an "admin"
And user "user0" exists
When user "user0" favorites element "/textfile0.txt"
Expand Down
Loading