diff --git a/.drone.star b/.drone.star index 48327c45397..80813e4e102 100644 --- a/.drone.star +++ b/.drone.star @@ -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": { diff --git a/tests/acceptance/bootstrap/CliContext.php b/tests/acceptance/bootstrap/CliContext.php index 155cdbfc4dd..929d45222aa 100644 --- a/tests/acceptance/bootstrap/CliContext.php +++ b/tests/acceptance/bootstrap/CliContext.php @@ -25,6 +25,7 @@ use PHPUnit\Framework\Assert; use TestHelpers\CliHelper; use TestHelpers\OcisConfigHelper; +use Behat\Gherkin\Node\TableNode; /** * CLI context @@ -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); + } } diff --git a/tests/acceptance/features/cliCommands/uploadSessions.feature b/tests/acceptance/features/cliCommands/uploadSessions.feature new file mode 100644 index 00000000000..e55c992da40 --- /dev/null +++ b/tests/acceptance/features/cliCommands/uploadSessions.feature @@ -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 |