collaboration posix tests (#780)
This commit is contained in:
+1
-1
@@ -946,7 +946,7 @@ def localApiTests(name, suites, storage = "decomposed", extra_environment = {},
|
|||||||
"OC_WRAPPER_URL": "http://%s:5200" % OC_SERVER_NAME,
|
"OC_WRAPPER_URL": "http://%s:5200" % OC_SERVER_NAME,
|
||||||
"WITH_REMOTE_PHP": with_remote_php,
|
"WITH_REMOTE_PHP": with_remote_php,
|
||||||
"COLLABORATION_SERVICE_URL": "http://wopi-fakeoffice:9300",
|
"COLLABORATION_SERVICE_URL": "http://wopi-fakeoffice:9300",
|
||||||
"OC_STORAGE_PATH": "$HOME/.opencloud/storage/users/users",
|
"OC_STORAGE_PATH": "$HOME/.opencloud/storage/users",
|
||||||
}
|
}
|
||||||
|
|
||||||
for item in extra_environment:
|
for item in extra_environment:
|
||||||
|
|||||||
@@ -35,12 +35,23 @@ class CliContext implements Context {
|
|||||||
private SpacesContext $spacesContext;
|
private SpacesContext $spacesContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* opencloud user storage path
|
* opencloud users storage path
|
||||||
*
|
*
|
||||||
* @return string
|
* @return string
|
||||||
*/
|
*/
|
||||||
public static function getStoragePath(): string {
|
public static function getUsersStoragePath(): string {
|
||||||
return getenv('OC_STORAGE_PATH') ?: '/var/lib/opencloud/storage/users/users';
|
$path = getenv('OC_STORAGE_PATH') ?: '/var/lib/opencloud/storage/users';
|
||||||
|
return $path . '/users';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* opencloud project spaces storage path
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public static function getProjectsStoragePath(): string {
|
||||||
|
$path = getenv('OC_STORAGE_PATH') ?: '/var/lib/opencloud/storage/users';
|
||||||
|
return $path . '/projects';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -447,7 +458,7 @@ class CliContext implements Context {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @When the administrator creates folder :folder for user :user on the POSIX filesystem
|
* @When the administrator creates the folder :folder for user :user on the POSIX filesystem
|
||||||
*
|
*
|
||||||
* @param string $folder
|
* @param string $folder
|
||||||
* @param string $user
|
* @param string $user
|
||||||
@@ -456,7 +467,7 @@ class CliContext implements Context {
|
|||||||
*/
|
*/
|
||||||
public function theAdministratorCreatesFolder(string $folder, string $user): void {
|
public function theAdministratorCreatesFolder(string $folder, string $user): void {
|
||||||
$userUuid = $this->featureContext->getUserIdByUserName($user);
|
$userUuid = $this->featureContext->getUserIdByUserName($user);
|
||||||
$storagePath = $this->getStoragePath();
|
$storagePath = $this->getUsersStoragePath();
|
||||||
$body = [
|
$body = [
|
||||||
"command" => "mkdir -p $storagePath/$userUuid/$folder",
|
"command" => "mkdir -p $storagePath/$userUuid/$folder",
|
||||||
"raw" => true
|
"raw" => true
|
||||||
@@ -474,11 +485,207 @@ class CliContext implements Context {
|
|||||||
*/
|
*/
|
||||||
public function theAdministratorCheckUsersFolder(string $user): void {
|
public function theAdministratorCheckUsersFolder(string $user): void {
|
||||||
$userUuid = $this->featureContext->getUserIdByUserName($user);
|
$userUuid = $this->featureContext->getUserIdByUserName($user);
|
||||||
$storagePath = $this->getStoragePath();
|
$storagePath = $this->getUsersStoragePath();
|
||||||
$body = [
|
$body = [
|
||||||
"command" => "ls -la $storagePath/$userUuid",
|
"command" => "ls -la $storagePath/$userUuid",
|
||||||
"raw" => true
|
"raw" => true
|
||||||
];
|
];
|
||||||
$this->featureContext->setResponse(CliHelper::runCommand($body));
|
$this->featureContext->setResponse(CliHelper::runCommand($body));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @When the administrator creates the file :file with content :content for user :user on the POSIX filesystem
|
||||||
|
*
|
||||||
|
* @param string $file
|
||||||
|
* @param string $content
|
||||||
|
* @param string $user
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function theAdministratorCreatesFile(string $file, string $content, string $user): void {
|
||||||
|
$userUuid = $this->featureContext->getUserIdByUserName($user);
|
||||||
|
$storagePath = $this->getUsersStoragePath();
|
||||||
|
$safeContent = escapeshellarg($content);
|
||||||
|
$body = [
|
||||||
|
"command" => "echo -n $safeContent > $storagePath/$userUuid/$file",
|
||||||
|
"raw" => true
|
||||||
|
];
|
||||||
|
$this->featureContext->setResponse(CliHelper::runCommand($body));
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @When the administrator puts the content :content into the file :file in the POSIX storage folder of user :user
|
||||||
|
*
|
||||||
|
* @param string $content
|
||||||
|
* @param string $file
|
||||||
|
* @param string $user
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function theAdministratorChangesFileContent(string $content, string $file, string $user): void {
|
||||||
|
$userUuid = $this->featureContext->getUserIdByUserName($user);
|
||||||
|
$storagePath = $this->getUsersStoragePath();
|
||||||
|
$safeContent = escapeshellarg($content);
|
||||||
|
$body = [
|
||||||
|
"command" => "echo -n $safeContent >> $storagePath/$userUuid/$file",
|
||||||
|
"raw" => true
|
||||||
|
];
|
||||||
|
sleep(1);
|
||||||
|
$this->featureContext->setResponse(CliHelper::runCommand($body));
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @When the administrator reads the content of the file :file in the POSIX storage folder of user :user
|
||||||
|
*
|
||||||
|
* @param string $user
|
||||||
|
* @param string $file
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function theAdministratorReadsTheFileContent(string $user, string $file): void {
|
||||||
|
$userUuid = $this->featureContext->getUserIdByUserName($user);
|
||||||
|
$storagePath = $this->getUsersStoragePath();
|
||||||
|
$body = [
|
||||||
|
"command" => "cat $storagePath/$userUuid/$file",
|
||||||
|
"raw" => true
|
||||||
|
];
|
||||||
|
$this->featureContext->setResponse(CliHelper::runCommand($body));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @When the administrator copies the file :file to the folder :folder for user :user on the POSIX filesystem
|
||||||
|
*
|
||||||
|
* @param string $user
|
||||||
|
* @param string $file
|
||||||
|
* @param string $folder
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function theAdministratorCopiesFileToFolder(string $user, string $file, string $folder): void {
|
||||||
|
$userUuid = $this->featureContext->getUserIdByUserName($user);
|
||||||
|
$storagePath = $this->getUsersStoragePath();
|
||||||
|
|
||||||
|
$source = "$storagePath/$userUuid/$file";
|
||||||
|
$destination = "$storagePath/$userUuid/$folder";
|
||||||
|
|
||||||
|
$body = [
|
||||||
|
"command" => "cp $source $destination",
|
||||||
|
"raw" => true
|
||||||
|
];
|
||||||
|
$this->featureContext->setResponse(CliHelper::runCommand($body));
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @When the administrator moves the file :file to the folder :folder for user :user on the POSIX filesystem
|
||||||
|
*
|
||||||
|
* @param string $user
|
||||||
|
* @param string $file
|
||||||
|
* @param string $folder
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function theAdministratorMovesFileToFolder(string $user, string $file, string $folder): void {
|
||||||
|
$userUuid = $this->featureContext->getUserIdByUserName($user);
|
||||||
|
$storagePath = $this->getUsersStoragePath();
|
||||||
|
|
||||||
|
$source = "$storagePath/$userUuid/$file";
|
||||||
|
$destination = "$storagePath/$userUuid/$folder";
|
||||||
|
|
||||||
|
$body = [
|
||||||
|
"command" => "mv $source $destination",
|
||||||
|
"raw" => true
|
||||||
|
];
|
||||||
|
$this->featureContext->setResponse(CliHelper::runCommand($body));
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @When the administrator deletes the file :file for user :user on the POSIX filesystem
|
||||||
|
*
|
||||||
|
* @param string $file
|
||||||
|
* @param string $user
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function theAdministratorDeletesFile(string $file, string $user): void {
|
||||||
|
$userUuid = $this->featureContext->getUserIdByUserName($user);
|
||||||
|
$storagePath = $this->getUsersStoragePath();
|
||||||
|
|
||||||
|
$body = [
|
||||||
|
"command" => "rm $storagePath/$userUuid/$file",
|
||||||
|
"raw" => true
|
||||||
|
];
|
||||||
|
$this->featureContext->setResponse(CliHelper::runCommand($body));
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @When the administrator deletes the folder :folder for user :user on the POSIX filesystem
|
||||||
|
*
|
||||||
|
* @param string $folder
|
||||||
|
* @param string $user
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function theAdministratorDeletesFolder(string $folder, string $user): void {
|
||||||
|
$userUuid = $this->featureContext->getUserIdByUserName($user);
|
||||||
|
$storagePath = $this->getUsersStoragePath();
|
||||||
|
|
||||||
|
$body = [
|
||||||
|
"command" => "rm -r $storagePath/$userUuid/$folder",
|
||||||
|
"raw" => true
|
||||||
|
];
|
||||||
|
$this->featureContext->setResponse(CliHelper::runCommand($body));
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @When the administrator copies the file :file to the space :space for user :user on the POSIX filesystem
|
||||||
|
*
|
||||||
|
* @param string $user
|
||||||
|
* @param string $file
|
||||||
|
* @param string $space
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function theAdministratorCopiesFileToSpace(string $user, string $file, string $space): void {
|
||||||
|
$userUuid = $this->featureContext->getUserIdByUserName($user);
|
||||||
|
$usersStoragePath = $this->getUsersStoragePath();
|
||||||
|
$projectsStoragePath = $this->getProjectsStoragePath();
|
||||||
|
$spaceId = $this->spacesContext->getSpaceIdByName($this->featureContext->getAdminUsername(), $space);
|
||||||
|
$spaceId = explode('$', $spaceId)[1];
|
||||||
|
|
||||||
|
$source = "$usersStoragePath/$userUuid/$file";
|
||||||
|
$destination = "$projectsStoragePath/$spaceId";
|
||||||
|
|
||||||
|
$body = [
|
||||||
|
"command" => "cp $source $destination",
|
||||||
|
"raw" => true
|
||||||
|
];
|
||||||
|
$this->featureContext->setResponse(CliHelper::runCommand($body));
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @When the administrator deletes the project space :space on the POSIX filesystem
|
||||||
|
*
|
||||||
|
* @param string $space
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
public function theAdministratorDeletesSpace(string $space): void {
|
||||||
|
$projectsStoragePath = $this->getProjectsStoragePath();
|
||||||
|
$spaceId = $this->spacesContext->getSpaceIdByName($this->featureContext->getAdminUsername(), $space);
|
||||||
|
$spaceId = explode('$', $spaceId)[1];
|
||||||
|
|
||||||
|
$body = [
|
||||||
|
"command" => "rm -r $projectsStoragePath/$spaceId",
|
||||||
|
"raw" => true
|
||||||
|
];
|
||||||
|
$this->featureContext->setResponse(CliHelper::runCommand($body));
|
||||||
|
sleep(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,8 +8,80 @@ Feature: create a resources using collaborative posixfs
|
|||||||
|
|
||||||
Scenario: create folder
|
Scenario: create folder
|
||||||
Given user "Alice" has uploaded file with content "content" to "textfile.txt"
|
Given user "Alice" has uploaded file with content "content" to "textfile.txt"
|
||||||
When the administrator creates folder "myFolder" for user "Alice" on the POSIX filesystem
|
When the administrator creates the folder "myFolder" for user "Alice" on the POSIX filesystem
|
||||||
Then the command should be successful
|
Then the command should be successful
|
||||||
When the administrator lists the content of the POSIX storage folder of user "Alice"
|
When the administrator lists the content of the POSIX storage folder of user "Alice"
|
||||||
Then the command output should contain "myFolder"
|
Then the command output should contain "myFolder"
|
||||||
And as "Alice" folder "/myFolder" should exist
|
And as "Alice" folder "/myFolder" should exist
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: create file
|
||||||
|
Given user "Alice" has created folder "/folder"
|
||||||
|
When the administrator creates the file "test.txt" with content "content" for user "Alice" on the POSIX filesystem
|
||||||
|
Then the command should be successful
|
||||||
|
When the administrator lists the content of the POSIX storage folder of user "Alice"
|
||||||
|
Then the command output should contain "test.txt"
|
||||||
|
And the content of file "/test.txt" for user "Alice" should be "content"
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: edit file
|
||||||
|
Given user "Alice" has uploaded file with content "content" to "test.txt"
|
||||||
|
When the administrator puts the content "new" into the file "test.txt" in the POSIX storage folder of user "Alice"
|
||||||
|
Then the content of file "/test.txt" for user "Alice" should be "contentnew"
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: read file content
|
||||||
|
Given user "Alice" has uploaded file with content "content" to "textfile.txt"
|
||||||
|
When the administrator reads the content of the file "textfile.txt" in the POSIX storage folder of user "Alice"
|
||||||
|
Then the command output should contain "content"
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: copy file to folder
|
||||||
|
Given user "Alice" has created folder "/folder"
|
||||||
|
And user "Alice" has uploaded file with content "content" to "test.txt"
|
||||||
|
When the administrator copies the file "test.txt" to the folder "folder" for user "Alice" on the POSIX filesystem
|
||||||
|
Then the command should be successful
|
||||||
|
And the content of file "/folder/test.txt" for user "Alice" should be "content"
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: move file to folder
|
||||||
|
Given user "Alice" has created folder "/folder"
|
||||||
|
And user "Alice" has uploaded file with content "content" to "test.txt"
|
||||||
|
When the administrator moves the file "test.txt" to the folder "folder" for user "Alice" on the POSIX filesystem
|
||||||
|
Then the command should be successful
|
||||||
|
And the content of file "/folder/test.txt" for user "Alice" should be "content"
|
||||||
|
And as "Alice" file "/test.txt" should not exist
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: delete file
|
||||||
|
Given user "Alice" has uploaded file with content "content" to "test.txt"
|
||||||
|
When the administrator deletes the file "test.txt" for user "Alice" on the POSIX filesystem
|
||||||
|
Then the command should be successful
|
||||||
|
And as "Alice" file "/test.txt" should not exist
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: delete folder
|
||||||
|
Given user "Alice" has created folder "/folder"
|
||||||
|
And user "Alice" has uploaded file with content "content" to "/folder/test.txt"
|
||||||
|
When the administrator deletes the folder "folder" for user "Alice" on the POSIX filesystem
|
||||||
|
Then the command should be successful
|
||||||
|
And as "Alice" folder "folder" should not exist
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: copy file from personal to project space
|
||||||
|
Given user "Alice" has uploaded file with content "content" to "test.txt"
|
||||||
|
And the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API
|
||||||
|
And user "Alice" has created a space "Project space" with the default quota using the Graph API
|
||||||
|
When the administrator copies the file "test.txt" to the space "Project space" for user "Alice" on the POSIX filesystem
|
||||||
|
Then the command should be successful
|
||||||
|
And using spaces DAV path
|
||||||
|
And for user "Alice" the space "Project space" should contain these entries:
|
||||||
|
| test.txt |
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: delete project space
|
||||||
|
Given the administrator has assigned the role "Space Admin" to user "Alice" using the Graph API
|
||||||
|
And user "Alice" has created a space "Project space" with the default quota using the Graph API
|
||||||
|
When the administrator deletes the project space "Project space" on the POSIX filesystem
|
||||||
|
Then the command should be successful
|
||||||
|
And the user "Alice" should not have a space called "Project space"
|
||||||
|
|||||||
Reference in New Issue
Block a user