Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[tests-only][full-ci] add tests for CLI command uploads sessions #10229

Draft
wants to merge 1 commit into
base: master
Choose a base branch
from
Draft
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 .drone.star
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,14 @@ config = {
"cliCommands",
],
"skip": False,
"antivirusNeeded": True,
"extraServerEnvironment": {
"ANTIVIRUS_SCANNER_TYPE": "clamav",
"ANTIVIRUS_CLAMAV_SOCKET": "tcp://clamav:3310",
"POSTPROCESSING_STEPS": "virusscan",
"OCIS_ASYNC_UPLOADS": True,
"OCIS_ADD_RUN_SERVICES": "antivirus",
},
},
},
"apiTests": {
Expand Down
85 changes: 85 additions & 0 deletions tests/acceptance/bootstrap/CliContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
use PHPUnit\Framework\Assert;
use TestHelpers\CliHelper;
use TestHelpers\OcisConfigHelper;
use Behat\Gherkin\Node\TableNode;

/**
* CLI context
Expand Down Expand Up @@ -233,4 +234,88 @@ public function theCommandOutputShouldContain(string $shouldOrNot, string $outpu
Assert::assertStringNotContainsString($output, $jsonResponse["message"]);
}
}

/**
* @When the administrator lists all the upload sessions
* @When the administrator lists all the upload sessions with flag :flag
*
* @param string|null $flag
*
* @return void
*/
public function theAdministratorListsAllTheUploadSessions(?string $flag = null): void {
if ($flag) {
$flag = "--$flag";
}
$command = "storage-users uploads sessions --json $flag";
$body = [
"command" => $command
];
$this->featureContext->setResponse(CliHelper::runCommand($body));
}

/**
* @When the administrator cleans all expired upload sessions
*
* @return void
*/
public function theAdministratorCleansAllExpiredUploadSessions(): void {
$command = "storage-users uploads sessions --expired --clean --json";
$body = [
"command" => $command
];
$this->featureContext->setResponse(CliHelper::runCommand($body));
}

/**
* @Then /^the CLI response should (not|)\s?contain these entries:$/
*
* @param string $shouldOrNot (not|)
* @param TableNode $table
*
* @return void
*/
public function theCLIResponseShouldContainTheseEntries(string $shouldOrNot, TableNode $table): void {
$expectedFiles = $table->getColumn(0);
$responseBody = $this->featureContext->getJsonDecodedResponse($this->featureContext->getResponse());
preg_match('/(\[.*\])/', $responseBody["message"], $matches);
$responseArray = \json_decode($matches[1], null, 512, JSON_THROW_ON_ERROR);

$resourceNames = [];
foreach ($responseArray as $item) {
if (isset($item->filename)) {
$resourceNames[] = $item->filename;
}
}

if ($shouldOrNot === "not") {
foreach ($expectedFiles as $expectedFile) {
Assert::assertNotTrue(
\in_array($expectedFile, $resourceNames),
"The resource '$expectedFile' was found in the response."
);
}
} else {
foreach ($expectedFiles as $expectedFile) {
Assert::assertTrue(
\in_array($expectedFile, $resourceNames),
"The resource '$expectedFile' was not found in the response."
);
}
}
}

/**
* @AfterScenario @uploads-sessions
*
* @return void
*/
public function cleanUploadsSessions(): void {
$command = "storage-users uploads sessions --clean";
$body = [
"command" => $command
];
$response = CliHelper::runCommand($body);
$this->featureContext->theHTTPStatusCodeShouldBe(200, '', $response);
}
}
77 changes: 77 additions & 0 deletions tests/acceptance/features/cliCommands/uploadSessions.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
@env-config @uploads-sessions
Feature: List upload sessions via CLI command
As a user
I want to list the upload sessions
So that I can manage the upload sessions

Background:
Given user "Alice" has been created with default attributes and without skeleton files


Scenario: user lists all upload sessions
Given user "Alice" has uploaded file with content "uploaded content" to "/file0.txt"
And the config "POSTPROCESSING_DELAY" has been set to "10s"
And user "Alice" has uploaded file with content "uploaded content" to "/file1.txt"
And user "Alice" has uploaded file with content "uploaded content" to "/file2.txt"
When the administrator lists all the upload sessions
Then the command should be successful
And the CLI response should contain these entries:
| file1.txt |
| file2.txt |
And the CLI response should not contain these entries:
| file0.txt |


Scenario: user lists all upload sessions that are currently in postprocessing
Given the config "ANTIVIRUS_INFECTED_FILE_HANDLING" has been set to "abort"
And user "Alice" uploads file "filesForUpload/filesWithVirus/eicar.com" to "/virusFile.txt" using the WebDAV API
And the config "POSTPROCESSING_DELAY" has been set to "10s"
And user "Alice" has uploaded file with content "uploaded content" to "/file1.txt"
And user "Alice" has uploaded file with content "uploaded content" to "/file2.txt"
When the administrator lists all the upload sessions with flag "processing"
Then the command should be successful
And the CLI response should contain these entries:
| file1.txt |
| file2.txt |
And the CLI response should not contain these entries:
| virusFile.txt |


Scenario: user lists all upload sessions that are infected by virus
Given the config "ANTIVIRUS_INFECTED_FILE_HANDLING" has been set to "abort"
And user "Alice" uploads file "filesForUpload/filesWithVirus/eicar.com" to "/virusFile.txt" using the WebDAV API
And user "Alice" has uploaded file with content "uploaded content" to "/file1.txt"
When the administrator lists all the upload sessions with flag "has-virus"
Then the command should be successful
And the CLI response should contain these entries:
| virusFile.txt |
And the CLI response should not contain these entries:
| file1.txt |


Scenario: user lists all expired upload sessions
Given the config "POSTPROCESSING_DELAY" has been set to "10s"
And user "Alice" has uploaded file with content "uploaded content" to "/file1.txt"
And the config "STORAGE_USERS_UPLOAD_EXPIRATION" has been set to "0"
And user "Alice" has uploaded file with content "uploaded content" to "/file2.txt"
And user "Alice" has uploaded file with content "uploaded content" to "/file3.txt"
When the administrator lists all the upload sessions with flag "expired"
Then the command should be successful
And the CLI response should contain these entries:
| file2.txt |
| file3.txt |
And the CLI response should not contain these entries:
| file1.txt |


Scenario: user cleans all expired upload sessions
Given the config "POSTPROCESSING_DELAY" has been set to "10s"
And user "Alice" has uploaded file with content "upload content" to "/file1.txt"
And the config "STORAGE_USERS_UPLOAD_EXPIRATION" has been set to "0"
And user "Alice" has uploaded file with content "upload content" to "/file2.txt"
And user "Alice" has uploaded file with content "upload content" to "/file3.txt"
When the administrator cleans all expired upload sessions
Then the command should be successful
And the CLI response should contain these entries:
| file2.txt |
| file3.txt |