diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/snapshot.get/10_basic.yaml b/rest-api-spec/src/main/resources/rest-api-spec/test/snapshot.get/10_basic.yaml index bd609e3e3bfe8..24a7ac6adc616 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/snapshot.get/10_basic.yaml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/snapshot.get/10_basic.yaml @@ -9,13 +9,6 @@ setup: settings: location: "test_repo_get_1_loc" ---- -teardown: - - - do: - snapshot.delete_repository: - repository: test_repo_get_1 - --- "Get snapshot info": @@ -39,7 +32,7 @@ teardown: snapshot: test_snapshot - is_true: snapshots - + --- "Get missing snapshot info throws an exception": @@ -48,7 +41,7 @@ teardown: snapshot.get: repository: test_repo_get_1 snapshot: test_nonexistent_snapshot - + --- "Get missing snapshot info succeeds when ignoreUnavailable is true": diff --git a/rest-api-spec/src/main/resources/rest-api-spec/test/snapshot.status/10_basic.yaml b/rest-api-spec/src/main/resources/rest-api-spec/test/snapshot.status/10_basic.yaml index d4548553e251a..838c12649748e 100644 --- a/rest-api-spec/src/main/resources/rest-api-spec/test/snapshot.status/10_basic.yaml +++ b/rest-api-spec/src/main/resources/rest-api-spec/test/snapshot.status/10_basic.yaml @@ -9,13 +9,6 @@ setup: settings: location: "test_repo_status_1_loc" ---- -teardown: - - - do: - snapshot.delete_repository: - repository: test_repo_status_1 - --- "Get snapshot status": @@ -39,7 +32,7 @@ teardown: snapshot: test_snapshot - is_true: snapshots - + --- "Get missing snapshot status throws an exception": @@ -48,7 +41,7 @@ teardown: snapshot.status: repository: test_repo_status_1 snapshot: test_nonexistent_snapshot - + --- "Get missing snapshot status succeeds when ignoreUnavailable is true": diff --git a/test/framework/src/main/java/org/elasticsearch/test/rest/ESRestTestCase.java b/test/framework/src/main/java/org/elasticsearch/test/rest/ESRestTestCase.java index 573c301105ad9..fdce0248ed316 100644 --- a/test/framework/src/main/java/org/elasticsearch/test/rest/ESRestTestCase.java +++ b/test/framework/src/main/java/org/elasticsearch/test/rest/ESRestTestCase.java @@ -55,6 +55,7 @@ import javax.net.ssl.SSLContext; +import static java.util.Collections.singletonMap; import static java.util.Collections.sort; import static java.util.Collections.unmodifiableList; @@ -151,9 +152,34 @@ private void wipeCluster() throws IOException { // wipe index templates adminClient().performRequest("DELETE", "_template/*"); - // wipe snapshots - // Technically this deletes all repositories and leave the snapshots in the repository. OK. - adminClient().performRequest("DELETE", "_snapshot/*"); + wipeSnapshots(); + } + + /** + * Wipe fs snapshots we created one by one and all repositories so that the next test can create the repositories fresh and they'll + * start empty. There isn't an API to delete all snapshots. There is an API to delete all snapshot repositories but that leaves all of + * the snapshots intact in the repository. + */ + private void wipeSnapshots() throws IOException { + for (Map.Entry repo : entityAsMap(adminClient.performRequest("GET", "_snapshot/_all")).entrySet()) { + String repoName = repo.getKey(); + Map repoSpec = (Map) repo.getValue(); + String repoType = (String) repoSpec.get("type"); + if (repoType.equals("fs")) { + // All other repo types we really don't have a chance of being able to iterate properly, sadly. + String url = "_snapshot/" + repoName + "/_all"; + Map params = singletonMap("ignore_unavailable", "true"); + List snapshots = (List) entityAsMap(adminClient.performRequest("GET", url, params)).get("snapshots"); + for (Object snapshot : snapshots) { + Map snapshotInfo = (Map) snapshot; + String name = (String) snapshotInfo.get("snapshot"); + logger.debug("wiping snapshot [{}/{}]", repoName, name); + adminClient().performRequest("DELETE", "_snapshot/" + repoName + "/" + name); + } + } + logger.debug("wiping snapshot repository [{}]", repoName); + adminClient().performRequest("DELETE", "_snapshot/" + repoName); + } } /**