From 388110a35e9e5963326332b56c920f8d12d99c81 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Calvi=C3=B1o=20S=C3=A1nchez?= <danxuliu@gmail.com>
Date: Fri, 22 Jan 2021 12:40:59 +0100
Subject: [PATCH] Add integration tests for "sharing:cleanup-remote-storages"
 OCC command
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Daniel Calviño Sánchez <danxuliu@gmail.com>
---
 .drone.yml                                    |  2 +-
 .../features/bootstrap/FederationContext.php  | 14 +++++
 .../cleanup-remote-storage.feature            | 53 +++++++++++++++++++
 3 files changed, 68 insertions(+), 1 deletion(-)
 create mode 100644 build/integration/federation_features/cleanup-remote-storage.feature

diff --git a/.drone.yml b/.drone.yml
index dfea98a59b0..fee6ce6f620 100644
--- a/.drone.yml
+++ b/.drone.yml
@@ -794,7 +794,7 @@ steps:
     - bash tests/drone-run-integration-tests.sh || exit 0
     - ./occ maintenance:install --admin-pass=admin
     - cd build/integration
-    - ./run.sh federation_features/federated.feature
+    - ./run.sh federation_features/
 
 trigger:
   branch:
diff --git a/build/integration/features/bootstrap/FederationContext.php b/build/integration/features/bootstrap/FederationContext.php
index 41581110bdf..359d3226b30 100644
--- a/build/integration/features/bootstrap/FederationContext.php
+++ b/build/integration/features/bootstrap/FederationContext.php
@@ -37,6 +37,20 @@ require __DIR__ . '/../../vendor/autoload.php';
 class FederationContext implements Context, SnippetAcceptingContext {
 	use WebDav;
 	use AppConfiguration;
+	use CommandLine;
+
+	/**
+	 * @BeforeScenario
+	 */
+	public function cleanupRemoteStorages() {
+		// Ensure that dangling remote storages from previous tests will not
+		// interfere with the current scenario.
+		// The storages must be cleaned before each scenario; they can not be
+		// cleaned after each scenario, as this hook is executed before the hook
+		// that removes the users, so the shares would be still valid and thus
+		// the storages would not be dangling yet.
+		$this->runOcc(['sharing:cleanup-remote-storages']);
+	}
 
 	/**
 	 * @Given /^User "([^"]*)" from server "(LOCAL|REMOTE)" shares "([^"]*)" with user "([^"]*)" from server "(LOCAL|REMOTE)"$/
diff --git a/build/integration/federation_features/cleanup-remote-storage.feature b/build/integration/federation_features/cleanup-remote-storage.feature
new file mode 100644
index 00000000000..c782987cac0
--- /dev/null
+++ b/build/integration/federation_features/cleanup-remote-storage.feature
@@ -0,0 +1,53 @@
+Feature: cleanup-remote-storage
+  Background:
+    Given using api version "1"
+
+  Scenario: cleanup remote storage with active storages
+    Given Using server "LOCAL"
+    And user "user0" exists
+    Given Using server "REMOTE"
+    And user "user1" exists
+    # Rename file so it has a unique name in the target server (as the target
+    # server may have its own /textfile0.txt" file)
+    And User "user1" copies file "/textfile0.txt" to "/remote-share.txt"
+    And User "user1" from server "REMOTE" shares "/remote-share.txt" with user "user0" from server "LOCAL"
+    And Using server "LOCAL"
+    # Accept and download the file to ensure that a storage is created for the
+    # federated share
+    And User "user0" from server "LOCAL" accepts last pending share
+    And As an "user0"
+    And Downloading file "/remote-share.txt"
+    And the HTTP status code should be "200"
+    When invoking occ with "sharing:cleanup-remote-storage"
+    Then the command was successful
+    And the command output contains the text "1 remote storage(s) need(s) to be checked"
+    And the command output contains the text "1 remote share(s) exist"
+    And the command output contains the text "no storages deleted"
+
+  Scenario: cleanup remote storage with inactive storages
+    Given Using server "LOCAL"
+    And user "user0" exists
+    Given Using server "REMOTE"
+    And user "user1" exists
+    # Rename file so it has a unique name in the target server (as the target
+    # server may have its own /textfile0.txt" file)
+    And User "user1" copies file "/textfile0.txt" to "/remote-share.txt"
+    And User "user1" from server "REMOTE" shares "/remote-share.txt" with user "user0" from server "LOCAL"
+    And Using server "LOCAL"
+    # Accept and download the file to ensure that a storage is created for the
+    # federated share
+    And User "user0" from server "LOCAL" accepts last pending share
+    And As an "user0"
+    And Downloading file "/remote-share.txt"
+    And the HTTP status code should be "200"
+    And Using server "REMOTE"
+    And As an "user1"
+    And Deleting last share
+    And the OCS status code should be "100"
+    And the HTTP status code should be "200"
+    When Using server "LOCAL"
+    And invoking occ with "sharing:cleanup-remote-storage"
+    Then the command was successful
+    And the command output contains the text "1 remote storage(s) need(s) to be checked"
+    And the command output contains the text "0 remote share(s) exist"
+    And the command output contains the text "deleted 1 storage"
-- 
GitLab