mirror of https://github.com/apache/jclouds.git
Issue 262: name of the blob didn't parse correctly; fixed
This commit is contained in:
parent
103098d354
commit
7c4307ba56
|
@ -28,6 +28,7 @@ import javax.inject.Provider;
|
|||
import javax.ws.rs.core.HttpHeaders;
|
||||
|
||||
import org.jclouds.blobstore.domain.MutableBlobMetadata;
|
||||
import org.jclouds.blobstore.util.internal.BlobStoreUtilsImpl;
|
||||
import org.jclouds.date.DateService;
|
||||
import org.jclouds.encryption.EncryptionService;
|
||||
import org.jclouds.http.HttpException;
|
||||
|
@ -60,7 +61,7 @@ public class ParseSystemAndUserMetadataFromHeaders implements
|
|||
}
|
||||
|
||||
public MutableBlobMetadata apply(HttpResponse from) {
|
||||
String objectKey = getKeyFor(from);
|
||||
String objectKey = BlobStoreUtilsImpl.getKeyFor(request, from);
|
||||
MutableBlobMetadata to = metadataFactory.get();
|
||||
to.setName(objectKey);
|
||||
setContentTypeOrThrowException(from, to);
|
||||
|
@ -117,14 +118,6 @@ public class ParseSystemAndUserMetadataFromHeaders implements
|
|||
}
|
||||
}
|
||||
|
||||
protected String getKeyFor(HttpResponse from) {
|
||||
String objectKey = request.getEndpoint().getPath();
|
||||
if (objectKey.startsWith("/")) {
|
||||
// Trim initial slash from object key name.
|
||||
objectKey = objectKey.substring(1);
|
||||
}
|
||||
return objectKey;
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void setContentTypeOrThrowException(HttpResponse from, MutableBlobMetadata metadata)
|
||||
|
|
|
@ -22,6 +22,8 @@ import static com.google.common.base.Preconditions.checkNotNull;
|
|||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import javax.inject.Singleton;
|
||||
|
@ -37,6 +39,8 @@ import org.jclouds.blobstore.strategy.DeleteDirectoryStrategy;
|
|||
import org.jclouds.blobstore.strategy.GetDirectoryStrategy;
|
||||
import org.jclouds.blobstore.strategy.MkdirStrategy;
|
||||
import org.jclouds.blobstore.util.BlobStoreUtils;
|
||||
import org.jclouds.http.HttpResponse;
|
||||
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||
import org.jclouds.util.Utils;
|
||||
|
||||
/**
|
||||
|
@ -131,6 +135,28 @@ public class BlobStoreUtilsImpl implements BlobStoreUtils {
|
|||
return "".equals(prefix) ? null : prefix;
|
||||
}
|
||||
|
||||
private static Pattern keyFromContainer = Pattern.compile("/?[^/]+/(.*)");
|
||||
|
||||
public static String getKeyFor(GeneratedHttpRequest<?> request, HttpResponse from) {
|
||||
checkNotNull(request, "request");
|
||||
checkNotNull(from, "from");
|
||||
// assume first params are container and key
|
||||
if (request.getArgs().length >= 2 && request.getArgs()[0] instanceof String
|
||||
&& request.getArgs()[1] instanceof String) {
|
||||
return request.getArgs()[1].toString();
|
||||
} else if (request.getArgs().length >= 1 && request.getArgs()[0] instanceof String) {
|
||||
Matcher matcher = keyFromContainer.matcher(request.getArgs()[0].toString());
|
||||
if (matcher.find())
|
||||
return matcher.group(1);
|
||||
}
|
||||
String objectKey = request.getEndpoint().getPath();
|
||||
if (objectKey.startsWith("/")) {
|
||||
// Trim initial slash from object key name.
|
||||
objectKey = objectKey.substring(1);
|
||||
}
|
||||
return objectKey;
|
||||
}
|
||||
|
||||
public static String getContentAsStringOrNullAndClose(Blob blob) throws IOException {
|
||||
checkNotNull(blob, "blob");
|
||||
if (blob.getContent() == null)
|
||||
|
|
|
@ -62,6 +62,7 @@ public class ParseBlobMetadataFromHeadersTest {
|
|||
|
||||
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
|
||||
expect(request.getEndpoint()).andReturn(URI.create("http://localhost/key")).anyTimes();
|
||||
expect(request.getArgs()).andReturn(new Object[] { "container/key" }).anyTimes();
|
||||
replay(request);
|
||||
parser.setContext(request);
|
||||
}
|
||||
|
|
|
@ -18,9 +18,16 @@
|
|||
*/
|
||||
package org.jclouds.blobstore.util;
|
||||
|
||||
import static org.easymock.EasyMock.expect;
|
||||
import static org.easymock.classextension.EasyMock.createMock;
|
||||
import static org.easymock.classextension.EasyMock.replay;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
import java.net.URI;
|
||||
|
||||
import org.jclouds.blobstore.util.internal.BlobStoreUtilsImpl;
|
||||
import org.jclouds.http.HttpResponse;
|
||||
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||
import org.testng.annotations.Test;
|
||||
|
||||
/**
|
||||
|
@ -31,6 +38,35 @@ import org.testng.annotations.Test;
|
|||
@Test(groups = "unit", testName = "blobstore.BlobStoreUtilsTest")
|
||||
public class BlobStoreUtilsTest {
|
||||
|
||||
public void testGetKeyForAzureS3AndRackspace() {
|
||||
|
||||
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
|
||||
|
||||
HttpResponse from = createMock(HttpResponse.class);
|
||||
expect(request.getEndpoint()).andReturn(
|
||||
URI.create("https://jclouds.blob.core.windows.net/adriancole-blobstore0/five"));
|
||||
expect(request.getArgs()).andReturn(new Object[] { "adriancole-blobstore0", "five" }).atLeastOnce();
|
||||
|
||||
replay(request);
|
||||
replay(from);
|
||||
|
||||
assertEquals(BlobStoreUtilsImpl.getKeyFor(request, from), "five");
|
||||
}
|
||||
|
||||
public void testGetKeyForAtmos() {
|
||||
|
||||
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
|
||||
|
||||
HttpResponse from = createMock(HttpResponse.class);
|
||||
expect(request.getEndpoint()).andReturn(
|
||||
URI.create("https://storage4.clouddrive.com/v1/MossoCloudFS_dc1f419c-5059-4c87-a389-3f2e33a77b22/adriancole-blobstore0/four"));
|
||||
expect(request.getArgs()).andReturn(new Object[] { "adriancole-blobstore0/four" }).atLeastOnce();
|
||||
|
||||
replay(request);
|
||||
replay(from);
|
||||
|
||||
assertEquals(BlobStoreUtilsImpl.getKeyFor(request, from), "four");
|
||||
}
|
||||
public void testGetContainer() {
|
||||
String container = BlobStoreUtilsImpl.parseContainerFromPath("foo");
|
||||
assertEquals(container, "foo");
|
||||
|
|
Loading…
Reference in New Issue