* Fix GCS Mock Behavior for Missing Bucket We were throwing a 500 instead of a 404 for a missing bucket. This would make yaml tests needlessly wait for multiple seconds, retrying the 500 response with backoff, in the test checking behavior for missing buckets.
This commit is contained in:
parent
75868ea915
commit
be6fa72432
|
@ -38,6 +38,7 @@ import org.elasticsearch.common.SuppressForbidden;
|
||||||
import org.elasticsearch.common.blobstore.BlobContainer;
|
import org.elasticsearch.common.blobstore.BlobContainer;
|
||||||
import org.elasticsearch.common.blobstore.BlobPath;
|
import org.elasticsearch.common.blobstore.BlobPath;
|
||||||
import org.elasticsearch.common.blobstore.BlobStore;
|
import org.elasticsearch.common.blobstore.BlobStore;
|
||||||
|
import org.elasticsearch.common.blobstore.BlobStoreException;
|
||||||
import org.elasticsearch.common.bytes.BytesArray;
|
import org.elasticsearch.common.bytes.BytesArray;
|
||||||
import org.elasticsearch.common.io.Streams;
|
import org.elasticsearch.common.io.Streams;
|
||||||
import org.elasticsearch.common.regex.Regex;
|
import org.elasticsearch.common.regex.Regex;
|
||||||
|
@ -50,6 +51,7 @@ import org.elasticsearch.env.Environment;
|
||||||
import org.elasticsearch.plugins.Plugin;
|
import org.elasticsearch.plugins.Plugin;
|
||||||
import org.elasticsearch.repositories.RepositoriesService;
|
import org.elasticsearch.repositories.RepositoriesService;
|
||||||
import org.elasticsearch.repositories.Repository;
|
import org.elasticsearch.repositories.Repository;
|
||||||
|
import org.elasticsearch.repositories.RepositoryException;
|
||||||
import org.elasticsearch.repositories.blobstore.BlobStoreRepository;
|
import org.elasticsearch.repositories.blobstore.BlobStoreRepository;
|
||||||
import org.elasticsearch.repositories.blobstore.ESMockAPIBasedRepositoryIntegTestCase;
|
import org.elasticsearch.repositories.blobstore.ESMockAPIBasedRepositoryIntegTestCase;
|
||||||
import org.junit.BeforeClass;
|
import org.junit.BeforeClass;
|
||||||
|
@ -71,6 +73,8 @@ import static org.elasticsearch.repositories.gcs.GoogleCloudStorageClientSetting
|
||||||
import static org.elasticsearch.repositories.gcs.GoogleCloudStorageClientSettings.TOKEN_URI_SETTING;
|
import static org.elasticsearch.repositories.gcs.GoogleCloudStorageClientSettings.TOKEN_URI_SETTING;
|
||||||
import static org.elasticsearch.repositories.gcs.GoogleCloudStorageRepository.BUCKET;
|
import static org.elasticsearch.repositories.gcs.GoogleCloudStorageRepository.BUCKET;
|
||||||
import static org.elasticsearch.repositories.gcs.GoogleCloudStorageRepository.CLIENT_NAME;
|
import static org.elasticsearch.repositories.gcs.GoogleCloudStorageRepository.CLIENT_NAME;
|
||||||
|
import static org.hamcrest.Matchers.instanceOf;
|
||||||
|
import static org.hamcrest.Matchers.is;
|
||||||
|
|
||||||
@SuppressForbidden(reason = "this test uses a HttpServer to emulate a Google Cloud Storage endpoint")
|
@SuppressForbidden(reason = "this test uses a HttpServer to emulate a Google Cloud Storage endpoint")
|
||||||
public class GoogleCloudStorageBlobStoreRepositoryTests extends ESMockAPIBasedRepositoryIntegTestCase {
|
public class GoogleCloudStorageBlobStoreRepositoryTests extends ESMockAPIBasedRepositoryIntegTestCase {
|
||||||
|
@ -210,6 +214,16 @@ public class GoogleCloudStorageBlobStoreRepositoryTests extends ESMockAPIBasedRe
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testBucketDoesNotExist() {
|
||||||
|
RepositoryException ex = expectThrows(RepositoryException.class, () ->
|
||||||
|
client().admin().cluster().preparePutRepository("invalid")
|
||||||
|
.setType(repositoryType())
|
||||||
|
.setVerify(true)
|
||||||
|
.setSettings(Settings.builder().put(repositorySettings()).put("bucket", "missing")).get());
|
||||||
|
assertThat(ex.getCause(), instanceOf(BlobStoreException.class));
|
||||||
|
assertThat(ex.getCause().getMessage(), is("Bucket [missing] does not exist"));
|
||||||
|
}
|
||||||
|
|
||||||
public static class TestGoogleCloudStoragePlugin extends GoogleCloudStoragePlugin {
|
public static class TestGoogleCloudStoragePlugin extends GoogleCloudStoragePlugin {
|
||||||
|
|
||||||
public TestGoogleCloudStoragePlugin(Settings settings) {
|
public TestGoogleCloudStoragePlugin(Settings settings) {
|
||||||
|
@ -249,7 +263,8 @@ public class GoogleCloudStorageBlobStoreRepositoryTests extends ESMockAPIBasedRe
|
||||||
metadata -> new GoogleCloudStorageRepository(metadata, registry, this.storageService, clusterService) {
|
metadata -> new GoogleCloudStorageRepository(metadata, registry, this.storageService, clusterService) {
|
||||||
@Override
|
@Override
|
||||||
protected GoogleCloudStorageBlobStore createBlobStore() {
|
protected GoogleCloudStorageBlobStore createBlobStore() {
|
||||||
return new GoogleCloudStorageBlobStore("bucket", "test", metadata.name(), storageService) {
|
return new GoogleCloudStorageBlobStore(
|
||||||
|
metadata.settings().get("bucket"), "test", metadata.name(), storageService) {
|
||||||
@Override
|
@Override
|
||||||
long getLargeBlobThresholdInBytes() {
|
long getLargeBlobThresholdInBytes() {
|
||||||
return ByteSizeUnit.MB.toBytes(1);
|
return ByteSizeUnit.MB.toBytes(1);
|
||||||
|
|
|
@ -167,13 +167,13 @@ public class GoogleCloudStorageHttpHandler implements HttpHandler {
|
||||||
final StringBuilder batch = new StringBuilder();
|
final StringBuilder batch = new StringBuilder();
|
||||||
for (String line : Streams.readAllLines(requestBody.streamInput())) {
|
for (String line : Streams.readAllLines(requestBody.streamInput())) {
|
||||||
if (line.length() == 0 || line.startsWith("--") || line.toLowerCase(Locale.ROOT).startsWith("content")) {
|
if (line.length() == 0 || line.startsWith("--") || line.toLowerCase(Locale.ROOT).startsWith("content")) {
|
||||||
batch.append(line).append('\n');
|
batch.append(line).append("\r\n");
|
||||||
} else if (line.startsWith("DELETE")) {
|
} else if (line.startsWith("DELETE")) {
|
||||||
final String name = line.substring(line.indexOf(uri) + uri.length(), line.lastIndexOf(" HTTP"));
|
final String name = line.substring(line.indexOf(uri) + uri.length(), line.lastIndexOf(" HTTP"));
|
||||||
if (Strings.hasText(name)) {
|
if (Strings.hasText(name)) {
|
||||||
blobs.remove(URLDecoder.decode(name, UTF_8.name()));
|
blobs.remove(URLDecoder.decode(name, UTF_8.name()));
|
||||||
batch.append("HTTP/1.1 204 NO_CONTENT").append('\n');
|
batch.append("HTTP/1.1 204 NO_CONTENT").append("\r\n");
|
||||||
batch.append('\n');
|
batch.append("\r\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -243,7 +243,7 @@ public class GoogleCloudStorageHttpHandler implements HttpHandler {
|
||||||
exchange.sendResponseHeaders(RestStatus.OK.getStatus(), -1);
|
exchange.sendResponseHeaders(RestStatus.OK.getStatus(), -1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
exchange.sendResponseHeaders(RestStatus.INTERNAL_SERVER_ERROR.getStatus(), -1);
|
exchange.sendResponseHeaders(RestStatus.NOT_FOUND.getStatus(), -1);
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
int read = exchange.getRequestBody().read();
|
int read = exchange.getRequestBody().read();
|
||||||
|
|
Loading…
Reference in New Issue